繁体   English   中英

改进从 apache 光束中的转换内部读取 BQ 数据 - Python

[英]Improving reading BQ data from inside of a transformation in apache beam - Python

我有一个提交给谷歌云数据流的 apache 光束管道。 我的用例如下:

  • 我有一个 BQ 表 A,我使用 Beam IO 本机连接器连接到 pcollection
  • 我将 pcollection 传递给一个转换,我需要检查每个元素是否存在于 BQ 的表 B 中。 我找不到使用本机 Apache 光束执行查询的方法,这就是我使用谷歌的 BQ python 库的原因
  • 之后,我使用梁 IO 连接器将我想要的结果保存到 BQ 表 C

我的方法效果很好,但是成本很高。 例如,对于包含 150k 条记录的表 A,它至少需要 15 天的处理时间,这在 google 数据流中有 475 名工作人员的情况下被包装成 2 小时。 我知道高成本和长执行时间的主要原因是我从转换内部为每个元素提交的 SQL 查询,因为这需要时间。

你们以前有没有遇到过这样的问题? 或者你知道我可以在我的代码中发明一个改进来降低成本吗?

在此处输入图像描述

一个简单优雅的侧面解决方案(我不知道我怎么想不到)

我没有将表 A 直接传递给要处理的梁作业,而是创建了一个新表 A2,它是表 A 和表 B 之间左连接的结果。

因此,我向工作人员请求的数据抛出 SQL 查询,将已经存在于 Job 的输入数据中(表 A2)

这节省了大量的计算资源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM