2016-06-11 62 views
0

在我的数据流管道中,我将有两个从BigQuery表中读取的PCollections<TableRow>。我打算将这两个PCollections合并成一个PCollection并与flatten合并。在基于时间戳的数据流中过滤有界数据

由于BigQuery仅附加,因此目标是使用新的PCollection来截断BigQuery中的第二个表。

我已阅读了文档,这是我感到困惑的中间步骤。使用我的新PCollection计划将使用Comparator DoFn来查看最大最近更新日期并返回给定行。 我不确定我是否应该使用过滤器转换,或者如果我应该按键进行分组,然后使用过滤器?

所有PCollection<TableRow> s将包含相同的值:IE:字符串,整数和时间戳。对于关键值对,大部分关于云数据流的文档都只包含简单的字符串。 是否有可能有一个键值对是PCollection<TableRow>的整行?

该行应类似于:

customerID, customerName, lastUpdateDate 
0001, customerOne, 2016-06-01 00:00:00 
0001, customerOne, 2016-06-11 00:00:00 

在上面的例子中,我将要过滤的PCollection只是第二行返回,将被写入的BigQuery一个PCollection。 另外,是否可以在第三个PCollection上应用这些Pardo而不创建第四个?

回答

1

您提出了几个问题。我试图单独回答他们,但我可能误解了整个场景。如果您提供了一些示例代码,可能有助于澄清。

随着我的新PCollection的计划是使用Comparator DoFn来查看最大的最后更新日期和返回给定的行。我不确定是否应该使用过滤器转换,或者如果我应该按键进行分组,然后使用过滤器?

根据您的描述,似乎你想采取元素PCollection和每个customerID(关键),找到最新的更新到客户的记录。您可以使用提供的转换通过Top.largestPerKey(1, timestampComparator)完成此操作,您可以将timestampComparator设置为仅查看时间戳。

是否有可能有一个键值对是整个行的PCollection?

KV<K, V>可具有任何类型的键(K)和值(V)。如果您想按键分组,则密钥的编码器需要具有确定性。 TableRowJsonCoder不确定,因为它可能包含任意对象。但它听起来像你想要的钥匙customerID和整个TableRow的价值。

是否可以将这些Pardo应用于第三个PCollection而不创建第四个?

当您将PTransformPCollection,它会导致一个新的PCollection。这是没有办法的,你不需要尝试最大限度地减少管道中PCollections的数量。

A PCollection是一个概念性的对象;它没有固有成本。你的管道将被大量优化,以至于许多中间体,尤其是那些在ParDo变换序列中的中间体,将永远不会实现。