【发布时间】:2020-05-02 09:12:13
【问题描述】:
我有一个类似于以下的 JSON 结构:
{"Name": "Value 1",
"Colors": {
{"Basic colors": {
"Primary colors": {
[{"First Color":"Blue", "Second Color": "Red"}]
}
}
}
}
使用JSON_EXTRACT(Name.Colors, '$.Basic_colors[0].Primary_colors)我可以返回一个结构体的数组,然后从结构体中提取值。但是,“Primary Color”中可以有多个项目,例如:
[{"First Color":"Blue", "Second Color": "Red"},{"First Color":"Green", "Second Color": "Orange"}]
理想的解决方案:
Name | First Color | Second Color
Value 1 | Blue | Red
Value 1 | Green | Orange
我遇到的问题是,在使用 JSON_EXTRACT 时,“Primary Colors”无法识别为数组或结构。它被视为一个字符串(有道理,但也不能是 CAST() - 所以不能是 UNNEST()。
我遇到的第二个问题是,虽然我可以在使用 JSON_extract 时索引到数组中的 [0] 元素,但我无法为每个元素循环生成包含所有子元素的新数据行。
我不能使用 FNSPLIT,因为标准 SQL 不支持它。我相信我想 UNNEST(),但我不知道如何将 STRUCT 转换为被识别为数组中的第一个元素。我的蟒蛇饱和的大脑想要循环: 对于范围内的项目(len(json_array)):
我不能为此使用 Python(在生产环境中),一定有比在 SQL 宏中编写循环更简单的方法吗?
【问题讨论】:
标签: sql google-bigquery