在Apache Beam中使WRITE_TRUNCATE和WRITE_APPEND动态化

时间:2017-08-16 09:40:08

标签: google-cloud-dataflow apache-beam

我有一个Apache Beam程序,它处理GCS存储桶中的文件并将数据转储到某个BigQuery表中。根据文件,我想设置truncate或append操作。这可以是动态的还是可配置的? 谢谢。

1 个答案:

答案 0 :(得分:0)

我假设当你说“取决于文件”时,你有一些关于该文件的信息(以识别何时使用WRITE_TRUNCATEWRITE_APPEND)管道

最简单的方法是将传入BigQuery的输入分成两个PCollections(通过过滤),并将每个输入传递到适当的BigQuery接收器(一个带有WRITE_TRUNCATE,一个带有WRITE_APPEND files = (pipeline | 'Read files' >> beam.io.Read(Your_GCS_Source()) ) files_to_truncate = (files | beam.Filter(lambda file: filter_for_files_to_truncate()) | beam.io.Write(beam.io.BigQuerySink(output_table, schema=output_schema, create_disposition=create_disposition, write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE)) ) files_to_append = (files | beam.Filter(lambda file: filter_for_files_to_append()) | beam.io.Write(beam.io.BigQuerySink(output_table, schema=output_schema, create_disposition=create_disposition, write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND)) ) )。

您没有提及是否使用Java或Python,下面的伪代码适用于Python,但它可以轻松移植到Java SDK

Try/Catch