1 Hive基础

知识要点:

1.1 大数据简介

1.2 认知Hadoop

1.3 认知Hive

1.4 基础语法

1.5 常用函数

1.6 重点练习

1.1 大数据简介

大数据(big data):是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

1.2 认知Hadoop

  • Hadoop是Apache基⾦组织下的⼀套开源软件平台。
  • Hadoop提供的功能:利⽤服务器集群对海量数据进⾏分布式处理。
  • Hadoop的核⼼组件:HDFS、MapReduce、YARN、Hadoop基础功能库。

 

 

 

组件 含义 特点
HDFS 块级别的分布式文件存储系统

Hadoop 中自带的分布式文件存储系统,并且是Hadoop工具的核心基础组件之一;

分布式存储系统可以理解为多态单机存储系统的各司其职、协同合作,统一的对外提供存储的服务。

MapReduce 分布式计算框架

MapReduce是采⽤⼀种分⽽治之的思想设计出来的分布式计算框架-如⼀复杂的计算任务,单台服务器⽆法胜任时,可将此⼤任务切分成⼀个个⼩的任务,⼩任务分别在不同的服务器上并⾏的执⾏;最终再汇总每个⼩任务的结果.

MapReduce由两个阶段组成;Map阶段(切分成⼀个个⼩的任务)、Reduce阶段(汇总⼩任务的结果)。

YARN 作业调度和资源管理器

Hadoop 资源管理器,通用资源管理系统和调度平台;

为上层应用提供统一的资源管理和调度;

为集群在利用率、资源统一刮玻璃和数据共享等方面带来了巨大好处。

1.3 认知Hive

  • 基于Hadoop的开源的数据仓库⼯具,⽤于处理海量结构化数据。
  • Hive把HDFS中结构化的数据⽂件映射成数据表。
  • Hive通过把HiveSQL进⾏解析和转换,最终⽣成⼀系列在hadoop上运⾏的mapreduce任务,通过执⾏这些任务完成数据分析与处理。
  • HiveSQL和MySQL⼀样,都遵循着SQL的标准,因此它们很多语句都是⼀样的。

Hive与传统数据库的比较

Hive RDBMS
查询语言 HQL SQL
数据存储位置 HDFS 块设备或本地
数据更新 不建议 经常修改
索引 0.8版本后加入位图索引 右复杂的索引
处理数据规模 大 小
执行 MapReduce 数据库自身引擎
执行延迟 较高 很低
可拓展性 较好 非常有限

1.4 基础语法

语法结构 参数意义

select ...A...

from ...B...

where ...C...

group by ...

having ...

order by ...

A 列名

B 表名

C 筛选条件

ASC 升序(默认)

DESC 降序

对多个字段进行排序:order by A ASC,B DESC每个字段都要指定升序还是降序

需求1:

选出城市在北京,性别为女的10个用户

需求2:

选出在2018年12月31日,购买的商品品类是food的用户名、购买数量、支付金额

需求3:

计算出在2019年4月支付金额最多的TOP5用户

 

 

1.5 常用函数

查看Hive中的函数:show functions;
查看具体函数的⽤法:①desc function 函数名;②desc function extended 函数名.

  需求案例
如何把时间戳转化为⽇期时间?

SELECT pay_time,
from_unixtime(pay_time,'yyyy-MM-dd
hh:mm:ss')
FROM user_trade
WHERE dt='2019-04-09';
-- 注意:from_unixtime(bigint
unixtime,string format),将时间戳转化成指定格式
的⽇期。
-- 常⽤格式
1.yyyy-MM-dd hh:mm:ss
2.yyyy-MM-dd hh
3.yyyy-MM-dd hh:mm
4.yyyy-MM-dd
-- 拓展:把⽇期转化成时间戳函数
unix_timestamp(string date)

如何计算⽇期间隔?

需求4:计算出⽤户的⾸次激活时间与2019年5⽉1⽇的⽇
期间隔。
SELECT user_name,
datediff('2019-05-
01',to_date(firstactivetime))
FROM user_info
limit 10;
select datediff('2019-12-30','2019-12-20');
注意:datediff(string enddate,string
startdate):结束⽇期减去开始⽇期的天数。
拓展:⽇期增加、减少函数 date_add(string
date,int days) date_sub(string date,int
days)

条件函数(case when / if)

需求5:统计以下四个年龄段 20岁以下、20-30岁、30-
40岁、40岁以上 的⽤户数。

需求6:统计不同性别⽤户的等级⾼低分布情况(假设
level⼤于5为⾼级)。

 字符串函数 需求7:计算出每个⽉的拉新情况。

注意:substr(string A,int startindex,int
len),如果不指定len,则从起始位置截取到最后。

 关键需求8:统计不同⼿机品牌的⽤户数

-- ⽅式⼀
SELECT get_json_object(extra1,
'$.phonebrand') as phone_brand,
count(distinct user_id) user_num
FROM user_info
GROUP BY get_json_object(extra1,
'$.phonebrand');
-- ⽅式⼆
SELECT extra2['phonebrand'] as phone_brand,
count(distinct user_id) user_num
FROM user_info
GROUP BY extra2['phonebrand'];
-- 总结:get_json_object(string
json_str,string path)
-- 该函数将指定的json字符串解析成对象,通过$.key
来取出对应的value。

   
   

 

 1.6 重点练习

     
 

需求9:统计在2018年购买的商品品类在两个以上的⽤
户数。
提示:可以将需求拆解,分成多个步骤。

 
 

需求10:⽤户激活时间在2018年,年龄段在20-30岁和
30-40岁的婚姻状况

 

 
     
     
     
     
posted @ 2021-09-14 21:59  Hello_world_Lan  阅读(87)  评论(0)    收藏  举报