2

因此,我们用来每天创建一个新表的现有设置,在“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)

这给出了错误:

表 ID 必须是字母数字

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

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

  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

1 回答 1

1

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

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

于 2017-03-17T20:54:27.647 回答