您如何以编程方式创建Google BigQuery架构以创建表?

时间:2018-11-17 14:05:33

标签: python google-bigquery tuples

我们正在尝试在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 :(得分: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)