【问题标题】:How to perform a fast join in BigQuery with Apache BEAM如何使用 Apache BEAM 在 BigQuery 中执行快速联接
【发布时间】:2019-06-19 10:03:47
【问题描述】:

根据BEAM的programming guide,根据threadsjoin可以实现CoGropByKeyKeyedPCollectionTuple(coockbook)。

没有人谈论这类转换的性能。

我的流程应该非常简单:从 BQ 表 (TableRow) 批量输入行,并通过相同的键将它们与其他 BQ 表中的其他值连接(或“丰富”)。所以最终输出的类型也应该是TableRow

我想了解将 BEAM 中的 2 个表与 BQ 表连接的最佳做法。

例如,我可以在 BQ 中创建一个视图并替换所有这些管道并执行更有效的连接操作,但我想在代码中处理所有逻辑

在处理 join 操作时,幕后发生了什么?

DirectRunner 是否会对第二个 BQ 表执行 n 次查询以加入所有管道批次(逐项)?还是 BEAM 足够聪明,可以聚合它并对所有批次执行 1 次查询?

Google DataflowRunner 的工作方式是否不同?

除了查看运行时间,我如何查看这个管道的性能?

【问题讨论】:

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


    【解决方案1】:

    TTBOMK 您不想在代码中编写完整的 SQL,例如 WHERE 子句。 Beam 或任何基于代码的 SQL 连接都将在 BQ 中保存的大量数据上失败。 因此,任何此类“丰富”都应该由底层数据处理解决方案真正完成,无论是 BQ 之上的 SQL 还是 RDD/DataFrames/等之上的 Spark。

    请注意,它不太适合流式传输,更适合批处理流。 如果您想遵循纯流式传输方式,您应该根据您的域使用快速 DB,并避免使用 OLAP 风格(真正的柱状)DB。 BQ 每次查询都有很大的延迟。

    告诉我们进展如何:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-15
      • 2018-12-07
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      相关资源
      最近更新 更多