我在S3中保存了类似的JSON数据.我用ATHENA来写select语句.
{
"sample_data":{
"people":[
{
"firstName":"Emily",
"address":{
"streetAddress":"101",
"city":"abc",
"state":"",
"phoneNumbers":[
{
"type":"home",
"number":"3"
},
{
"type":"city",
"number":"4"
}
]
}
},
{
"firstName":"Smily",
"address":{
"streetAddress":"102",
"city":"def",
"state":"",
"phoneNumbers":[
{
"type":"home",
"number":"1"
},
{
"type":"city",
"number":"1"
}
]
}
}
]
}
}
如何编写select语句来 Select streetaddress和city,其中home>2和city=4;
我尽了最大的努力,但没用.
预期输出:
streetAddress city
101 abc
try 了这个不耐烦的方法,但它将电话号码提取到了多行.所以不能
SELECT idx,JSON_EXTRACT_SCALAR(x.n, '$.address.streetaddress') as streetaddress,
JSON_EXTRACT_SCALAR(x.n, '$.address.city') as city, JSON_EXTRACT_SCALAR(x.m, '$.type') as type, JSON_EXTRACT_SCALAR(x.m, '$.number') as value
FROM sample_data1 cross join
UNNEST (CAST(JSON_EXTRACT(sample_data,'$.people') AS ARRAY<JSON>)) AS x(n)
CROSS JOIN
UNNEST (CAST(JSON_EXTRACT(x.n,'$.address.phonenumbers') AS ARRAY<JSON>)) WITH ordinality AS x(m,idx) ;