1. 程式人生 > >hive find_in_set,get_json_object,lateral view explode函式

hive find_in_set,get_json_object,lateral view explode函式

  今天寫幾個hive函式, find_in_set,get_json_object,lateral view explode,方便以後查詢話不多說開幹。

find_in_set函式說兩點

1.使用方法

 SELECT FIND_IN_SET('b','a,b,c,d');
        -> 2
 SELECT FIND_IN_SET('e','a,b,c,d');
        -> 0

2.建議可以使用關聯的不要使用find_in_set(),效率上很差。

get_json_object

應用場景:使用Hive對日誌資訊進行查詢分解,log裡面記錄的是json形式的資料:

request_uri_dmalog_show_post_id 
--》{"id":"3227823","type":"guanzhu","ca_kw":18,"pn":1}
select request_uri_dmalog_atype, get_json_object(request_uri_dmalog_show_post_id,'$.pn')
 from ods.ods_rtm_app_ev where request_uri_dmalog_atype='show' limit 9 --json key取值

多層json處理

https://blog.csdn.net/qq_31573519/article/details/55104822

lateral view explode


使用

資料樣式


1d66fa6eeaba3abdc57ae9cd5909eabb        [26,87,27,39,32,56,50,69,29,46,59,63,60,28,62,72,36]

SELECT uuid,tagid tag_id FROM   ods.ods_remymartin_data_rtm_unlogin_user_follow_tag lateral view explode(split(substring(tag_id,2,length(tag_id)-2),',')) adtable AS tagid --一行轉多列    

結果

1d66fa6eeaba3abdc57ae9cd5909eabb        26
1d66fa6eeaba3abdc57ae9cd5909eabb        87
1d66fa6eeaba3abdc57ae9cd5909eabb        27
1d66fa6eeaba3abdc57ae9cd5909eabb        39
1d66fa6eeaba3abdc57ae9cd5909eabb        32
1d66fa6eeaba3abdc57ae9cd5909eabb        56
1d66fa6eeaba3abdc57ae9cd5909eabb        50
1d66fa6eeaba3abdc57ae9cd5909eabb        69
1d66fa6eeaba3abdc57ae9cd5909eabb        29
1d66fa6eeaba3abdc57ae9cd5909eabb        46
1d66fa6eeaba3abdc57ae9cd5909eabb        59
1d66fa6eeaba3abdc57ae9cd5909eabb        63
1d66fa6eeaba3abdc57ae9cd5909eabb        60
1d66fa6eeaba3abdc57ae9cd5909eabb        28
1d66fa6eeaba3abdc57ae9cd5909eabb        62
1d66fa6eeaba3abdc57ae9cd5909eabb        72
1d66fa6eeaba3abdc57ae9cd5909eabb        36