基于Hadoop的数据仓库解决方案
-
将结构化的数据文件映射为数据库表
-
提供类sql的查询语句HQL
-
hive让更多人使用Hadoop
Hive优势优点
-
提供了一个简单的优化模型
-
HQL类SQL语法,简化MR开发
-
支持在不同的计算框架上运行
-
支持在HDFS和HBase上临时查询数据
-
支持用户自定义函数、格式
-
常用于ETL操作和Bl稳定可靠 (真实生产环境) 的批处理
-
有庞大活跃的社区
Hive元数据管理
-
记录数据仓库中模型的定义、各层级间的映射关系
-
存储在关系数据库中
-
-
默认Derby, 轻量级内嵌SQL数据库
-
-
Derby非常适合测试和演示
-
存储在.metastore db目录中
-
-
实际生产一般存储在MySQL中
-
-
修改配置文件hive-site.xm
-
-
-
HCatalog
-
-
将Hive元数据共享给其他应用程序
-
Hive分区(Partition)
-
分区主要用于提高性能
-
-
分区列的值将表划分为一个个的文件夹
-
查询时语法使用"分区”列和常规列类似
-
查询时Hive会只从指定分区查询数据,提高查询效率
-
-
分为静态分区和动态分区
Hive视图 (View)
视图概述
-
通过隐藏子查询、连接和函数来简化查询的逻辑结构
-
只保存定义,不存储数据
-
如果删除或更改基础表,则查询视图将失败
-
视图是只读的,不能插入或装载数据
应用场景
-
将特定的列提供给用户,保护数据隐私
-
用于查询语句复杂的场景
Hive四种排序
order by 全局排序(reduce归结上排序)(建议使用limit)
sort by 分区内排序 (map上有序tasks 最后归结无序)
distribute by(自定义分区)+sort by
cluster by (distribute by和sort by相同时 整合排序 只能升序)
分桶和分区的区别
-
分桶和分区两者不干扰,可以把分区表进一步分桶
-
分桶对数据的处理比分区更加细粒度化: 分区针对的是数据的有储路径,分针对的是数据文件;
-
分桶是按照列的哈希函数进行分割的,相对比较平均,而分区是按照列的值来进行分割的,容易造成教据倾斜。
Hive优化
Hive还提供另外一个参数--表文件的大小作为开启和关闭MapJoin的闻值 1.旧版本为hive,mapjoin,smalltable.filesize 2.set hive.auto.convert.join.noconditionaltask.size=512000000
Hive集合操作
-
所有子集数据必须具有相同的名称和类型
-
-
UNION ALL:合并后保留重复项
-
UNION: 合并后删除重复项 (v1.2之后)
-
-
可以在顶层查询中使用 (0.13.0之后)
-
ORDER BY, SORT BY, CLUSTER BY, DISTRIBUTE BY LIMIT适用于合并后的整个结果
-
集合其他操作可以使用JOIN/OUTER JOIN来实现
-
-
差集、交集
-