做数据开发不能绕过数据仓库的建设,数仓是数据分析/数据挖掘的基础料仓,更是描述一个企业蓝图的智库。 如何打造出一个反映企业全局的数仓视图是“路漫漫其修远兮”的任重远道; 在数据公众号“数据指象”的上一篇推文《数仓矛盾的演进之旅》中,描述了数仓由简入繁的其中道理。今天我们接着了解数仓的名义。 数据集成性:集成是数仓最重要的特点之一,也是突出与传统数据库的特性之一;没有集成数仓就没有价值;只有将:同义不同名、同名不同义、多数据源、码值分解等等杂乱无章的数据,以集成就行统一、进行归一、进行编排形成一致性统一的的数仓 非易失性:不易丢失数据是仓的基本属性,数仓承接经年累月的数据输入,保存历史的数据细节,在时间的作用慢慢地聚沙成塔,让微小的数据也能发出耀眼的光芒。 具体数仓中粒度如何选择,后续将分享如何构建双粒度数仓 周末快乐
整体架构图解直接看数仓分层的整体层级图各层级详解ODS层-操作数据层定义:数据仓库的“缓冲区”或“贴源层”。 核心作用:隔离风险:避免复杂的清洗逻辑直接影响源系统,也避免源系统变更直接击穿数仓。历史回溯:源系统通常只保留近期数据或覆盖更新,ODS层通过全量或增量快照保留历史状态。 它是数仓的字典中心,确保全公司对于用户、商品、城市的定义是统一的。核心作用:统一口径:避免不同报表中“北京市”和“北京”被算作两个城市。 DWD层-明细数据层定义:数仓的核心层。基于ODS数据进行清洗、规范化、脱敏、维度关联后生成的明细事实表。核心作用:数据清洗:去除脏数据、统一枚举值(如性别统一为0/1)、空值填充。
2. 维度模型 维度模型也叫星型模型,Kimball提出的多维模型降低了范式化,走的是总线型结构(自下而上和自上而下混合),以分析主题为基本框架来组织数据。 数据仓库的分层 基于数据仓库模型理论指导,以数据分析,统计指标为导向,为了能够记录数据的历史,便于处理业务变化,把复杂问题简单化,通过空间换时间提高数据访问效率,数据集成考虑,在数仓实际开发过程中进行分层处理 2. 数据明细层:DWD(Data Warehouse Detail) DWD一般保持和ODS层一样的数据粒度,都是最小粒度数据,通过清洗处理提供一定的数据质量保证。 从上往下看对应数据仓库分层如下: image.png 从分层开发来看: 数仓流程.png 附:阿里数据仓库分层 1.分层和作用 image.png 2.数据分层架构 分层架构.png 3.网易数据架构
② 维度:维度是度量的环境,是我们观察业务的角度,如时间,地点等,用来反映业务的一类属性 。其中描述维度的是 属性,即维度属性,是查询约束条件、分组和报表标签生成的基本来源,是数据易用性的关键。 ③ 度量:度量是指标产生的原始数据,或者是指标的结果值,度量通常为数值型数据,作为事实逻辑表的事实。 ④ 指标:指标分为原子指标和派生指标。原子指标是基于某一业务事件行为下的度量,是业务定义中不可再拆分的指标,是具有明确业务含义的名词 ,体现明确的业务统计口径和计算逻辑,例如支付金额。 原子指标=业务过程+度量,如订单数量,支付金额。 派生指标=时间周期(When)+修饰词(How)+原子指标,派生指标可以理解为对原子指标业务统计范围的圈定,如用户近1日通过支付宝支付金额,用户近30日通过手机APP产生的订单数量。
一、前言数据仓库具有面向主题的特性,那么就会有主题的概念,数仓建设是遵循纵向分层开发,横向划分主题域设计,数仓分层就不在这次谈了,这次我会结合本人数仓工作实践总结的经验来聊聊数仓主题域划分,同时会引申出主题划分 这个对于数仓工程师来说是必备的能力,比如当你面临着一个新业务的开启,需要从0到1开始搭建数据仓库或者数据集市,这时候就要考虑到主题域和主题的合理划分。二、数仓建设的步骤1. 业务调研数仓开发侧是承上对接业务研发侧&承下对接数据分析侧,在数仓建设前期要对上游业务过程和对下游数据分析指标体系有所了解和熟知,然后拉齐上下游沟通数据口径和数仓搭建。2. 主题域划分3. 数仓分层设计模型表6. 数仓公共层表迭代升级三、主题和主题域下面结合本人对搬家业务的数仓建设,进行主题域划分和主题划分实践,当然项目的大小决定着这是一个小型的数据集市 还是 企业级的数据仓库。1. :「数仓建设篇」数仓主题域划分 另外,公众号有海量大数据领域资料 欢迎领取。同时也欢迎大家加我微信,拉你进大数据技术交流群,一同成长。图片
A1 作用: 复杂问题简单化 隔离原始数据(后期统计和真实数据解耦) 数据复用性提高 数据结构更清晰 统一数据口径 A2 优缺点 优点 效率高 缺点 预计算 占空间 A3 图解 A4 实现 A4 位置 A5 相关 数仓项目
文章目录 ODS层(用户行为数据) Shell中单引号和双引号区别 ODS层日志表加载数据脚本 ODS层(业务数据) 1,活动信息表 2, 活动规则表 3,一级品类表 4,二级品类表 5 2)数据采用LZO压缩,减少磁盘存储空间。100G数据可以压缩到10G以内。 3)创建分区表,防止后续的全表扫描,在企业开发中大量使用分区表。 4)创建外部表。 说明2: 查看date命令的使用,date –help (2)增加脚本执行权限 [root@hadoop102 bin]$ chmod 777 hdfs_to_ods_log.sh 2)脚本使用 16,2) COMMENT '订单原价金额', `feight_fee` DECIMAL(16,2) COMMENT '运费', `feight_fee_reduce` DECIMAL(16,2) 2)脚本使用 (1)执行脚本 [root@hadoop102 bin]$ hdfs_to_ods_db.sh all 2020-06-14 (2)查看数据是否导入成功 这边执行的是ODS层业务表首日数据装载脚本
000概述 数仓分层是数据仓库设计中十分重要的一个环节,优秀的分层设计能够让整个数据体系更容易理解和使用 本文的大纲 001,介绍数据分层的作用 002,分层设计的原则以及介绍一种通用的数据分层设计 减少维度表与事实表的关联,提高明细数据表的易用性;同时在汇总数据层要加强指标的维度退化,采用更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工 例如: 表1: 姓名,城市,年龄 表2: 数据量可能是千万级或者上亿级别 2,低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。 数据量可能是个位数或者几千几万 003具体案例 电商网站的用户访问日志: 1,在ODS层中,由于各端的开发团队不同或者其他问题,用户的访问日志被分成了好几张表,上报到ODS层中 2,为了方便大家的使用 DWS层的话,相对来讲就会有一点点理解成本,然后DWM和DWD层就比较难理解了,因为它的维度可能比较多,而且一个需求可能要多张表经过很复杂的计算才能完成 2,从能力范围上来讲,我们希望80%的数据可以由
数仓分层 数据分层是数据仓库设计中一个十分重要的环节,良好的分层设计能够让整个数据体系更容易被理解和使用。本文介绍的是如何理解数据仓库中各个分层的作用。 图解数据分层 何为数仓DW Data warehouse(可简写为DW或者DWH)数据仓库,是在数据库已经大量存在的情况下,它是一整套包括了etl、调度、建模在内的完整的理论体系。 数仓分层中每个层的作用是什么? …… 在实际的工作中,我们都希望自己的数据能够有顺序地流转,设计者和使用者能够清晰地知道数据的整个声明周期,比如下面左图。 参考资料 本文的参考资料: 1、通用的数据仓库分层方法:https://www.cnblogs.com/itboys/p/10592871.html 2、Data Warehousing - Architecture
2、什么是数据仓库呢? 3、数据仓库和传统的业务数据库有什么区别? 4、OLTP和OLAP分别是什么?有什么区别? 5、项目是如何分层的 6、数仓一般怎么做分层处理呢? 7、数仓分层的作用是什么? 18、请简述数据集市 19、请简述维度退化,以及其作用 20、请简述以下层级的主要作用 22、请简述SCD2的实现方法(最少2种,多了不限) 23、请用三个单词来总结数仓分层的主要工作内容 24、什么是版本控制工具 数据仓库主要用于数据挖掘和数据分析,辅助领导做决策; 它们的主要区别体现在数仓是综合的或提炼的,数据库是细节的,数仓主要用星型模型或雪花模型;面向分析,支持决策需求;而数据库用的是实体-关系(E-R) 5、项目是如何分层的 一般分成三层 ODS DW ADS 也会有Dimen层 6、数仓一般怎么做分层处理呢? ODS——》DWD——》DWM——》DWS 7、数仓分层的作用是什么? 同时对事务的支持性不行 适用的场景: 数仓的特性很大一部分是针对列的过滤,列的搜索,列的匹配,所以很多数仓结构比较适合使用列存储 列存储也比较适合做OLAP 30、什么是Hive的分区?
数仓分层架构 数仓(Data Warehouse)是企业中用于存储和管理大量结构化和非结构化数据的重要组成部分。 为了有效管理和利用这些数据,数仓通常采用分层架构,包括原始数据层、数据处理层和数据应用层。每个层级都承担着特定的任务,以确保数据的完整性、可靠性和可用性,从而支持企业的数据驱动决策和业务应用。 1. 原始数据层 原始数据层是数仓架构的基础,主要用于存储原始的、未经处理的数据。这些数据来自各个业务系统和数据源,包括日志数据、交易数据、用户行为数据等。 spark.read.format("csv") .option("header", "true") .load("path_to_raw_data.csv") rawDF.show() 2.
Snova为您提供简单、快速、经济高效的PB级云端数据仓库解决方案。借助于Snova,您可以在数分钟内创建拥有数百节点的企业级云端数据仓库,并高效的完成日常维护工作;也可以使用丰富的Postgre开源生态工具,实现对Snova中海量数据的即时查询分析、ETL处理及可视化探索;还可以借助其云端数据无缝集成特性,轻松分析位于COS、CDB、ES等数据引擎上的PB级数据。
一、数仓为什么要分层? 合理的数据仓库分层一方面能够降低耦合性,提高重用性,可读性可维护性,另一方面也能提高运算的效率,影响到数据需求迭代的速度,近而影响到产品决策的及时性。 建立数据分层可以提炼公共层,避免烟囱式开发,可见一个合适且合理的数仓分层是极其重要。 非常的大 2. 内容相对的窄:列数较少 3. 经常发生变化,每天会新增加很多。 数仓建设是一个不断迭代的过程,数据建模同样是一个不断迭代的过程。同时,业务是不断变化的,建模人员对业务的理解也是变化的,这些也就注定了建模是一个迭代过程。 由于数仓的建设是与业务息息相关的,数仓建设的方法论仅仅只是指引我们构建数仓的一个方向,在实际的落地执行过程中会存在各种各样的问题,且不可被这些理论所禁锢。简单一句话就是:合适就好。
数据仓库的设计始于数据模型,企业的数据模型适用于操作型环境,而修改后的模型适用于数仓,其实就是业务模型—> 概念模型—>逻辑模型—>物理模型的这一过程 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人
目录 一、分层目的 二、分层架构概览 三、详细分层设计 1.ODS (opreational data store) 2.DWD(data warehouse detail) 3.DIM(dimension ) 4.DWS(data warehouse service) 5.ADS(Application Data Service) ---- 一、分层目的 数仓分层的目的是:逐层解耦,减少重复计算,降低烟囱式开发 作用 ①保持数据原貌不做任何修改,起到备份数据的作用 ②数据采用压缩,减少磁盘存储空间 ③创建分区表,防止后续的全表扫描 2.DWD(data warehouse detail) DWD层是以业务过程为驱动 2.缓慢变化维 直接覆盖原值、新增维度列(旧列、新列)、新增维度行拉链(2个时间戳 开始时间 结束时间) 4.DWS(data warehouse service) DWS层会在DWD层的数据基础上 示例: 用户运营表 用户id,浏览次数,登陆次数,购买次数,退款次数,确认收货次数
2、建模相关2.1、仓模型的好坏有评价标准吗?有哪些评价的维度?如何持续化治理?2.2 数据一致性问题3、产品相关3.1.关于用户体验的事情如何设计和落地的? 5、职业规划5.1、数仓工程师成长的脉络图,或者说知识架构图?5.2、发展之路上需要哪些核心能力,每个阶段需要专注提升哪些能力。
* ,row_number() over(partition by t2.emp_num,t2.date_from,t2.cancel_flag,t2.hire_date order by t2.inc_day --组织名称 ,t2.hire_date --入职日期 ,if(t2.date_from < t2.hire_date,t2.hire_date,t2.date_from) as ,t2.cancel_flag --离职标识 ,t2.zhrlzlx --离职类型 ,case when t2.hire_date >= t2.date_from and t2.cancel_flag <> 'Y' then '入职' when t2.hire_date < t2.date_from and t2.cancel_flag <> 'Y' then '调岗 (nvl(t2.date_from,''),nvl(t2.hire_date,''),nvl(t2.cancel_flag,'')) <> concat(nvl(t3.date_from,''),nvl
数仓分层简介 1.数仓分层好处:复杂问题简单化;减少重复开发;隔离原始数据。 2.数仓分层具体实现 ODS(Operation Data Store)层:原始数据层,存原始数据,直接加载原始日志、数据 DWD(Data Warehouse Detail)层:明细数据层也有叫DWI
1、数仓ODS层 1)保持数据原貌不做任何修改,起到备份数据的作用。 2)数据采用LZO压缩,减少磁盘存储空间。100G数据可以压缩到10G以内。 DECIMAL(16,2) COMMENT '订单原价金额', `feight_fee` DECIMAL(16,2) COMMENT '运费', `feight_fee_reduce /bin/bash APP=gmall if [ -n "$2" ] ;then do_date=$2 else echo "请传入日期参数" exit fi ods_order_info=" load " load data inpath '/origin_data/$APP/db/base_category2/$do_date' OVERWRITE into table ${APP}.ods_base_category2 /bin/bash APP=gmall # 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天 if [ -n "$2" ] ;then do_date=$2 else do_date=
1、数仓DWD层 1)对用户行为数据解析。 2)对业务数据采用维度模型重新建模。 2、DWD层(用户行为日志) 2.1、日志解析思路 (1)页面埋点日志 (2)启动日志 解析思路 2.2、get_json_object函数使用 1)数据 [{"name":"大郎", /bin/bash APP=gmall # 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天 if [ -n "$2" ] ;then do_date=$2 else ` DECIMAL(16,2) COMMENT '优惠券优惠分摊', `split_final_amount` DECIMAL(16,2) COMMENT '最终价格分摊' ) COMMENT (16,2) COMMENT '活动减免', `coupon_reduce_amount` DECIMAL(16,2) COMMENT '优惠券减免', `original_amount