数据仓库 Hive
- 基于:
执行器 Mapreduce
数据存储 HDFS
元数据存储 关系型数据库
* 架构原理
-
Meta
表定义,表与HDFS映射
元数据包括:表名、字段名、字段类型、关联HDFS文件路径等这些数据库的Meta信息 -
数据存储
数据:存储在HDFS -
查询过程
接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
DDL
库、表操作
内部表&外部表
-
管理表、内部表
删除:元数据与HDFS都会删除 -
外部表
删除:只删除元数据
* 分区表
(多个文件归类在不同目录)
-
背景
表数据量太大,对存储路径进行分区存放,查询时就能避免全量扫描 -
原理:
hive分区 就是进行 分目录。把数据分目录存放。 -
常见用法:
根据日期分区, 建一些日期目录, 每个目录下都是当天的数据
二级分区
按天分区后再按小时分区
动态分区
分桶表
(一个文件拆分成多个文件存放)
表、分区 单个数据文件过大
进行更加细粒度的数据范围划分, 对数据文件分桶
数据导入、导出
- AS SELECT
建表时导入select数据
create table 'table_name1'
as select xxx from 'table_name2'
- LOCATION
建表时加载数据路径
create table 'table_name' (field)
location '/data_path'
- INSERT 插入数据
-- 追加
insert into table 'table_name' values('value');
-- 覆盖
insert overwrite table 'table_name' values('value');
-- 插入到本地 = 导出
insert overwrite local directory 'local_path' select * from 'table_name'
-- 插入到HDFS
insert overwrite directory 'hdfs_path' select * from 'table_name'
- LOAD 加载数据路径
load data [local] inpath '/data_path' [overwrite] into table 'table_name' [partition]
- EXPORT, IMPORT
DML
SELECTS and FILTERS
GROUP BY
join
multitable insert
streamin