连接apache beam / cloud数据流中的数据



我需要将两个源连接在一起。假设每个源大约有100万行数据,我想要连接针对这些源运行的两个查询的两个结果。因此,从概念上讲,连接查询看起来像这样:

SELECT *
FROM
(query1 against ElasticSearch source -- results are of unknown size)
JOIN
(query2 against BigQuery source -- results are of unknown size)
ON query1.joinkey = query2.joinkey

换句话说,query1的结果可以从0字节/行到10GB/100M行。与query2的结果相同。

Apache Beam或云数据流如何处理"未知大小"的连接?例如,在定义两个运行时查询的情况下。此外,对于上述情况,Apache Beam是一个很好的资源,还是可能有更好的选择?

我想在两种大小可能是无限大小的情况下,它可能是最好的执行连接(至少在概念上):

WITH query1 AS (
es_query -> materialize to BigQuery
)
SELECT *
FROM
query1 JOIN query2 USING (joinkey)

有几种方法可以实现Apache Beam管道中的连接。例如,

  • 使用侧输入
  • 使用CoGroupByKey操作

两种方法都没有设置大小限制,因此应该适用于任意大数据集。但是侧输入更适合于在处理大型数据集作为主要输入的同时输入相对较小的数据集(并迭代)的情况。因此,如果两个数据集都很大并且大小相对相同,CoGroupByKey可能更适合您的情况。

有关Java和Python的其他代码示例,请参阅这里和这里。

相关内容

  • 没有找到相关文章

最新更新