数据开发必知必会 - 数据仓库理论总结

一、数据仓库特点(4个特点)

1.1、数据仓库是面向主题的

1.2、数据仓库是集成的

1.3、数据仓库的数据是稳定的

1.4、数据仓库中的数据是随时间变化而变化的

二、数据仓库分层(特点or意义)

2.1、把复杂问题简单化

2.2、减少重复开发

2.3、隔离原始数据

三、数据仓库核心理论
3.1、为什么需要数仓模型(2个行为4个考核)

数据仓库建模的目标是通过建模的方法更好的组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点

当有了适合业务和基础数据存储环境的模型(良好的数据模型),那么就能获得以下好处:

  • 性能:快速的查询我们所需要的数据,减少数据的I/O吞吐。

  • 成本:极大的减少不必要的数据冗余,实现计算结果复用,降低数据的存储和计算成本。

  • 效率:极大的改善用户使用数据的体验,提高使用数据的效率。

  • 质量:改善数据统计口径的不一致性,减少数据计算错误的可能性

3.2、常见的数仓模型(很多个,重点讲2个)

ER模型(范式模型),更多用来梳理业务配合维度建模使用,E为实体,多数情况下落为维度数据;R为实体的关系,多数情况下落为事实数据

维度模型,在维度建模的基础上又可分为三种模型:星型模型、雪花模型、星座模型

3.3、数仓模型演变流程(建模流程,4个模型)

数仓建模就是业务模型->概念模型->逻辑模型->物理模型的这样一个流程,下面我们详细解释一下各个模型阶段都要做什么

  • 业务建模:需求沟通

  • 领域(概念)建模:画图想好怎么做

  • 逻辑建模:表设计

  • 物理建模:建表

3.4、数仓建模过程(建模过程,4个过程)
  • 选择业务过程

  • 声明粒度

  • 确定维度

  • 确定事实

3.5、模型设计的思路(2种方式)
  • Bill Inmon推崇自上而下的方式(这里的上指的是数据源出发),一个企业建立唯一的数据中心,数据是经过整合、清洗、去掉脏数据、标准的、能够提供统一的视图

  • Ralph Kimball推崇自下而上的方式(这里的下指的是从业务需求出发),建设数据仓库应该按照实际的应用需求,加载需要的数据,不需要的数据不要加载到数据仓库中

3.6、模型落地-规范(规范类)
  • 1)命名规范,词根+表名等,主要用于库表字段

  • 2)开发规范,需求->反讲->开发->测试->上线/发布->DQC/报警

    • 需求文档格式

    • 技术文档格式,数据探查、逻辑理解、代码开发

    • 通用测试案例,极大、极小、平均、填充、枚举之类的

3.7、模型落地-建设理论-多维体系结构

多维体系结构(MD)有三个关键性概念:总线架构(Bus Architecture),一致性维度(Conformed Dimension)和一致性事实(Conformed Fact)

  • 总线矩阵:业务过程和维度的交点。矩阵的每一行对应都对应机构中的一个业务过程,每一列都和一个业务维度相对应,用叉号填充显示的是和每一行相关的列。业务过程应该先从单个数据源系统开始,然后再进行多数据源的合并

  • 一致性维度:同一集市的维度表,内容相同或包含。一致性维度要么是统一的,要么是维度表的一个子集。在同一个集市内,一致性维度的意思是两个维度如果有关系,要么就是完全一样的,要么就是一个维度在数学意义上是另一个维度的子集

  • 一致性事实:不同集市的同一事实,需保证口径一致,单位统一。指每个度量在整个数据仓库中都是唯一的统计口径,为了避免歧义,一个度量只有唯一的业务术语。为了能在多个数据集市间进行交叉探查,一致性事实主要需要保证两点:第一个是KPI的定义及计算方法要一致,第二个是事实的单位要一致性。如果业务要求或事实上就不能保持一致的话,建议不同单位的事实分开建立字段保存

3.8、模型落地-多维体系结构-事实表(规范类)

3.8.1、事实表设计

事实表有三种类型 : 事务事实表、周期快照事实表和累积快照事实表

3.8.2、事实表设计方法

Kimball的维度模型设计方法有以下四个步骤:选择业务过程、声明粒度、确定维度、确定事实

3.8.3、事实表分类

事务型事实表,事务事实表用来记录各业务过程,它保存的是各业务过程的原子操作事件,即最细粒度的操作事件。粒度是指事实表中一行数据所表达的业务细节程度,事务型事实表可用于分析与各业务过程相关的各项统计指标,由于其保存了最细粒度的记录,可以提供最大限度的灵活性,可以支持无法预期的各种细节层次的统计需求

周期快照事实表,周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,主要用于分析一些存量型(例如商品库存,账户余额)或者状态型(空气温度,行驶速度)指标

累计快照事实表,累计快照事实表是基于一个业务流程中的多个关键业务过程联合处理而构建的事实表,如交易流程中的下单、支付、发货、确认收货业务过程。用于记录当前事务的状态变化

3.9、模型落地--多维体系结构-维度表(规范类)

3.9.1、维度建模选择:星型、雪花、星座

星型模型是一张事实表,根据主键关联多张一级维度表

星型架构是一种非规范化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余。很多统计查询不需要做外部的连接,通过冗余换取运行效率

雪花模式是星型模式的扩展,其中某些维表被规范化,进一步分解到附加维度表中。

优点是:通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能

星座模式是星型模式延伸而来,星型模式是基于一张事实表的,而星座模式是基于多张事实表的,而且共享维度信息。常用于数据关系更复杂的场景。也称事实星座模型

3.9.2、缓慢变化维处理

常见的缓慢变化维处理方式有三种:

  • 1)直接覆盖:不记录历史数据,薪数据覆盖旧数据

  • 2)新加一行数据(纵向扩展):使用代理主键+生效失效时间或者是代理主键+生效失效标识(保存多条记录,直接新添一条记录,同时保留原有记录,并用单独的专用字段保存)

  • 3)新加两个字段(横向扩展):一个是previous,一个是current,每次更新只更新这两个值,但是这样职能保留最近两次的变化(添加历史列,用不同的字段保存变化痕迹,因为只保存两次变化记录,使用与变化不超过两次的维度)

3.9.3、拉链表的应用

拉链表是什么:记录数据的历史状态以及变化记录。记录一个事物从开始,一直到当前状态的所有变化的信息。拉链表可以避免按每一天存储所有记录造成的海量存储问题,同时也是处理缓慢变化数据的一种方式,适用场景:

  1. 单张表数据量很大;

  2. 表中的部分字段会被update更新操作,如用户联系方式,产品的描述信息,订单的状态等等;

  3. 需要查看某一个时间点或者时间段的历史快照信息

  4. 变化的比例和频率不是很大,比如,总共有1000万的会员,每天新增和发生变化的有10万

四、数据治理和数据管控
4.1、数据资源梳理,数据交换平台

技术信息梳理,来源媒介,存储媒介,计算方式

业务信息梳理,业务来源梳理、数据内容分类梳理、数据形式梳理等

4.2、数据采集清洗,数据交换平台和数据开发平台承接

采集方式,根据4.1的业务信息梳理确定采集方式写入到kafka,供下游使用,具体如下:

    1. 客户端埋点数据,API采集,写入kafka;

    2. 服务端埋点数据也可以采用API,也可以采用flumeNG采集磁盘数据;

    3. 业务库数据可以采用binlog采集,比如flinkcdc的方式;

    4. 外部数据采用API采集,如三方转化数据等

数据清洗,分为离线和实时两类处理,存储媒介分为kafka、hdfs类、olap类

    1. 实时数据清洗,方式为flinksql,存储到kafka 或者 olap 如clickhouse、doris

    2. 离线数据清洗,方式为sparksql/hivesql 存储到olap 或者hdfs中

4.3、数据存储,即数据仓库建设
  • 数仓建设规范-维度建模,自低向上、数据域+业务过程、4层结构

  • 数仓命名规范-表名、任务名、字段名称、通用词根、业务名称等等

  • 数仓开发规范-需求理解、需求反讲、需求开发、需求测试、需求上线等

  • 数仓评价标准-1987

4.4、数据管理,即元数据管理,解决找数据和口径的问题,数据地图承接

4.4.1 元数据管理

  1. 业务元数据,数据归属业务主题、业务描述

  2. 技术元数据,数据来源信息、加工等技术类的信息情况

  3. 应用元数据,使用场景,口径信息等情况

4.4.2 血缘追踪

表血缘、字段血缘,发现数据错误,数据治理团队需要快速定位数据来源,修复数据错误,如何构建依赖树,如何构建联级重跑

4.5、数据使用,库表、文件和API接口

对外提供要求数据口径一致,性能分级保障;形式库表、文件和API接口;API接口共享可以使用API网关实现,常见的功能是自动化的接口生成、申请审核、限流、限并发、多用户隔离、调用统计、调用审计、黑白名单、调用监控、质量监控等

五、数据仓库面试题-理论相关
  • 什么是数据仓库?

  • 如何构建数据仓库?

  • 概念模型、逻辑模型、物理模型分别介绍一下?

  • SCD常用的处理方式有哪些?

  • 模型设计的思路?业务驱动?数据驱动?

  • 数仓架构为什么要分层?

  • 事实表的类型?

  • 维度建模步骤?

  • 维度建模的三种模式?

  • 数仓架构进化?

  • 数据仓库如何保证数据质量?

  • 开发流程/你们是怎么测试的?

  • 维度建模过程?

  • 维度建模的三种模式?

  • 事实表都有哪几种?

  • 如何做数据治理?

  • 元数据的理解?

  • 如何分层?分层为了解决什么问题?优劣是什么?

  • 数仓高内聚低耦合是什么含义?是怎么做的?

  • 生产中对实时数仓是如何做数据质量管理的,如果同一指标离线和实时计算结果不一致,该怎么处理?

  • Order By、sort by、distribute by 的差异是什么?

  • 数据质量如何保证?指标一致性如何保证?

  • ods全量,增量如何确定?有哪些衡量点?

  • 数仓模型优化手段及方式、规范与规划?

  • 主题是如何划分的?具体case

  • dwd、dws 的英文是啥?各层都做了哪些事情?

  • 方法论,数据仓库怎么构建?你是怎么分主题域的?对现在的业务有什么看法?现在的仓库是个什么情况,各个分层有什么特点?为什么这么分?

  • 拉链表,缓慢变化维

  • 给你一个新业务,怎么开展?

  • 数据治理,数据质量,口径一致

  • CTE的优缺点?

  • 你负责的那部分,数仓架构是怎么设计的?

  • 实时数仓做过吗,简单说下

  • 用户画像是怎么考虑的?

  • 讲一个最复杂的业务场景

  • 数据赋能,你如何体现数仓职位的价值

  • 数据总矩阵的理解?行和列表示什么?

  • 一致性维度理解?一致性指标理解?

  • 数据仓库中如何保证数据质量?有哪些常见的数据质量问题?

  • 数据治理在数据仓库中的作用是什么?如何实现数据治理?

  • 说说你从0-1搭建数仓都做了什么?你觉得最有挑战的是什么?

  • 流批一体有什么好处?为什么要搞流批一体?

  • 原子指标、修饰类型、修饰词、时间周期、派生指标

  • 数仓每一层有什么难点?

  • 维度退化是什么?

  • 事实表分类?

  • 事实表分类?

  • 数据治理中的数据安全、数据规范、数据质量如何去保障?

六、两句总结:
  1. 数据仓库开发=90%的业务领域知识+10%的大数据/后端开发技术

  2. 数据仓库组成=模型建设+数据治理+需求满足

图片

        10年互联网研发经验,数据平台总监及投放增长研发负责人,负责数据平台期间,完成埋点改造、数据工具建设、离线及实时数仓建设,业务日增数据量约500T;负责增长平台期间,完成自助归因平台的建设,涉及归因、回传优化、回传等功能,支撑日投放金额近千万,同时在RTA/RTB也有深度实践。目前,在做特征工程和算法模型相关的工作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/504411.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言经典测试题10

1.题1 int fun( int x) {int n 0;while (x 1){n;x x | (x 1);}return n; } int main() {int ret fun(2014);printf("%d", ret);return 0; } 上述代码运行结果是什么呢? 我们来分析一下:这里的fun函数有一个while循环,其判断…

详解队列的接口函数

队列的定义 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。 进行插入操作的…

CleanMyMac X2024免费Mac电脑清理和优化工具

CleanMyMac X是一款专业的 Mac 清理和优化工具,它具备一系列强大的功能,可以帮助用户轻松管理和维护他们的 Mac 电脑。以下是一些关于 CleanMyMac X 的主要功能和特点: 智能清理:CleanMyMac X 能够智能识别并清理 Mac 上的无用文件…

AJAX实例

AJAX - Asynchronous JavaScript and XML - 异步的JavaScript与XML,不是一门新技术,只是一个新的术语。(老技术新玩法) - 使用AJAX,网页能够将增量更新呈现在页面上,而不需要刷新整个页面。 - 虽然X代表…

考研机试C++题目精选

更多内容会在godownio.github.io更新 算法练习(C代码) 考研上机或C语言代码笔试准备,暨大机试原题letcode牛客中南大等高校机试 快速幂算法 题目:输入一个整数 n ,求 n^n 的个位数是多少。 快速幂算法:…

初识C语言—常见关键字

变量的命名最好有意义 名字必须是字母&#xff0c;数字&#xff0c;下划线组成&#xff0c;不能有特殊字符&#xff0c;同时不能以数字开头 变量名不能是关键字 typedef---类型定义&#xff0c;类型重命名 #include <stdio.h>typedef unsigned int uint; //将unsigne…

第七十二天 漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

第72天 漏洞发现-Web框架中间件&联动&Goby&Afrog&Xray&Awvs&Vulmap 知识点&#xff1a; 1、Bup简单介绍&使用说明 2、Xray简单介绍&使用说明 3、AWWS简单介绍&使用说明 4、Goby简单介绍&使用说明 5、Afrog简单介绍&使用说明 6、…

Qt/自定义控件的封装

新建文件&#xff0c;选择Qt设计师界面类 创建空界面 这是自己控件封装的文件&#xff0c;双击跳转到设计界面进行设计 跳转到其他的ui界面&#xff0c;创建一个widget 右键&#xff0c;选择提升为 在提升的类名称输入刚刚创建的类名&#xff0c;添加后选择提升&#xff0c;勾选…

2024年经典【自动化面试题】附答案

一、请描述一下自动化测试流程&#xff1f; 自动化测试流程一般可以分为以下七步&#xff1a; 编写自动化测试计划&#xff1b; 设计自动化测试用例&#xff1b; 编写自动化测试框架和脚本&#xff1b; 调试并维护脚本&#xff1b; 无人值守测试&#xff1b; 后期脚本维…

C++:内存管理|new和delete

创作不易&#xff0c;感谢三连支持&#xff01; 一、内存分布 为什么需要内存管理呢&#xff1f;&#xff1f;因为我们在程序的运行过程中会需要各种各样的数据&#xff0c;而我们根据数据的不同存储在不同的区域里面&#xff0c;是为了更高效地处理数据。而C语言相比Java来说…

可视化场景(1):销售业绩大屏-是骡子是马,牵出溜溜

销售业绩可视化大屏的是一种有力的销售数据管理工具&#xff0c;贝格前端工场分享一批给友友们&#xff0c;如需要定制&#xff0c;可以与我们联络&#xff0c;开始了。 销售业绩可视化大屏是一种将销售数据以图表、数字、文字等形式展示在大屏幕上的数据可视化工具。它的作用主…

flutter 文字一行显示,超出换行

因为app有多语言&#xff0c;中文和其他语言长度不一致&#xff0c;可能导致英文会很长。 中文样式 英文样式 代码 Row(mainAxisAlignment: MainAxisAlignment.end,crossAxisAlignment: CrossAxisAlignment.end,children: [Visibility(visible: controller.info.fee ! null,ch…