【发布时间】:2020-02-01 05:31:55
【问题描述】:
我正在阅读 beam 文档和一些 stackoverflow 问题/answers,以了解我将如何将 pubsub 消息写入 bigquery。截至目前,我有获取protobuf 消息并能够decode 它们的工作示例。代码是这样的
(p
| 'ReadData' >> apache_beam.io.ReadFromPubSub(topic=known_args.input_topic, with_attributes=True)
| 'ParsePubsubMessage' >> apache_beam.Map(parse_pubsubmessage)
)
最终,我想做的是将解码的 pub-sub 消息写入 bigquery。所有属性(和解码的字节数据)都将具有一对一的列映射。
所以让我感到困惑的是我的parse_pubsubmessage 应该返回什么。截至目前,它正在返回一个具有所有字段的自定义类,即
class DecodedPubsubMessage:
def __init__(self, attr, event):
self.attribute_one = attr['attribute_one']
self.attribute_two = attr['attribute_two']
self.order_id = event.order.order_id
self.sku = event.item.item_id
self.triggered_at = event.timestamp
self.status = event.order.status
这是执行此数据流的正确方法吗?我在想我将使用此返回值写入 bigquery,但由于高级 python 功能,我无法理解如何。这是我正在查看的参考example。在此示例中,我不确定如何在返回的对象上执行 lambda 映射以写入 bigquery。
【问题讨论】:
-
是否要将这个类的所有属性保存为表字段?
标签: python google-bigquery google-cloud-dataflow apache-beam apache-beam-io