0

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;

提前感谢您的回复。

4

1 回答 1

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');
于 2020-11-24T22:22:20.047 回答