BigQuery:TABLE_QUERY,但表之间的列不同
Posted
技术标签:
【中文标题】BigQuery:TABLE_QUERY,但表之间的列不同【英文标题】:BigQuery: TABLE_QUERY but columns differ between tables 【发布时间】:2015-08-11 14:59:07 【问题描述】:我们正在将 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”并为没有该列的表设置一个默认值?
【问题讨论】:
【参考方案1】:向表中添加新列是可能的(所有历史数据将自动具有 NULL),但您每天都在创建新表 - 而 TABLE_QUERY 只是 UNION 的一种快捷语法。 我唯一的想法是创建一个视图,将列“baz”添加到旧表中。然后您应该能够在此类视图和较新的表中使用 TABLE_QUERY。
【讨论】:
很好,我想最简洁的方法是创建视图,谢谢【参考方案2】:更新:此问题已得到解决。
BigQuery 现在支持在表的子集具有更广泛架构的表上使用 TABLE_DATE_RANGE。缺少的列应在缺少列的表中显示为 NULL。
https://code.google.com/p/google-bigquery/issues/detail?id=439
【讨论】:
好消息!上面链接中的示例非常简化 - 这是否涵盖记录、重复等?【参考方案3】: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>)
【讨论】:
以上是关于BigQuery:TABLE_QUERY,但表之间的列不同的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种简单的方法可以根据 BigQuery 中的时区差异生成 table_query?