从DataFlow流管道写入带有表名日期的BigQuery表

时间:2017-08-04 16:49:27

标签: google-bigquery google-cloud-platform google-cloud-dataflow

我的表格格式:tableName_YYYYMMDD。我试图从流数据流管道写入此表。我想每天写一个新表的原因是因为我希望在30天后使表失效,并且只希望一次保留30个表的窗口。

当前代码:

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回答表明我可以对表进行分区并使分区过期,但是从流管道中不支持写入分区表。

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

在Dataflow 2.0 SDK中,有一种指定DynamicDestinations

的方法

请参阅BigQuery Dynamic Destionations中的to(DynamicDestinations<T,?> dynamicDestinations)

另外,请参阅TableDestination版本,它应该更简单,代码更少。虽然不幸的是javadoc中没有例子。

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

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

答案 1 :(得分:0)

This是一个开源管道,可用于将pub / sub连接到大查询。我认为谷歌还增加了对流媒体管道到日期分区表的支持。详情here