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