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
我们正在将 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