BigQuery 将 for 循环存储为数组

BigQuery stored for loop as Array

我想要连接由 for 循环生成的项目的结果存储在 ARRAY 或 String

这是我的代码,可以生成我想要的字符串列表,但我不知道如何使用这个列表,因为我不能将它存储为数组或连接它

FOR record IN (SELECT column_name FROM mytable where table_name = 'X')
DO
  SELECT FORMAT("(%s IS NULL OR TRIM(%s) = '')", record.column_name,record.column_name);
END FOR;

我想将它用于存储过程,一旦它调用它就可以生成字符串,该字符串基于 table 中的列检查逻辑,将参数解析为创建的过程

总而言之,我想知道如何将此查询的结果存储为数组或字符串

您可以声明一个变量来存储您编写的脚本的结果。 我不确定我是否理解这个要求,但是如果您只想将格式化的字符串存储为数组,则不需要使用循环并且以下查询就足够了。之后您可以在存储过程中引用该变量。

DECLARE formats ARRAY<STRING>;

-- a temp table for the test
CREATE TEMP TABLE mytable AS
SELECT 'col1' AS column_name, 'X' AS table_name
 UNION ALL
SELECT 'col2' AS column_name, 'Y' AS table_name
 UNION ALL
SELECT 'col3' AS column_name, 'X' AS table_name
;

SET formats = (
  SELECT ARRAY_AGG(FORMAT("(%s IS NULL OR TRIM(%s) = '')", column_name, column_name)) 
    FROM mytable
   WHERE table_name = 'X'
);

SELECT formats;


--
output:
[(col3 IS NULL OR TRIM(col3) = ''), (col1 IS NULL OR TRIM(col1) = '')]

上面的条件可以换一种写法

(col3 IS NULL OR TRIM(col3) = '')

-->

IFNULL(col3, '') = ''

后者不需要 OR 运算符和括号。