我正在尝试从具有2410957408条记录的BigQuery表中读取记录。 在Apache Beam中使用BigQueryIO.readTableRows()来阅读它们是永远的。
我使用的是默认机器类型“n1-standard-1”和Autoscaling。
如果不对成本产生很大影响,可以做些什么来显着提高性能?高内存或高CPU机型会有帮助吗?
答案 0 :(得分:3)
BigQueryIO.readTableRows()
将首先将表数据导出到gcs存储桶中,并且梁工作人员将从那里使用导出。导出阶段是BigQuery API,它不是非常高效,也不是波束实现的一部分。
答案 1 :(得分:0)
我查看了你所引用的工作,似乎大部分时间花费在Beam上摄取BigQuery导出的数据,特别是在将BigQuery导出结果转换为TableRow
时。 TableRow
是一个非常庞大且效率低下的对象 - 为了获得更好的性能,我建议您使用BigQueryIO.read(SerializableFunction)
直接读取您的自定义类型。