Hive-HiveQL练习题

目录

环境

行列互转

题目 列转行

 解决 collect_list

题目 逆向 行转列

解决1 lateral view explode

​编辑

解决2 数组下标取元素

扩充数据

题目 扩充为连续整数

解决 笛卡尔积

题目 扩充为自身

解决 标记过滤

展开数据

题目 展开字符串

思路

解决1 交叉连接

解决2 lateral view 炸裂函数


环境

Windows,VMware,Linux,hive-1.2.1

行列互转

题目 列转行

        ==>        

create table ab(
  a int comment '年份',
  b varchar(3) comment '大写英文字母'
) comment '合并与拆分';

insert into ab
values
(2014,'A'),
(2014,'B'),
(2015,'C'),
(2015,'D');

 解决 collect_list

select
  a,
  concat_ws('-',collect_list(b)) b -- 列转数组 输出格式
from ab
group by a;

题目 逆向 行转列

解决1 lateral view explode

with tmp as(-- 作为源表
  select
    a,
    concat_ws('-',collect_list(b)) b -- 列转数组 输出格式
  from ab
  group by a
)
select a,b,val
from tmp -- 按行输出元素 关联范围笛卡尔积
lateral view explode(split(b,'-')) ex as val;

解决2 数组下标取元素

with tmp as(-- 作为源表
  select
    a,
    concat_ws('-',collect_list(b)) b -- 列转数组 输出格式
  from ab
  group by a
)
select a,b,split(b,'-')[0] val from tmp union all
select a,b,split(b,&#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值