Hive 解析複雜json格式字段

2021-10-09 04:29:04 字數 1130 閱讀 8820

本篇文章中所使用的方法來自部落格hive中的lateral view 與 explode函式的使用,感謝大佬的分享。

一. 問題背景

資料來源hive資料表結構如下

其中info欄位的資料型別為string格式的複雜json結構,例如:

[,,]

需求現在需要統計每個id 中info欄位所對應的使用者數量,而最關鍵的一步就是將資料解析為如下型別:

二. 解決方法

hql**

先把**放上來

select

`id`

, get_json_object(concat('')

,'$.name'

)as passengername

from test

lateral view explode(split(regexp_replace(regexp_replace(info,

'\\[\\]',''

),'},\\]',''

)

通過兩層巢狀去掉了最外層的[ ] 括號

split(regexp_replace(regexp_replace(info,

'\\[\\]',''

),'},\\』將幾個json資料分開

lateral view explode(split(regexp_replace(regexp_replace(info,

'\\[\\]',''

),'},\\'),

'$.name'

)as passengername

由於字串切割的時候把每個json的大括號去了,所以使用get_json_object()時要先再加上兩個大括號

容易踩的坑

當我把**寫好執行之後發現有報錯,我猜測是lateral view explode()這一行的問題,後來一排查發現果然是這兒的問題,我一開始的**是

lateral view explode(

)as names

正確的語法應該是

lateral view explode(

)names as names

Hive解析json格式資料

本文將介紹兩個使用hive解析json的小demo 1.hadoop hadoop001 jsondata more rating.json 很多資料.hive hwzhdb create table parsejson jsondata string oktime taken 0.146 seco...

HIVE解析json格式資料

id conditions 312 313 第一步 我們可以看到conditions欄位下的json格式資料,是json串裡面套著類似於list結構,我們先取出。get json object conditions,diyitems 取出之後資料是這樣的 第二步 我們把list結構中每個元素拿出來形...

Hive解析json格式字段

新建hive表 create external table asmp.json test id string,info string row format delimited fields terminated by t lines terminated by n location hdfs nam...