学习hive
前言:在互联网界,有一群人专门钻研数据库,擅长使用sql语句处理数据,在之前的学习中,我们明确了hdfs在大数据中的地
位,我们处理大数据时,一般使用mapreduce 进行处理,这使得居于数据库的sql语句没有了用武之地,而每次查询hdfs中的
数据,使用mapreduce有比较麻烦,用一句俗话说,懒人推动世界,于是就有了hive
hive
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
Hive 没有专门的数据格式。 Hive 可以很好的工作在 Thrift 之上,控制分隔符,也允许用户指定数据格式。
hive 储存原理
hive 其实就是对于 hdfs 和 mapreduce 的一个整合,使用简单的sql 的语句,实现比较复杂的mapreduce 的数据筛选
1 我们写入一条sql语句
2 hive 解析 sql 中的关键字
3 将select 等sql 语句优化,形成树结构
4 将 sql 语句编译成逻辑计划
5 将逻辑计划形成相应的物理计划 mapreduce 执行
hive的表
Hive表的类型
hive中有5种表:
- 内部表
数据默认存储在/user/hive/warehouse,由hive自身管理,删除内部表会同时删除存储数据和元数据。
建表方式一:
create table t1(
id INT,
name STRING,
age INT,
gfs ARRAY<STRING>,
address MAP<STRING,STRING>,
info STRUCT<country:String,province:String,shi:String>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'