Дождитесь завершения задания экспорта хранилища данных - PullRequest
1 голос
/ 06 мая 2020

Я следую документации Google Cloud, чтобы запланировать задание экспорта из Datastore в Cloud Functions. https://cloud.google.com/datastore/docs/schedule-export

import base64
import json
import os

from googleapiclient.discovery import build

datastore = build('datastore', 'v1')
project_id = os.environ.get('GCP_PROJECT')


def datastore_export(event, context):
    '''Triggers a Datastore export from a Cloud Scheduler job.

    Args:
        event (dict): event[data] must contain a json object encoded in
            base-64. Cloud Scheduler encodes payloads in base-64 by default.
            Object must include a 'bucket' value and can include 'kinds'
            and 'namespaceIds' values.
        context (google.cloud.functions.Context): The Cloud Functions event
            metadata.
    '''

    json_data = json.loads(base64.b64decode(event['data']).decode('utf-8'))
    bucket = json_data['bucket']
    entity_filter = {}

    if 'kinds' in json_data:
        entity_filter['kinds'] = json_data['kinds']

    if 'namespaceIds' in json_data:
        entity_filter['namespaceIds'] = json_data['namespaceIds']

    request_body = {
        'outputUrlPrefix': bucket,
        'entityFilter': entity_filter
    }

    export_request = datastore.projects().export(
        projectId=project_id,
        body=request_body
    )
    response = export_request.execute()
    print(response)

Приведенный выше объект ответа содержит поле, которое определяет состояние операции.

  • Если операция все еще продолжается, отображается «ОБРАБОТКА»
  • Если операция завершена, он говорит что-то еще (возможно, «ВЫПОЛНЕНО»), а также предоставляет URL-адрес, по которому файл был сохранен в GCS

Поскольку я пишу задание импорта BigQuery сразу после экспорта, для меня крайне важно выполнить импорт BigQuery ПОСЛЕ завершения экспорта хранилища данных.

Как я могу вызвать API, чтобы убедиться, что задание выполнено, и получить URL-адрес, по которому Экспорт сохранен?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Это не задание BigQuery должно спрашивать, когда начинать, а хранилище данных должно запускать его. Есть много способов сделать это, но я нашел руководство, которое может оказаться полезным: как запускать запросы, как только появится новая таблица Google Analytics

0 голосов
/ 06 мая 2020

Не отвечаю прямо на вопрос, но вы можете быть заинтересованы в использовании Airflow . Это оркестратор, который идеально подходит для планирования задач, например, ожидания выполнения одной задачи перед выполнением другой. При необходимости существуют также возможности повтора и зависимости между задачами.
Для вашего варианта использования первой задачей будет экспорт хранилища данных, а после успешного выполнения второй задачи, импорт BigQuery, будет продолжена работа.

...