我有许多文本文件,其中包含我要从批处理模式下运行的DataflowPipelineRunner
导入日期分区的BigQuery表的数据。我不想在运行时插入当天的分区,而是根据每行中提到的日期插入分区。 (不幸的是我无法使用bq
命令行工具直接导入文本文件,因为我需要转换一些值。)
我尝试通过从ParDo函数输出时间戳来插入,该时间戳窗口化为天,然后应用该窗口并输出后缀为$
的表名和相应的日期。
BigQueryIO.Write.to(new SerializableFunction<BoundedWindow, String>() {
public String apply(BoundedWindow window) {
String dayString = DateTimeFormat.forPattern("yyyyMMdd")
.withZone(DateTimeZone.forID("Europe/Stockholm"))
.print(((IntervalWindow)window).start());
return dataset + "$" + dayString;
}
})
.withSchema(schema.getSchema())
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND));
当我尝试运行此功能时,我受到了影响by a Dataflow bug。我也found out那个
批处理模式下尚不支持每窗口表。
那么我怎样才能将指定日期作为分区写入日期分区表?
答案 0 :(得分:1)
如果您需要输出相对较小的固定数量的表,则可以为每个表创建单独的BigQueryIO.Write变换,然后根据日期partition创建数据。如果输出表的数量非常大,那么在批处理Dataflow支持每个窗口表之前,目前还没有一个好的解决方案。