因此,我们使用现有的设置为每天创建一个新表,这与"WRITE_TRUNCATE"选项无关,但是当我们更新我们的代码以使用分区表时,尽管我们的数据流作业,它不会与write_truncate一起使用。通过Google Dataflow/Beam通过write_truncate将数据加载到Biqquery分区表中
它工作得很好,写处理设置为“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)
这给错误:
Table IDs must be alphanumeric
,因为它试图重新创建表,我们在讨论提供分区装饰。
下面是一些i`v尝试过的事情:
- 更新write_disposition为WRITE_APPEND,虽然它的工作原理,它失败的目的,因为再次为同一日期运行将重复数据。
- 使用
bq --apilog /tmp/log.txt load --replace --source_format=NEWLINE_DELIMITED_JSON 'table.$20160101' sample_json.json
命令,看看我是否能观察到任何日志,对如何真正截断工作的基础上,link,我发现。
- 尝试了其他一些links,但这也使用WRITE_APPEND。
有没有办法使用write_truncate方法从数据流作业写入分区表?
让我知道是否需要任何额外的细节。 谢谢
未能用分区装饰器创建表可能是一个错误。让我检查并回复你。 – Pablo
您可以为您的'表格ID必须为字母数字'提供堆栈跟踪吗? – Pablo
我用IO dev进行了检查。看来这现在不支持。 :/ – Pablo