Установить нулевое значение как значение по умолчанию для отсутствующих полей таблицы - PullRequest
0 голосов
/ 28 января 2019

Я использую Java и SQL для перемещения данных в новую таблицу.Я хочу:

  1. Извлечь данные из старой таблицы в BigQuery
  2. Обновить / изменить несколько записей
  3. Вставить их в другую существующую таблицу в BigQuery

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

В настоящее время я использую SQL QueryJobConfiguration для извлечения, обновления и отправки данных обратно в BQ:

QueryJobConfiguration queryConfig = 
           QueryJobConfiguration.newBuilder(
              "SELECT  PARSE_TIMESTAMP('%b %d %T %Y', CONCAT(time, ' 2018')) MyTimestamp, * EXCEPT(time)"
               + "FROM `myProject:MyDataset.MyTable` ")
              .setUseLegacySql(false)
              .setWriteDisposition(WriteDisposition.WRITE_APPEND)    
              .setDestinationTable(TableId.of(MyOtherDataset, MyOtherTable))
              .build();

Когда я пытаюсь выполнить это, BigQuery выдает исключение, утверждая, что в данных отсутствует столбец:

Исключение в потоке "main" com.google.cloud.bigquery.BigQueryException: недопустимое обновление схемы.Поле OtherField отсутствует в новой схеме

1 Ответ

0 голосов
/ 29 января 2019

После нескольких тестов я обнаружил, что BQ не давал мне толкать, потому что у меня было несколько полей, для которых было задано значение «НЕОБХОДИМО» вместо «НУЛЕВОЙ».Я полностью забыл о них.К счастью, у BigQuery есть экспериментальный метод: setSchemaUpdateOptions.Вы можете реализовать его следующим образом:

List<SchemaUpdateOption> SchemaUpdate = Arrays.asList(JobInfo.SchemaUpdateOption.ALLOW_FIELD_RELAXATION);
.setSchemaUpdateOptions(SchemaUpdate)

ALLOW_FIELD_RELAXATION по существу позволяет временно заменить режим REQUIRED для любых полей значением NULLABLE.

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