多个表的Pcollection

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个表的Pcollection相关的知识,希望对你有一定的参考价值。

我有两个bigquery表。

表A.

c_id    count_c_id  p_id

表B.

id   c_name   p_type  c_id 

根据表A中的列,我需要使用DF管道从表B中查找详细信息。

PCollection<TableRow> tableRowBQ = pipeline.apply(BigQueryIO.Read
.named("Read").fromQuery("select c_id,count_c_id,p_id from TableA"));

我的要求是基于此查询的c_id返回我应该能够使用pcollection从TableB获取c_name。我无法找到任何pcollection示例来迭代一个表中的字段并使用该字段从另一个表中获取数据。

Google小组分享的示例作为参考。 https://github.com/GoogleCloudPlatform/DataflowSDK-examples/blob/master-1.x/src/main/java/com/google/cloud/dataflow/examples/cookbook/JoinExamples.java

答案

Cloud DataFlow documentation,我认为你有两种方法来完成这种JOIN任务。根据你有多少独特的c_ids,我会选择以下两个选项之一。

  • 如果你没有很多c_ids,我会把你的SELECT查询的结果视为一个侧输入,并用它作为过滤器传递到表B中的查找;

这是一个使用BigQueryIO查询结果作为侧面输入的代码片段:Apply Side input to BigQueryIO.read operation in Apache Beam

  • 否则,你可以使用CoGroupByKey。例如,
Table A:
c_id -> count_c_id, p_id

Table B
c_id -> c_name

由于两个表都可以看作是某些不同值的共享键,因此可以将它们CoGroup为

c_id -> ([count_c_id, p_id], [c_name]]

那么你可以在这个“分组”的新PCollection上做任何你想做的事情。

以上是关于多个表的Pcollection的主要内容,如果未能解决你的问题,请参考以下文章

如何从 pcollection 将多个值写入红移表

如何将 Pcollection<String> 变量转换为字符串

使用一个 pcollection 作为另一个 pcollection 的输入

PCollection<Entity> 到 PCollection<TableRows>

是否可以从 PubSub 读取消息并将其数据分隔在 PCollection<String> 的不同元素中?如果是这样,怎么做?

将列表转换为 PCollection