如何在 Big Query 中声明结构类型变量?
How to declare a struct type variable in Big Query?
我有一个包含几个嵌套表的查询,它们都使用这样的过滤器:
WHERE
DATE(my_time) IN ("2017-08-12", "2017-08-13", "2017-08-14", ..., "2017-08-30")
我试图在查询的开头声明一个包含所有日期的 STRUCT 类型变量
这样我以后就可以将所有过滤器替换为:
WHERE
DATE(my_time) IN struct_var
我正在寻找这样的东西:
DECLARE struct_var STRUCT <"2017-08-12", "2017-08-13", "2017-08-14", ..., "2017-08-30">;
但我总是出错,无法理解语法。
有人知道如何解决这个问题吗?
谢谢
您不需要结构。你想要一个数组:
declare date_array array<date>;
set date_array = [date('2017-08-12'), date('2017-08-13'), date('2017-08-14')] ;
当然,您不会为此目的使用 in
。您可以使用:
where date(my_time) in (select d from unnest(date_array) d)
以下示例适用于 BigQuery 标准中的脚本 SQL
#standardSQL
DECLARE dates ARRAY<DATE>;
SET dates = [DATE '2017-08-12', '2017-08-13', '2017-08-14', '2017-08-30'];
WITH sample_table AS (
SELECT 1 id, DATE '2017-08-12' dt UNION ALL
SELECT 2, '2017-09-13' UNION ALL
SELECT 3, '2017-09-14' UNION ALL
SELECT 4, '2017-08-30'
)
SELECT * FROM sample_table
WHERE dt IN UNNEST(dates);
我有一个包含几个嵌套表的查询,它们都使用这样的过滤器:
WHERE
DATE(my_time) IN ("2017-08-12", "2017-08-13", "2017-08-14", ..., "2017-08-30")
我试图在查询的开头声明一个包含所有日期的 STRUCT 类型变量 这样我以后就可以将所有过滤器替换为:
WHERE
DATE(my_time) IN struct_var
我正在寻找这样的东西:
DECLARE struct_var STRUCT <"2017-08-12", "2017-08-13", "2017-08-14", ..., "2017-08-30">;
但我总是出错,无法理解语法。
有人知道如何解决这个问题吗?
谢谢
您不需要结构。你想要一个数组:
declare date_array array<date>;
set date_array = [date('2017-08-12'), date('2017-08-13'), date('2017-08-14')] ;
当然,您不会为此目的使用 in
。您可以使用:
where date(my_time) in (select d from unnest(date_array) d)
以下示例适用于 BigQuery 标准中的脚本 SQL
#standardSQL
DECLARE dates ARRAY<DATE>;
SET dates = [DATE '2017-08-12', '2017-08-13', '2017-08-14', '2017-08-30'];
WITH sample_table AS (
SELECT 1 id, DATE '2017-08-12' dt UNION ALL
SELECT 2, '2017-09-13' UNION ALL
SELECT 3, '2017-09-14' UNION ALL
SELECT 4, '2017-08-30'
)
SELECT * FROM sample_table
WHERE dt IN UNNEST(dates);