"compatible" 大查询通配符表查询的架构



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

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

我可以编写这个脚本,但希望改用Standard SQL通配符表。然而,我在 https://cloud.google.com/bigquery/docs/reference/legacy-sql#tablewildcardfunctions 读到:

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

不确定有多严格意味着不一致。它是否支持上述用例的增量模式,还是所有表都需要共享完全相同的架构?

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

欢迎任何其他建议。仅供参考 - 我使用 Airflow 来执行查询,所以我宁愿使用 Pythonic 解决方案。

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

通过修补旧表,您只需将 NULL 之类的列添加到过去的架构中,数据不会被删除。

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

相关:如何使用 BigQuery 补丁?

最新更新