如何在BigQuery中声明STRUCT类型变量以简化日期过滤?
解决BigQuery中用变量存储日期列表进行过滤的问题
嘿,你这里的问题出在选错数据类型啦!STRUCT是用来存储带命名字段的结构化数据的(比如STRUCT<date1 STRING, date2 STRING>这种键值对形式),但你需要的是一个日期列表,这时候应该用ARRAY数组类型才对。
正确的写法步骤
- 声明数组变量:用
DECLARE定义一个ARRAY<STRING>类型的变量,直接初始化你的日期列表 - 在WHERE子句中使用:因为
IN后面需要的是离散值集合,所以要通过UNNEST()把数组展开成可匹配的行
完整示例代码
-- 声明并初始化日期数组变量 DECLARE date_array ARRAY<STRING> DEFAULT ["2017-08-12", "2017-08-13", "2017-08-14", ..., "2017-08-30"]; -- 你的查询主体,替换成实际表和字段 SELECT * FROM your_nested_tables_query WHERE DATE(my_time) IN UNNEST(date_array);
为什么STRUCT不行?
STRUCT的语法要求每个元素必须有明确的字段名,比如你如果硬写STRUCT的话得写成:
-- 这不是你想要的写法,只是举例说明STRUCT的结构 DECLARE struct_var STRUCT<d1 STRING, d2 STRING, d3 STRING> DEFAULT ("2017-08-12", "2017-08-13", "2017-08-14");
这种结构根本没法用IN来匹配日期,因为它是多个独立的字段,不是一个可遍历的列表。而ARRAY是同类型元素的集合,正好符合你存储多个日期的需求。
内容的提问来源于stack exchange,提问作者Lev
相关产品推荐
相关产品推荐

