首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >* BigQuery存储过程中的参数

* BigQuery存储过程中的参数
EN

Stack Overflow用户
提问于 2020-11-25 02:04:02
回答 1查看 240关注 0票数 0

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

我正在编写一个通用的存储过程,它将检查表是否有重复的行。显然,列数会有所不同&在运行时给定。

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

代码语言:javascript
复制
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;

提前感谢您的回复。

EN

Stack Overflow用户

回答已采纳

发布于 2020-11-25 06:22:20

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

因此,它将如下所示(剩下的语法保留为问题中的语法)

代码语言:javascript
复制
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将如下所示

代码语言:javascript
复制
CALL my_project.LOGGING.check_dup_prc(my_project, my_project,my_table,CURRENT_DATE(),'col1,col2,col3,col4');
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64992330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档