代码之家  ›  专栏  ›  技术社区  ›  Dimitri Masin

在Google云数据流上调试BigQuery的慢速读取

  •  1
  • Dimitri Masin  · 技术社区  · 7 年前

    背景: 我们有一个非常简单的管道,它从BigQuery(通常约300MB)读取一些数据,对其进行过滤/转换,然后将其放回BigQuery。在99%的情况下,该管道在7-10分钟内完成,然后重新启动以处理新批次。

    问题: 最近,这项工作开始占据>每隔一段时间跑3次,在2000次跑步中,一个月可能跑2次。当我查看日志时,我看不到任何错误,事实上,这只是第一步(从BigQuery读取)花费了这么长时间。

    有人对如何调试此类案例有什么建议吗?尤其是因为它实际上是从BQ读取的,而不是我们的任何转换代码。我们正在使用Apache Beam SDK for Python 0.6.0(也许这就是原因!)

    是否可以为作业定义超时?

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  3
  •   jkff    7 年前

    这在数据流端或BigQuery端都是一个问题,具体取决于人们如何看待它。在拆分数据以进行并行处理时,数据流依赖于对数据大小的估计。当BigQuery偶尔严重低估查询结果大小时,就会出现较长的运行时间,因此,数据流会严重过度分割数据,运行时间会因读取BigQuery导出的大量小文件块的开销而受到限制。

    一方面,这是我第一次看到BigQuery产生如此严重错误的查询结果大小估计。然而,由于大小估计本身就是最佳努力,通常可以任意关闭,因此数据流应该对此进行控制,并防止这种过度分裂。我们会调查并解决这个问题。

    同时,我想到的唯一解决方法是使用Java SDK:它使用完全不同的代码来读取BigQuery,据我回忆,BigQuery不依赖于查询大小估计。