Java 如何使用ApacheBeam在BigQuery中执行快速连接

Java 如何使用ApacheBeam在BigQuery中执行快速连接,java,google-bigquery,google-cloud-dataflow,apache-beam,Java,Google Bigquery,Google Cloud Dataflow,Apache Beam,根据BEAM的,并根据多个连接可以通过CoGropByKey或KeyedPCollectionTuple()实现 没有人在谈论这种转换的性能 我的流程应该非常简单:从BQ表(TableRow)批量输入行,并通过相同的键将它们与其他BQ表中的其他值连接(或“充实”)。因此,最终输出的类型也应该是TableRow 我想了解将BEAM中的两个表与BQ表连接起来的最佳实践是什么 例如,我可以在BQ中创建一个视图,替换所有这些管道并执行更高效的连接操作,但我希望处理代码中的所有逻辑 当执行join操作时,

根据BEAM的,并根据多个
连接可以通过
CoGropByKey
KeyedPCollectionTuple
()实现

没有人在谈论这种转换的性能

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

我想了解将BEAM中的两个表与BQ表连接起来的最佳实践是什么

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

当执行
join
操作时,发动机罩下发生了什么

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

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


除了检查运行时间外,我如何检查此管道的性能?

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

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

告诉我们进展如何:)