Python 如何使用标准SQL定义BigQuery模式?

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文件或云数据存储备份加载表 可以从查询结果创建表 你可以

我想在一个新项目中使用BigQuery标准SQL,但是我找不到任何关于如何定义模式的示例,所有内容都指向遗留SQL。特别是,我想使用
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
)在这里是什么意思?