Hive函数07_行转列、列转行函数

一、行转列

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 结构拆分成多行。

发布了450 篇原创文章 · 获赞 120 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/ZZQHELLO2018/article/details/105612104