explode的作用是将hive一行中复杂的array或者map结构拆分成多行:
写一个简单的例子:
这里想将1007对应的tag拆成两行输出:
select explode(split(tag,'\\|')) from channel_info;
结果:
但是前面还有id需要一起输出,这里就要使用到lateral view了。
lateral view用于和split, explode等UDTF一起使用,它能够在此基础上对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
select channel_id,which_tag from channel_info lateral view explode(split(tag,'\\|')) t as which_tag;
结果: