Reputation: 665
How can I declare a list type variable in BigQuery so that I can use it in a where clause? I have this code
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)
instead I would like to get to the point with the variable in the query
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
I have tried DECLARE list STRUCT [less than] int64,int64 [greater than] which it doesn't accept
Upvotes: 9
Views: 36246
Reputation: 434
You can DECLARE
an array and assign it values in one go, without using SET
. Example:
DECLARE myArray ARRAY <STRING> DEFAULT ["FIRST", "SECOND", "THIRD"];
SELECT myValues
FROM UNNEST(myArray) AS myValues
You may prefer a subquery, using WITH
. Example:
WITH myArray AS (
SELECT *
FROM UNNEST(["FIRST", "SECOND", "THIRD"]) AS myValues
)
SELECT myValues
FROM myArray
Both queries will provide the same result:
+----------+
| myValues |
+----------+
| FIRST |
| SECOND |
| THIRD |
+----------+
Upvotes: 5
Reputation: 473
The following syntax also seems to work, if you really want to use DECLARE with a STRUCT type, or for other people who find this post:
DECLARE foo DEFAULT (SELECT AS STRUCT 2, 2, 2, 2);
Upvotes: 4
Reputation: 4075
Try the following code:
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)
Upvotes: 14