*BigQuery 存储过程中的参数
*args in BigQuery Stored Procedure
BigQuery参数中有没有*args
的概念(类似于pytho *args)
我正在编写一个通用存储过程来检查 table 是否有重复的行。显然,列数会有所不同并在 运行 时间给定。
所以我想使用 *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;
提前感谢您的回复。
您似乎希望能够将 SELECT 中使用的列的 proc 列表传递给 GROUP BY。在这种情况下,您可以只传递一个参数,而不是传递单独的列列表,它将这些列的列表作为一个字符串保存,如下例
因此,它将如下所示(其余语法保留在问题中)
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');
BigQuery参数中有没有*args
的概念(类似于pytho *args)
我正在编写一个通用存储过程来检查 table 是否有重复的行。显然,列数会有所不同并在 运行 时间给定。
所以我想使用 *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;
提前感谢您的回复。
您似乎希望能够将 SELECT 中使用的列的 proc 列表传递给 GROUP BY。在这种情况下,您可以只传递一个参数,而不是传递单独的列列表,它将这些列的列表作为一个字符串保存,如下例
因此,它将如下所示(其余语法保留在问题中)
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');