**
数据仓库
**
数据仓库简写为DW或DWH,是面向主题的、集成的、非易失的和时变的数据集合。
元数据,主要记录数据仓库中模型的定义。各层级间的映射关系、监控数据仓库的数据状态及ETL的任务运行状态。
**
Hive
**
它是基于Hadoop的一个数据仓库工具。本质上是将SQL转化为MapReduce程序利用HDFS存储数据,利用MapReduce查询分析数据。
Hive组件
用户接口、元数据存储、解释器、编译器、优化器、执行器、
分层架构
源数据(ODS)、数据仓库(DW)、数据应用(DA或APP)。
为什么要分层?
- 用空间换取时间,提高最终使用数据的效率。
- 一步变多步,降低失败率,不需要重新处理。
- 进行数据集中格式统一便于分析。
Hive命令行
- -i 初始化HQL文件
- -e 从命令行执行指定的HQL
- -f 执行HQL脚本
- -v 输出执行的HQL语句到控制台
- -p 连接Hive Server的端口号
本地模式:客户端和hive服务在一台机器上
远程模式:客户端在其他机器上通过协议远程访问hive服务。
连接协议:!connect jdbc:hive2://node01:10000
hive的内外部表
内部表:表的结构化数据文件放置在默认的路径下,不能随意放。
/user/hive/warehouse/dbname.db/table_name
外部表:表的结构化文件可以位于hdfs的任意路径下,需要通过location指定清楚位置。
分区表是一种优化表,可以减少查询时的权标扫描。
分区表的创建语句
create table user(id int,name string,country string) partitioned by (countryside string) row format delimited fields terminated by ‘,’;
注意:分区字段不能是表中已经存在的字段。
分区表的数据导入
load data local inpath ‘/root/hivedata/user.txt’ into table user partition(countryside=‘china’);
分区表的使用
select * from user where countryside=“china”;
分桶表可以减少join查询时笛卡尔积。
分桶表创建
开启分桶功能
set hive.enforce.bucketing=true;
set mapreduce.job.reduces-4;
create table student(sno int,sname string,sex string ,sage int ,sdept string) clustered by(sno) into 4 buckets row format delimited fields terminated by ‘,’;
导入分桶表
insert overwrite table student select * from stu cluster by(sno);
注意:分桶的字段必须是表中已经存在的。
分桶功能默认是关闭的,需要手动开启。
分桶表数从本质上来说就是数据文件被分开了。
分桶表的数据直接导入不能分开,只能简介导入,通过分桶查询导入。
当是同一个字段的时候
cluster by =distribute by + sort by
select * from student distribute by(sno) sort by (sno);
select * from student cluster by(sno);
是等效的。
hive中join操作
inner join :内关联,只显示符合join条件的结果。
outer join :外关联,符合条件的显示,不符合的显示null。
left join :左关联 以左表为准,左表显示全部,右表关联上的显示,关联不上的显示null。
right join :右关联,以右表为准,右表显示全部,左表关联上的显示,关联不上的显示Null.
left semi join :相当于内关联只显示左表的部分。
cross join:交叉相乘,笛卡尔积。