【Hive】(十)Hive 行转列、列转行详解

简介: 【Hive】(十)Hive 行转列、列转行详解

文章目录


一、列转行

1.相关函数说明

2.数据准备

3.需求

4.创建本地constellation.txt,导入数据

5.创建hive表并导入数据

6.按需求查询数据


二、行转列

1.函数说明

2.数据准备

3.需求

4.创建本地movie.txt,导入数据

5.创建hive表并导入数据

6.按需求查询数据


一、列转行


1.相关函数说明


CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。


2.数据准备

name    constellation  blood_type
孙尚香 白羊座 A
司马懿 射手座 A
吕布  白羊座 B
貂蝉     白羊座  A
许褚     射手座  A

3.需求


把星座和血型一样的人归类到一起。结果如下:

射手座,A            司马懿|许褚
白羊座,A            孙尚香|貂蝉
白羊座,B            吕布


4.创建本地constellation.txt,导入数据

[root@zj1 data]# vi constellation.txt


5.创建hive表并导入数据

create table person_info(
name string, 
constellation string, 
blood_type string) 
row format delimited fields terminated by "\t";
load data local inpath "/opt/soft/data/constellation.txt" into table person_info;

image.png


6.按需求查询数据

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;


查询结果如下:

image.png


二、行转列


1.函数说明


EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行。

LATERAL VIEW


用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias

解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合


2.数据准备

movie category
《疑犯追踪》  悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼2》 战争,动作,灾难


3.需求


将电影分类中的数组数据展开。结果如下:

《疑犯追踪》      悬疑
《疑犯追踪》      动作
《疑犯追踪》      科幻
《疑犯追踪》      剧情
《Lie to me》    悬疑
《Lie to me》    警匪
《Lie to me》    动作
《Lie to me》    心理
《Lie to me》    剧情
《战狼2》        战争
《战狼2》        动作
《战狼2》        灾难

4.创建本地movie.txt,导入数据

[root@zj1 data]# vi movie.txt 
《疑犯追踪》  悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼2》 战争,动作,灾难


5.创建hive表并导入数据

create table movie_info(
    movie string, 
    category array<string>) 
row format delimited fields terminated by "\t"
collection items terminated by ",";
load data local inpath "/opt/soft/data/movie.txt" into table movie_info;


6.按需求查询数据

select
    movie,
    category_name
from 
    movie_info lateral view explode(category) table_tmp as category_name;


查询结果如下:


image.png


以上便是对 Hive 行转列、列转行的简单演示,如有疑问,欢迎留言,共同讨论😄


目录
相关文章
|
SQL HIVE
HIVE 查询显示列名 及 行转列显示
HIVE 查询显示列名 及 行转列显示
226 0
|
SQL HIVE
|
SQL HIVE
Hive之行转列/列转行
1、行转列 场景:在hive表中,一个用户会有多个人群标签,List格式(逗号分隔如要转成List),有时我们需要统计一个人群标签下有少用户,这是就需要使用行转列了 例如,user_crowd_info有如下数据 visit_id crowds ...
3264 0
|
7月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
198 1
|
7月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
265 0
|
7月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
279 0
|
7月前
|
SQL 存储 分布式计算
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
1115 0
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
49 0
|
5月前
|
SQL 分布式计算 大数据
大数据处理平台Hive详解
【7月更文挑战第15天】Hive作为基于Hadoop的数据仓库工具,在大数据处理和分析领域发挥着重要作用。通过提供类SQL的查询语言,Hive降低了数据处理的门槛,使得具有SQL背景的开发者可以轻松地处理大规模数据。然而,Hive也存在查询延迟高、表达能力有限等缺点,需要在实际应用中根据具体场景和需求进行选择和优化。