"兼容" bigquery通配符表查询的模式

时间:2018-01-04 17:01:13

标签: google-bigquery

我有一组历史数据表,这些表有不同但相容的'模式。我的意思是,随着时间的推移,架构已经发展,并且添加了更多字段(未删除)。我喜欢对所有的联合运行查询。

使用legacy SQL执行此操作需要SELECT加入多个UNION语句,并为早期表中不存在的新字段使用虚拟NULL占位符。 我有100个这样的组合查询来构建&执行。

我可以编写脚本,但希望使用Standard SQL通配符表。不过我在https://cloud.google.com/bigquery/docs/reference/legacy-sql#tablewildcardfunctions阅读了

  

为了执行使用通配符表的标准SQL查询,   BigQuery自动推断该表的架构。 BigQuery使用   与最近创建的表匹配的模式   通配符作为通配符表的模式。如果架构是   与通配符表BigQuery匹配的表之间不一致   返回错误。

不确定不一致的严格程度。它是否支持增量模式,如上所述,或者所有表需要共享完全相同的模式吗?

如果不可能,另一种方法是使用schemaUpdateOptions ALLOW_FIELD_ADDITION(重新)从源加载到新表中。这意味着重新设计和返工。

欢迎任何其他建议。仅供参考 - 我使用Airflow执行查询,因此我更倾向于使用Pythonic解决方案。

1 个答案:

答案 0 :(得分:0)

BigQuery API具有patch tables功能,您可以使用新结构添加的架构更改来修补/扩展所有旧表。

通过patching旧表,您只需将NULL列添加到过去的架构中,并且不会删除数据。

因此,您需要做的是编写一个采用最新架构的脚本,并逐步将所有以前的表修补到新架构,然后运行UNION个查询。

相关:How do I use BigQuery patch?