Hive中json陣列解析
阿新 • • 發佈:2019-01-28
資料格式
假設hive上儲存的資料有一列型別是string,內容為如下
[
{
"code": "000001",
"market": "1",
"label": "1",
"addtime": "2015"
},
{
"code": "0000002",
"market": "1",
"label": "1",
"addtime": "2016"
}
...
]
行列轉換
hive
相關說明
因為原資料是string(並不是真正的陣列型別)型別的,所以無法直接使用explode函式 1. regexp_extract('xxx','^\[(.+)\]$',1) 這裡是把需要解析的json陣列去除左右中括號,需要注意的是這裡的中括號需要兩個轉義字元\[。 2. regexp_replace('xxx','\}\,\{', '\}||\{') 把json陣列的逗號分隔符變成兩根豎線||,可以自定義分隔符只要不在json陣列項出現就可以。 3. 使用split函式返回的陣列,分隔符為上面定義好的。 4. lateral view explode處理3中返回的陣列。
presto
json解析
hive
select json_tuple(a.stock, 'code','market', 'label','addtime') from test1.tmp_stock a limit 1; select sid, b.code ,b.market,b.label,b.addtime from test1.stock2 a lateral view json_tuple(a.stock_codes, 'code','market', 'label','addtime') b as code, market, label,addtime ;
presto
select json_extract_scalar(a.stock, '$.code') from test1.tmp_stock a limit 1