我正在尝试建立一个流/批处理管道,该管道将从Pub / Sub中读取事件,然后使用python3.6将其写入BigQuery
根据文档,Cloud Pub / Sub为每条消息分配唯一的message_id
和timestamp
,可用于检测订户收到的重复消息。 (https://cloud.google.com/pubsub/docs/faq)
要求如下: 1)消息可以按任何顺序出现(异步消息传递) 2)应该将唯一ID和时间戳(当记录被推送到pubsub主题/从主题中拉出时)应捕获到现有记录中。
Input Data :
Name Age
xyz 21
Output Record to bigquery:
Name Age Unique_Id Record_Timestamp(time when it was written to topic or pulled from topic)
xyz 21 hdshdfd_12 2019-10-16 12:06:54
如果我们可以通过pubsub执行此操作,谁能给我一些有关如何处理或输入的链接
答案 0 :(得分:0)
您在PubSub消息中拥有所有想要的数据。请注意,PubSub消息is slightly different if you use function event format的格式。时间戳和messageId在上下文对象中
{
"message": {
"attributes": {
"key": "value"
},
"data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
"messageId": "136969346945",
"publishTime": "2014-10-02T15:01:23.045123456Z"
},
"subscription": "projects/myproject/subscriptions/mysubscription"
}
数据是base64编码的。我建议您使用数据创建JSON并将此JSON发布到PubSub中。您可以获得base64字符串,但是在解码之后,您将拥有JSON并可以使用数据。
您还可以在发布区publishedTime
中看到发布时间。您没有上拉时间。您可以通过在消息处理程序中进行time = Now()
来获得它。
现在,您拥有了所有数据。您可以使用<your data>,messageId,publishedTime
构建BigQuery行。您可以构建文件(例如CSV或JSON行)和perform a load job into bigquery或use stream write。一切取决于您的要求/偏好。