【发布时间】: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