Я пытаюсь запустить несколько одновременных заданий, чтобы загрузить около 700K записей в одну таблицу BigQuery. Мой код (Java) создает схему из записей задания - и при необходимости обновляет схему BigQuery.Ошибка схемы BigQuery, несмотря на обновление схемы
Workflow выглядит следующим образом:
- одно задание создает таблицу и устанавливает (начальный) схемы.
- Для каждого задания загрузки мы создаем схему из записей задания. Затем мы вытаскиваем существующую схему таблиц из BigQuery, и если она не является надмножеством схемы, связанной с заданием, мы обновляем схему с новой объединенной схемой. Последняя часть (начиная с вытягивания существующей схемы) синхронизируется (с использованием блокировки) - только одно задание выполняет ее за раз. Обновление схемы использует метод UPDATE, и блокировка освобождается только после возврата метода обновления клиента.
Я ожидал, что вы не столкнетесь с ошибками обновления схемы, используя этот рабочий процесс. Я предполагаю, что как только клиент вернется из задания обновления, тогда таблица будет обновлена, а работа, которая находится в процессе, не может пострадать от обновления схемы.
Тем не менее, я по-прежнему получаю ошибки обновления схемы время от времени. Является ли метод обновления атомарным? Как узнать, когда схема была фактически обновлена?
Для задания загрузки, которое не содержит схемы (только данные), что такое схема, связанная с этим заданием (тот, который не сможет выполнить «убедиться, что схема эквивалентна»). Обратите внимание, что в моем случае использования никакая работа (ожидающая того, что создает таблицу) содержит схему. Все обновления схемы выполняются с использованием таблицы UPDATE, все задания загрузки не содержат схемы. – Lior
Схема, с которой начинается работа, копируется и проверяется в конце задания. Это предназначено для предотвращения несовместимого изменения схемы (например, с заданием таблицы усечения) во время выполнения задания загрузки, а затем с фиксацией новых данных и повреждением таблицы. Это может выглядеть так: 1. начать загрузку задания 2. обрезать таблицу и изменить схему 3. загрузка задания завершается старой схемой. –