hive初识

Hive初识

Mysql之前用的比较多,但是求职过程中发现很多企业对hadoop、spark、hive等要求有一定了解,所以最近打算边学边整理资料。

Hive百度百科

hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。
hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。
Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。
hive十分适合对数据仓库进行统计分析。
hive不适合用于联机(online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。

Hive VS SQL

hive本身不具有对数据进行存储和处理的能力,它借助Hadoop的两大核心组件HDFS、MapReduce来分别对数据进行存储和处理。hive设计的目的是避免用户编写复杂的mapreduce框架,使用大家比较熟悉的SQL语言就能对Hadoop上的数据的进行批量式的查询。
SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,SQL可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。

数据类型

1、 简单数据类型:
(1)整型,如:tinyint,smallint,int,bigint。
(2)字符串类型,如:string。
(3)时间戳类型。
(4)日期型。
(5)浮点型,如:float,double。

2、复杂数据类型:
(1)映射,关键字:map。

create table score(name string, score map<string,int>)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';
# 数据
biansutao '数学':80,'语文':89,'英语':95
jobs '语文':60,'数学':80,'英语':99
# 入库数据
LOAD DATA LOCAL INPATH '/home/hadoop/score.txt' OVERWRITE INTO TABLE score;
select * from score;
# 小明       {"数学":80,"语文":89,"英语":95}
# 小红       {"语文":60,"数学":80,"英语":99}

如何查询map类型的数据,如查询小红的语文成绩

select name,score['语文'] from score
where name='小红';

使用explode函数可将map的键值对拆分显示

 select explode(score) as (kemu_n,score_n) from score;
##result
数学  80
语文  89
英语  95
语文  60
数学  80
英语  99

explode 和lateral view 结合查询

select name,kemu_n,score_n from score lateral view explode(score) score as (kemu_n,score_n);

(2)结构体,关键字:struct。

CREATE TABLE test(id int,course struct<course:string,score:int>)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ',';
# 数据
1 english,80
2 math,89
3 chinese,95
# 入库
LOAD DATA LOCAL INPATH '/home/hadoop/test.txt' OVERWRITE INTO TABLE test;
# 查询
select * from test;
# 1       {"course":"english","score":80}
# 2       {"course":"math","score":89}
# 3       {"course":"chinese","score":95}

(3)数组,关键字:array。

create table person(name string,work_locations array<string>)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ',';
#数据
biansutao beijing,shanghai,tianjin,hangzhou
linan changchu,chengdu,wuhan
#入库数据
LOAD DATA LOCAL INPATH '/home/hadoop/person.txt' OVERWRITE INTO TABLE person;
select * from person;
#biansutao       ["beijing","shanghai","tianjin","hangzhou"]
#linan           ["changchu","chengdu","wuhan"]

3、null类型:在hive中底层是用’\N’来存储的,可以通过alter table tableName set serdeproperties(‘serialization.null.format’=‘a’)来设置。

参考文献
知乎-Hive面试总结
哔哩哔哩视频—大数据技术原理和应用
关于Hive中的复杂数据类型Array,Map,Structs的一些使用案例

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页