赞
踩
实际需求:统计得到每小时UV、PV、IP的个数,做折线图,但是表中的数据存储格式不利于直接查询展示。
多行转多列:
功能:实现对数据的判断,根据条件,不同的情况返回不同的结果,类似于java的switch case功能。
两种语法:
case
when 条件 then value1
else 默认值
end as 别名
--先指定了列
case 列
when V1 then value1
else 默认值
end as 别名
所以图示的多行转多列实现:
拼接相关函数,立马想到
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)类型数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。