use*_*529 4 arrays ddl struct google-bigquery
如何在 BigQuery 中声明列表类型变量,以便我可以在 where 子句中使用它?我有这个代码
WITH
subquery AS (
SELECT
1 AS col1
UNION ALL
SELECT
2 AS col1
UNION ALL
SELECT
3 AS col1 )
SELECT
col1
FROM
subquery
WHERE
col1 IN (1, 2)
Run Code Online (Sandbox Code Playgroud)
相反,我想在查询中使用变量
DECLARE list ARRAY;
SET list = (1,2);
WITH
subquery AS (
SELECT
1 AS col1
UNION ALL
SELECT
2 AS col1
UNION ALL
SELECT
3 AS col1 )
SELECT
col1
FROM
subquery
WHERE
col1 IN list
Run Code Online (Sandbox Code Playgroud)
我试过 DECLARE list STRUCT [less than] int64,int64 [greater than] 它不接受
试试下面的代码:
DECLARE list ARRAY <INT64>;
SET list = [1,2];
WITH
subquery AS (
SELECT
1 AS col1
UNION ALL
SELECT
2 AS col1
UNION ALL
SELECT
3 AS col1 )
SELECT
col1
FROM
subquery
WHERE
col1 IN UNNEST(list)
Run Code Online (Sandbox Code Playgroud)
您可以DECLARE一次性为数组分配值,而无需使用SET. 例子:
DECLARE myArray ARRAY <STRING> DEFAULT ["FIRST", "SECOND", "THIRD"];
SELECT myValues
FROM UNNEST(myArray) AS myValues
Run Code Online (Sandbox Code Playgroud)
您可能更喜欢使用子查询WITH。例子:
WITH myArray AS (
SELECT *
FROM UNNEST(["FIRST", "SECOND", "THIRD"]) AS myValues
)
SELECT myValues
FROM myArray
Run Code Online (Sandbox Code Playgroud)
两个查询将提供相同的结果:
+----------+
| myValues |
+----------+
| FIRST |
| SECOND |
| THIRD |
+----------+
Run Code Online (Sandbox Code Playgroud)