Python 使用write_truncate通过googledataflow/Beam将数据加载到Biqquery分区表中

Python 使用write_truncate通过googledataflow/Beam将数据加载到Biqquery分区表中,python,google-bigquery,google-cloud-dataflow,apache-beam,Python,Google Bigquery,Google Cloud Dataflow,Apache Beam,因此,我们使用的现有设置是每天创建一个新表,使用option可以很好地工作,但是当我们更新代码以使用分区表时,尽管我们的数据流作业无法使用write_truncate 它工作得非常好,将write disposition设置为“write_APPEND”(根据我的理解,从,它可能尝试删除表,然后重新创建),因为我提供了表装饰器,它无法创建新表 使用python代码的示例代码段: beam.io.Write('Write({})'.format(date), beam.io.BigQuerySin

因此,我们使用的现有设置是每天创建一个新表,使用option可以很好地工作,但是当我们更新代码以使用分区表时,尽管我们的数据流作业无法使用write_truncate

它工作得非常好,将write disposition设置为“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_处置更新为write_APPEND,虽然有效,但无法达到目的,因为再次为同一日期运行会复制数据
  • 使用
  • bq--apilog/tmp/log.txt加载--replace--source_format=NEWLINE_DELIMITED_JSON'表。$20160101'sample_JSON.JSON

    命令,以查看是否可以观察任何日志,根据我发现的日志,了解truncate实际上是如何工作的

  • 尝试了其他方法,但这也使用了WRITE\u APPEND
  • 是否有方法使用write_truncate方法从数据流作业写入分区表

    如果需要任何其他详细信息,请告诉我。
    谢谢

    目前似乎不支持此功能。@Pablo从IO-dev那里了解到了这一点,这应该归功于@Pablo


    根据Github页面上的,他们的应用程序将适合请求这样的功能。我建议在那里提交一个功能请求,并在这里的评论中发布一个链接,以便社区中的其他人能够跟进并表示支持。

    未能使用分区装饰器创建表可能是一个错误。让我检查一下,然后再给您回复。您能为“表ID必须是字母数字”提供堆栈跟踪吗?我和IO开发人员进行了检查。现在似乎不支持这一点:/感谢您回复Pablo:),我只是希望它不会删除TRUNCATE的表,而只是清除该分区的所有行,但我猜它不会这样工作。