将流转换为小批量以加载到 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)将流分析输出转换为多行

如何将流大小转换为其他或如何将流大小值传递给向量?

Node.js - 如何将流转换为字符串

如何将流结果转换为字符串

Swift,将数据加载到临时文件流中以进行 transferFile

将流列表转换为列表