#python #google-cloud-platform #google-bigquery
#python #google-cloud-platform #google-bigquery
Вопрос:
Я создал вложенную таблицу в BigQuery, и я хотел бы вставить значения в эту таблицу.
Я знаю, что обычно мы можем выполнить, как показано ниже:
INSERT INTO `tablename`(webformID,visitID,visitorID,loginID,mycat,country,webformData) VALUES ('1',2,'3','4','5','6',[STRUCT('key2','b'),('k3','c'),('k4','d')])
где данные вебформы представляют собой вложенный столбец.
Однако, как мы можем это сделать на python?
Я могу создать список следующим образом: ["STRUCT('key2','b')",('k3','c')]
но 0-й индекс является проблемой при попытке вставки.
Пожалуйста, совет, спасибо
Комментарии:
1. Привет @SriHari, можешь ли ты указать точное сообщение об ошибке, которое получаешь, и поделиться используемым кодом
Ответ №1:
Вы можете вставлять данные в том же порядке, в каком была создана таблица.
Следуйте примеру:
from google.cloud import bigquery
client = bigquery.Client.from_service_account_json(JSON_FILE_NAME)
dataset_id = 'test' # replace with your dataset ID
table_id = 'tablek1' # replace with your table ID
schema = [
bigquery.table.SchemaField('column1', 'STRING', mode='REQUIRED'),
bigquery.table.SchemaField('parent', 'RECORD', mode='REQUIRED', fields = [
bigquery.table.SchemaField('children1', 'STRING', mode='NULLABLE'),
bigquery.table.SchemaField('children2', 'INTEGER', mode='NULLABLE')])
]
dataset_ref = bigquery.Dataset(client.dataset(dataset_id))
table_ref = dataset_ref.table(table_id)
table = bigquery.Table(table_ref, schema=schema)
table = client.create_table(table) # API request
# IF YOU NEED GET THE TABLE
# table_ref = client.dataset(dataset_id).table(table_id)
# table = client.get_table(table_ref) # API request
rows_to_insert = [
(
"test 1", dict(children1 = 'test', children2 = 29 ),
)
]
errors = client.insert_rows(table, rows_to_insert) # API request
print(errors)
Дайте мне знать, если это поможет!
Комментарии:
1. Привет @hkanjih спасибо за ваш ответ…. Я только что нашел решение. Нет необходимости указывать STRUCT в команде SQL. Мы можем предоставить список кортежей, чтобы его можно было передать в запрос напрямую, что может помочь при вставке.