目录
1、数据仓库
数据仓库中有很多个数据库
ETL:对数据的储存、查询和分析存储,在Hadoop中大规模数据的机制。
hive定义了简单的类SQL查询语言,HQL
也可以处理MapReduce开发者开发的自定义mapper和reducer来处理内建的mapper和reducer无法完成的工作
数据仓库 Data Warehouse,可简写为DW或DWH
2、Hive是什么
hive是SQL解析引擎,它将SQL语句转译成M/R Job然后再Hadoop执行
hive的表其实就算HDFS目录,按表名把文件夹分开
hive相当于hadoop的客户端工具,部署时不一定放在集群管理节点中,可以放在某个节点上
3、HiveQL与SQL的区别
存储位置:HDFS,Raw Device or 本地FS
数据格式:用户定义,系统决定
数据更新:不支持,支持
索引:弱,有
执行:MapReduce,Executor
执行延迟:高,低
可扩展性:高,低
数据规模:大,小
4、数据存储格式
TextFile,正常的文本格式,是Hive的默认文件存储格式,明文,可以直接查看,hadoop fs -cat
注意:一般只有与其他系统由数据交互的接口表采用TEXTFILE 格式,其他事实表和维度表都不建议使用。
RCFile:是Hadoop中第一个列文件格式。能够很好的压缩和快速的查询性能,通常写操作比较慢,比非列形式的文件格式需要更多的内存空间和计算量
ORCFile
Parquet:关系数据库存储结构化的数据
SEQUENCEFILE:是hadoop APL提供的一种二进制文件,它将数据以的形式序列化到文件中
AVRO:是一种支持数据密集型的二进制文件格式,它的文件格式更为紧凑,若要读取大量数据的时候,Avro能够提供更好的序列化和反序列化性能。
5、操作客户端
Hive将元数据存储在数据库中(metastore),目前只支持mysql、derby
Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等;由解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在 HDFS 中,并在随后由 MapReduce 调用执行。
Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from table 不会生成 MapRedcue 任务)
6、Hive操作
1、建表语句
1、内部表基础建表语句:
create table 表名
(
字段名1 字段类型1,
字段名2 字段类型2,
...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符'; // 必选指定列之间的分隔符
2、内部表基础建表语句:
create table 表名
(
字段名1 字段类型1,
字段名2 字段类型2,
...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符' // 必选指定列之间的分隔符
STORED AS file_format;
概述:
STORED AS:指定具体的从HDFS获取数据的格式,格式不匹配无法获取(默认为TextFile)
3、内部表基础建表语句
create table 表名
(
字段名1 字段类型1,
字段名2 字段类型2,
...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符' // 必选指定列之间的分隔符
STORED AS file_format
location 'HDFS路径';
概述:
location:表示指定hive数据在hdfs的路径, 如果路径不存在会自动创建,存在就直接绑定,不能通过hdfs路径判断是否是hive表
注意:
默认情况下 删除表会把数据也删除
4、外部表建表语句
格式:
create external table 表名
(
字段名1 字段类型1,
字段名2 字段类型2,
...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符' // 必选指定列之间的分隔符
STORED AS file_format
location 'HDFS路径';
注意:
删除外部表不会删除HDFS上的数据
2、加载数据(上传到hive表)
1、格式:
hadoop dfs -put linux路径 hdfs路径
2、(直接在hive命令行操作)
格式:
dfs -put linux路径 hdfs路径
优点:比在hadoop操作hdfs快的多
3、(直接在hive命令行操作)
格式:
load data inpath '/HDFS路径' into 表名(自动找到hdfs的路径)
注意:对于hive来说是加载
对于HDFS来说是移动
4、(直接在hive命令行操作)
格式:
load data local inpath '/HDFS路径' into 表名(自动找到hdfs的路径)
注意:从本地上传数据
5、上传方式5:(直接在hive命令行操作)
格式:create table 表名 as 查询语句
注意:只能创建内部表
6、(直接在hive命令行操作)
格式:
insert [overwriter] into 表名 查询语句 有overwrite 无into
注意:数据对数据,会有格式的转化