由于包含带有和不带字段的表的数据集,在表中找不到字段x

时间:2016-01-13 14:36:55

标签: field structure google-bigquery

我有一个包含每日表的数据集。

从给定日期开始,我在这些表中生成了一个新字段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”

1 个答案:

答案 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