我们的BigQuery架构被大量嵌套/重复并且不断变化。例如,网站的新页面,表单或用户信息字段将与BigQuery中的新列相对应。另外,如果我们停止使用某种形式,则相应的不赞成使用的列将永远存在,因为您无法删除Bigquery中的列。
因此,我们最终将产生具有数百列的表,其中许多列已弃用,这似乎不是一个好的解决方案。
我正在寻找的主要替代方法是将所有内容存储为json(例如,每个Bigquery表将只有两列,一列用于时间戳,另一列用于json数据)。然后,我们每10分钟运行一次的批处理作业将执行联接/查询并写入聚合表。但是使用这种方法,我担心增加查询工作成本。
一些背景信息:
我们的数据以protobuf的形式出现,并且我们根据protobuf模式更新来更新bigquery模式。
我知道一个显而易见的解决方案是不使用BigQuery而是仅使用文档存储,但是我们将Bigquery用作数据湖和BI以及构建Tableau报告的数据仓库。因此,我们的工作将原始数据聚合到为Tableau服务的表中。 此处的最佳答案对我们而言效果不佳,因为我们获得的数据可能大量重复出现:BigQuery: Create column of JSON datatype
答案 0 :(得分:3)
您已经准备好了,可以在问题中安排几个选项。
您可以使用JSON表并保持低成本
因此,我不仅要添加两个timestamp + json列,还要添加1个分区列和5个集群列。最终甚至使用年度后缀表。这样,您至少有6个维度可以仅扫描有限数量的行以进行重新实现。
另一种方法是更改模型,并在中间层进行事件处理。您可以先将所有事件连接到Dataflow或Pub / Sub,然后在那里进行处理,并以新模式写入bigquery。该脚本将能够使用您在引擎中编写的模式即时创建表。
您可以删除列,即重新实现,也可以使用查询重写同一张表。您也可以重新实现以删除重复的行。
答案 1 :(得分:0)
我认为可以使用具有Dynamic Destination功能的Dataflow(或Apache Beam)来实现此用例。数据流的步骤如下:
阅读