Я только начинаю работать с Python BigQuery API (https://github.com/GoogleCloudPlatform/google-cloud-python/tree/master/bigquery) после краткого опробования (https://github.com/pydata/pandas-gbq) и понимания того, что pandas-gbq не поддерживает тип RECORD, то есть никаких вложенных полей.
Теперь я пытаюсь загрузить вложенные данные в BigQuery. Мне удалось создать таблицу с соответствующей схемой, однако я борюсь с загрузкой данных json.
from google.cloud import bigquery
from google.cloud.bigquery import Dataset
from google.cloud.bigquery import LoadJobConfig
from google.cloud.bigquery import SchemaField
SCHEMA = [
SchemaField('full_name', 'STRING', mode='required'),
SchemaField('age', 'INTEGER', mode='required'),
SchemaField('address', 'RECORD', mode='REPEATED', fields=(
SchemaField('test', 'STRING', mode='NULLABLE'),
SchemaField('second','STRING', mode='NULLABLE')
))
]
table_ref = client.dataset('TestApartments').table('Test2')
table = bigquery.Table(table_ref, schema=SCHEMA)
table = client.create_table(table)
При попыткечтобы загрузить очень простой JSON в bigquery, я получаю довольно неоднозначную ошибку
400 Ошибка при чтении данных, сообщение об ошибке: в таблице JSON возникло слишком много ошибок, отказывающих. Строки: 1; ошибки: 1.Пожалуйста, посмотрите в поток ошибок для получения более подробной информации.
Помимо того, что мне немного грустно, что это разочаровывает меня :), очевидно, что описание ошибки не очень помогает ... Пожалуйста, найдитениже показано, как я пытаюсь загрузить JSON и примеры.
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
with open('testjson.json', 'rb') as source_file:
job = client.load_table_from_file(
source_file,
table_ref,
location='US', # Must match the destination dataset location.
job_config=job_config) # API request
job.result() # Waits for table load to complete.
print('Loaded {} rows into {}:{}.'.format(
job.output_rows, dataset_id, table_id))
Это мой объект JSON
"[{'full_name': 'test', 'age':2, 'адрес': [{ 'тест': 'Привет',' second ':' hi2 '}]}] "
Пример JSON был бы замечательным, так как это единственный способ загрузить вложенные данные, если я не ошибаюсь.