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  阅读(66)  评论(0)    收藏  举报