Hive知识点总结(持续更新)
文章目录
hive 基本概念
hive的意义
hive是一个数据仓库工具,把结构化数据映射成表 支持类sql
hive就是把hql转换为MapReduce 降低了我们学习成本
hive存储依赖于hdfs 执行程序运行在yarn上
hive优缺点
优点
简单 容易上手
降低了我们学习成本(不用去写MR)
支持自定义函数 扩展性高
支持大量数据
缺点
因为底层是MR,所以效率比较低
HQL表达能力有限
延迟高 适用于离线业务
hive的架构原理
hive和数据库比较
数据存储位置
Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。
数据库则可以将数据保存在块设备或者本地文件系统中
数据更新
由于Hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的。
而数据库中的数据通常是需要经常进行修改的
执行
Hive中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的。
而数据库通常有自己的执行引擎。
数据规模
由于Hive建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据;
数据库可以支持的数据规模较小。
hive的数据类型
基本数据类型
hive 的类型 | java的类型 |
---|---|
TINYINT | byte |
SMALINT | short |
INT | int |
BIGINT | long |
BOOLEAN | boolean |
FLOAT | float |
DOUBLE | double |
STRING | string |
TIMESTAMP | 时间类型 |
BINARY | 字节数组 |
集合数据类型
STRUCT
MAP
ARRAY
hive的表
内部表
- 默认创建的表内部表 create table xxx
- Hive默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(默认位置*/user/hive/warehouse*)。
- 导入数据的时候是将文件剪切(移动)到指定位置,即原有路径下文件不再存在
- 删除表的时候,数据和元数据都将被删除
- 当我们删除一个内部表时,Hive也会删除这个表中数据。管理表不适合和其他工具共享数据。
外部表
- 创建外部表命令添加一个external即可 create external table xxx
- 因为表是外部表,所以Hive并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。
- 外部表导入文件时不移动文件,仅仅是添加一个metadata
内部表外部表的转换
alter table 表名 set tb lproperties(‘EXTERNAL’=‘TRUE’); ----转换为外部表
alter table 表名 set tblproperties(‘EXTERNAL’=‘FALSE’); ----- 转换为内部表
分区表
其意义主要在于优化查询,对于分区表,我们一般都要求使用分区字段进行过滤,以加快查询速度
分区关键字partitioned by ()
适用于对某个东西进行分区 如对时间分区
分桶表
分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。
对于hive中每一个表、分区都可以进一步进行分桶。
由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。
分桶前需要先
set hive.enforce.bucketing=true;
开启分桶
分桶关键字clustered by() (分桶个数和reduce task个数一致。)
适用于数据抽样
数据加载
(1)load data:表示加载数据
(2)local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表
(3)inpath:表示加载数据的路径
(4)overwrite:表示覆盖表中已有数据,否则表示追加
(5)into table:表示加载到哪张表
(6)student:表示具体的表
(7)partition:表示上传到指定分区
hive文件格式
TextFile格式
Orc格式
Parquet格式
ORC > Parquet > textFile
存储文件的查询速度测试:
上一篇: FreeMarker内置函数和用法
下一篇: Sublime Text安装配置