做数据开发不能绕过数据仓库的建设,数仓是数据分析/数据挖掘的基础料仓,更是描述一个企业蓝图的智库。 如何打造出一个反映企业全局的数仓视图是“路漫漫其修远兮”的任重远道; 在数据公众号“数据指象”的上一篇推文《数仓矛盾的演进之旅》中,描述了数仓由简入繁的其中道理。今天我们接着了解数仓的名义。 数据集成性:集成是数仓最重要的特点之一,也是突出与传统数据库的特性之一;没有集成数仓就没有价值;只有将:同义不同名、同名不同义、多数据源、码值分解等等杂乱无章的数据,以集成就行统一、进行归一、进行编排形成一致性统一的的数仓 非易失性:不易丢失数据是仓的基本属性,数仓承接经年累月的数据输入,保存历史的数据细节,在时间的作用慢慢地聚沙成塔,让微小的数据也能发出耀眼的光芒。 具体数仓中粒度如何选择,后续将分享如何构建双粒度数仓 周末快乐
整体架构图解直接看数仓分层的整体层级图各层级详解ODS层-操作数据层定义:数据仓库的“缓冲区”或“贴源层”。 核心作用:隔离风险:避免复杂的清洗逻辑直接影响源系统,也避免源系统变更直接击穿数仓。历史回溯:源系统通常只保留近期数据或覆盖更新,ODS层通过全量或增量快照保留历史状态。 它是数仓的字典中心,确保全公司对于用户、商品、城市的定义是统一的。核心作用:统一口径:避免不同报表中“北京市”和“北京”被算作两个城市。 DWD层-明细数据层定义:数仓的核心层。基于ODS数据进行清洗、规范化、脱敏、维度关联后生成的明细事实表。核心作用:数据清洗:去除脏数据、统一枚举值(如性别统一为0/1)、空值填充。 全流程案例演示:计算“2026年3月4日各省份的销售总额”老言带你们看一个指标是如何在各层流转的:Source(业务库):orders表:{id:101,user_id:88,amount:100,province_code
② 维度:维度是度量的环境,是我们观察业务的角度,如时间,地点等,用来反映业务的一类属性 。其中描述维度的是 属性,即维度属性,是查询约束条件、分组和报表标签生成的基本来源,是数据易用性的关键。 ③ 度量:度量是指标产生的原始数据,或者是指标的结果值,度量通常为数值型数据,作为事实逻辑表的事实。 ④ 指标:指标分为原子指标和派生指标。原子指标是基于某一业务事件行为下的度量,是业务定义中不可再拆分的指标,是具有明确业务含义的名词 ,体现明确的业务统计口径和计算逻辑,例如支付金额。 原子指标=业务过程+度量,如订单数量,支付金额。 派生指标=时间周期(When)+修饰词(How)+原子指标,派生指标可以理解为对原子指标业务统计范围的圈定,如用户近1日通过支付宝支付金额,用户近30日通过手机APP产生的订单数量。
其中对于ER模型,维度模型,Data Vault模型的开发说明可以参考这篇文章:https://blog.csdn.net/wzy0623/article/details/50315719 4. 数据仓库的分层 基于数据仓库模型理论指导,以数据分析,统计指标为导向,为了能够记录数据的历史,便于处理业务变化,把复杂问题简单化,通过空间换时间提高数据访问效率,数据集成考虑,在数仓实际开发过程中进行分层处理 4. 从上往下看对应数据仓库分层如下: image.png 从分层开发来看: 数仓流程.png 附:阿里数据仓库分层 1.分层和作用 image.png 2.数据分层架构 分层架构.png 3.网易数据架构
A1 作用: 复杂问题简单化 隔离原始数据(后期统计和真实数据解耦) 数据复用性提高 数据结构更清晰 统一数据口径 A2 优缺点 优点 效率高 缺点 预计算 占空间 A3 图解 A4 实现 A4 位置 A5 相关 数仓项目
一、前言数据仓库具有面向主题的特性,那么就会有主题的概念,数仓建设是遵循纵向分层开发,横向划分主题域设计,数仓分层就不在这次谈了,这次我会结合本人数仓工作实践总结的经验来聊聊数仓主题域划分,同时会引申出主题划分 这个对于数仓工程师来说是必备的能力,比如当你面临着一个新业务的开启,需要从0到1开始搭建数据仓库或者数据集市,这时候就要考虑到主题域和主题的合理划分。二、数仓建设的步骤1. 主题划分4. 输出总线矩阵即业务过程和维度,组建成的矩阵5. 数仓分层设计模型表6. 4. :「数仓建设篇」数仓主题域划分 另外,公众号有海量大数据领域资料 欢迎领取。同时也欢迎大家加我微信,拉你进大数据技术交流群,一同成长。图片
数仓分层 数据分层是数据仓库设计中一个十分重要的环节,良好的分层设计能够让整个数据体系更容易被理解和使用。本文介绍的是如何理解数据仓库中各个分层的作用。 图解数据分层 何为数仓DW Data warehouse(可简写为DW或者DWH)数据仓库,是在数据库已经大量存在的情况下,它是一整套包括了etl、调度、建模在内的完整的理论体系。 数仓分层中每个层的作用是什么? …… 在实际的工作中,我们都希望自己的数据能够有顺序地流转,设计者和使用者能够清晰地知道数据的整个声明周期,比如下面左图。
4、OLTP和OLAP分别是什么?有什么区别? 5、项目是如何分层的 6、数仓一般怎么做分层处理呢? 7、数仓分层的作用是什么? 8、项目中有做按照主题分析吗? 数据仓库主要用于数据挖掘和数据分析,辅助领导做决策; 它们的主要区别体现在数仓是综合的或提炼的,数据库是细节的,数仓主要用星型模型或雪花模型;面向分析,支持决策需求;而数据库用的是实体-关系(E-R) 4、OLTP和OLAP分别是什么?有什么区别? 5、项目是如何分层的 一般分成三层 ODS DW ADS 也会有Dimen层 6、数仓一般怎么做分层处理呢? ODS——》DWD——》DWM——》DWS 7、数仓分层的作用是什么? 同时对事务的支持性不行 适用的场景: 数仓的特性很大一部分是针对列的过滤,列的搜索,列的匹配,所以很多数仓结构比较适合使用列存储 列存储也比较适合做OLAP 30、什么是Hive的分区?
分层目的 二、分层架构概览 三、详细分层设计 1.ODS (opreational data store) 2.DWD(data warehouse detail) 3.DIM(dimension) 4. DWS(data warehouse service) 5.ADS(Application Data Service) ---- 一、分层目的 数仓分层的目的是:逐层解耦,减少重复计算,降低烟囱式开发 不重不漏,确保每个表都在一个域里,且只在一个域里(精确定位) 2.每个域下都可以根据需要再分子域,不限定层级(最自由方便) 3.如果分子域就不能放表,表只放在最底层的域中(树状目录管理时更方便) 4. (4).确定维度 维度就是看事情的角度,5W1H(when、where、who、what、why、how) 示例: 时间维度、地区维度、用户维度、商品维度 (5).确定事实 事实即业务中的度量值 示例 示例: 用户运营表 用户id,浏览次数,登陆次数,购买次数,退款次数,确认收货次数
数仓分层架构 数仓(Data Warehouse)是企业中用于存储和管理大量结构化和非结构化数据的重要组成部分。 为了有效管理和利用这些数据,数仓通常采用分层架构,包括原始数据层、数据处理层和数据应用层。每个层级都承担着特定的任务,以确保数据的完整性、可靠性和可用性,从而支持企业的数据驱动决策和业务应用。 1. 原始数据层 原始数据层是数仓架构的基础,主要用于存储原始的、未经处理的数据。这些数据来自各个业务系统和数据源,包括日志数据、交易数据、用户行为数据等。
一、数仓为什么要分层? 合理的数据仓库分层一方面能够降低耦合性,提高重用性,可读性可维护性,另一方面也能提高运算的效率,影响到数据需求迭代的速度,近而影响到产品决策的及时性。 建立数据分层可以提炼公共层,避免烟囱式开发,可见一个合适且合理的数仓分层是极其重要。 (4)确定事实 此处的“事实”一词,指的是业务中的度量值,例如订单金额、下单次数等。 在DWD层,以业务过程为建模驱动,基于每个具体业务过程的特点,构建最细粒度的明细层事实表。 数仓建设是一个不断迭代的过程,数据建模同样是一个不断迭代的过程。同时,业务是不断变化的,建模人员对业务的理解也是变化的,这些也就注定了建模是一个迭代过程。 由于数仓的建设是与业务息息相关的,数仓建设的方法论仅仅只是指引我们构建数仓的一个方向,在实际的落地执行过程中会存在各种各样的问题,且不可被这些理论所禁锢。简单一句话就是:合适就好。
Snova为您提供简单、快速、经济高效的PB级云端数据仓库解决方案。借助于Snova,您可以在数分钟内创建拥有数百节点的企业级云端数据仓库,并高效的完成日常维护工作;也可以使用丰富的Postgre开源生态工具,实现对Snova中海量数据的即时查询分析、ETL处理及可视化探索;还可以借助其云端数据无缝集成特性,轻松分析位于COS、CDB、ES等数据引擎上的PB级数据。
2、建模相关2.1、仓模型的好坏有评价标准吗?有哪些评价的维度?如何持续化治理?2.2 数据一致性问题3、产品相关3.1.关于用户体验的事情如何设计和落地的? 4、组织架构:4.1.团队的组织结构划分?有哪几个方向?各自规模如何?各自工作的目标是什么?4.2.演进路径有哪些特征,即有没有什么代表性的特征事件?组织结构做过哪些调整? 5、职业规划5.1、数仓工程师成长的脉络图,或者说知识架构图?5.2、发展之路上需要哪些核心能力,每个阶段需要专注提升哪些能力。
数仓与数分作用于数据的不同方面,对岗位的职业能力是有所不同的。我们主要从岗位的四个层级来对比数仓与数分标杆能力的不同要求,方便同学们有的放矢打好基础顺利跃迁。 能保质保量完成业务数据开发工作,了解分层、分主题数仓体系建设方法和基本的数据建模方法。 推荐:《商务与经济统计学》《用数据说话》 2,第二层:独当一面 数仓:深入理解自己所处的行业业务形态、上下游及流程,熟悉维度建模的技术流程。 推荐:《金字塔原理》 4,第四级:驱动业务 数仓:理解一个业务的完整商业逻辑,具备强数据应用能力,从而推导团队的工作范围。 5,第五层:数仓数分一家亲,会开会,会撕逼,会写PPT。 本人不带货,只分享干货。
4.表中的记录变化的比例和频率不是很大,比如,总共有10亿的用户,每天新增和发生变化的有200万左右,变化的比例占的很小。 对于这种表的设计?
② 模型设计结合3NF及维度模型的理念,其灵活性、可扩展性、一致性更好满足企业数仓要求。 4、Anchor 数据模型 Anchor模型的提出者认为数据仓库需要提供稳定性高且具有一致性的服务,但是面对外部业务环境不断变化的矛盾,数仓的维护将变得十分复杂且耗时,为了应对这些变化和挑战,数据模型的设计必须具备模块化 Anchor 模型具有极大的可扩展性与复用度,按照这种方式建设数仓后能够大大降低模型的维护成本,这种模型通常适用于基础明细层的设计,但是这种高度规范化的建模方法对于建模者的要求也是难以衡量的,因此在企业数仓中很少展开实际应用 4 实施过程 4.1 指导方针 首先,在建设数据仓库时,要进行充分的业务调研和需求分析,业务调研和需求分析做得是否充分直接决定了数据仓库建设是否成功;其次,进行数据总体架构设计,主要是根据数据域对数据进行划分 此外,还需要进一步了解各业务板块中已有的业务流程,业务流程通常与业务板块紧密耦合,对应一个或多个表及其所属数据源,可以作为构建数仓的原始数据来源。
,在进入正题前,我们先认识一下数仓。 数仓顾名思义就是存放数据的仓库,那MySQL不也是存放数据的地方吗? 下面是数仓的架构图,包含了离线数仓和实时数仓。 数仓分类 数仓分为实时数仓,离线数仓,实时离线一体化。 实时数仓 实时数仓就是对数据的实时性要求比较高,所以是即时运算的,它的数据来源和离线是一样的,数据出来后,一条走了实时,一条走了离线(Lambda架构),相比于离线数仓,实时数仓的难度就要大得多,因为离线数仓的数据是全量数据 总结 上面只是简单地介绍了数仓的一些基本知识,数仓的分类,数据来源和数据流向,能够对数仓从整体上有一个认识,并没有从数仓的建模,技术等方面去说,后续再从数仓的各个组件和技术框架去说。
数仓整体架构的调整,明确新的分层方式,进行更加细化的建模。 职责划分 目前伴鱼数仓团队,承接公司全部业务线的数仓建设工作,对接公司内部各个业务线,每条业务线的形态不同,数据的使用方式也不同。 调研后发现大体有如下几种方式: 方式一(分总形式): 业务线或部门自建数仓,各个业务线分别建设自己的数仓,数仓与数仓之间无直接关系,使用其他业务线数据,通过权限申请拉取使用,或通过 FTP 文件的形式同步数据 方式二(分层形式): 划分基础数仓与应用数仓,基础数仓通过自下而上,面向于主题的方式进行设计,更加专注的做好底层建设。应用数仓通过自上而下,面向于应用的进行开发,更好的支持业务需求。 应用数仓自建底层模型:为了快速响应业务需求,应用数仓研发自己开发了所需的 DW 层表,等基础数仓开发完后,无时间进行迁移改造,造成新的烟囱式问题。 下图是某业务线在此规范下的整体设计: 4未来规划 未来,期望可以真正做到,通过数据赋能业务,驱动业务,更好的体现数据价值,主要体现在以下几方面: 基础能力:保障数据链路的稳定,以及数据的 SLA,通过监控
来源:蜜獾报告 本文约3200字,建议阅读5分钟本文介绍了数仓命名规范。 02XX 表规范 关于词根 词根属于数仓建设中的规范 ,属于元数据管理的范畴,现在把这个划到数据治理的一部分。 完整的数仓建设是包含数据治理的,只是现在谈到数仓偏向于数据建模 , 而谈到数据治理,更多的是关于数据规范、数据管理。 4 、维度表 维度表是基于底层数据,抽象出来的描述类的表。维度表可以自动从底层表抽象 出来,也可以手工来维护。 (1) 快照表,有无变化,都要报 (2) 每次上报的数据都是所有的数据(变化的+没有变化的) (3) 一天一个分区 4、拉链表 记录截止数据日期的全量数据。
二、连接数仓 接下来定义连接数仓所需的基本信息,并应用jaydebeapi库连接数仓。 这个需替换成你的jar文件的路径 conn = jaydebeapi.connect(dirver, url, [user, password], jarFile) curs=conn.cursor() #连接数仓 三、定义跑数sql脚本 接着定义跑数sql脚本,可根据需求进行定义。 这个需替换成你的jar文件的路径 conn = jaydebeapi.connect(dirver, url, [user, password], jarFile) curs=conn.cursor() #连接数仓 sql1, conn) #获取用户行为数据 bind_card = pd.read_sql_query(sql2, conn) #获取用户绑卡数据 至此,Python连接数仓已讲解完毕,如想了解更多Python