hive posexplode

posexplode用法举例

A表(shows表示访问过的城市列表,是有序的)

id citys
1 [tianjin,shanghai,beijing]

B表(show表示访问过的城市)

id city
1 shanghai
2 sichuan

假设现在需求是:判断B表中访问过的城市在A表shows中的位置。

 1、由于A表的shows是数组,所以先用posexplode将A表按shows列展开

 select *  from A LATERAL VIEW posexplode(shows) t as pos, city

    得到的结果是如下表,即可以看出按照shows这一列展开了,并且还给出了shows中元素的位置(第三列)

    

id citys t.pos t.city_single
1 [tianjin,shanghai,beijing] 0 tianjin
1 [tianjin,shanghai,beijing] 1 shanghai
1 [tianjin,shanghai,beijing] 2 beijing

    2、下面merge A表和B表,找到B表中访问过的城市在A表shows中的位置


 select T2.city, T2,pos

        (select * from B) T1

        left outer join

        (select * from A LATERAL VIEW posexplode(shows) t as pos , city_single) T2

        on T1.id = T2.id and T1.city = T2.citys_single

    merge后得到的结果是

    

Shanghai 2
null null



你可能感兴趣的:(hive)