Как настроить запланированные запросы в BigQuery с поддержкой часового пояса (через Python SDK) - PullRequest
3 голосов
/ 16 января 2020

В пользовательском интерфейсе BigQuery я могу запланировать запрос с указанным c часовым поясом (как вы можете видеть на скриншоте ниже).

image image

С Эти настройки позволяют мне планировать свой запрос в правильное местное время, но когда я пытаюсь автоматизировать этот процесс с помощью Python, я не вижу никакой возможности указать часовой пояс (https://cloud.google.com/bigquery/docs/scheduling-queries )

def create_scheduled_query(project_id, dataset_id, query_string, dest_table, write_disposition=WriteDisposition.WRITE_TRUNCATE):
    parent = client.project_path(project_id)

    transfer_config = google.protobuf.json_format.ParseDict(
        {
            "destination_dataset_id": dataset_id,
            "display_name": dest_table,
            "data_source_id": "scheduled_query",
            "params": {
                "query": query_string,
                "destination_table_name_template": dest_table,
                "write_disposition": write_disposition,
                "partitioning_field": "",
            },
            "schedule": "every day 06:00",  # How can add timezones here?
        },
        bigquery_datatransfer_v1.types.TransferConfig(),
    )

    response = client.create_transfer_config(
        parent, transfer_config, authorization_code=authorization_code
    )

    print("Created scheduled query '{}'".format(response.name))

Есть ли способ выполнить sh это с помощью клиента Python? Спасибо!

Ответы [ 2 ]

1 голос
/ 22 января 2020

После тщательного изучения документации я пришел к выводу, что выбор часового пояса в вашем скрипте Python невозможен.

В API-интерфейсах и справочном документе вы можете найти все возможные аргументы для запланированного вами запроса в Transfer_config . Параметр schedule описывается следующим образом:

Расписание передачи данных. Если источник данных не поддерживает настраиваемое расписание, оно должно быть пустым. Если он пуст, будет использовано значение по умолчанию для источника данных. Указанное время указано в UT C. Примеры допустимого формата: 1-й, 3-й понедельник месяца 15:30, каждая среда, пятница января, июнь 13:15 и первое воскресенье квартала 00: 00.

Поэтому в Консоль выбранный часовой пояс используется только для отображения, поскольку время для выполнения запланированного запроса преобразуется в UT C Время .

Дополнительно В качестве дополнительной информации я хотел бы отметить, что в App Engine вы можете выбрать часовой пояс для запланированной работы, используя cron.yaml . Вы можете видеть часовой пояс параметр здесь .

Надеюсь, это прояснит ваши сомнения по этому поводу.

0 голосов
/ 21 января 2020

Не то чтобы это идеальный ответ, но вы должны передать время выполнения и часовой пояс. Преобразуйте это в UT C, прежде чем поместить его в файл Transfer_config. (Или не передавайте его, а просто измените его на UT C.

. Я полностью согласен, что он должен поддерживать TZ, но это не так ... следующий!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...