BigQuery:TABLE_QUERY 但表之间的列不同

BigQuery: TABLE_QUERY but columns differ between tables

我们正在将 csv 文件加载到 BigQuery 中。每个文件将创建一个单独的 table.

当我们从这些 table 中 select 时,我们主要使用 table 查询语句来执行此操作,因此:

SELECT foo, bar
FROM TABLE_QUERY(name_stub,'table_id CONTAINS "_something" and msec_to_timestamp(creation_time) > date_add(current_timestamp(), -90, "day")'));

现在我们已将新字段添加到较新的文件中。因此,我们现在不仅有 "foo" 和 "bar" 字段,而且还有 "baz".

当我 运行 以下查询时,我得到错误,字段 "baz" 在旧的 table 之一上不存在。

SELECT foo, bar, baz
FROM TABLE_QUERY(name_stub,'table_id CONTAINS "_something" and msec_to_timestamp(creation_time) > date_add(current_timestamp(), -90, "day")'));

有没有办法 select "baz" 并且只为没有列的 table 设置一个默认值?

向 table 添加新列是可能的(所有历史数据将自动具有 NULL),但您每天都在创建新的 table - 而 TABLE_QUERY 只是一个捷径UNION 的语法。 我唯一的想法是创建一个视图,将 "baz" 列添加到旧的 table 中。那么您应该能够在此类视图和更新的 table 中使用 TABLE_QUERY。

.

的回答中说明了解决此问题的方法

在我的例子中应该是:

SELECT foo, bar, coalesce(baz,0)
FROM TABLE_DATE_RANGE(mydataset.le_table,<beginning of time>,<day before column add>),
     TABLE_DATE_RANGE(mydataset.le_table,<day of column add>,<today>)

更新:此问题已得到解决。

BigQuery 现在支持 TABLE_DATE_RANGE 表子集具有更广泛架构的表。缺失的列在缺失列的表中应显示为 NULL。

https://code.google.com/p/google-bigquery/issues/detail?id=439