首页 > 解决方案 > 如何在 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">;

但我不断收到错误,无法弄清楚语法。

任何人都知道如何解决这个问题?

谢谢

标签: sqlgoogle-bigquerydeclare

解决方案


以下示例用于在 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);

推荐阅读