查询执行时间和Java查询调用之间的增量完成

时间:2017-04-14 11:32:10

标签: java google-bigquery google-cloud-platform

上下文

  • 我们的容器群位于@ us-east1-c
  • 我们使用以下Java库:google-cloud-bigquery,0.9.2-beta
  • 我们的数据集大约有26M行,代表~10G
  • 我们的所有查询返回少于100行,因为我们始终在特定列上进行分组

问题

我们分析了在BigQuery中执行的最后100个查询,这些查询都在大约2-3秒内完成(我们通过调用 bq --format = prettyjson show -j JOBID 进行分析,结束时间 - 创作时间)。

在我们的Java日志中,对 bigquery.query 的大多数调用都会阻塞5-6秒(并且10秒不会与众不同)。什么可以解释在BigQuery集群中完成查询与Java中可用结果之间的系统差距?我知道5-6秒不是天文学,但我很想知道这是否是使用Java BigQuery云库时的正常行为。

我没有深入到使用Wireshark分析出站呼叫的程度。我们所有的测试都在我们的容器集群(Kubernetes)中执行。

代码

QueryRequest request = QueryRequest.newBuilder(sql)
                .setMaxWaitTime(30000L)
                .setUseLegacySql(false)
                .setUseQueryCache(false)
                .build();

QueryResponse response = bigquery.query(request);

谢谢

1 个答案:

答案 0 :(得分:0)

只需简单地查看代码: https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryImpl.java

似乎有多种潜在的延迟来源:

  • 获取查询结果
  • 重新启动(有一些可以解释延迟峰值的自动重启)
  • 检查新结果的频率

听起来好像看看Wireshark会给你一个确切的答案。