自己总结的笔记
在工作中,完成指标分析
分清楚什么是数仓,与数据库的区别
数仓分层(ODS源数据层,DW数仓层,DA 数据应用层)
方便数据分析,进行血缘追踪、把复杂问题简单化...
实际文件保存在HDFS集群中
Hive主要有两部分:元数据metadata 元数据服务metastore
一、 数据仓库概述
1、什么是数据仓库
数仓,简写为DW,数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持,他是出于分析性报告和决策支持目的而创建的.
MySQL数据库 是 面向事务的集成化数据环境;但是DW则是面向分析的集成化数据环境,主要实现数据的写入与数据分析,很少有数据的修改操作
本身并不'生产'任何数据,同时自身也不需要'消费'任何数据,数据来源于外部,并释放给外部使用.
2、数据仓库的主要特征
数据仓库是面向主题的(Subject-Oriented )、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant )数据集合,用以支持管理决策 。
面向主题(确认要分析什么,什么就是主题)
主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。
集成性
通过对分散、独立、异构的数据库数据进行抽取、清理、转换和汇总便得到了数据仓库的数据
数据仓库中的综合数据不能从原有的数据库系统直接得到。因此在数据进入数据仓库之前,必然要经过统一与综合,这一步是数据仓库建设中最关键、最复杂的一步,所要完成的工作有:
(1)要统一源数据中所有矛盾之处,如字段的同名异义、异名同义、单位不统一、字长不一致,等等。
(2)进行数据综合和计算。数据仓库中的数据综合工作可以在从原有数据库抽取数据时生成,但许多是
非易失性(不可更新性)
在数据仓库内部生成的,即进入数据仓库以后进行综合生成的。
数据仓库的数据反映的是一段相当长的时间内历史数据的内容(离线数据)
一旦数据进入数据仓库以后,一般情况下被较长时间保留。数据仓库中一般有大量的查询操作,但修改和删除操作很少
时变性
离线数仓:侧重于离线两个字,历史数据分析
实时数仓:侧重于实时两个字,实时数据分析
数仓: 离线 -- Hive 实时 -- Flink
数据仓库包含各种粒度的历史数据。数据仓库中的数据可能与某个特定日期、星期、月份、季度或者年份有关。数据仓库的目的是通过分析企业过去一段时间业务的经营状况,挖掘其中隐藏的模式。
面向主题分析,经常要与时间相关,所以SQL语句经常需要对时间进行分析查询
(所以说好好刷SQL !!!,别玩啦)
3、数据仓库与数据库区别
数据库与数据仓库的区别实际讲的是OLTP与OLAP的区别。
数仓:OLAP("A",分析)>> 分析(查)
数据库:OLTP("T",事务) >> 事务(增删改)
操作型处理,叫联机事务处理OLTP[通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题 ]
数据库是事务型OLTP处理,支持增删改查操作;
分析型处理,叫联机分析处理OLAP[一般针对某些主题的历史数据进行分析,支持管理决策 ]
数据仓库是面向主题OLAP型应用,主要是查询操作,很少有更新与删除
首先要明白,数据仓库的出现,并不是要取代数据库:
数据库是面向事务的设计,数据仓库是面向主题设计的。
数据库一般存储业务数据,数据仓库存储的一般是历史数据。
数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”。
区别!!!
① 数据库是事务型OLTP处理,支持增删改查操作;数据仓库是面向主题OLAP型应用,主要是查询操作,很少有更新与删除
② 数据量不同,数据库数据量较少;数据仓库往往是海量数据(底层是HDFS)
③ 存储数据时效性不同,数据库往往是当前数据,数仓往往历史数据(离线)
④ 查询速度也有很大区别,数据库往往是低延迟,数据仓库往往是高延迟查询
4、数据仓库分层架构
按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。
1 源数据层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
2 数据仓库层(DW):也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
3 数据应用层(DA或APP):前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extra, 转化Transfer, 装载Load)的过程,ETL是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定。
ODS:源数据层,主要负责原始数据的存储
DW:数据仓库层,主要负责对ODS层的数据进行清洗、转换、分析
DA/APP/RPT:数据应用层,主要负责对主题分析的结果进行最终的展现
强调:所谓的分层就是把海量数据分不同的数据库进行存放。ods数据库、dw数据库、rpt数据库
为什么要对数据仓库分层?
用空间换时间,
通过大量的预处理来提升应用系统的用户体验(效率),因此数据仓库会存在大量冗余的数据;不分层的话,如果源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大。
清晰的数据结构
实现血缘追踪(数据治理中的一个概念)
减少重复开发
把复杂问题简单化:大问题拆解若干个小问题
屏蔽原始数据异常
二、Apache Hive(离线数仓)
1、Hive概述
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
本质是将SQL转换为MapReduce程序。
主要用途:用来做离线数据分析,比直接用MapReduce开发效率更高。
2、为什么使用Hive
直接使用Hadoop MapReduce处理数据所面临的问题:
1 人员学习成本太高
2 MapReduce实现复杂查询逻辑开发难度太大
使用Hive :
3 操作接口采用类SQL语法(HQL),提供快速开发的能力
4 避免了去写MapReduce,减少开发人员的学习成本
5 功能扩展很方便
3、Hive架构
Hive主要由两部分数据组成 => 元数据(数据库、数据表等结构),实际数据存储在HDFS或HBase中。
Hive组件
用户接口:包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
元数据存储(mestore服务 => metadata元数据):通常是存储在关系数据库如 mysql/derby中。Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器、编译器、优化器、执行器(hiveserver2驱动):完成 HQL 查询语句从语法分析、词法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
简单来说:解析器、编译器、优化器、执行器就是把HiveSQL翻译成MapReduce过程!
Hive与Hadoop的关系
Hive不能独立存在,必须要依赖Hadoop才能运行!
Hive中的分析的数据来源于HDFS,执行的计算模型需要依赖于MapReduce。
Hive利用HDFS存储数据,利用MapReduce查询分析数据。
4、Hive与传统数据库对比
hive用于海量数据的离线数据分析(往往分析的过去某一个时间段的数据)。
hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析。
Hive学习的重点就是SQL语法, DDL DML