使用write_truncate通过Google Dataflow / Beam将数据加载到Biqquery Partitioned表中

时间:2017-02-21 08:21:32

标签: python google-bigquery google-cloud-dataflow apache-beam

因此我们使用现有的设置为每天创建一个新表,它与"WRITE_TRUNCATE"选项一起正常工作,但是当我们更新代码以使用分区表时,虽然我们的数据流工作,但它不会使用write_truncate。

它工作得很好,写入处理设置为“WRITE_APPEND”(根据我的理解,从beam,它可能会尝试删除表,然后重新创建它),因为我提供表装饰者无法创建新表。

使用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)

给出错误:

  

表格ID必须是字母数字

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

以下是我试过的一些事情:

  1. 将write_disposition更新为WRITE_APPEND,虽然它有效,但它没有达到目的,因为再次运行相同的日期会重复数据。
  2. 使用
  3. bq --apilog /tmp/log.txt load --replace --source_format=NEWLINE_DELIMITED_JSON 'table.$20160101' sample_json.json

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

    1. 尝试了其他一些links,但这也使用了WRITE_APPEND。
    2. 有没有办法使用write_truncate方法从数据流作业写入分区表?

      如果需要任何其他详细信息,请与我们联系。 感谢

1 个答案:

答案 0 :(得分:1)

此时似乎不支持此类似乎。 Credit从@Pablo转到IO dev。

根据Github页面上的Beam documentation,他们的JIRA page将适合请求此类功能。我建议在那里提交功能请求并在评论中发布链接,以便社区中的其他人可以跟进并显示他们的支持。