【问题标题】:How to manage Schema Drift while streaming to BigQuery sharded table如何在流式传输到 BigQuery 分片表时管理架构漂移
【发布时间】:2017-11-20 20:25:50
【问题描述】:

我们是 BigQuery 的新手,正在尝试找出使用它进行实时分析的最佳方式。我们正在从后端服务向 Kafka 发送日志流,我们希望使用流式插入将这些日志流式传输到 BigQuery。对于可查询性,我们既按时间​​分区,又按事件类型分表(用于通配符查询)。我们将视图置于创建的表族之上,使它们看起来像 1 个表,并使用 _TABLE_SUFFIX(好吧,当他们推出该功能时,现在使用 UNION ALL)和 _PARTITIONTIME 列来减少为查询扫描的行集.到目前为止一切顺利。

我们不确定如何正确处理的是架构更改。我们的日志消息的架构经常更改。让 BigQuery 保持同步的手动过程是站不住脚的。理想情况下,我们的流式传输管道将检测到更改并根据需要应用架构更新(用于添加列)或表创建(用于添加事件类型)。我们有上游工具,因此我们知道所有架构更新都将向后兼容。

我的理解是所有分片必须具有相同的架构。我们如何以如下方式应用架构更新:

  1. 我们不会中断更新期间运行的查询。
  2. 我们不会中断流式插入。

#1 可能吗?我不相信我们可以原子地改变所有分片表的架构。

对于 #2,我认为我们必须在架构更新过程发生时停止流式传输管道。

谢谢, --本

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    带有_TABLE_SUFFIX 的通配符表可用https://cloud.google.com/bigquery/docs/querying-wildcard-tables,即使表的模式不同,您也可以使用它,它们只需要具有兼容的模式。使用 UNION ALL,您需要所有表都具有相同的架构,因此如果您同时更新架构,它将无法工作。 如果您只指定字段的子集,流式插入也将起作用。但是,您不能将新字段添加为流式插入的一部分,您必须先更新表,然后使用新架构插入数据。

    【讨论】:

    • 不幸的是,通配符表目前不适用于日期分区表。 issuetracker.google.com/issues/35905833
    • 从 cmets 上的 bug 来看,这个功能暂时被破坏了,应该很快就会修复。
    • 此外,如果您使用 UNION ALL 运行查询并在查询开始执行后开始更新表,则查询不会失败,并且将使用查询开始时存在的表版本。
    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 2021-06-28
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2018-12-17
    • 2017-05-10
    相关资源
    最近更新 更多