〇、前言
当数据开发谈论建模时,我们在谈论什么?
数仓建模就是建表,建一系列表,这一系列表能屏蔽系统层面的变化和问题、同时能应对分析应用的各种诉求;能高质量的保证数据生产输出到下游,又能高效率的支持上层应用,还能高扩展性的应对业务运行阶段的变化。
那么从面试官的角度可以从哪些方面来考察候选人呢,下面是一些常见的问题和答案参考。
一、数据建模常见面试问题
1.数仓为什么要分层?
1)清晰数据结构:让每个数据层都有自己的作用和职责,在使用和维护的时候能够更方便、更容易理解。
2)统一数据口径:让应用层提供统一的出口,对外输出标准的数据口径。尽可能避免不一致的问题。
3)简化复杂问题:让每个层只解决特定的问题。从而把复杂的任务拆解成多个步骤来分步完成。每次可以聚焦一个简化问题处理。
4)减少计算重复:让通用的计算逻辑沉淀到中间层,可以极大地减少重复计算、重复开发的工作。
屏蔽业务系统变化:让宽表及分析层只用关注业务层的逻辑,而系统数据变化都可以被屏蔽在明细以及数据接入层。降低运维成本,增加稳定性。
1.1数据仓库分主题的原因是什么?
提高数据分析的效率:数据分析人员通常需要对特定主题的数据进行分析。分主题的数据可以将特定主题相关的数据集中在一起,使数据分析人员能够更快地查找、理解、使用所需的数据,从而提高数据分析的效率。
降低数据维护成本:数据仓库中的数据需要定期进行维护。而相似的主题数据通常有着相似的数据来源或者数据组织方式。通过分主题使数据迭代更容易进行,降低数据维护成本。
真题回顾
2.能讲一下Kimball建模和Inmon建模的区别和优劣吗?
1. 建模顺序
Kimball建模是自底向上的,从数据集市开始,逐步扩展到数据仓库。数据集市是面向特定主题或业务需求的数据库,它通常是从数据仓库中抽取数据构建而成。
Inmon建模是自顶向下的,先构建一个面向整个企业的规范化数据仓库,然后再根据需要从中抽取数据构建数据集市。
2. 数据模型
Kimball建模使用维度建模方法,将数据组织成事实表和维度表。事实表存储度量数据,维度表存储描述性数据。
Inmon建模使用范式建模方法,将数据组织成实体关系模型。实体关系模型是根据数据之间的关系来组织数据的。
3. 应用场景
Kimball建模适用于快速变化的业务环境,因为它可以快速构建数据集市来满足新的业务需求。
Inmon建模适用于需要进行复杂分析的业务环境,因为它可以提供一个完整、一致的数据视图。
真题回顾
3.如何评估一个数据仓库的好坏?
系统工程的建设程度都可以从价值五角星的角度来进行评估,即质量、效率、成本、安全、体验。而数仓价值五角星的评估可以参考下列指标。
质量 | 及时性 | 超时任务数 | 运行时间超过某个阀值的任务数(对于实时数仓可以是日志处理延迟) |
失败任务数 | 运行失败的任务数(对于实时数仓可以是日志处理失败) | ||
一致性 | ADS模型热度 | ADS层模型被使用的次数(反应统一口径后的模型表的利用情况) | |
ODS模型热度 | ODS层模型被使用的次数(反应未统一口径的原始日志被利用情况) | ||
准确性 | DQC成功率 | 满足DQC监控要求的指标占比 | |
效率 | SLA成功率 | 满足SLA要求的任务占比 | |
查询时长 | 查询数据花费的时间 | ||
多表关联率 | |||
成本 | 存储量 | 数仓中模型存储数据量大小 | |
计算量 | 数仓任务使用的CPU/内存计算时长 | ||
任务数 | 数仓中计算任务的总数 | ||
模型依赖度 | ODS、DW、ADS层模型的下游依赖数(反应模型的冗余情况,DW层应该被广泛共用,好的数仓应该减少过多冗余) | ||
存储增长健康度 | 业务核心指标增长量/存储增长量 | ||
安全 | 密级覆盖度 | 拥有密级设置的模型占比(财务、用户信息应该是高密,高密表占比合理。数据仓库应该能够对数据进行访问控制,限制对数据的访问和操作权限。) | |
高密表热度 | 高密模型被访问的次数 | ||
体验 | 覆盖度 | 数据需求处理时长 | 数据需求平均开发时长(数据场景覆盖丰富,应该较快完成数据需求) |
易用度 | 数据产品PV、UV、使用时长 | 数据产品访问用户数、访问次数、使用时长 | |
数据用户占比 | 使用数据产品的人占公司总员工人数的比 |
而除了回答这些理论指标以外,还可以结合实际项目的情况,聊聊自己参与的治理或者建设项目。
例如成本相关的治理,通过对大存储任务进行优化下线使得存储和计算成本下降;或者对于多表关联的治理,一些跨业务流程的分析常使用多个表进行合并分析,这时候可以对多个表进行整合设计,降低多表关联率;又或者对于ODS模型热度过高的一些主题,是不是中间层建设不足,需要重新对dwd\dws层进行设计,提升中间层的复用性、加强主题指标的一致性。
整个回答有框架、有细节会更加令面试官信服。
真题回顾
4.如何评估一个数据模型的好坏?
完善度(跨层引用率):ODS层直接被DWS/ADS/DM层引用的表,占所有ODS层表比例。
每一层的数据都比较完备,跨层引用率低,出指标速度快 --也可以叫覆盖度,即汇总数据能直接满足多少查询需求。应用层访问汇总层数据的查询占比。跨层引用率。(比较好的模型,使用方式是可以直接从该模型获取所有想要的数据的,如果DWS,ADS,DM层直接引1用ODS层的表比例太大,即跨层引用率太高,则该模型不是最优,可以继续优化)
复用度(模型引用系数):模型被读取并产出下游模型的数量
规范度:主题域归属、分层信息、脚本及任务命名规范、表、字段命名复合规范(清晰、一致、见名知意,是否依赖词根)
扩展性:新增加的模型是否和老的模型出现冲突。
稳定性:能否保证日常的SLA
低成本:计算时间成本、计算资源成本、存储成本。
准确性&一致性:输出的指标数据质量能够保证。(需要质量管理系统和指标一致性管理方案针对数据源、口径、指标管理平台等进行保证)
真题回顾
5.什么是星型模型,什么是雪花模型?
星型模型是最常用的维度建模方式。星型模型会以事实表作为中心,所有的维度表直接关联事实表,像星星一样展开。
还有三个特点:
a.这里的事实表只有一个,且维度表只和事实表关联,互相之间没有联系;
b.每个维表主键为唯一值单列放置在事实表中,作为两边的关联键;
c.以事实表为核心,维表围绕核心呈星型分布;
雪花模型是对星型模型的扩展。雪花模型的维度表可以再关联其他维度(如地域维表关联国家维表,国家维表关联省市区维表等)。但由于多表关联计算成本高且不易理解,现在都不用了。
真题回顾
6.dwd层模型建设的核心是什么?
刻画业务过程、并屏蔽系统的变化。dwd层通常是面向业务过程、业务系统建模,最主要的目的是屏蔽业务系统的变化,并且每个模型能刻画一到两个业务过程。
例如互联网金融中常出现申请表模型。申请表能直接刻画用户填写申请表单页提交到申请系统的整个过程。从系统ER模型的角度来考虑,这里会有游客用户表(申请流水号、设备信息、APP信息、LBS信息等)、表单表(选填产品信息、人口属性信息、四要素信息等)、申请操作表(申请时间、提交时间、来源渠道、是否完成标志、审批提交回执信息等)三张ods表,这三张表中信息那些需要保留,又需要按照何种时序才能把流水组合成为事件,这些都是属于如何刻画业务过程的部分。
另外是屏蔽系统变化,比如申请完成这个业务状态在系统数据标识中是可能变化的,一开始以用户点击提交按钮作为申请完成的数据表示,但随着业务系统升级,需要配合产品信息来看,比如某类产品需要获得一些审批系统回执信息才能说明用户本次申请完成了,这时候就需要在dwd层把这部分变化给阻拦,防止扩散到dws甚至ads层模型中,做到只在申请表这一个地方去维护申请完成这个业务逻辑。
真题回顾
7.dws是怎么做主题划分的?
首先dws层的功能就是面向主题分析,构建口径统一的统计指标,为上层提供公共指标的宽表。
既然是面向分析,那可以考虑两种划分主题的方法,面向分析场景和面向分析主体。
例如分析场景包括获客、经营、财务、服务体验、风控、人效等;分析主体包括产品、账户、客户、渠道等。
真题回顾