Решение этого заключается в том, чтобы явно указать собственную схему , чтобы сообщить BigQuery, что это значение NUMERIC
. Это делается путем передачи LoadJobConfig
при вызове load_table_from_json(data, table, job_config=my_job_config)
.
. Вот как я определил схему для своего задания загрузки. Обратите внимание, что единственное, что мне нужно было передать, - это определение схемы; остальные значения по умолчанию работали нормально.
my_schema = [
{
"name": "count_purchased",
"type": "NUMERIC"
},{
"name": "_load_datetime",
"type": "DATETIME"
}
]
my_job_config = bigquery.LoadJobConfig(schema=my_schema)
client = bigquery.Client()
client.load_table_from_json(data, table, job_config=my_job_config)
Это необходимо, потому что метод load_table_from_json
попытается создать свой собственный объект LoadJobConfig
, если он явно не передан в [ исходный код ]. Задание загрузки по умолчанию будет иметь autodetect=true
. Кажется, что автообнаружение на стороне сервера BigQuery не знает о существующей схеме. Другими словами: по умолчанию он равен FLOAT
каждый раз, когда в значении есть десятичное число, даже если его целевой столбец равен NUMERIC
и значение совместимо с этим типом данных. То же самое происходит, если вы попытаетесь вставить число без кавычек в столбец STRING
.