Python 如何使用标准SQL定义BigQuery模式?
我想在一个新项目中使用BigQuery标准SQL,但是我找不到任何关于如何定义模式的示例,所有内容都指向遗留SQL。特别是,我想使用Python 如何使用标准SQL定义BigQuery模式?,python,schema,google-bigquery,Python,Schema,Google Bigquery,我想在一个新项目中使用BigQuery标准SQL,但是我找不到任何关于如何定义模式的示例,所有内容都指向遗留SQL。特别是,我想使用ARRAY和STRUCT在BigQuery中创建表的一种方法是使用API调用。没有创建表语法 创建表 BigQuery提供了多种创建新表的方法: 可以使用命令行工具的bq mk命令或BigQuery API tables.insert()方法创建空表 您可以从CSV或JSON数据文件(压缩或未压缩)、Avro文件或云数据存储备份加载表 可以从查询结果创建表 你可以
ARRAY
和STRUCT
在BigQuery中创建表的一种方法是使用API调用。没有创建表语法
创建表
BigQuery提供了多种创建新表的方法:
- 可以使用命令行工具的bq mk命令或BigQuery API tables.insert()方法创建空表
- 您可以从CSV或JSON数据文件(压缩或未压缩)、Avro文件或云数据存储备份加载表
- 可以从查询结果创建表
- 你可以复制一张表
- 您可以在云存储中的文件上定义一个表
- 在定义表模式(请参见Elliotts答案)时,可以使用标准SQL类型,并且文档中也有一个tichet要更新。投票/明星
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))
在BigQuery中创建表的一种方法是使用API调用。没有创建表语法 创建表 BigQuery提供了多种创建新表的方法:
- 可以使用命令行工具的bq mk命令或BigQuery API tables.insert()方法创建空表
- 您可以从CSV或JSON数据文件(压缩或未压缩)、Avro文件或云数据存储备份加载表
- 可以从查询结果创建表
- 你可以复制一张表
- 您可以在云存储中的文件上定义一个表
- 在定义表模式(请参见Elliotts答案)时,可以使用标准SQL类型,并且文档中也有一个tichet要更新。投票/明星
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))
可以使用使用标准SQL类型的架构创建表。以下是一个有效模式的示例:
{
"a": "ARRAY<STRUCT<x INT64, y STRING>>",
"b": "STRUCT<z DATE>",
"c": "INT64"
}
在
bq
客户端之外,tables.insert
API还支持标准SQL类型名称。您可以使用使用标准SQL类型的架构创建表。以下是一个有效模式的示例:
{
"a": "ARRAY<STRUCT<x INT64, y STRING>>",
"b": "STRUCT<z DATE>",
"c": "INT64"
}
在
bq
客户机之外,tables.insert
API还支持标准SQL类型名称。感谢提供更多指针,但本例不包括STRUCT
或ARRAY
类型的使用。我已经检查过了,文档显然是关于遗留SQL的。您有点困惑。因此,SQL只用于查询,不用于定义表。当您创建表时,您需要使用其中列出的类型,它既不是传统的也不是标准的SQL,而是字段类型的API定义。在定义表时,您可以继续使用JSON中列出的类型,在编写标准SQL查询时,您可以将记录或重复定义的字段类型用作结构或数组。好的,谢谢!这是有道理的,但是我认为应该更具体地记录它。作为一个新用户,我已经知道了两种不同的语言版本,这就足够了。你可以在每个google页面上提交反馈,使用thoseThanks获得更多的指针,但这个例子不包括STRUCT
或ARRAY
类型的使用。我已经检查过了,文档显然是关于遗留SQL的。您有点困惑。因此,SQL只用于查询,不用于定义表。当您创建表时,您需要使用其中列出的类型,它既不是传统的也不是标准的SQL,而是字段类型的API定义。在定义表时,您可以继续使用JSON中列出的类型,在编写标准SQL查询时,您可以将记录或重复定义的字段类型用作结构或数组。好的,谢谢!这是有道理的,但是我认为应该更具体地记录它。作为一个新用户,我已经知道了两种不同的语言版本,这就足够了。你可以在谷歌的每一个页面上提交反馈,使用这些,这是一个未记录的功能吗?它根本无法通过图书馆中实现的任何JSON验证;这就是你所指的吗?除此之外,这些值只是strings.yep,但这是否有文档记录?似乎没有。我存档了。啊,有趣!顶级键(a
,b
&c
)在这里是什么意思?这是一个未记录的功能吗?它根本无法通过图书馆中实现的任何JSON验证;这就是你所指的吗?除此之外,这些值只是strings.yep,但这是否有文档记录?似乎没有。我存档了。啊,有趣!顶级键(a
,b
&c
)在这里是什么意思?