Google bigquery BigQuery模式的定义/文档?

Google bigquery BigQuery模式的定义/文档?,google-bigquery,Google Bigquery,有人知道BigQuery模式定义的文档在哪里吗?换句话说,上传文件时提供的JSON模式- 我已经在谷歌上搜索了很久,但是我找不到任何关于模式的文档 我能得到的最接近的是。但是,如果这不合适,您需要提供预定义的JSON模式,是否有任何文档说明哪些字段是必需的,哪些值是允许的?要定义模式,基本上只需要定义3个字段:名称、类型和模式 表中的每个字段都必须定义这3个键。例如,如果您有如下表格: user_id source 1 search 2 email 然

有人知道BigQuery模式定义的文档在哪里吗?换句话说,上传文件时提供的JSON模式-

我已经在谷歌上搜索了很久,但是我找不到任何关于模式的文档


我能得到的最接近的是。但是,如果这不合适,您需要提供预定义的JSON模式,是否有任何文档说明哪些字段是必需的,哪些值是允许的?

要定义模式,基本上只需要定义3个字段:名称、类型和模式

表中的每个字段都必须定义这3个键。例如,如果您有如下表格:

user_id    source
1          search
2          email
然后可以将模式定义为:

[{"name": "user_id", "type": "INT64", "mode": "REQUIRED"},
 {"name": "source", "type": "STRING", "mode": "NULLABLE"}]
{"name": "citiesLived",
 "type": "RECORD",
 "mode": "REPEATED",
 "fields": [{"name": "place", "type": "STRING", "mode": "NULLABLE"},
            {"name": "yearLived", "type": "INT64", "mode": "REPEATED"}]}
密钥名只是描述字段名,例如用户id

键类型是数据类型,如字符串、整数、浮点等。目前,BigQuery支持:

一串 INT64 浮动64 布尔 字节编码字节为您提供了字符串表示形式。 日期 日期时间 时间 时间戳 记录 现在,如果打开文档,您将看到数据类型数组也是一个重复字段。稍后我将进一步讨论它们

第三个键mode可以是以下键之一:

NULLABLE允许值为NULL REQUIRED不允许值为NULL 重复这是数组字段,这意味着该字段基本上是一个值列表。 因此,让我们以前面的示例为例,添加一个重复字段,即数组字段,以说明:

user_id    source    wishlist
1          search    ["sku 0", "sku 1"]
2          email     []
3          direct    ["sku 0", "sku 3"]
模式可以定义如下:

[{"name": "user_id", "type": "INT64", "mode": "REQUIRED"},
 {"name": "source", "type": "STRING", "mode": "NULLABLE"},
 {"name": "wishlist", "type": "STRING", "mode": "REPEATED"}]
这里有一个数组字段,定义为字符串值的重复

我们仍然剩下一种类型的字段,那就是记录字段结构。这些基本相同,只是我们还为它们定义了第四个关键字段。由于记录包括其他字段,您还必须描述它们的定义;举个例子,这更容易理解:

user_id    source    wishlist            location.country    location.city
1          search    ["sku 0", "sku 1"]  USA                 NY
2          email     []                  USA                 LA
3          direct    ["sku 0", "sku 3"]  BR                  SP
在这里,位置是一个记录结构,里面有两个键:国家和城市。这就是为它们定义模式的方式:

[{"name": "user_id", "type": "INT64", "mode": "REQUIRED"},
 {"name": "source", "type": "STRING", "mode": "NULLABLE"},
 {"name": "wishlist", "type": "STRING", "mode": "REPEATED"},
 {"name": "location", "type": "RECORD", "mode": "NULLABLE", "fields": [{"name": "country", "type": "STRING", "mode": "NULLABLE"}, {"name": "city", "type": "STRING", "mode": "NULLABLE"}]}]
您想有一个重复的记录字段吗?当然,为什么不呢!例如,如果您希望客户端在网站中的每次点击都有一个重复字段,您可以这样定义模式:

[{"name": "user_id", "type": "INT64", "mode": "REQUIRED"},
 {"name": "source", "type": "STRING", "mode": "NULLABLE"},
 {"name": "wishlist", "type": "STRING", "mode": "REPEATED"},
 {"name": "location", "type": "RECORD", "mode": "NULLABLE", "fields": [{"name": "country", "type": "STRING", "mode": "NULLABLE"}, {"name": "city", "type": "STRING", "mode": "NULLABLE"}]},
 {"name": "hit", "type": "RECORD", "mode": "REPEATED", "fields": [{"name": "hitNumber", "type": "INT64", "mode": "NULLABLE"}, {"name": "hitPage", "type": "STRING", "mode": "NULLABLE"}]}]
考虑到所有这些,我们最终可以回答您的问题,dataPersons.json模式将如何定义

这是一行personsData的示例:

{"kind": "person",
 "fullName": "John Doe",
 "age": 22,
 "gender": "Male",
 "phoneNumber": {"areaCode": "206", "number": "1234567"},
 "children": [{"name": "Jane", "gender": "Female", "age": "6"},
              {"name": "John", "gender": "Male", "age": "15"}],
 "citiesLived": [{"place": "Seattle", "yearsLived": ["1995"]},
                 {"place": "Stockholm", "yearsLived": ["2005"]}]}
首先,我们有善良的人。这很简单,其模式为:

{"name": "kind", "type": "STRING", "mode": "REQUIRED" or "NULLABLE"}
phoneNumber是一个记录结构字段,包含两个内部字段:区号和号码。好吧,我们已经看到了如何定义它们

{"name": "phoneNumber",
 "type": "RECORD",
 "mode": "NULLABLE OR REQUIRED",
 "fields": [{"name": "areaCode", "type": "INT64", "mode": "NULLABLE"},
            {"name": "number", "type": "INT64", "mode": "NULLABLE"}]}
现在,children和citieslive具有相同的定义,即它们都是记录结构的重复数组字段。就像我们上一个例子一样,这个例子也应该简单明了;CitiesLive将被定义为:

[{"name": "user_id", "type": "INT64", "mode": "REQUIRED"},
 {"name": "source", "type": "STRING", "mode": "NULLABLE"}]
{"name": "citiesLived",
 "type": "RECORD",
 "mode": "REPEATED",
 "fields": [{"name": "place", "type": "STRING", "mode": "NULLABLE"},
            {"name": "yearLived", "type": "INT64", "mode": "REPEATED"}]}
就在这里。这基本上就是架构定义的全部内容。例如,如果您使用的是Python,则想法是相同的。导入类SchemaField以定义每个字段,如下所示:

from google.cloud.bigquery import SchemaField
field_kind = SchemaField(name="kind", type="STRING", mode="NULLABLE")
其他客户也会遵循同样的想法

总之,您必须为表中的每个字段定义3个键:名称、类型和模式。如果字段类型为RECORD,则还必须定义字段,对于每个内部字段,如果内部字段类型为RECORD,则再次定义3个键4


希望这能更清楚地说明如何定义模式。如果您对这个主题还有任何问题,请告诉我,我会更新答案。

要定义架构,基本上只需定义3个字段:名称、类型和模式

表中的每个字段都必须定义这3个键。例如,如果您有如下表格:

user_id    source
1          search
2          email
然后可以将模式定义为:

[{"name": "user_id", "type": "INT64", "mode": "REQUIRED"},
 {"name": "source", "type": "STRING", "mode": "NULLABLE"}]
{"name": "citiesLived",
 "type": "RECORD",
 "mode": "REPEATED",
 "fields": [{"name": "place", "type": "STRING", "mode": "NULLABLE"},
            {"name": "yearLived", "type": "INT64", "mode": "REPEATED"}]}
密钥名只是描述字段名,例如用户id

键类型是数据类型,如字符串、整数、浮点等。目前,BigQuery支持:

一串 INT64 浮动64 布尔 字节编码字节为您提供了字符串表示形式。 日期 日期时间 时间 时间戳 记录 现在,如果打开文档,您将看到数据类型数组也是一个重复字段。稍后我将进一步讨论它们

第三个键mode可以是以下键之一:

NULLABLE允许值为NULL REQUIRED不允许值为NULL 重复这是数组字段,这意味着该字段基本上是一个值列表。 因此,让我们以前面的示例为例,添加一个重复字段,即数组字段,以说明:

user_id    source    wishlist
1          search    ["sku 0", "sku 1"]
2          email     []
3          direct    ["sku 0", "sku 3"]
模式可以定义如下:

[{"name": "user_id", "type": "INT64", "mode": "REQUIRED"},
 {"name": "source", "type": "STRING", "mode": "NULLABLE"},
 {"name": "wishlist", "type": "STRING", "mode": "REPEATED"}]
这里有一个数组字段,定义为字符串值的重复

我们仍然剩下一种类型的字段,那就是记录字段结构。这些基本相同,只是我们还为它们定义了第四个关键字段。由于记录包括其他字段,您还必须描述它们的定义;这更容易理解 h例如:

user_id    source    wishlist            location.country    location.city
1          search    ["sku 0", "sku 1"]  USA                 NY
2          email     []                  USA                 LA
3          direct    ["sku 0", "sku 3"]  BR                  SP
在这里,位置是一个记录结构,里面有两个键:国家和城市。这就是为它们定义模式的方式:

[{"name": "user_id", "type": "INT64", "mode": "REQUIRED"},
 {"name": "source", "type": "STRING", "mode": "NULLABLE"},
 {"name": "wishlist", "type": "STRING", "mode": "REPEATED"},
 {"name": "location", "type": "RECORD", "mode": "NULLABLE", "fields": [{"name": "country", "type": "STRING", "mode": "NULLABLE"}, {"name": "city", "type": "STRING", "mode": "NULLABLE"}]}]
您想有一个重复的记录字段吗?当然,为什么不呢!例如,如果您希望客户端在网站中的每次点击都有一个重复字段,您可以这样定义模式:

[{"name": "user_id", "type": "INT64", "mode": "REQUIRED"},
 {"name": "source", "type": "STRING", "mode": "NULLABLE"},
 {"name": "wishlist", "type": "STRING", "mode": "REPEATED"},
 {"name": "location", "type": "RECORD", "mode": "NULLABLE", "fields": [{"name": "country", "type": "STRING", "mode": "NULLABLE"}, {"name": "city", "type": "STRING", "mode": "NULLABLE"}]},
 {"name": "hit", "type": "RECORD", "mode": "REPEATED", "fields": [{"name": "hitNumber", "type": "INT64", "mode": "NULLABLE"}, {"name": "hitPage", "type": "STRING", "mode": "NULLABLE"}]}]
考虑到所有这些,我们最终可以回答您的问题,dataPersons.json模式将如何定义

这是一行personsData的示例:

{"kind": "person",
 "fullName": "John Doe",
 "age": 22,
 "gender": "Male",
 "phoneNumber": {"areaCode": "206", "number": "1234567"},
 "children": [{"name": "Jane", "gender": "Female", "age": "6"},
              {"name": "John", "gender": "Male", "age": "15"}],
 "citiesLived": [{"place": "Seattle", "yearsLived": ["1995"]},
                 {"place": "Stockholm", "yearsLived": ["2005"]}]}
首先,我们有善良的人。这很简单,其模式为:

{"name": "kind", "type": "STRING", "mode": "REQUIRED" or "NULLABLE"}
phoneNumber是一个记录结构字段,包含两个内部字段:区号和号码。好吧,我们已经看到了如何定义它们

{"name": "phoneNumber",
 "type": "RECORD",
 "mode": "NULLABLE OR REQUIRED",
 "fields": [{"name": "areaCode", "type": "INT64", "mode": "NULLABLE"},
            {"name": "number", "type": "INT64", "mode": "NULLABLE"}]}
现在,children和citieslive具有相同的定义,即它们都是记录结构的重复数组字段。就像我们上一个例子一样,这个例子也应该简单明了;CitiesLive将被定义为:

[{"name": "user_id", "type": "INT64", "mode": "REQUIRED"},
 {"name": "source", "type": "STRING", "mode": "NULLABLE"}]
{"name": "citiesLived",
 "type": "RECORD",
 "mode": "REPEATED",
 "fields": [{"name": "place", "type": "STRING", "mode": "NULLABLE"},
            {"name": "yearLived", "type": "INT64", "mode": "REPEATED"}]}
就在这里。这基本上就是架构定义的全部内容。例如,如果您使用的是Python,则想法是相同的。导入类SchemaField以定义每个字段,如下所示:

from google.cloud.bigquery import SchemaField
field_kind = SchemaField(name="kind", type="STRING", mode="NULLABLE")
其他客户也会遵循同样的想法

总之,您必须为表中的每个字段定义3个键:名称、类型和模式。如果字段类型为RECORD,则还必须定义字段,对于每个内部字段,如果内部字段类型为RECORD,则再次定义3个键4


希望这能更清楚地说明如何定义模式。如果您对此主题还有任何疑问,请告诉我,我将更新答案。

新行分隔的JSON是基础,然后是所有正常字段/类型。谢谢你的反馈。你介意为它创建一个功能请求吗。同时,您可以参考API文档。例如,此链接定义表的架构:。不是关于JSON的直接定义,但你可以找到它。@HuaZhang谢谢,我已经创建了一个问题。新行分隔的JSON是基础,然后是所有普通字段/类型。谢谢你的反馈。你介意为它创建一个功能请求吗。同时,您可以参考API文档。例如,此链接定义表的架构:。不是JSON的直接定义,但你可以找到它。@HuaZhang谢谢,我提出了一个问题。回答得好!需要补充的一点是,默认模式是可为null的,因此当您感到懒惰时,可以跳过可为null字段的模式。在python中定义记录类型时,字段列表必须是可为iterable的-请注意本例中嵌套字段后的尾随逗号:bigquery.SchemaField'hyperparameters',RECORD',fields=bigquery.SchemaField'payload','STRING',回答得很好!需要补充的一点是,默认模式是可为null的,因此当您感到懒惰时,可以跳过可为null字段的模式。在python中定义记录类型时,字段列表必须是可为iterable的-请注意本例中嵌套字段后的尾随逗号:bigquery.SchemaField'hyperparameters',RECORD',fields=bigquery.SchemaField'payload'、'STRING',