如何在Big Query中声明结构类型变量?

问题描述 投票:0回答:2

我有一个带有几个嵌套表的查询,并且它们都使用这样的过滤器:

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">;

但是我一直遇到错误,无法弄清楚语法。

任何人都知道如何解决此问题吗?

谢谢

sql google-bigquery declare
2个回答
1
投票

您不需要结构。您需要一个数组:

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)

1
投票

下面的示例用于在BigQuery Standard 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);
© www.soinside.com 2019 - 2024. All rights reserved.