我一直在使用他们的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表中?
答案 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.