0

我的表名格式:tableName_YYYYMMDD。我正嘗試從流式數據流管道寫入此表。我想每天寫一張新表的原因是因爲我想在30天后過期表,並且只希望一次保持30張表的窗口。從DataFlow流管道中寫入表名中帶日期的BigQuery表

當前代碼:

tableRow.apply(BigQueryIO.Write 
       .named("WriteBQTable") 
       .to(String.format("%1$s:%2$s.%3$s",projectId, bqDataSet, bqTable)) 
       .withSchema(schema) 
       .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED) 
       .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)); 

我不知道上面的代碼不會翻轉到新的一天,開始寫在那裏。

由於this答案建議我可以分區表和過期分區,但寫入分區表似乎是不支持流管道。

任何想法如何解決這個問題?

回答

0

在數據流2.0 SDK有指定DynamicDestinations

to(DynamicDestinations<T,?> dynamicDestinations)BigQuery Dynamic Destionations的方式。

另請參閱TableDestination版本,該版本應該更簡單,代碼更少。雖然不幸的是在javadoc中沒有例子。

to(SerializableFunction<ValueInSingleWindow<T>,TableDestination> tableFunction) 

https://beam.apache.org/documentation/sdks/javadoc/2.0.0/

+0

我一直在使用從數據流寫入的分區表進行測試,看起來像大查詢正確分配值,我沒有從數據流中分配任何'_PARTITIONTIME'。以下返回正確的數據。 'SELECT * FROM Mytable WHERE _PARTITIONTIME = TIMESTAMP(「2017-08-04」)' – PUG

0

This是一個開源的管道,你可以用它來發布/訂閱連接到大的查詢。我認爲谷歌也增加了對流式管道到日期分區表的支持。詳細信息here

相關問題