2013-12-16 5 views
0

Я пытаюсь запустить несколько одновременных заданий, чтобы загрузить около 700K записей в одну таблицу BigQuery. Мой код (Java) создает схему из записей задания - и при необходимости обновляет схему BigQuery.Ошибка схемы BigQuery, несмотря на обновление схемы

Workflow выглядит следующим образом:

  1. одно задание создает таблицу и устанавливает (начальный) схемы.
  2. Для каждого задания загрузки мы создаем схему из записей задания. Затем мы вытаскиваем существующую схему таблиц из BigQuery, и если она не является надмножеством схемы, связанной с заданием, мы обновляем схему с новой объединенной схемой. Последняя часть (начиная с вытягивания существующей схемы) синхронизируется (с использованием блокировки) - только одно задание выполняет ее за раз. Обновление схемы использует метод UPDATE, и блокировка освобождается только после возврата метода обновления клиента.

Я ожидал, что вы не столкнетесь с ошибками обновления схемы, используя этот рабочий процесс. Я предполагаю, что как только клиент вернется из задания обновления, тогда таблица будет обновлена, а работа, которая находится в процессе, не может пострадать от обновления схемы.

Тем не менее, я по-прежнему получаю ошибки обновления схемы время от времени. Является ли метод обновления атомарным? Как узнать, когда схема была фактически обновлена?

ответ

0

Обновления в BigQuery являются атомарными, но они применяются в конце задания. Когда работа завершается, она гарантирует, что схемы эквивалентны. Если во время выполнения задания было обновление схемы, эта проверка завершится с ошибкой.

Возможно, мы должны убедиться, что схемы совместимы, а не эквивалентны. Если вы добавили с совместимой схемой (т. Е. У вас есть подмножество схемы таблицы), которая должна быть успешной, но в настоящее время BigQuery этого не допускает. Я напишу ошибку.

+0

Для задания загрузки, которое не содержит схемы (только данные), что такое схема, связанная с этим заданием (тот, который не сможет выполнить «убедиться, что схема эквивалентна»). Обратите внимание, что в моем случае использования никакая работа (ожидающая того, что создает таблицу) содержит схему. Все обновления схемы выполняются с использованием таблицы UPDATE, все задания загрузки не содержат схемы. – Lior

+1

Схема, с которой начинается работа, копируется и проверяется в конце задания. Это предназначено для предотвращения несовместимого изменения схемы (например, с заданием таблицы усечения) во время выполнения задания загрузки, а затем с фиксацией новых данных и повреждением таблицы. Это может выглядеть так: 1. начать загрузку задания 2. обрезать таблицу и изменить схему 3. загрузка задания завершается старой схемой. –

Смежные вопросы