Копирование таблиц из запроса в Bigquery

Я пытаюсь исправить схему таблицы Bigquery, в которой тип поля неправильный (но не содержит данных). Я хотел бы скопировать данные из старой схемы в новую с помощью UI (select * except(bad_column) from ...).

Проблема в том, что:

  • если я выбираю в таблицу, то Bigquery удаляет требуемые столбцы и, следовательно, отклоняет вставку.
  • Экспорт через json теряет информацию о датах.

Есть ли лучшее решение, чем создание новой таблицы со всеми столбцами, которые могут быть аннулированы / повторены или вручную преобразовать все данные?

1 ответ

  1. Update (2018-06-20): BigQuery теперь поддерживает обязательные поля при выводе запроса в стандартном SQL и делает это с середины 2017 года.

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


    Устаревший:

    У вас есть несколько вариантов:

    1. Измените типы полей на nullable. Стандартный SQL возвращает только поля, допускающие значения NULL, и это является предполагаемым поведением, поэтому в дальнейшем может быть менее полезно пометить поля как необходимые.

    2. Вы можете использовать устаревший SQL, который сохранит необходимые поля. Вы не можете использовать except, но вы можете явно выбрать все другие поля.

    3. Вы можете экспортировать и повторно импортировать с требуемой схемой.

    Вы упомянули, что экспорт через JSON теряет информацию о дате. Можете уточнить? Если вы ссылаетесь на дату раздела, то, к сожалению, я думаю, что любое из вышеупомянутых решений свернет все данные в сегодняшний раздел, если вы явно не вставите в именованный раздел с помощью table$yyyymmddсинтаксиса. (Что будет работать, но может потребовать много операций, если у вас есть данные, разбросанные по многим датам.)