当前位置: 首页 > 面试题库 >

调试BigQuery存储过程

葛意远
2023-03-14
问题内容

有什么方法可以在BigQuery存储过程中使用打印语句?我有一个类似下面的存储过程,我想看看如何生成SQL语句来调试问题,或者调试其他哪种更好的方法来调试正在产生的存储过程,等等。

CREATE OR REPLACE PROCEDURE `myproject.TEST.check_duplicated_prc`(project_name STRING, data_set_name STRING, table_name STRING, date_id DATE)
BEGIN
  DECLARE sql STRING;
  set sql ='Select date,col1,col2,col3,count(1) from `'||project_name||'.'||data_set_name||'.'||table_name|| '` where date='||date_id ||' GROUP BY date,col1,col2,col3 HAVING COUNT(*)>1';
    --EXECUTE IMMEDIATE (sql);
    print(sql)
END;

问题答案:

有多种方法可以对存储过程进行调试/故障排除

see how SQL statement is generated如以下示例所示,最简单的方法之一就是稍微调整存储的过程

CREATE OR REPLACE PROCEDURE `myproject.TEST.check_duplicated_prc`(project_name STRING, data_set_name STRING, table_name STRING, date_id DATE, OUT sql STRING)
BEGIN
  -- DECLARE sql STRING;
  set sql ='Select date,col1,col2,col3,count(1) from `'||project_name||'.'||data_set_name||'.'||table_name|| '` where date='||date_id ||' GROUP BY date,col1,col2,col3 HAVING COUNT(*)>1';
    --EXECUTE IMMEDIATE (sql);
END;

然后,您可以在下面运行以查看生成的SQL

DECLARE sql STRING;
CALL `myproject.TEST.check_duplicated_prc`('project_name', 'data_set_name', 'table_name', '2020-11-24', sql);
SELECT sql;

带输出

在此处输入图片说明

如您所见-您在这里缺少撇号,where date=2020-11-24因此可以修复您的存储过程



 类似资料:
  • 问题内容: 我当前用于调试存储过程的过程非常简单。我创建一个名为“ debug”的表,在其中运行时从存储过程中插入变量值。这使我可以在脚本中的给定位置查看任何变量的值,但是是否有更好的方法来调试MySQL存储过程? 问题答案: 我做的事情和你很相似。 通常,我将包含一个默认为false的DEBUG参数,并且可以在运行时将其设置为true。然后将调试语句包装到“ If DEBUG”块中。 我还将日志

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 我使用JDBC这样调用这个过程: 它向我抛出一个错误,通知调用格式错误。 但是如果我像这样直接在IDE中运行调用:

  • 从1.r.58开始, 支持出参, 之前的版本仅支持入参. 从实现方式上说, 是通过扩展自定义SQL的含义及上下文来实现 仅含义入参的存储过程 // 建表,删除老的存储过程. dao.create(Pet.class, true); dao.insert(Pet.create("wendal")); dao.execute(Sqls.create("DROP PRO

  • 主要内容:创建CallableStatement对象,关闭CallableStatement对象,JDBC SQL转义语法在讨论JDBC Statement教程文章时,我们已经学习了如何在JDBC中使用存储过程。 本教程文章与该部分类似,但它将讲解演示有关JDBC SQL转义语法的其他信息。 就像对象创建和对象一样,它可使用同样的方式创建对象,该对象将用于执行对数据库存储过程的调用。 创建CallableStatement对象 假设需要执行以下Oracle存储过程 - 注意:上面的存储过程是为O

  • 目前,我正在作业步骤中使用JdbcCursorItemReader和FlatFileItemWriter。 由于性能问题,我们不得不使用存储过程。 在Spring Batch 2.0中有没有一种方法可以调用存储过程。释放? ...其他配置 如何使用可调用语句编写自定义数据库读取器...感谢示例代码..谢谢,。