在 table 中找不到字段 x,因为数据集包含 table 有和没有字段

Field x not found in table due to a dataset containing tables with and without the field

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

从给定日期开始,我在这些 table 中生成了一个新字段 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,因为这个table确实没有这个字段。

有没有办法在不更新我的旧 table 的结构的情况下查询所有这些并在此字段上进行过滤?即 BigQuery 认为如果未定义该字段,则该字段应为 'null'

假设您在 2016-01-01 和 2016-01-04 之间有一个时间架构,然后您从 2016-01-05

添加了 extra/new '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