【问题标题】:Create column with RECORD type in BigQuery在 BigQuery 中创建具有 RECORD 类型的列
【发布时间】:2021-07-08 17:51:05
【问题描述】:

我想创建类型为 RECORD 的列

我有一个结构或数组(STRUCT)

 json    
 -------- 
 "fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}] 
 "fruit":{"apples":"1","oranges":"15"}   
 "fruit":{"apples":"5","oranges":"1"}  

我想创建记录类型的fruit

fruit                RECORD NULLABLE
fruit.apples         STRING NULLABLE
fruit.oranges        STRING NULLABLE 

【问题讨论】:

    标签: json google-cloud-platform google-bigquery


    【解决方案1】:

    使用 bigquery SQL,您可以使用文档 https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_table_statement 中描述的以下 DDL

    CREATE TABLE mydataset.newtable
    (
      fruit STRUCT<
        apples STRING,
        oranges STRING
      >
    )
    

    您还可以使用 BQ 自动检测功能从 JSON 文件 https://cloud.google.com/bigquery/docs/schema-detect#loading_data_using_schema_auto-detection 创建表

    【讨论】:

      【解决方案2】:

      我相信实现您想要做的最直接的方法是使用您提供的 json 文件的编辑版本(遵守公共文档中显示的rules)和来自 Cloud Console 的loading your data with auto-detection .

      如果您想获得以下架构:

      fruit                RECORD NULLABLE
      fruit.apples         INTEGER NULLABLE
      fruit.oranges        INTEGER NULLABLE
      

      您应该使用以下 json 文件:

      {"fruit":{"apples":"5","oranges":"10"}}
      {"fruit":{"apples":"5","oranges":"4"}}
      {"fruit":{"apples":"1","oranges":"15"}}
      {"fruit":{"apples":"5","oranges":"1"}}
      

      另一方面,如果您希望获得重复的属性(因为您提供的示例的同一行中有两个水果对象),则需要使用以下文件:

      {"fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}]}
      {"fruit":{"apples":"1","oranges":"15"}}
      {"fruit":{"apples":"5","oranges":"1"}}
      

      这将产生以下架构:

      fruit           RECORD  REPEATED
      fruit.apples    INTEGER NULLABLE    
      fruit.oranges   INTEGER NULLABLE
      

      最后,我注意到您已在问题中指定您希望将属性 fruit.applesfruit.oranges 获取为 STRING(这对于自动检测来说并不简单,因为值是数字例如510)。在这种情况下,您可以使用 DDL 语句显式创建表,但如果仍然适合您的用例场景,我强烈建议考虑将这些字段转换为整数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多