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

Sirius 02/21/2017. 1 answers, 336 views
python google-bigquery google-bigquery google-cloud-dataflow google-cloud-dataflow apache-beam

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

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

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

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

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

  1. 将write_disposition更新为WRITE_APPEND,尽管它有效,但它没有达到目的,因为再次运行相同的日期会重复数据。
  2. 运用

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

命令,看看我是否可以观察任何日志,基于我找到的链接 ,截断实际上是如何工作的。

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

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

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

4 Comments
Pablo 02/21/2017
无法使用分区装饰器创建表可能是一个错误。 让我检查并回复你。
Pablo 02/21/2017
你能为你的'表ID必须是字母数字'提供堆栈跟踪吗?
Pablo 02/21/2017
我检查了IO dev。 现在似乎不支持此功能。 :/
Sirius 02/22/2017
感谢您回复Pablo :),我只是希望它不会删除TRUNCATE的表,只是清除所有行,对于该分区,但我想它不会那样工作

1 Answers


community wiki 03/17/2017.

目前似乎不支持此类似乎。 感谢@Pablo从IO dev中找到答案。

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

Related questions

Hot questions

Language

Popular Tags