【问题标题】:Pcollection for multiple Tables多个表的 Pcollection
【发布时间】:2018-05-24 01:01:14
【问题描述】:

我有两个 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.

【问题讨论】:

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


    【解决方案1】:

    Cloud DataFlow documentation,我认为你有两种方法来完成这种JOIN任务。根据您拥有的唯一c_ids 数量,我会选择以下两个选项之一。

    • 如果您没有很多 c_ids,我会将您的 SELECT 查询的结果视为辅助输入,并将其用作过滤器以传递到表 B 的查找中;

    这里是使用 BigQueryIO 查询结果作为侧输入的代码 sn-p: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 上做任何你想做的事情。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    相关资源
    最近更新 更多