【大数据Hive3.x数仓开发】HiveSQL行转列应用-多行转多列case when&多行转单列concat_ws,collect

1 行转列:多行转多列–case when 函数

实际需求:统计得到每小时UV、PV、IP的个数,做折线图,但是表中的数据存储格式不利于直接查询展示。
多行转多列:
在这里插入图片描述

功能:实现对数据的判断,根据条件,不同的情况返回不同的结果,类似于java的switch case功能。
两种语法:

case
when 条件 then value1
else 默认值
end as 别名
--先指定了列
casewhen V1 then value1
else 默认值
end as 别名

所以图示的多行转多列实现:
在这里插入图片描述

2 行转列:多行转单列–concat_ws,collect

在这里插入图片描述

数据拼接

拼接相关函数,立马想到
concat:用于实现字符串拼接,但是不可指定分隔符。
特点:任意一个元素null,结果null.

concat_ws函数:可指定分隔符。
特点:任意一个元素不null,结果不null。

数据收集

collect_list将多行合并一行,不去重。(list表面数据有序有索引,可重)
collect_set:将多行合并一行,去重

代码给出从建表到实现多行转单列:

--建表
creat table a(
			col1 string
			,col2 string
			,col3 int
)row format delimited fields terminated by '\t';
--加载数据导到表
load data local inpath '/root/hivedata/a.txt' into table a;
--实现
select 
	col1
	,col2
	,concat_ws(',',collect_list(cast(col3 as string))) as col3
from a
group by 
	col1
	,col2;

注:cast(col3 as string)类型强制转换 通过describe function extended concat_ws;可以知道函数只接受string或者arrag(string)类型数据。

HiveSQL列转行应用-union\explode函数详解

猜你喜欢

转载自blog.csdn.net/weixin_43629813/article/details/130026046