数据仓库(Data Warehouse),可简写为 DW 或 DWH,数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。它出于分析性报告和决策支持目的而创建。
数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。
数据仓库是面向主题的(Subject-Oriented)、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant )数据集合,用以支持管理决策。与数据库最大的区别也就是OLTP和OLAP的区别。
按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。
源数据层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
数据仓库层(DW):也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
数据应用层(DA或APP):前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extra, 转化Transfer, 装载Load)的过程,ETL是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定。
Hive
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件转化成数据库的表,这样对数据的操作可以转化成我们熟悉的SQL语句来实现,其底层本质是将SQL转化成MapReduce的任务进行运算,数据持久存储在HDFS上,定义表的结构也叫元数据是存储在MySQL表中。
操作Hive需要Client,通常包括:
Hive架构流程
通过客户端将HQL,发送给Driver;
Driver的解析器会解析HQL语句,并检查语法;
Driver的编译器会与元数据的存储交互,拿到元数据信息,并生成执行计划;
Dirver的优化器会对执行计划进行优化;
Dirver的执行器将执行计划转化成MapReduce的任务;
最后将结果输出到指定位置,如果客户端是命令行模式,就会直接输出到客户端显示;
Hive的数据类型
Hive支持多种不同长度的整形和浮点型数据类型,支持布尔类型,也支持无长度限制的字符串类型。还支持时间戳数据类型timestamp和二进制数组数据类型binary。
Hive中的列支持struct、map和array集合数据类型。这样可能会增大冗余字段的风险,不过减少表关联操作。数据冗余也是数据库与数据仓库的一大区别。 Hive表的类型
Hive表的类型分为内部表和外部表,
内部表和外部表最大的区别就是,表删除之后,内部表会将元数据和真实数据都删除掉;外部表仅仅是把元数据删除掉了,而真实数据还在HDFS中。
我们通过查看表信息语句:desc formatted table_name;
外部表的 Table Type: EXTERNAL_TABLE;
内部表的 Table Type: MANAGED_TABLE;
通常情况下我们都会使用外部表保证数据安全性,但是像中间表,结果表这种我们就会考虑使用内部表。
建表语句时,外部表需要有”EXTERNAL“修改,内部表不需要。
create external table table_name(id string,name string); //外部表
create table table_name(id string,name string);// 内部表
1、《Hive编程指南》