【问题标题】:Debugging BigQuery Stored procedure调试 BigQuery 存储过程
【发布时间】:2026-02-04 04:05:02
【问题描述】:

有什么方法可以在 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;

【问题讨论】:

    标签: sql stored-procedures google-bigquery


    【解决方案1】:

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

    其中一个最简单的 - 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,因此您可以修复您的存储过程

    【讨论】:

    • 谢谢。这解决了我当前的问题,但是,BigQuery 存储过程中是否有任何打印语句?在 oracle PL/SQL 中,dbms_output.put_line 非常方便跟踪逻辑流。
    • 很高兴它解决了您当前的问题。请考虑对答案进行投票。同时,要模仿print,您可以简单地使用select 来输出所需的信息。你可以看到更多Debugging statements in Standard SQLSystem variables