BigQueryIO.read()性能非常慢--Apache Beam

时间:2018-01-10 09:23:33

标签: google-bigquery google-cloud-dataflow apache-beam

我正在尝试从具有2410957408条记录的BigQuery表中读取记录。 在Apache Beam中使用BigQueryIO.readTableRows()来阅读它们是永远的。

我使用的是默认机器类型“n1-standard-1”和Autoscaling。

如果不对成本产生很大影响,可以做些什么来显着提高性能?高内存或高CPU机型会有帮助吗?

2 个答案:

答案 0 :(得分:3)

BigQueryIO.readTableRows()将首先将表数据导出到gcs存储桶中,并且梁工作人员将从那里使用导出。导出阶段是BigQuery API,它不是非常高效,也不是波束实现的一部分。

答案 1 :(得分:0)

我查看了你所引用的工作,似乎大部分时间花费在Beam上摄取BigQuery导出的数据,特别是在将BigQuery导出结果转换为TableRow时。 TableRow是一个非常庞大且效率低下的对象 - 为了获得更好的性能,我建议您使用BigQueryIO.read(SerializableFunction)直接读取您的自定义类型。