如何在流式传输到BigQuery分片表时管理Schema Drift

时间:2017-11-20 20:25:50

标签: google-bigquery

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

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

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

  1. 我们不会破坏在更新期间运行的查询。
  2. 我们不打破流媒体插页。
  3. #1可能吗?我不相信我们可以原子地改变所有分片表的模式。

    对于#2,我假设我们必须在架构更新过程中停止流式传输管道。

    谢谢, --Ben

1 个答案:

答案 0 :(得分:0)

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