我有一个Apache Beam程序,它处理GCS存储桶中的文件并将数据转储到某个BigQuery表中。根据文件,我想设置truncate或append操作。这可以是动态的还是可配置的? 谢谢。
答案 0 :(得分:0)
我假设当你说“取决于文件”时,你有一些关于该文件的信息(以识别何时使用WRITE_TRUNCATE
和WRITE_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