将流转换为小批量以加载到 bigquery
Posted
技术标签:
【中文标题】将流转换为小批量以加载到 bigquery【英文标题】:Convert a stream into mini batch for loading into bigquery 【发布时间】:2019-07-04 15:55:41 【问题描述】:我想构建以下管道:
pub/sub --> dataflow --> bigquery
数据正在流式传输,但我想避免将数据直接流式传输到 BigQuery,因此我希望在数据流机器中批量处理小块,然后当它们达到一定大小时将它们作为加载作业写入 BQ /时间。
我找不到任何关于如何使用 python apache beam SDK 执行此操作的示例 - 只有 Java。
【问题讨论】:
为什么要避免将其流式传输到 BigQuery 中?! 嘿@GrahamPolley,因为流式插入是有成本的,而加载作业是免费的:) 是的,但除非您大规模运行,否则通常可以忽略不计。在 PubSub 之外创建某种微批处理将需要更多的开发时间,并且它将有更多的移动组件,即更多的故障点和需要调试的区域。是不是真的值得吗?如果你是微批处理,你需要事先写出到 GCS,然后再支付存储费用。 【参考方案1】:这项工作正在进行中。 FILE_LOADS
method 仅适用于批处理管道(带有use_beam_bq_sink
实验标志,它将是future 中的默认标志。
但是,对于流式传输管道,如 code 中所示,它将引发 NotImplementedError
并带有消息:
仅批处理管道支持将文件加载到 BigQuery。
有一个开放的JIRA ticket,您可以在其中关注进度。
【讨论】:
以上是关于将流转换为小批量以加载到 bigquery的主要内容,如果未能解决你的问题,请参考以下文章
如何从单个 JSON(IOT HUB)将流分析输出转换为多行