一、行转列
CONCAT(string A/col, string B/col )
返回输入字符串连接后的结果,支持任意个输入字符串
CONCAT_WS(separator, str1, str2,...)
:
它是一个特殊形式的 CONCAT() 。第一个参数剩余参数间的分隔符。分隔符可以是与剩 余参数一样的字符串。如果分隔符是 NULL ,返回值也将为 NULL 。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间
COLLECT_SET(col)
:
函数只接受 基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生 array 类型字段。
1.数据准备
2.需求:把星座和血型一样的人归类到一起。结果如下
射手座,A 大海| 凤姐
白羊座,A 孙悟空 |猪八戒
白羊座,B 宋宋
3.创建本地 person_info.txt
,导入数据
# vi /data/test/person_info.txt
孙悟空 白羊座 A
大海 射手座 A
宋宋 白羊座 B
猪八戒 白羊座 A
凤姐 射手座 A
注意: 数据之间要使用 tab键隔开,否则后面插入数据有问题
查看文件权限,权限不够chmod 777 person_info.txt
4.创建 hive 表并导入数据
--创建表
create table person_info(
name string,
constellation string,
blood_type string)
row format delimited fields terminated by "\t";
-- 加载数据(这里采用第一种)
--追加式导入
load data local inpath "/data/test/person_info.txt" into table person_info
-- 更新式导入
load data local inpath "/data/test/person_info.txt" overwrite into table person_info
5.按需求查询数据
select
t1.base,
concat_ws('|', collect_set(t1.name)) name
from
(select
name,
concat(constellation, ",", blood_type) base
from
person_info) t1
group by
t1.base;
函数说明:
CONCAT(string A/col, string B/col )
返回输入字符串连接后的结果,支持任意个输入字符串
CONCAT_WS(separator, str1, str2,...)
:
它是一个特殊形式的 CONCAT() 。第一个参数剩余参数间的分隔符。分隔符可以是与剩 余参数一样的字符串。如果分隔符是 NULL ,返回值也将为 NULL 。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间
COLLECT_SET(col)
:
函数只接受 基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生 array 类型字段。
二、列转行
1.数据准备
movie | category |
---|---|
《疑犯追踪》 | 悬疑,动作,科幻,剧情 |
《Lie to me》 | 悬疑,警匪,动作,心理,剧情 |
《战狼2》 | 战争,动作,灾难 |
2.需求:将电影分类中的数组数据展开。结果如下:
3.创建本地 movie.txt
,导入数据
# vi movie.txt
《疑犯追踪》 悬疑 动作 科幻 剧情
《Lie to me 》 悬疑 警匪 动作 心理 剧情
《战狼2 》 战争 动作 灾难
查看文件权限,权限不够chmod 777 movie.txt
4.创建 hive 表并导入数据
-- 创建电影信息表
create table movie_info(
movie string,
category array<string>)
row format delimited fields terminated by "\t"
collection items terminated by ",";
-- 加载本地数据到hive
load data local inpath "/data/test/movie.txt" into table movie_info
5.按需求查询数据
select
movie,
category_name
from
movie_info lateral view explode(category) table_tmp as category_name;
函数说明:
LATERAL VIEW:
用法
LATERAL VIEW udtf(expression) tableAlias AS columnAlias
用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
EXPLODE(col):
将 hive 一 列 中复杂的 array 或者 map 结构拆分成多行。