GCP Pub / Sub - Как получить состояние из запланированного запроса BQ - PullRequest
0 голосов
/ 13 марта 2020

У меня запланированный запрос Big Query, который запускает облачную функцию через pub / sub.

Я хочу, чтобы функция считала значение "state" из сообщения pub / sub, чтобы я мог видеть, завершилось ли оно успешно.

Ниже всегда будет запускаться оператор 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"
}
}

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Я понял это.

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

Это возвращает форматированную строку json, а не объект словаря. Вам нужно конвертировать в dict через:

data_dict = json.loads(data)

, чтобы иметь возможность получить к нему доступ как словарь.

0 голосов
/ 13 марта 2020

Вы можете посмотреть python библиотеку здесь

У вас также есть документация

В конце концов, вы можете проверить дополнительные поля добавлены в уведомлении JSON

...