GCP Pub/Sub-如何从BQ计划查询中检索状态



我有一个Big Query调度查询,它通过pub/sub触发云功能。

我希望函数从pub/sub消息中读取"state"值,这样我就可以查看它是否成功完成。

以下内容将始终触发else语句。如果移除If语句,它将返回一个KeyError。

import base64
def hello_pubsub(event, context):
data = base64.b64decode(event['data']).decode('utf-8')
if 'state' in data:
state = data['state']
print("returned state: " + state)
else:
print ("No state attribute found")

以下是函数应该接收的pubsub消息:

{
"data":
{"dataSourceId": "scheduled_query", 
"destinationDatasetId": "xxxxxxxxxx", 
"emailPreferences": { }, 
"endTime": "2020-03-12T20:40:13.627285Z", 
"errorStatus": { },
"name": "xxxxxxxxxx", "notificationPubsubTopic": "projects/xxxxxxxxxx/topics/xxxxxxxxxx", 
"params": { "destination_table_name_template": "xxxxxxxxxx", "query": "xxxxxxxxxx", "write_disposition": "WRITE_TRUNCATE" }, 
"runTime": "2020-03-05T10:00:00Z", 
"scheduleTime": "2020-03-12T20:37:13.17166Z", 
"startTime": "2020-03-12T20:37:13.328479Z", 
"state": "SUCCEEDED", 
"updateTime": "2020-03-12T20:40:13.627307Z", 
"userId": "xxxxxxxxxx"
}
}

我已经想通了。

data = base64.b64decode(event['data']).decode('utf-8')

这返回一个json格式的字符串,而不是字典对象。您需要通过转换为dict

data_dict = json.loads(data)

为了能够像字典一样访问它。

您可以在这里查看python库

您还有文档

最后,您可以检查JSON通知消息中添加的其他字段

最新更新