我有一个包含每日表的数据集。
从给定日期开始,我在这些表中生成了一个新字段x。
现在,我想使用这个新字段使用where子句查询完整数据集。 示例:
SELECT field1 FROM
TABLE_DATE_RANGE_STRICT([mytable], DATE_ADD(TIMESTAMP("2016-01-11"), -7, "DAY"), TIMESTAMP("2016-01-11") )
WHERE x != null
不幸的是,我得到Field x not found in table mytable20160105
,因为这个表确实没有这个字段。
在没有更新旧表结构的情况下,是否有办法查询所有这些并过滤此字段?即,对于BigQuery来说,如果未定义该字段,则该字段应为“null”
答案 0 :(得分:1)
假设您在2016-01-01和2016-01-04之间有一个时间架构,然后您在2016-01-05之后添加了额外/新的'x'字段
以下类型的查询将解决您的问题
SELECT * FROM
(SELECT * FROM
TABLE_DATE_RANGE_STRICT([mytable], TIMESTAMP("2016-01-05"), TIMESTAMP("2016-01-07"))
),
(SELECT * FROM
TABLE_DATE_RANGE_STRICT([mytable], TIMESTAMP("2016-01-01"), TIMESTAMP("2016-01-04")),
)
WHERE NOT x IS NULL
同时上面这个特殊情况下的查询没有多大意义,因为你事先知道第二个子查询没有任何结果所以你会在下面使用:
SELECT * FROM
TABLE_DATE_RANGE_STRICT([mytable], TIMESTAMP("2016-01-05"), TIMESTAMP("2016-01-07")
WHERE NOT x IS NULL
但是我希望你的例子只是简单的例子,所以希望第一个选项仍然对你有意义,你可以利用它
同时,最好使用旧架构修补表格。这是免费的,为什么不呢?查看Tables Patch API