将窗口与有界PCollections结合使用

时间:2019-03-14 15:41:05

标签: google-bigquery google-cloud-dataflow

我正在尝试使用带有绑定PCollections(https://cloud.google.com/dataflow/model/windowing)的窗口实现从一个BigQuery表转换为另一个BigQuery表的数据。

我的数据流包已成功完成。但是我想知道如何验证是否已使用Windowing转换了数据。我也想知道我是否使用Windowing遵循正确的方法处理有界数据。

这是我的高级步骤和代码段。

  1. 读取BigQuery表
  2. 为所有元素向PCollection添加时间戳
  

PCollection stampedLogs = mainData.apply(ParDo.of(new   DoFn(){                 @ProcessElement                 公共无效processElement(ProcessContext c){                     即时时间戳=新的Instant(新的Date());                     c.outputWithTimestamp(c.element(),timestamp);                 }             }));

  1. 应用窗口-固定Windows
  

PCollection fixedWindowedItems =   stampedLogs.apply(Window.into(FixedWindows.of(Duration.standardMinutes(1))));

  1. 按选定列分组
  

WithKeys keyCustomerTable = WithKeys.of((TableRow   行)->   String.format(“%s#%s#%s”,row.get(“ partyID”),row.get(“ accountNumber”),row.get(“ customerName”)))。withKeyType(TypeDescriptors.strings( ));

     

PCollection> pcGroupedCollection =   fixedWindowedItems.apply(“ WithKeys”,keyCustomerTable);

     

最终的TupleTag table1Tag =新的TupleTag <>();

     

PCollection> targetTableGrouped =   KeyedPCollectionTuple.of(table1Tag,   pcGroupedCollection).apply(CoGroupByKey.create());

  1. ParDo函数格式化值
  2. 将PCollection写入另一个BQ表。
  

fixedWindowedItems.apply(BigQueryIO.writeTableRows()                     .withSchema(schema1)                     .to(options.getTable())                     .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)                     .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE));

0 个答案:

没有答案