在我的数据流管道中,我将从BigQuery表中读取两个PCollections<TableRow>
。我计划使用PCollection
将这两个PCollection合并到一个flatten
中。
由于BigQuery仅是追加的,因此目标是使用新的PCollection
截断BigQuery中的第二个表。
我已经阅读了文档,这是我感到困惑的中间步骤。对于我的新PCollection
,计划是使用Comparator DoFn
查看最近一次更新的最大日期并返回给定的行。我不确定是否应该使用过滤器转换,或者是否应该先按组进行分组,然后再使用过滤器?
所有PCollection<TableRow>
将包含相同的值: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
而不创建第四个? 最佳答案
您问了几个问题。我试图孤立地回答它们,但是我可能误解了整个情况。如果您提供了一些示例代码,则可能有助于澄清。
对于我的新PCollection,计划是使用Comparator DoFn查看最近一次更新的最大日期并返回给定的行。我不确定是否应该使用过滤器转换,或者是否应该先按组进行分组,然后再使用过滤器?
根据您的描述,您似乎希望采用元素的PCollection
,并针对每个customerID
(键)找到该客户记录的最新更新。您可以使用提供的转换通过Top.largestPerKey(1, timestampComparator)
来实现此目的,在其中将timestampComparator
设置为仅查看时间戳。
是否可以有一个键值对,它是PCollection的整个行?KV<K, V>
的键(K
)和值(V
)可以具有任何类型。如果要按键分组,则键的编码器需要确定性。 TableRowJsonCoder
不确定,因为它可能包含任意对象。但这听起来像您想要键使用customerID
,而值则使用整个TableRow
。
是否可以将这些Pardo应用于第三个PCollection而无需创建第四个?
当您将PTransform
应用于PCollection
时,将产生一个新的PCollection
。无法解决这个问题,并且您无需尝试最小化管道中PCollections
的数量。PCollection
是概念对象;它没有内在成本。您的流水线将进行大量优化,以使许多中间PCollections
-尤其是一系列ParDo
转换的中间-都永远不会实现。
关于java - 根据时间戳过滤数据流中的绑定(bind)数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37767050/