Ошибка передачи данных BigQuery, если целевая таблица не разбита на ежедневные разделы

У меня есть задание передачи данных Bigquery в целевую таблицу, которая разбита по месяцам. Таблица была создана с помощью следующей команды:

bq mk --table \                                                                              
  --schema schema.json \
  --time_partitioning_field createdAt \
  --time_partitioning_type MONTH \
  myproject:mydataset.MyTable

Задание передачи данных было создано с помощью клиента Python BQDTS, например:

parent = f"projects/myproject/locations/{location}"
baseparams = {
    "file_format": "CSV",
    "ignore_unknown_values": True,
    "field_delimiter": ",",
    "skip_leading_rows": "0",
    "allow_jagged_rows": True,
}
params = Struct()
params_content = baseparams.copy()
params_content[
    "data_path_template"
] = f"gs://mybucket/**/*.csv"
params_content["destination_table_name_template"] = "MyTable"

params.update(params_content)
tc_dict = {
    "display_name": target_display_name,
    "destination_dataset_id": "mydataset",
    "data_source_id": "google_cloud_storage",
    "schedule": "every 24 hours",
    "params": params,
}
tc = bigquery_datatransfer_v1.types.TransferConfig(**tc_dict)
response = client.create_transfer_config(
    request={"parent": parent, "transfer_config": tc}
)

Как видите, в определении задания нет разделения на разделы, оно указано только в таблице базы данных, как и должно быть в соответствии с документация:

Варианты секционирования Облачное хранилище и передачи Amazon S3 могут выполнять запись в секционированные или несекционированные таблицы назначения. В BigQuery есть два типа разделения таблиц:

Секционированные таблицы: таблицы, секционированные по столбцу. Тип столбца должен быть столбцом TIMESTAMP или DATE. Если целевая таблица разделена на столбец, вы определяете столбец разделения при создании целевой таблицы и указываете ее схему.

Это задание успешно выполнялось несколько дней до прошлой недели (последний успешный запуск - 04.11.2020). Этой ночью (10.11.2020) задание не удалось выполнить со следующим сообщением об ошибке:

Несовместимая спецификация разделения таблицы. Целевая таблица существует с интервалом спецификации разделения (тип: МЕСЯЦ, поле: createdAt), но спецификацией разделения цели передачи является интервал (тип: ДЕНЬ, поле: createdAt). Повторите попытку после обновления целевой таблицы или спецификации разделения переноса.

Я пытался воссоздать таблицы и задания с такой спецификацией, и это действительно терпит неудачу каждый раз, когда тип разделения целевой таблицы равен MONTH. Однако это все еще работает, если тип разделения - ДЕНЬ. Что меня больше всего смущает, так это сообщение о спецификации разделения передачи, поскольку такого параметра, похоже, не существует в документации.

Это недавнее критическое изменение API в GCP, которое еще не было задокументировано?


person matthieu.cham    schedule 11.11.2020    source источник
comment
Я бы порекомендовал вам поднять вопрос в системе отслеживания проблем GCP, так как это не кажется нормальным поведением   -  person rsalinas    schedule 13.11.2020
comment
Я сделал, и группа поддержки GCP работает над этим. Я обновлю этот вопрос, когда он будет решен   -  person matthieu.cham    schedule 13.11.2020
comment
Вот ответ службы поддержки Google: Что касается ошибки несовместимого разделения, команда BigQuery Engineering выявила проблему и работает над ее исправлением. По оценкам команды, это исправление может быть готово в конце первой недели декабря.   -  person matthieu.cham    schedule 24.11.2020


Ответы (1)


После нескольких недель расследования и исправления ошибок со стороны команды GCP проблема была решена с 7 декабря 2020 года. Это действительно была ошибка в службе Big Query Transfer.

person matthieu.cham    schedule 07.12.2020