Как программно создать схему Google BigQuery для создания таблицы? - PullRequest
0 голосов
/ 17 ноября 2018

Мы пытаемся создать таблицу в BigQuery.У нас есть код, работающий на примере Google, который создает схему, но код, задающий схему, находится в кортеже.

Код выглядит следующим образом:

table.schema = (
    bigquery.SchemaField('Name', 'STRING'),
    bigquery.SchemaField('Age', 'INTEGER'),
    bigquery.SchemaField('Weight', 'FLOAT'),
)

Проблема, с которой мы сталкиваемся, состоит в том, что у нас есть поля заголовка, которые нам нужны в списке (то есть [«Имя», «Возраст», «Вес»).”]) - но, как мы понимаем, кортежи неизменны.

В результате мы не можем сделать подобный код, потому что он выдает ошибку неизменяемого объекта:

 for field in field_list:
   table.schema.append(field, ‘STRING’)

Как создать схему таблицы из списка заголовков при кортежеструктура неизменна?Как мы создаем все поля в объекте?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Новый Python BigQuery API изменен с кортежа на список, что означает, что теперь вы можете программно делать то, что вам предлагается, с помощью кода, подобного следующему:

from google.cloud import bigquery
from google.cloud.bigquery.client import Client
service_account_file_path = "/auth/key.json" # your service account auth file file
client = bigquery.Client.from_service_account_json(service_account_file_path)

schema = []
for field_name in field_name_list:
    schema.append(bigquery.SchemaField(field_name, "STRING", mode="REQUIRED"))

table_id = "your_project_id.your_dataset_name.your_table_name"
table = bigquery.Table(table_id, schema=schema)
table = client.create_table(table)  
0 голосов
/ 19 ноября 2018

Я думаю, вам просто нужно это:

from google.cloud import bigquery
headers = [
   ('Name', 'STRING'), 
   ('Age', 'INTEGER'), 
   ('Weight', 'STRING'),
   ('any_thing_else', 'STRING'), ...
]
schema = map(lambda n: bigquery.SchemaField(*n), headers)
table.schema = tuple(schema)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...