hive 列转行,纵表转横表

hive 中行列转换一般选择爆炸函数explode和侧视图lateral view搭配使用

--建表
create database test_db1;
use test_db1;
drop table test;
create table test(
    hour int,
    uv int,
    pv int,
    ip int
)
row format delimited fields terminated by ',';

map函数使用

map()会将传入的值或字段转换为key:value形式

第一步使用map()函数将uv、pv、ip 转为键值对

select map('uv',uv,'pv',pv,'ip',ip) from test;

运行结果

第二步使用侧视图搭配爆炸函数把键值对炸开

select hour,type,num
from test
lateral view explode(map('uv',uv,'pv',pv,'ip',ip)) b as type,num;

第三步:分组聚合

select metrice,
       max(if(hour = 0, num, 0)) as `1`,
       max(if(hour = 1, num, 0)) as `2`,
       max(if(hour = 2, num, 0)) as `3`,
       max(if(hour = 3, num, 0)) as `4`,
       max(if(hour = 4, num, 0)) as `5`
from test
         lateral view explode(map('uv', uv, 'pv', pv, 'ip', ip)) b as metrice, num
group by metrice;

运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值