带有 sql 子查询的游标作为 BigQuery 中的参数出现

问题描述

我在之前的一篇文章 (Cursors in BigQuery) 中找到了一种在 bigquery 上声明游标的方法。当游标子查询不作为参数存在时,这很有效。

目前我正在 Netezza 中完成 FOR..IN EXECUTE 构造。除了这里的 sql 是动态 sql 之外,它的行为完全类似于游标构造。这个动态 sql 首先执行,然后构造归结为一个简单的游标语句。

考虑以下用例,其中子查询作为参数存在。

CREATE or replace PROCEDURE  myproc(varchar(256))
    RETURNS INT4
    LANGUAGE NZPLSQL
AS 
BEGIN_PROC 
 declare 
  sqlstr alias for $1;              ---- sqlStr is a parameter
  r1 record;
 begin 
  FOR r1 IN EXECUTE sqlstr         ---- sqlStr is evaluated after that it boils down to cursor statement.
  loop 
   insert into t1 values r1.c1;
  end loop;
 end;
END_PROC@

是否有类似的方法来声明带有子查询的游标作为 BigQuery 上的参数?

解决方法

从形式上讲,LOOPEXECUTE IMMEDIATE 在 BigQuery 中都可用并且有很好的文档记录。
实际上 - 使用 LOOP 来模拟真实表的游标是非常低效的,并且在 BigQuery 中是非常禁忌的,除非您有用例,这是唯一的方法
但几乎在 100% 的情况下,您可以以批处理方式表达您的逻辑(而不是使用游标)

同时,如果表不是那么大(例如查找表文件)-您可以将表行选择到数组中,然后循环遍历数组元素运行执行立即获取结果并将其插入到目标表中

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...