HIVE函数高级

文章介绍了Hive中concat和concat_ws函数在字符串拼接中的应用,以及collect_list和collect_set在聚合数据时的作用。还展示了explode如何实现列转行的功能,提供了一系列示例来解释这些函数的使用方法和特点。
摘要由CSDN通过智能技术生成

函数高级

行转列

concat函数  字符串拼接,不可指定分隔符 
语法 
    concat(element1,element2,element3...)
举例 
	select concat('I','Love','Hive');
特点 如果任意一个元素为null,结果为null
	select concat('I','Love','Hive',null);
	
concat_ws函数 字符串拼接,可以指定分隔符
语法 
	concat_ws(splitChar,e1,e2,e3....|array<String>);
举例
	select concat_ws('-','I','Love','Hive');
	select concat_ws('-',`array`('aa','bb','cc','dd'));
特点 任意一个元素不为null,结果就不为null
	select concat_ws('-','I','Love','Hive',null);
	
collect_list函数 用于将一列中的多行合并为一行 不进行去重
语法 
	collect_list(colName)
举例 
	select collect_list(price) from t_product;
	
collect_set函数 用于将一列中的多行合并为一行 去重
语法 
	 collect_set(colName)
举例
	select collect_list(price) from t_product;

还有聚合函数 count,sum,max,avg等等

准备数据

vi emp.tsv
name gender job
柳岩	女	班主任
唐嫣	女	讲师
金莲	女	班主任
大郎	男	讲师
小庆	男	讲师
武松	男	班主任
-- 获取如下结果
女,班主任    柳岩|金莲
女,讲师	 唐嫣
男,班主任	武松
男,讲师	 大郎|小庆

create table t_emp
(
    name   string,
    gender string,
    job    string
) row format delimited fields terminated by "\t";

load data local inpath '/root/emp.tsv' into table t_emp

查询

-- 将gender和job合并为一列
select concat_ws(',', gender, job) as gender_job, name
from t_emp;

-- 得出结果
with t1 as (select concat_ws(',', gender, job) as gender_job, name
            from t_emp)
select t1.gender_job, concat_ws('|', collect_list(name))
from t1
group by t1.gender_job;
求每种工作每种性别各有多少人,分别有谁,获取如下结果
	select job,
       count(*)                                    as total,
       sum(case gender when '男' then 1 else 0 end) as man,
       sum(case gender when '女' then 1 else 0 end) as woman,
       concat_ws('|', collect_list(name))          as names
from t_emp
group by job;

列转行

	expload函数 用于将一个集合或者数组中的每个元素展开,将每个元素变为一行
语法 
    exploade(Map|Array)
举例 
	select explode(`array`(1,2,3,4,5));
	select explode(split('a,b,c,d',','));
	select explode(`map`('liuyan','38','tangyan','18'));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值