处理通过Pub-sub流到Bigquery的记录的unique_id和时间戳功能

时间:2019-10-16 06:58:12

标签: python-3.6 google-cloud-pubsub

我正在尝试建立一个流/批处理管道,该管道将从Pub / Sub中读取事件,然后使用python3.6将其写入BigQuery

根据文档,Cloud Pub / Sub为每条消息分配唯一的message_idtimestamp,可用于检测订户收到的重复消息。 (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执行此操作,谁能给我一些有关如何处理或输入的链接

1 个答案:

答案 0 :(得分:0)

您在PubSub消息中拥有所有想要的数据。请注意,PubSub消息is slightly different if you use function event format的格式。时间戳和messageId在上下文对象中

Message format

   {
     "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 bigqueryuse stream write。一切取决于您的要求/偏好。