2017-05-25 17 views
1

我正在實現一個Dataflow管道,該管道從Pubsub讀取消息,並使用Apache Beam SDK 2.0.0 for Java將TableRows寫入BigQuery(BQ)。寫入BigQuery時在GroupByKey子任務中累積元素Apache beam v2.0

這是代碼的相關部分:

tableRowPCollection 
      .apply(BigQueryIO.writeTableRows().to(this.tableId) 
       .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER) 
       .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)); 

該代碼在數據流管道罩下產生一組任務。其中一項任務是GroupByKey。此任務正在積累管道中的元素,可在此打印屏幕中看到: GBK elements accumulation image. 閱讀完文檔後,我懷疑此問題與Window配置有關。但我找不到修改Window配置的方法,因爲它是隱含創建的Window.Assign變換內重洗刷任務。

是否有設置窗口參數和/或附加觸發器這種隱含窗口或者我應該創建自己的DOFN在BQ插入的TableRow的一種方式?

在此先感謝!


[更新]

我離開管道每天運行約,之後的GroupByKey子任務變得更快,元素的數量進來和走出彼此近似(有時呈一樣)。此外,我還注意到Watermark接近當前日期並且增長更快。所以這個「問題」就解決了。

+0

問題是什麼? GroupByKey將與特定鍵關聯的值分組。因此,如果你有N個鍵,你會期望N個元素從GroupByKey中出來。你所描述的聽起來像是按預期工作。 –

+0

@BenChambers關鍵是我不想等太久才能在BQ中插入數據。我想選擇在這個子任務中使用的觸發器。 –

回答

0

在BigQuery接收器中沒有任何由Reshuffle引入的等待。相反,它用於創建要寫入BigQuery的行的批處理。來自GroupByKey的元素數量較少,因爲每個輸出元素表示一批(或多組)輸入元素。

您應該能夠看到作爲ExpandIterableReshuffle的輸出)輸出的元素總數。

+0

我離開管道大約一天的運行時間,此後'GroupByKey'子任務變得更快,並且進出的元素數相互接近(有時是相同的)。此外,我還注意到'水印'已經接近當前日期並且增長得更快。 –