【问题标题】:*args in BigQuery Stored Procedure*BigQuery 存储过程中的参数
【发布时间】:2020-11-25 06:22:20
【问题描述】:

BigQuery 参数中是否有*args 的概念(类似于 pytho *args)

我正在编写一个通用存储过程,它将检查表是否有重复行。显然,列数会在运行时变化并给出。

所以我想使用*args 来接收参数,解压它们并在动态 SQL 中使用它们。

CREATE OR REPLACE PROCEDURE `my_project.LOGGING.check_dup_prc`(project_name STRING, data_set_name STRING, table_name STRING, date_id DATE, *args)
BEGIN
  DECLARE sql STRING;
  set sql ='Select date,*args,count(1) from `'||project_name||'.'||data_set_name||'.'||table_name|| '` where date=\''||date_id || '\' GROUP BY date,*args HAVING COUNT(*)>1';
  EXECUTE IMMEDIATE (sql);
END;

提前感谢您的回复。

【问题讨论】:

  • 提供您期望它如何工作的简化示例
  • 这就是我想要实现的目标。下面的存储过程有 col1-col4 我想制作 *args 即用户可以指定一个或多个列。存储过程应该能够解压缩 *args aka col1,col2,col3 ...等并将它们注入动态 SQL
  • --存储过程 CREATE OR REPLACE PROCEDURE my_project.LOGGING.check_dup_prc(project_name STRING, data_set_name STRING, table_name STRING, date_id DATE, col1 STRING,col2 STRING,col3 STRING, col4 STRING) BEGIN DECLARE sql STRING; set sql ='Select date,'||col1||','||col2||','||col3||','||col4||','||'count(1) from @987654325 @ where date=\''||date_id || '\' GROUP BY date,'||col1||','||col2||','||col3||','||col4||'HAVING COUNT(*)>1';立即执行(sql);结束;
  • --调用存储过程CALL my_project.LOGGING.check_dup_prc(my_project, my_project,my_table,CURRENT_DATE(),col1,col2,col3,col4);

标签: sql google-bigquery bigquery-udf


【解决方案1】:

看起来您希望能够将在 SELECT 和 GROUP BY 中使用的列的列表传递给 proc。在这种情况下,您可以传递一个参数,而不是传递单独的 dolumns 列表,该参数将这些列的列表保存为一个字符串,如下例所示

所以,它会像下面这样(其余的语法保留在问题中)

CREATE OR REPLACE PROCEDURE my_project.LOGGING.check_dup_prc(project_name STRING, data_set_name STRING, table_name STRING, date_id DATE, cols STRING) 
BEGIN DECLARE sql STRING; 
set sql ='Select date,'||cols||','||'count(1) from '||project_name||'.'||data_set_name||'.'||table_name|| ' where date=\''||date_id || '\' GROUP BY date,'||cols||'HAVING COUNT(*)>1'; 
EXECUTE IMMEDIATE (sql); END;

调用如下所示

CALL my_project.LOGGING.check_dup_prc(my_project, my_project,my_table,CURRENT_DATE(),'col1,col2,col3,col4');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多