数仓面试问题
数仓分层理论
- 贴源层:作用是讲业务系统源数据落地到数据仓库中,hive中建设为text表,不保存历史
- 历史层:hive中通常建为orc表,保存贴源层每天历史数据,为后续数仓提供数据服务
- 标准层(仓库层):针对实际业务划分主题域,并对源系统数据进行清洗以及标准化。清洗不同格式日期格式,空格等问题,并根据词根对表、以及字段命名标准化,同时对数据码值进行国标标准化,例如证件类型,职业等 (通常使用维度建模)
- 轻度汇总层:根据实际业务与需求,对数据进行轻度汇总,基本上都是大宽表,一般汇总到客户维度
- 应用层(报表层)(指标层):根据具体需求生成具体的数据,并推送数据到应用系统中
为什么对数仓分层
- 数仓设计的根本原因是为了解决业务问题,数仓分层会把问题进行拆分,复杂的问题简单化。
- 数据表管理混乱,分层后数据结构更加清晰,每一层做的事情一目了然,遇到事情可以更好的定位。
- 数据分层后,每一层都会进行对应的数据处理以及加工,其结果可以复用,减少大量重复开发工作。
- 源系统业务发生变化整个数仓涉及条线会重新开发,工作量巨大,若源发生变动,只需要改动部分层。
处理大数据过程中如何保证得到期望值
- 数据接入阶段不丢失数据
- ETL阶段做好清洗和转换工作
- 汇总与加工阶段要保证加工的逻辑与需求相匹配
建模中星型模型和雪花模型的区别
- 星形模型:最常用的维度建模方式。星型模式是以事实表为中心,所有的维度表直接连接在事实表上,维表之间没有关联。
- 雪花模型:维表也可以作为事实表存在,导致事实表在使用中需要关联多层维表。
- 星座模型:多张事实表共享维度信息。
什么是数据仓库?
- 1)数据仓库是用于支持决策、面向分析型数据处理;
- 2)对多个异构的数据源有效集成,集成后按照主题进行重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改
数据仓库和数据库的区别?
- 数据库是面向事务处理的,数据是由日常的业务产生的,并且是频繁更新的;数据仓库是面向主题的,数据来源多样化,经过一定的规则转换得到的,用于分析和决策
- 数据库一般用来存储当前事务性数据,如交易数据;数据仓库一般存储的是历史数据
- 数据库设计一般符合三范式,有最大的精确度和最小的冗余度,有利于数据的插入;数据仓库设计一般不符合三范式,有利于查询
如何构建数据仓库
- 调研:业务调研、需求调研、数据调研
- 划分主题域:通过业务调研、需求调研、数据调研最终确定主题域
- 构建总线矩阵、维度建模
- 设计数仓分层架构
- 模型落地
- 数据治理
什么是数据中台
- 数据中台是通过数据技术,对海量数据进行采集、计算、存储、加工,同时统一标准和口径。数据中台把数据统一之后,会形成标准数据,再进行存储,形成大数据资产层,进而为客户提供高效服务。这些服务和企业的业务有较强关联性,是企业所独有且能复用的,他是企业业务和数据的积淀,其不仅能降低重复建设,减少烟囱式协助的成本,也是差异化竞争的优势所在。
数据中台是通过整合公司开发工具、打通全域数据、让数据持续为业务赋能,实现数据平台化、数 据服务化和数据价值化。数据中台更加侧重于“复用”和“业务”
数据中台、数据仓库、大数据平台、数据湖的关键区别是什么?
基础能力上的区别
- 数据平台:提供的是计算和存储能力
- 数据仓库:利用数据平台提供的计算和存储能力,在一套方法论的指导下建设的一整套的数据表
- 数据中台:包含了数据平台和数据仓库的所有内容,将其打包,并且以更加整合以及更加产品化的方式对外提供服务和价值
- 数据湖:一个存储企业各种各样原始数据的大型仓库,包括结构化和非结构化数据,其中湖里的数据可供存取、处理、分析和传输
业务能力上的区别
- 数据平台:为业务提供数据主要方式是提供数据集
- 数据仓库:相对具体的功能概念是存储和管理一个或多个主题数据的集合,为业务提供服务的方式主要是分析报表
- 数据中台:企业级的逻辑概念,体现企业数据产生价值的能力,为业务提供服务的主要方式是数据API
- 数据湖:数据仓库的数据来源
总结:
- 数据中台距离业务更近,数据复用能力更强,能为业务提供速度更快的服务,数据中台在数据仓库和数据平台的基础上,将数据生产为一个个数据API服务,以更高效的方式提供给业务。数据中台可以建立在数据仓库和数据平台之上,是加速企业从数据到业务价值的过程的中间层。
SCD(缓慢变化维)常用的处理方式有哪些?
- 直接覆盖:不记录历史数据,薪数据覆盖旧数据
- 新加一行数据(纵向扩展):使用代理主键+生效失效时间或者是代理主键+生效失效标识(保存多条记录,直接新添一条记录,同时保留原有记录,并用单独的专用字段保存)
- 新加两个字段(横向扩展):一个是previous,一个是current,每次更新只更新这两个值,但是这样职能保留最近两次的变化(添加历史列,用不同的字段保存变化痕迹,因为只保存两次变化记录,使用与变化不超过两次的维度)
数仓如何确定主题域?
- 按照业务或者业务过程划分:比如一个靠销售广告位置的门户网站主题域可能会有广告域,客户域等,而广告域可能就会有广告的库存,销售分析、内部投放分析等主题;
- 根据需求方划分:比如需求方为财务部,就可以设定对应的财务主题域,而财务主题域里面可能就会有员工工资分析,投资回报比分析等主题;
- 按照功能或者应用划分::比如微信中的朋友圈数据域、群聊数据域等,而朋友圈数据域可能就会有用户动态信息主题、广告主题等;
- 按照部门划分:比如可能会有运营域、技术域等,运营域中可能会有工资支出分析、活动宣传效果分析等主题;