Как привести тип данных при загрузке файла MongoDB json в большой запрос Google? - PullRequest
0 голосов
/ 02 сентября 2018

Проблема с загрузкой данных с использованием bq заключается в том, что у меня есть строковые и целочисленные значения, например, для поля с именем cost. Это его значение 0 или строковое значение "1.0" и так одно. Таким образом, тип данных отличается для каждой записи.

То, что я сейчас использую для загрузки данных:

bq load --autodetect --ignore_unknown_values=true --max_bad_records=100 --project_id=my-proj-100605 --source_format=NEWLINE_DELIMITED_JSON my_dataset.my_table ./mongo_export.json

И это дает ошибку ниже:

BigQuery error in load operation: Error processing job 'my-proj-100605:bqjob_r2cfcfa271ed999bb_0059a0fba75_1': Invalid
schema update. Field to has changed type from INTEGER to STRING

Есть ли решение при загрузке данных из файла json для приведения поля?

1 Ответ

0 голосов
/ 03 сентября 2018

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

Я провел тест с использованием пользовательского интерфейса и интерфейса командной строки:

{"col1": "b", "col2": 0}
{"col1": "c", "col2": 0}
{"col1": "d", "col2": "1.0"}
{"col1": "e", "col2": "1.0"}
{"col1": "f", "col2": "1.0"}
{"col1": "g", "col2": 0}
{"col1": "h", "col2": 0}
{"col1": "i", "col2": 0}

И первый столбец был импортирован как строка, а второй как float. Я использовал точно такую ​​же команду:

bq load --autodetect --ignore_unknown_values=true --max_bad_records=100 --project_id=MYPROJECTid --source_format=NEWLINE_DELIMITED_JSON dataset.tablename ./jsontoimp.json

Так что я не смог воспроизвести вашу проблему, для меня все нормально. В любом случае, у вас есть два варианта, если он не распознается как следует:

1.- Просто укажите схему с этим столбцом в виде строки или закодируйте некоторый скрипт, чтобы заменить 0 на «0». Затем загрузите эти данные. После того, как все загружено, вы можете обновить тип столбца. Длинное объяснение здесь . Это не выглядит самым дешевым решением.

2.- Что бы я сделал, код некоторого сценария, возможно, с регулярным выражением, чтобы заменить «1.0» на 1.0, а затем, после этого, загрузить обработанный файл.

Подробнее о обновлении данных и отливок в BigQuery .

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