[英]Athena/Presto: unnesting list of objects from serialized JSON string
[英]AWS Athena Unnesting
我在 Athena 中有一張表,使用 JSON SerDe 從 S3 讀取數據。 DDL 如下;
CREATE EXTERNAL TABLE `mbta_lines`(
`data` array<
struct<
attributes:struct<
color:string,
long_name:string,
short_name:string,
sort_oder:string,
text_colo:string
>,
id:string,
links:struct<self:string>,
relationships:struct<
routes:string
>,
type:string
>
>,
jsonapi struct<
version:string
>
)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION
's3://free-dp/transportation/mbta/lines'
JSON 正在通過 API 獲得,JSON 響應如下所示;
{
"data": [
{
"attributes": {
"color": "DA291C",
"long_name": "Red Line",
"short_name": "",
"sort_order": 10010,
"text_color": "FFFFFF"
},
"id": "line-Red",
"links": {
"self": "/lines/line-Red"
},
"relationships": {
"routes": {}
},
"type": "line"
},
....
API 方法為波士頓地鐵系統中的每條“線”返回一個“行”......“紅線”、“綠線”等。所有數據都包含在一個數組“數據”中,所以DDL 實際上只有 1 個字段,因為這是一個數組,所以它只有 1 行。
我知道我需要使用 unnest 來展平這個數組,但是將“屬性”傳遞給 unnest 是行不通的。 我不知道如何引用數組下的結構,因為它沒有命名?
select 來自 mbta_lines 的行交叉連接 unnest(data) as t(lines)
我沒有嘗試過顯而易見的,傳入數組本身就是訣竅。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.