gpt4 book ai didi

google-bigquery - 大查询 : Best way to handle frequent schema changes?

转载 作者:行者123 更新时间:2023-12-05 04:01:45 24 4
gpt4 key购买 nike

我们的 BigQuery 架构是高度嵌套/重复且不断变化的。例如,网站的新页面、表单或用户信息字段将对应于 BigQuery 中的新列。此外,如果我们停止使用某种形式,相应的弃用列将永远存在,因为您无法在 Bigquery 中删除列。

因此我们最终会生成包含数百列的表格,其中许多列已被弃用,这似乎不是一个好的解决方案。

我正在研究的主要替代方案是将所有内容存储为 json(例如,每个 Bigquery 表将只有两列,一列用于时间戳,另一列用于 json 数据)。然后我们每 10 分钟运行一次的批处理作业将执行连接/查询并写入聚合表。但是使用这种方法,我担心会增加查询作业的成本。

一些背景信息:

我们的数据作为 protobuf 传入,我们根据 protobuf 架构更新更新我们的 bigquery 架构。

我知道一个明显的解决方案是不使用 BigQuery 而只使用文档存储,但我们使用 Bigquery 作为数据湖和 BI 的数据仓库,并从中构建 Tableau 报告。因此,我们有将原始数据聚合到服务于 Tableau 的表中的作业。这里的最佳答案对我们来说效果不佳,因为我们获得的数据可能会大量嵌套重复:BigQuery: Create column of JSON datatype

最佳答案

你已经做好了充分的准备,你在问题中布置了几个选项。

您可以使用 JSON 表并保持低成本

  • 你可以使用分区表
  • 你可以聚类你的表

因此,除了只有两个 timestamp+json 列之外,我还添加了 1 个分区列和 5 个簇列。最终甚至使用带有年度后缀的表格。这样,您至少有 6 个维度来扫描有限数量的行以进行重新实现。

另一个是改变你的模型,做一个事件处理中间层。您可以首先将所有事件连接到 Dataflow 或 Pub/Sub,然后在那里处理它并将其作为新模式写入 bigquery。该脚本将能够使用您在引擎中编写的模式动态创建表。

顺便说一句,您可以删除列,这就是重新实现,您可以使用查询重写同一个表。您也可以重新具体化以删除重复的行。

关于google-bigquery - 大查询 : Best way to handle frequent schema changes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55068538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com