【发布时间】:2017-03-13 22:31:10
【问题描述】:
我想在一个新项目中使用 BigQuery 标准 SQL,但是我找不到任何关于如何定义架构的示例,所有内容都指向 Legacy SQL。特别是,我想使用ARRAY 和STRUCT。
【问题讨论】:
标签: python schema google-bigquery
我想在一个新项目中使用 BigQuery 标准 SQL,但是我找不到任何关于如何定义架构的示例,所有内容都指向 Legacy SQL。特别是,我想使用ARRAY 和STRUCT。
【问题讨论】:
标签: python schema google-bigquery
在 BigQuery 中创建表的一种方法是使用 API 调用。没有 CREATE 表语法。
创建表格
BigQuery 提供了多种创建新表的方法as detailed here:
很多Python samples are on GitHub简单如下:
def create_table(dataset_name, table_name, project=None):
"""Creates a simple table in the given dataset.
If no project is specified, then the currently active project is used.
"""
bigquery_client = bigquery.Client(project=project)
dataset = bigquery_client.dataset(dataset_name)
if not dataset.exists():
print('Dataset {} does not exist.'.format(dataset_name))
return
table = dataset.table(table_name)
# Set the table schema
table.schema = (
bigquery.SchemaField('Name', 'STRING'),
bigquery.SchemaField('Age', 'INTEGER'),
bigquery.SchemaField('Weight', 'FLOAT'),
)
table.create()
print('Created table {} in dataset {}.'.format(table_name, dataset_name))
【讨论】:
STRUCT 或 ARRAY 类型。我检查了the implementation of bigquery.SchemaField,文档显然是关于旧版 SQL 的。
您可以使用使用标准 SQL 类型的架构创建表。下面是一个有效模式的示例:
{
"a": "ARRAY<STRUCT<x INT64, y STRING>>",
"b": "STRUCT<z DATE>",
"c": "INT64"
}
如果你把它放在一个文件中,比如sample_schema.json,你可以使用bq mk从它创建一个表:
bq mk --schema sample_schema.json -t your_dataset.YourTableName
在bq 客户端之外,tables.insert API 还支持标准 SQL 类型名称。
【讨论】:
INT64;这就是你所指的吗?除此之外,这些值只是字符串。
a、b 和c)在这里是什么意思?