Beam direct-runner 慢速 BigQuery 读取

Posted

技术标签:

【中文标题】Beam direct-runner 慢速 BigQuery 读取【英文标题】:Beam direct-runner slow BigQuery read 【发布时间】:2017-10-24 10:08:39 【问题描述】:

我有一个非常简单的过程,第一步是读取 BigQuery 表

p.apply("BigQuery data load", BigQueryIO.read().usingStandardSql().fromQuery(BG_SELECT).withoutValidation().withoutResultFlattening())

这一步大约需要 2/3 分钟 来执行(大约 1000 行检索)! 当我查看 BigQuery 时,我看到多行链接到我的查询

10:54:37.703 BigQuery delete temp_
10:54:37.244 BigQuery delete temp_
10:54:35.492 BigQuery jobcompleted
10:54:34.802 BigQuery insert jobs 
10:54:22.081 BigQuery jobcompleted
10:52:33.812 BigQuery insert jobs 
10:52:33.106 BigQuery insert datas
10:52:32.410 BigQuery insert jobs 

这 2 分钟完成作业正常吗? (我在 bigquery 上没有并行活动)

我怎样才能获得更好的(正常!)性能?

【问题讨论】:

也许您的查询很复杂? 查询很简单。这只是一个简单的选择,没有任何过滤/加入/分组... 多少列? 5 列(不是很多!) 你使用直接亚军吗? 【参考方案1】:

默认情况下BigQueryIO 使用BATCH 优先级。批处理模式查询由 BigQuery 排队。这些在空闲资源可用时立即启动,通常在几分钟内。

您可以将优先级显式设置为INTERACTIVE

p.apply("BigQuery data load", BigQueryIO.readTableRows()
    .withQueryPriority(BigQueryIO.TypedRead.QueryPriority.INTERACTIVE)
    .usingStandardSql()
    .fromQuery(BG_SELECT)
    .withoutValidation()
    .withoutResultFlattening())

交互模式允许 BigQuery 尽快执行查询。

【讨论】:

以上是关于Beam direct-runner 慢速 BigQuery 读取的主要内容,如果未能解决你的问题,请参考以下文章

第二次使用 Dataflow 从 Big Query 中提取数据的问题 [apache beam]

使用 Apache Beam 反序列化 Kafka AVRO 消息

Apache Beam - 将 BigQuery TableRow 写入 Cassandra

输出类型中 beam.ParDo 和 beam.Map 的区别?

beam189端点自由度释放的实现

Beam从零开始