如何在 BigQuery 中声明列表/数组/结构类型变量

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] 它不接受

rme*_*ves 6

试试下面的代码:

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)


Fre*_*now 5

您可以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)