通过 Google Dataflow/Beam 和 write_truncate 将数据加载到 Bigquery Partitioned table

Loading data into Biqquery Partitioned table through Google Dataflow/Beam with write_truncate

因此,我们使用现有设置为每天创建一个新的 table,这与 "WRITE_TRUNCATE" 选项配合使用效果很好,但是当我们更新代码以使用分区 table ,虽然我们的数据流作业,但它不适用于 write_truncate.

它工作得很好,写入配置设置为 "WRITE_APPEND"(据我了解,从 beam,它可能会尝试删除 table,然后重新创建它) ,因为我提供了 table 装饰器,所以它无法创建新的 table.

使用 python 代码的示例片段:

beam.io.Write('Write({})'.format(date), beam.io.BigQuerySink(output_table_name + '$' + date, create_disposition=beam.io.BigQueryDisposition.CREATE_NEVER, write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE)

给出错误:

Table IDs must be alphanumeric

因为它试图重新创建 table,我们在参数中提供了分区装饰器。

以下是我尝试过的一些方法:

  1. 将 write_disposition 更新为 WRITE_APPEND,虽然它有效,但达不到目的,因为再次对同一日期 运行 会重复数据。
  2. 使用

bq --apilog /tmp/log.txt load --replace --source_format=NEWLINE_DELIMITED_JSON 'table.160101' sample_json.json

命令,根据我发现的 link,查看我是否可以观察任何日志,了解截断实际上是如何工作的。

  1. 尝试了其他一些 ,但这也使用了 WRITE_APPEND。

有没有办法使用 write_truncate 方法从数据流作业写入分区 table?

如果需要任何其他详细信息,请告诉我。 谢谢

目前似乎不支持此功能。 感谢@Pablo 从 IO 开发人员那里找到答案。

根据 Beam documentation on the Github page, their JIRA page 请求这样的功能是合适的。我建议在那里提交功能请求并在此处发表评论 link,以便社区中的其他人可以跟进并表示支持。