我们正在尝试在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’)
当元组结构不可变时,我们如何从标题列表中创建表模式?我们如何在对象中创建所有字段?
答案 0 :(得分:0)
我认为您只需要这个:
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)
答案 1 :(得分:0)
新的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)