2016-06-11 63 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變換序列中的中間體,將永遠不會實現。