Titan笔记

  • 首页
  • Java
  • 数据结构
  • Web
  • C语言
  • Python
  • 杂谈
  • 逸笔挥墨
Titan笔记
分享学习、研究与开发过程中的点滴记忆
  1. 首页
  2. 大数据
  3. Hive
  4. 正文

关于Hive使用的一些实例

2020年8月20日 276点热度 2人点赞 0条评论

行转列聚合

一、开始之前

在进行操作之前,你需要知道以下的几个函数:

1、CONCAT(string A/col, string B/col…):

返回输入字符串连接后的结果,支持任意个输入字符串。

2、CONCAT_WS(separator, str1, str2,...):

它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间。

3、COLLECT_SET(col):

函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生 array 类型字段。

二、准备数据

假设你拥有如下的用户数据

namesexage
Titan男18
Goodman男18
Cooper男10
Missy女10
Penny女27

三、需求分析

把相同性别的同龄人归类到一起,输出如下的结果

infoname
女-10Missy
女-27Penny
男-10Cooper
男-18Titan,Goodman

四、创建Hive表并导入数据

1、建立user_info表,将数据导入到表中

CREATE table user_info(
	name string,
    sex string,
    age string
) 
row format delimited fields terminated by "\t";

load data local inpath './users.txt' into table user_info;

2、根据需求,查询数据,使用CONCAT拼接字段,用COLLECT_SET将多行转为去重列表

SELECT
	t1.info,
	CONCAT_WS(',', COLLECT_SET(t1.name)) name
FROM
	(
	SELECT
		name, CONCAT_WS('-', sex, age) info
	FROM
		user_info ) t1
GROUP BY
	t1.info;

最后,查看输出结果

infoname
女-10Missy
女-27Penny
男-10Cooper
男-18Titan,Goodman

列转行拆分

一、开始之前

在进行操作之前,你需要知道以下的几个函数:

1、EXPLODE(col):

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

2、LATERAL VIEW

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

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

二、准备数据

假设你拥有这样的电影数据

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

三、需求分析

将每个电影的分类拆分出来,展开数据

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

四、创建 movie_info 表并导入数据

create table movie_info(
	movie string,
	category array<string>
)
row format delimited fields terminated by "\t"
collection items terminated by ",";

hive (db_titan)> load data local inpath 'movies.txt' into table movie_info;
Loading data to table db_titan.movie_info
Table db_titan.movie_info stats: [numFiles=1, totalSize=135]
OK
Time taken: 0.556 seconds

五、根据需求,将分类列表拆分,实现列转行

select
	movie,
	category_name
from
	movie_info lateral view explode(category) table_tmp as category_name;
moviecategory_name
《疑犯追踪》悬疑
《疑犯追踪》动作
《疑犯追踪》科幻
《疑犯追踪》剧情
《Lie to me》悬疑
《Lie to me》警匪
《Lie to me》动作
《Lie to me》心理
《Lie to me》剧情
《战狼 2》战争
《战狼 2》动作
《战狼 2》灾难
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: Apache-Hive Hive入门 Hive实例 Hive案列实操 Hive环境部署与快速入门
最后更新:2020年8月20日

Titan

兴趣广泛而无一精擅
想到什么,我总是渴望以代码的方式去呈现
永远年轻,永远热泪盈眶
Stay Hungry, Stay Foolish

点赞
< 上一篇

文章评论

取消回复

Titan

兴趣广泛而无一精擅
想到什么,我总是渴望以代码的方式去呈现
永远年轻,永远热泪盈眶
Stay Hungry, Stay Foolish

逸笔挥墨 - Titan的文学天地
文章分类
  • C语言 (4)
  • Hadoop (1)
  • Hive (3)
  • Java (19)
  • JavaWeb (4)
  • Linux运维之道 (1)
  • Mybatis学习笔记 (3)
  • Python (3)
  • SpringCloud (4)
  • Web (5)
  • Web前端 (4)
  • Web后端 (5)
  • 数据库 (1)
  • 数据结构 (10)
  • 杂谈 (3)
  • 诗词歌赋 (1)
  • 随摘 (2)
最新 热点 随机
最新 热点 随机
Spring Cloud 微服务学习笔记 - 负载均衡服务调用 Spring Cloud 微服务学习笔记 - Eureka 服务注册与发现 Spring Cloud 微服务学习笔记 - IDEA工程搭建 关于我和Titan笔记 Spring Cloud 微服务学习笔记 - 开篇 TitanEMS - Titan企业员工管理系统 - JavaWeb期末实践项目
Spring Cloud 微服务学习笔记 - 开篇TitanEMS - Titan企业员工管理系统 - JavaWeb期末实践项目2021年1月随摘2021年1月诗摘关于我和Titan笔记《梦之浮桥》中的几句
[DEMO] Titan的WEB期末项目 (一)Mybatis的入门 [源码] Titan留言板 - Titan的第一个开源项目 [数据结构]链式存储: 多项式求和 如何在Java中处理JSON Spring Cloud 微服务学习笔记 - 负载均衡服务调用
标签聚合
Python Mybatis学习笔记 Java JavaWeb Apache-Hive 链式存储 二叉树 数据结构
友情链接
  • Mttblog

COPYRIGHT ? 2016 - 2021 Titan笔记. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

豫ICP备20001822号-1

豫公网安备 41010502004418号