无法在GCP中将值从pubsub插入到Big查询

时间:2019-01-04 03:45:05

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

我是Python Apache Beam的新手,它正在尝试执行一项任务,以使用pubcloud从Google数据流中提取值并将其传递给大型查询。请找到我在这种情况下遵循的以下步骤。

1)数据作为json推送到pubsub主题中。 {----- record1 ----} {--- record2 ---}等等

2)大查询表遵循与推送到pubsub的json完全相同的键,并且所有列均为字符串类型。

3)下面是该场景的代码

pipeline_options.view_as(StandardOptions).streaming = True
p_bq = beam.Pipeline(options=pipeline_options)
logging.info('Start')

BQ_data1 = (p_bq 
            | 'readPubSub' >> beam.io.ReadFromPubSub(subscription='subscriptionname') 
            | 'writeBQ' >> beam.io.WriteToBigQuery(table='table name', 
                                                   dataset='dataset',
                                                   project='projectname'))
result_bq = p_bq.run()

预期结果:将值从pubsub传递到大查询

实际结果:     AttributeError:“ str”对象没有属性“ items”

1 个答案:

答案 0 :(得分:1)

您可能会从pubsub中获取原始字符串,而不是python对象。 您可能需要先将json字符串解析为python对象(或字典),然后才能将其写入BQ。请参见以下示例:https://github.com/apache/beam/blob/master/sdks/python/apache_beam/examples/windowed_wordcount.py#L71