因此,我们用来每天创建一个新表的现有设置,在“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 必须是字母数字
因为它试图重新创建表,我们在参数中提供了分区装饰器。
以下是我尝试过的一些事情:
- 将 write_disposition 更新为 WRITE_APPEND,虽然它有效,但它没有达到目的,因为再次在同一日期运行会重复数据。
- 使用
bq --apilog /tmp/log.txt load --replace --source_format=NEWLINE_DELIMITED_JSON 'table.$20160101' sample_json.json
命令,看看我是否可以观察任何日志,根据我找到的链接,截断实际上是如何工作的。
- 尝试了其他一些链接,但这也使用了 WRITE_APPEND。
有没有办法使用 write_truncate 方法从数据流作业写入分区表?
让我知道是否需要任何其他详细信息。谢谢