我们正在将csv文件加载到BigQuery中。每个文件都将创建一个单独的表。
当我们从这些表中选择时,我们主要使用表查询来执行此操作:
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”。
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")'));
有没有办法选择“baz”并且只有没有该列的表的默认值?
答案 0 :(得分:2)
可以向表中添加新列(所有历史数据都将自动为NULL),但您每天都在创建新表 - 而TABLE_QUERY只是UNION的快捷语法。 我唯一的想法是创建一个视图,它将添加列" baz"到旧桌子。然后,您应该能够在这些视图和更新的表中使用TABLE_QUERY。
答案 1 :(得分:1)
this question的答案中说明了解决方法。
就我而言,它应该是:
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>)
答案 2 :(得分:1)
更新:此问题已得到解决。
BigQuery现在支持TABLE_DATE_RANGE表,其中表的子集具有更宽的模式。丢失的列应该在缺少列的表中显示为NULL。
https://code.google.com/p/google-bigquery/issues/detail?id=439