Задание загрузки BigQuery, обрабатывающее Null как строку вместо Float (json)

# #google-bigquery

Вопрос:

Я загружаю ежедневные обновления данных (файлы json) в таблицу bigquery, и недавнее обновление завершилось ошибкой с этой ошибкой > >Предоставленная схема не соответствует проекту таблицы:набор данных.Тип поля splitAmount изменился с ПЛАВАЮЩЕГО на СТРОКОВЫЙ.

2 файла для репликации этой ситуации с помощью пользовательского интерфейса BQ:

Схема таблицы была автоматически создана BQ, когда я загрузил первый файл json вручную, используя пользовательский интерфейс BQ, пример ниже — >

 {"objectType": "listing", "listingid": "1234",  "splitAmount": null}
{"objectType": "listing", "listingid": "2345",  "splitAmount": 2.300}
{"objectType": "listing", "listingid": "3456",  "splitAmount": null}
 

во второй строке файла поле splitAmount по умолчанию имеет тип с плавающей точкой во время создания таблицы в BQ.

второй файл-это последующее обновление — >

 {"objectType": "listing", "listingid": "1234",  "splitAmount": null}
{"objectType": "listing", "listingid": "2345",  "splitAmount": null}
{"objectType": "listing", "listingid": "3456",  "splitAmount": null}
 

splitAmount равен нулю для всех записей и генерирует сообщение об ошибке выше при загрузке.

то же самое происходит, когда я использую BQ Python API.

Как это исправить в приложении BQ python? (Я хочу, чтобы конвейер работал на GCP, а не загружал данные вручную)

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

 dataset_ref = client.dataset(dataset_id) 
table_ref = dataset_ref.table(list_table_id) 
table = client.get_table(table_ref) 

job_config = bigquery.LoadJobConfig() 
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON 
job_config.autodetect = True 
job_config.write_disposition = bigquery.job.WriteDisposition.WRITE_APPEND 
job_config.schema = table.schema
 

Исключение >>> Ошибка 400 при чтении данных, сообщение об ошибке: в таблице JSON возникло слишком много ошибок, отказываюсь. Строк: 13; ошибок: 1

Комментарии:

1. Взгляните сюда. cloud.google.com/bigquery/docs/schemas#python

2. еще лучший подход-взять схему таблицы (созданную с 1-й загрузкой json) и передать ее в качестве параметра в объект задания ` » dataset_ref = client.dataset(dataset_id) table_ref = dataset_ref.таблица(list_table_id) таблица = client.get_table(table_ref) job_config = bigquery. LoadJobConfig() job_config.source_format = большой запрос. Исходный формат. NEWLINE_DELIMITED_JSON job_config.автоматическое определение = True job_config.write_disposition = bigquery.задание.WriteDisposition. WRITE_APPEND job_config.schema = таблица.схема «

3. это тоже не сработало, получив исключение >>> Ошибка 400 при чтении данных, сообщение об ошибке: таблица JSON обнаружила слишком много ошибок, отказалась. Строк: 13; ошибок: 1.

4. похоже, вы неправильно определили схему.

5. что ты имеешь в виду, АлленДег? схема, определенная bigquery автоматически при загрузке json. пожалуйста, прочтите описание пост — проблемы при последующей загрузке, когда ВСЕ НУЛЕВЫЕ значения обрабатываются как СТРОКИ.