Я пытаюсь создать некоторый код, который вставляет данные в Google Big Query, но не может быть уверен, что именно содержит содержимое полей String. Очевидно, у Big Query есть проблемы со строками типа «1.1» или «1»
Рассмотрим таблицу Big Query следующей минимальной схемы (только одно строковое поле с именем «stringer»:
[
{
"description": "string_debug",
"mode": "NULLABLE",
"name": "stringer",
"type": "STRING"
}
]
from google.cloud import bigquery
client = bigquery.Client()
dataset_id = 'bqsoba'
table_id = 'stringer'
dataset_ref = client.dataset(dataset_id)
table_ref = dataset_ref.table(table_id)
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
job_config.autodetect = False
job = client.load_table_from_json([{'stringer':'1'}], table_ref, job_config=job_config)
job.result() # Waits for table load to complete.
print("Loaded {} rows into {}:{}.".format(job.output_rows, dataset_id, table_id))
Результат в исключении:
---------------------------------------------------------------------------
BadRequest Traceback (most recent call last)
<ipython-input-46-3d68dddf9573> in <module>
13 job = client.load_table_from_json(parsed[11:20], table_ref, job_config=job_config)
14
---> 15 job.result() # Waits for table load to complete.
16
17 print("Loaded {} rows into {}:{}.".format(job.output_rows, dataset_id, table_id))
~/apps/conda2019/lib/python3.7/site-packages/google/cloud/bigquery/job.py in result(self, timeout, retry)
777 self._begin(retry=retry)
778 # TODO: modify PollingFuture so it can pass a retry argument to done().
--> 779 return super(_AsyncJob, self).result(timeout=timeout)
780
781 def cancelled(self):
~/apps/conda2019/lib/python3.7/site-packages/google/api_core/future/polling.py in result(self, timeout)
125 # pylint: disable=raising-bad-type
126 # Pylint doesn't recognize that this is valid in this case.
--> 127 raise self._exception
128
129 return self._result
BadRequest: 400 Provided Schema does not match Table bi-project-231313:bqsoba.sa_hardware_collector. Field sysconfig.call_home_token has changed type from STRING to INTEGER
Можно ли попросить большой запрос "insert" трактовать '1' как строковое значение?