一. 数据仓库和数据库的区别
数据库和数据仓库在本质没有区别,都是用来存储数据的,只不过从数据量上讲,数据仓库的数据存储量要比数据库大很多,数据库用于存储一些基本的业务数据,而数据仓库则用于数据的分析和挖掘。
二. hive的基本概念
- hive是基于hadoop生态圈的数据仓库,通过hive,我们可以方便地进行ETL(数据的提取、转化、加载)的工作。
- hive本身不存储数据,数据真正存储在hdfs上,hive定义了一个类似于SQL的查询语言:HQL,能够将用户编写的QL转化为相应的Mapreduce程序基于Hadoop执行。可以理解hive就是MapReduce的客户端。
- 由于大部分人对MapReduce不熟悉,但是对于sql语句熟悉,所以hive就因此诞生,帮助大家把sql转成mapreduce在hadoop中执行。
三. hive的操作语句
- 创建一个hive库:
create database my_hive;
- 创建hive表:
create table my_table(
id int,
name string
)
#将HDFS上的文件映射成Hive表结构,通过分隔符来区分列
row format delimited fields terminated by ','
#HDFS文件存放的格式
stored as TEXTFILE;
- 数据准备:student.txt
1,xiaoming
2,zhangsan
3.lisi
- 插入hive中:
load data local inpath "/home/temp/student.txt" into table my_table;
- 查询:
select * from my_table;
四. hive表结构及数据的存储
hive可以创建表结构,但是表中不存储数据,数据的存储实际上是在hdfs上, hive数据库对应的相关元数据表(hive数据库元素是存储在mysql中的,mysql是在hive-site.xml文件中配置),hdfs和hive的映射。
-
hive版本的元数据表:version
-
hive库对应的mysql表:dbs
-
hive表对应的mysql表:tbls
-
表字段
-
数据在hdfs中的存储:
五. HQL语句执行流程
用户输入hql语句,hive根据mysql中的表结构存储信息,将hql语句转换成MapReduce程序,MapReduce计算HDFS中符合条件的数据返回给hive客户端。