Я использую Java и SQL для перемещения данных в новую таблицу.Я хочу:
- Извлечь данные из старой таблицы в BigQuery
- Обновить / изменить несколько записей
- Вставить их в другую существующую таблицу в 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 отсутствует в новой схеме