数仓开发面试题汇总-数据建模&数据治理

1. 如何建设数仓,如何构建主题域

        数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。
        可以这样理解:数据仓库对异构数据源进行集成,集成后按照主题进行了重组,并包含历史数据,且不再修改。
        如果对数据仓库还不够理解,可以先搞清楚关系型数据库与数据仓库的区别,OLTP和OLAP的区别等。
        如何建设数仓,技术方案选型上有很多选择:云服务/自建、流处理/批处理、MPP/Hadoop;数据建模方面可以参考阿里数据管理方法论OneData,该方法论是基于Kimball的维度建模理论并做了改进:包含统一的指标定义体系、模式设计体系以及配套工具。
        OneData实施过程(螺旋迭代):
        (1) 数据调研:
                1 业务调研:业务线、业务模块、业务过程
                2 需求调研:找分析师、运营人员了解收集他们的报表需求,以及调研现有的报表。
        (2) 架构设计:
                1 数据域划分:

        数据域就是主题域。数据域是指面向业务分析,将业务过程或者维度进行抽象的集合。
        1.业务过程可以概括为一个个不可拆分的行为事件,在业务过程之下,可以定义指标;
        2.维度是指度量的环境,如买家下单事件,买家就是维度。
        为保障整个体系的生命力,数据域是需要抽象提炼,并且长期维护和更新的,但不轻易变动。
        在划分数据域时,既能涵盖当前所有的业务需求,又能在新业务进入时无影响地被包含进已有的数据域中和扩展新的数据域。
 

        常见的划分主题域的方法有:按分析需求、按产品功能、按业务系统、按业务线、按部门等等。


                2 构建总线矩阵:
                需要做两件事情:①每个数据域下有哪些业务过程;②业务过程与哪些维度相关,并定义每个数据域下的业务过程和维度。
        (3) 规范定义:主要定义指标体系、维度属性规范定义
        (4) 模型设计:主要包括维表设计和事实表设计
               


        

       

2. 缓慢变化维 几种处理方式

        SCD(Slowly Changing Dimensions):数仓的特点之一就是反映历史变化,如何处理维度变化是维度设计的重要工作之一。与增长较快的事实表相比,维度变化相对缓慢。
        根据Kimball建模理论,简单讲有三种处理方式:
        方式1. 重写维度值:不保留历史数据,始终取最新数据;
        方式2. 插入新的维度行:维度变化前的事实与过去的维度值关联,维度值变化后的事实和当前的维度值关联;
        方式3. 添加维度列:采用方式2不能将变化前后记录的事实归一为变化前的维度或者变化后的维度。可以用增加一个属性列来解决。
        Kimball建模理论中完整的方式共8种类型(实际是7中,类型0不算,另外类型4、5、6、7不常用),如下:
        类型0:属性值不可能变,原样保留。
        类型1:重写,覆盖原值,类型1不能反映历史
        慎用该类型,比如一个人改名了,覆盖原值说得通。如果一个人换城市了,那么他在以前的城市做的事情当然不能归到现在的城市。
        要想清楚,新值能否直接取代原值。比如一个人的性别从未知到男,当然就可以直接取代。
        类型2:增加新行(代理键会变化)。同时增加两个日期字段来表示有效期:①开始日期;②截止日期(当前有效值的截止日期可以设置一个很大的日期如9999-12-31)。另外事实表中使用维表的代理键,这样旧的事实关联旧的维表代理键值,新的关联新的代理键值。
        类型3: 增加新属性。比如增加一个“以前部门”。
        类型4: 增加微型维度。比如用户的几个属性变化很快,那么把它们拿出去单独建一张表,可以对这些属性做去重,数量会少很多;而且此维度是作为一个维度在事实表中去引用。通常使用的是这些维度值的笛卡尔积的组合来进行建表,同时创建代理键,没有自然键。
        类型5: 类型1+类型4。在微型维度做为用户维度的支架,维表中增加字段存储最新的微信维度的代理键值。
        类型6: 类型1+类型2+类型3。通过类型3区分当前和历史两个字段,然后通过类型2对历史字段进行多行处理,最后通过类型1对当前字段写入最新值。
        类型7:类型1+类型2。分为:双重外键、单外键,分出两张表(或者一张表和一个当前值的视图),一张类型2存历史值,一张类型1存当前值,实时表中通过两个外键关联这两张表叫双重外键,实时表中通过1个自然键或者代理键来关联为单外键。

参考:深入解析缓慢变化维 - 知乎

3. 什么是维度建模,星型模型与雪花模型的区别

        维度建模是一种将大量数据结构化的逻辑设计手段,包含维度和指标,它不像ER模型目的是消除冗余数据,维度建模是面向分析,最终目的是提高查询性能,所以会增加数据冗余,并且违反三范式。
        维度建模也是重点关注让用户快速完成需求分析且对于复杂查询及时响应,根据事实表和维度表的关系,可将常见的模型分为:①星型模型;②雪花模型;③星座模型。其中最常用的其实是星型模型。
        建模原则:
        1.高内聚和低辑合:将业务相近或者相关、粒度相同的数据设计为一个逻辑或者物理模型:将高概率同 时访问的数据放一起 ,将低概率同时访问的数据分开存储。
        2.核心模型与扩展模型分离:建立核心模型与扩展模型体系,核心模型包括的宇段支持常用的核心业务,扩展模型包括的字段支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

话数Science

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值