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
运算符和括号。
我想要连接由 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
运算符和括号。