我将以下 JSON 对象存储在 Hive 表中:
{
"main_id": "qwert",
"features": [
{
"scope": "scope1",
"name": "foo",
"value": "ab12345",
"age": 50,
"somelist": ["abcde","fghij"]
},
{
"scope": "scope2",
"name": "bar",
"value": "cd67890"
},
{
"scope": "scope3",
"name": "baz",
"value": [
"A",
"B",
"C"
]
}
]
}
“features”是一个不同长度的数组,即所有对象都是可选的。这些对象具有任意元素,但它们都包含“范围”、“名称”和“值”。
这是我创建的 Hive 表:
CREATE TABLE tbl(
main_id STRING,features array<struct<scope:STRING,name:STRING,value:array<STRING>,age:INT,somelist:array<STRING>>>
)
我需要一个返回 main_id 和名为“baz”的结构值的 Hive 查询,即
main_id baz_value
qwert ["A","B","C"]
我的问题是 Hive UDF“获取json对象 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-get_json_object" 仅支持 JSONPath 的有限版本。它不支持类似的路径get_json_object(features, '$.features[?(@.name='baz')]')
.
如何用Hive查询想要的结果?使用另一个 Hive 表结构可能更容易吗?