apache_beam Python SDK 0.6.0 BigQuerySink是否支持表分区?

时间:2017-05-17 21:22:27

标签: python google-bigquery google-cloud-dataflow apache-beam

我一直在使用他们的python SDK对beam管道进行原型设计,并且能够使用BigQuerySink输出我的最终pcollection就好了:

     beam.io.Write(beam.io.BigQuerySink('dataset.table', 
                                self.get_schema(),
       create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,                                               
     write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE))

修改表以包含这样的分区:dataset.table$20170517在尝试使用DirectRunner运行此管道时触发以下错误

"代码":400,   " message":"无法读取未分区的表中的分区信息:

我已经研究了这里找到的例子,但没有找到分区使用的痕迹 https://github.com/apache/beam/tree/master/sdks/python/apache_beam/examples

如何将数据束接收到分区的bigquery表中?

1 个答案:

答案 0 :(得分:1)

apache_beam Python SDK确实接受BigQuerySink的分区装饰器。尝试使用不同的write_disposition可以获得更多信息。

  • WRITE_TRUNCATE不会写入表分区。在表名中使用$ YYYYmmdd分区将导致此错误。这与实际接受分区装饰器的Google Python SDK行为不同。

    Table IDs must be alphanumeric (plus underscores) and 
    must be at most 1024 characters long. 
    
  • WRITE_EMPTY将接受分区装饰器。
  • WRITE_APPEND将接受分区装饰器。