经过前面那么久的折腾,我们终于可以切入主题了,接下来我们用数仓分层的理论,在Hive中建立数据仓库。 -40d3-bd7b-bbbb2159fb3b): insert overwrite table gmall.dwd_start_log PARTITION (dt='2020-11-24') select _3e88639f-e439-40d3-bd7b-bbbb2159fb3b): insert overwrite table gmall.dwd_start_log PARTITION (dt='2020 -40d3-bd7b-bbbb2159fb3b INFO : Total jobs = 1 INFO : Launching Job 1 out of 1 INFO : Starting task -40d3-bd7b-bbbb2159fb3b INFO : Session is already open INFO : Dag name: insert overwrite table gma.
2006年,当时的Sun微系统公司与Greenplum开始联手打造即时数据仓库。 Greenplum基于这种架构可以帮助客户创建数据仓库(Greenplum从开始设计的时候就被定义成数据仓库),充分利用低成本的商用服务器、存储和联网设备,通过经济的方式进行PB级数据运算,并且在处理OLAP 图3-6显示了Greenplum查询优化器。 图3-6 Greenplum查询优化器 3.3.4 并行数据装载 在大型数据仓库中,必须在相对较小的维护窗口内装载大量数据。 在TPC-DS测试中,包括SparkSQL、Impala、Hive只支持其中1/3左右。TPC-DS是专门用于评测决策支持系统(大数据或数据仓库)的标准SQL测试集,包含99个SQL。 从原理上讲,TP与AP在需求、应用场景、性能衡量指标、建模与设计方法、优化策略等方面都截然不同(参见“Greenplum 实时数据仓库实践(1)——数据仓库简介”中的表1-1),结果必然是在实现技术上分道扬镳
一、前言 最近在设计数据仓库的数据逻辑模型,考虑到海量数据存储在分布式数据仓库中的技术架构模式,需要针对传统的面相关系型数据仓库的数据存储模型进行技术改造。 设计出一套真正适合分布式数据仓库的数据存储模型。 二、事实表设计基础 事实表记录发生在现实世界中的操作型事件,其所产生的可度数值。 传统模式的主要问题如下:如果数据量很小的情况下,执行多表关联,没有问题,但是当在分布式数据仓库,单表存储海量数据的情况下,很明显模式将面临挑战。 分布式数据仓库的设计,恰恰相反,因为单表数据规模的问题,如果要满足分析和处理的性能,合理的按照业务进行数据的分表存储。如财务相关事件、账户相关事件,单独成表。更有利于数据的计算和分析。 四、分布式维度模型实例 序号 字段英文 字段中文 字段解释 字段映射 字段加工逻辑 指标字段 1 event_id 事件ID 记录标识 标识 2 tm 时间 时间戳 维度 3 domain 域
3. 数据组成差别 - 数据时间表示差别 操作型数据通常反映的是现实世界的当前状态;而分析型数据库既有当前状态,还有过去各时刻的快照,分析型数据库的使用者可以综合所有快照对各个历史阶段进行统计分析。 ~这就是关于数据仓库最贴切的定义了。事实上数据仓库不应让传统关系数据库来实现,因为关系数据库最少也要求满足第1范式,而数据仓库里的关系表可以不满足第1范式。 集成性 集成性是指数据仓库会将不同源数据库中的数据汇总到一起; 3. 企业范围 数据仓库内的数据是面向公司全局的。比如某个主题域为成本,则全公司和成本有关的信息都会被汇集进来; 4. 有了这些数据快照以后,用户便可将其汇总,生成各历史阶段的数据分析报告; 数据仓库组件 数据仓库的核心组件有四个:各源数据库,ETL,数据仓库,前端应用。如下图所示: ? 1. 数据仓库会周期不断地从源数据库提取清洗好了的数据,因此也被称为"目标系统"; 3.
一、引言 最近在梳理大数据模式下的数据仓库数据模型,花了点时间,系统的回顾一下传统数据仓库数据模型设计的理论,作为笔记分享给大家,很多资料来自互联网和读过的数据仓库理论和实践相关的熟悉,无剽窃之心 二、3NF (1)1NF-无重复的列 数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。 (3)3NF-传递依赖 属性不依赖于其它非主属性[消除传递依赖]。 满足第三范式(3NF)必须先满足第二范式(2NF)。 简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。 如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
在大数据与数据中台建设过程中,数据库与数据仓库的区别、数仓分层架构设计以及ETL与ELT的技术选型,是决定数据平台稳定性、扩展性与分析效率的关键基础,也是数据工程与数据分析必须理解的核心知识。 一、核心辨析:数据库vs数据仓库理解二者的区别是构建数据平台的起点。数据库与数据仓库虽然本质都是存储系统,但它们服务于完全不同的业务目标。 数据仓库(OLAP)-决策分析的大脑它存在的意义是支撑管理层的宏观决策。数据仓库汇聚了全量历史数据,这些数据经过清洗与集成,按主题域(如销售、财务、供应链)进行组织。 二、架构设计:数据分层的艺术如果把数据仓库比作一个工厂,直接加工原材料会导致生产混乱。因此,分层架构是现代数仓不仅清晰可控且易于维护的关键。1.ODS层(数据引入层):这是数仓的缓冲区。 3.DWS层(汇总服务层):这是数仓的加速器。基于分析需求,我们将明细数据按天、月、品牌、区域等维度进行轻度聚合,形成宽表。这一层的存在能显著减少重复计算,让下游查询响应更快。
指标分级方法 T1 公司战略层面指标 T2 业务策略层面指标 T3 业务执行层面指标 OSM模型 O 业务目标 S 业务策略 M 业务度量 建模 维度建模的模式: 星型模型:
数据仓库是现代数据堆栈的基础,所以当我们看到 Convoy 数据负责人 Chad Sanderson 在 LinkedIn 上宣称“数据仓库坏了”时,它引起了我们的注意。 不可变数据仓库如何结合规模和可用性 乍得桑德森的观点 现代数据堆栈有许多排列,但数据仓库是一个基础组件。 另一种方法:引入不可变数据仓库 不可变数据仓库概念(也称为活动 ETL)认为,仓库应该是通过数据来表示现实世界,而不是乱七八糟的随机查询、损坏的管道和重复信息。 #3 在活跃环境中同行评审的文档。同样,我们需要对投入生产的代码 (GitHub) 或 UX (Figma) 进行同行评审,数据资产也应该有一个等价物。 数据仓库:仓库主要用作“数据展示”和底层计算层。 3. 语义层:数据消费者构建经过验证并与业务共享的数据产品。语义层中的资产应该被定义、版本化、审查,然后通过 API 提供给应用层使用。 4.
*了解数据仓库相关技术 *了解数据仓库设计过程建造,运行及维护 *了解OLAP及多维数据模型 决策支持系统及其演化 一般将数据分为:分析型数据与操作型数据 操作型数据:由企业的基本业务系统产生的数据 数据仓库的特性:面向主题性,集成性,不可更新和时间性。 集成:数据仓库最重要的特性,分为数据抽取转换,清理(过滤)和装载 不可更新:数据仓库中的数据以批量方式处理,不进行一般主义上的数据更新。 数据仓库的体系结构与环境 从数据层次角度的体系结构来看,典型的数据仓库的数据体系结构包括:操作型数据、操作型 数据存储、数据仓库、数据集市和个体层数据 从功能结构看,可分为数据处理、数据管理和数据应用三个层次 数据仓库的数据组织< 粒度、数据分割(分区)、元数据> 数据仓库的数据单位中保存数据的细化程度或综合程度的级别。 细化程度越高,粒度越小 粒度影响到数据仓库的数据量及系统能回答的查询的类型 进行数据仓库的数据组织时,应根据当前应用的需求进行多粒度级设计。满足多角度,多层次数据查询要求。
查看、编辑数据仓库的基本模型(即事实表与维度表之间的关系)。针对某一系统需求,从无到有设计一 个数据仓库基本架构,要求能够按不同维度进行多维数据查询分析。 (3)分析各年龄层次的顾客购买商品的次数。 (4)分析某年某季度各地区、各类商品的销售量。 (5)分析每年各省份、各年龄层次的商品购买金额。 (1)日期维度表Dates 手工录入适量数据: (2)顾客维度表Customers 手工录入适量数据: (3)地点维度表Locates 手工录入适量数据: (4)商品维度表Products (3)定义维表 右键维度,新建维表。 “可用属性” 要全部勾选。 单机 “完成”,保存维度。 Dates、Locates、Products维表的创建方法一样。 (3)维表定义:日期、顾客、地点和商品等维度表的创建和定义,为多维分析提供了关键维度信息,使得可以按照不同维度进行数据查询和分析。
然而这种模式在实际应用中很少见,因为这样做会导致开发难度增大,而数据冗余问题在数据仓库里并不严重。 3. 星座模式 星座模式(Fact Constellations Schema)也是星型模式的扩展。 维度CALENDAR由关系SALESTRANSACTION中的TDate列分离得到; 3. 用什么指标来"度量"主题? 本例的主题是销售,而销量和销售额这两个指标最能直观反映销售情况; 4. 维表不满足规范化设计(不满足3NF);2. 事实表也不满足规范化设计(1NF都不满足); 3. 然而这么设计又一次"逆规范化"了:事务标识码非主码却决定事务标识时间,显然违背了3NF。但现在我们是为数据仓库建模,所以这样做是OK的。另外在分布式的数据仓库中,这个字段十分重要。 数据仓库建模体系之规范化数据仓库 所谓"数据仓库建模体系",指的是数据仓库从无到有的一整套建模方法。最常见的三种数据仓库建模体系分别为:规范化数据仓库,维度建模数据仓库,独立数据集市。
数据仓库之ODS层搭建 我们本项目中对数据仓库每层的搭建主要分为两部分,第一部分是确定都有哪些表,第二部分是确定数据装载的方式。 3)ODS层表名的命名规范为:ods_表名_单分区增量全量标识(inc/full)。 APP/log/topic_log/$do_date' into table ${APP}.ods_log_inc partition(dt='$do_date'); " hive -e "$sql" (3) warehouse/gmall/ods/ods_base_category2_full/'; 2.5三级品类表(全量表)设计 DROP TABLE IF EXISTS ods_base_category3_ 3.ODS层总结 对于ODS层来说,我们每天只需要执行hdfs_to_ods_log.sh 和hdfs_to_ods_db.sh 这两个脚本将采集到HDFS上的原始数据装载到ODS层即可。
3、相对稳定是指数据仓库大多会分开存放数据,数据仓库不需要进行事务处理、数据恢复和并发控制等机制,通常数据仓库只需要两种数据访问操作:数据的初始化装入和数据的访问。 3、数据服务 为前端和应用提供数据服务,可直接从数据仓库中获取数据供前端应用使用,也可通过OLAP服务器为前端应用提供负责的数据服务。 (3)传统数据仓库建立在关系型数据仓库之上,计算和处理能力不足,当数据量达到TB级后性能难以得到保证。 (3)提出修改和改进业务部门工作流程的方法并程序化。 (4)数据建模的范围界定,整个数据仓库项目的目标和阶段划分。 3、逻辑建模,这部分的建模工作,主要包含以下几个部分: (1)业务概念实体化,并考虑其具体的属性。 (2)事件实体化,并考虑其属性内容。 (3)说明实体化,并考虑其属性内容。
一、前言 工作内容的变更,导致重新回到数据仓库模型的架构和设计,于是花点时间比较系统的回顾数据仓库建模和系统建设的知识体系,记录下来,作为笔记吧。 二、模型 无论数据仓库技术如何变化,从RDBMS到NoSQL,从传统技术到大数据,其实只是实现技术手段的变化,数据仓库建设生命周期的模式从来都不曾真正颠覆性改变过。向前辈致敬。 另外项目团度在招:资深的数据仓库模型设计师-工作地点北京,有感兴趣的可以把简历发给我吧。
下图是个示例,通过统一数据模型,屏蔽数据源变化对业务的影响,保证业务的稳定,表述了数据仓库模型的一种价值: 二、数据仓库分层的设计 为了实现以上的目的,数据仓库一般要进行分层的设计,其能带来五大好处: 1、维度建模 (1)定义 维度模型是数据仓库领域另一位大师Ralph Kimball 所倡导的。 (3)优缺点 优点:技术要求不高,快速上手,敏捷迭代,快速交付;更快速完成分析需求,较好的大规模复杂查询的响应性能 缺点:维度表的冗余会较多,视野狭窄 2、关系建模 (1)定义 是数据仓库之父Inmon 推崇的、从全企业的高度设计一个3NF模型的方法,用实体加关系描述的数据模型描述企业业务架构,在范式理论上符合3NF,站在企业角度面向主题的抽象,而不是针对某个具体业务流程的实体对象关系抽象。 3、标准化的推进:数据仓库建模的任何实体都需要标准化命名,否则未来的管理成本巨大,也是后续数据有效治理的基础,以下是我们的一个命名规范示例: 总而言之,你可以把我的文章当成一个指引,具体还是要结合企业的实际去推进
构建自己的数据仓库时要考虑的基本因素 ? 我们用过很多数据仓库。当我们的客户问我们,对于他们成长中的公司来说,最好的数据仓库是什么时,我们会根据他们的具体需求来考虑答案。 通常,他们需要几乎实时的数据,价格低廉,不需要维护数据仓库基础设施。在这种情况下,我们建议他们使用现代的数据仓库,如Redshift, BigQuery,或Snowflake。 大多数现代数据仓库解决方案都设计为使用原始数据。它允许动态地重新转换数据,而不需要重新摄取存储在仓库中的数据。 在这篇文章中,我们将深入探讨在选择数据仓库时需要考虑的因素。 ETL vs ELT:考虑到数据仓库的发展 Snowflake构建在Amazon S3云存储上,它的存储层保存所有不同的数据、表和查询结果。 频谱定价:您只需为查询Amazon S3时扫描的字节付费。 保留实例定价:如果您确信您将在Redshift上运行至少几年,那么通过选择保留实例定价,您可以比按需定价节省75%。
Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。 Hive十分适合对数据仓库进行统计分析。 数据库可以用在 Online 的应用中,但是 Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。 1、查询语言 由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计了类 SQL 的查询语言 HQL。 3、数据更新 由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的。
关于数据仓库的概念、原理、建设方法论,网上已经有很多内容了,也有很多的经典书籍,本文更想聊聊企业数据仓库项目上的架构和组件工具问题。 先来谈谈架构。 企业数据仓库架构 关于数据仓库,有一种简单粗暴的说法,就是“任何数据仓库都是通过数据集成工具连接一端的原始数据和另一端的分析界面的数据库”。 我知道的国内四大行有3家在用,5大物流公司有4家在用,不少公司在从Teradata 迁移到 GP。 3、转化和加载 转换:用ODS中的增量或者全量数据来刷新DW中的表 加载:每insert数据到一张表都可以称为数据加载 关于ETL工具的选型,这里罗列了一张对比表,基本囊括常用的ETL工具。 3、数据挖掘工具 OLAP是将数据多维视角呈现分析,数据挖掘则是应用的算法来揭示数据的规律性,比如相关性、模式和趋势等。数据挖掘工具就是做这个的,它能让一些算法和过程自动化。
什么是数据仓库(Data Warehouse,DW)? 1991 年,数据仓库之父 Bill Inmon 在《Building the Data Warehouse》一书中,给出的定义: “数据仓库一个面向主题的、集成的、稳定的、随时间变化的数据的集合,以用于支持管理决策过程 建立数据仓库的目的是帮助企业高层系统地组织、理解和使用数据,以便进行战略决策。 数据仓库系统的体系结构 源数据层 源数据是数据仓库系统的基础,是整个系统的数据源泉。 数据存储与管理层 元数据 元数据是关于数据的数据,位于数据仓库的上层,用以描述数据仓库内数据的结构、位置和 建立方法。通过元数据进行数据仓库的管理和使用。 数据仓库 数据仓库中存放了企业的整体信息,而数据集市只存放了某个主题需要的的信息,其目的是 减少数据处理量。
数仓架构的原则: 1.底层业务的数据驱动为导向同时结合业务需求驱动 2.便于数据分析 屏蔽底层复杂业务 简单、完整、集成的将数据暴露给分析层 3.底层业务变动与上层需求变动对模型冲击最小化 业务系统变化影响削弱在基础数据层(资金订单改造) 结合自上而下的建设方法削弱需求变动对模型的影响 数据水平层次清晰化 3.高内聚松耦合 主题之内或各个完整意义的系统内数据的高内聚 针对性强,主要应用于数据仓库构建和OLAP引擎低层数据模型。 前台还包括像查询管理、活动监控等为了提供数据仓库的性能和质量的服务。 一致性维度 在多维体系结构中,没有物理上的数据仓库,由物理上的数据集市组合成逻辑上的数据仓库。而且数据集市的建立是可以逐步完成的,最终组合在一起,成为一个数据仓库。