我有一组历史数据表,这些表有不同但相容的'模式。我的意思是,随着时间的推移,架构已经发展,并且添加了更多字段(未删除)。我喜欢对所有的联合运行查询。
使用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解决方案。
答案 0 :(得分:0)
BigQuery API具有patch tables
功能,您可以使用新结构添加的架构更改来修补/扩展所有旧表。
通过patching旧表,您只需将NULL列添加到过去的架构中,并且不会删除数据。
因此,您需要做的是编写一个采用最新架构的脚本,并逐步将所有以前的表修补到新架构,然后运行UNION
个查询。