首页 > 解决方案 > 在 BigQuery 中创建具有 RECORD 类型的列

问题描述

我想创建类型为 RECORD 的列

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

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

我想创建fruitRECORD 类型

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

标签: jsongoogle-cloud-platformgoogle-bigquery

解决方案


我相信实现您想要做的最直接的方法是使用您提供的 json 文件的编辑版本(遵守公共文档中显示的规则)并通过 Cloud Console 的自动检测加载您的数据。

如果您想获得以下架构:

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.orangesas STRING(这对于自动检测来说并不简单,因为值是5和之类的数字10)。在这种情况下,您可以使用 DDL 语句显式创建表,但如果仍然适合您的用例场景,我强烈建议考虑将这些字段转换为整数。


推荐阅读