算法面试必备-----数据仓库常见面试题

算法面试必备-----数据仓库常见面试题

  • 算法面试必备-----数据仓库常见面试题
    • 问题:什么叫数据仓库?
    • 问题:数据仓库建模
      • 为什么需要数据仓库建模?
      • 数据仓库建模方法?
        • 1、ER模型
        • 2、维度建模
    • 问题:数据湖的理解?
    • 问题:基本概念的解释:
      • 元数据:
        • 元数据的理解?
          • 技术元数据
          • 业务元数据
        • 元数据管理系统?
          • 元数据管理功能
          • 数据管理标准
          • 元数据管理系统
      • ODS: Operational Data Store
      • Data Mart
      • DDS(decision-support system)决策支持系统:
      • 什么叫OLAP?用途是什么?
      • OLTP与OLAP的区别
      • OLAP和OLTP的模型方法的选择?
      • 事实表
      • 维度表
      • 退化维
      • 粒度:(granularity)
      • 钻取:
      • E T L
      • 工作流
        • 一.抽取
          • 抽取中的数据处理方法:
          • 如何实现增量抽取
        • 二.清洗与转换
        • 三.加载经过前两步处理后的数据可直接加载入数据仓库
      • 维度建模(dimensional modeling):
      • 查找表
    • 问题:数据仓库项目最重要或需要注意的是什么,以及如何处理?
    • 问题:数据仓库的基本架构是什么?(数据源,ETL, data stage,ODS,data warehouse,datamart,OLAP等等)
    • 问题:如何构建数据仓库?
    • 问题:数据库及数据仓库模型设计的三个主要步骤
      • 概念数据模型CDM
      • 逻辑数据模型LDM
      • 物理数据模型PDM
    • 问题:数据库和数据仓库有什么区别?
    • 问题:构建企业级数据仓库五步法:
    • 问题:什么是数据中台?
    • 问题:如何建设数据中台?
    • 问题:数据中台、数据仓库、大数据平台的关键区别是什么?
    • 问题:大数据的一些相关系统?
    • 问题:数仓中是如何划分主题的
    • 问题:数仓如何确定主题域?
      • 主题
      • 主题域
      • 确定主题内容
    • 问题:数仓分层
    • 问题:简述数据仓库中的表的基本类型,以及为了保证引用完整性该以什么样的顺序对它们进行加载
    • 问题:事实表和维度表的概念及类型
      • 事实表的概念
      • 事实的类型
      • 维度表
      • 维度分类
    • 问题:星型模型和雪花模型区别
    • 问题:拉链表使用场景和实现方式?
    • 问题:拉链表性能优化
    • 问题:缓慢变化维的设计?
    • 问题:数据相关问题:
      • 如何控制数据质量?
      • 如何做数据治理?
      • 模型设计的思路?业务驱动?数据驱动?
      • 数据质量管理
      • 什么是数据模型?

算法面试必备-----数据仓库常见面试题

问题:什么叫数据仓库?

数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,它用于支持企业或组织的决策分析处理。

数据仓库是为了便于多维分析和多角度展现而将数据按特定的模式进行存储所建立起来的关系型数据库,它的数据基于OLTP源系统。

首先,用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;

其次,对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改

问题:数据仓库建模

为什么需要数据仓库建模?

数仓建模需要按照一定的数据模型,对整个企业的数据进行采集,整理,提供跨部门、完全一致的报表数据。

合适的数据模型,对于大数据处理来讲,可以获得得更好的性能、成本、效率和质量。良好的模型可以帮助我们快速查询数据,减少不必要的数据冗余,提高用户的使用效率。

数据建模进行全方面的业务梳理,改进业务流程,消灭信息孤岛,更好的推进数仓系统的建设。

数据仓库建模方法?

有四种模型:ER模型、维度模型、Data Vault模型、Anchor模型。用的较多的是维度模型和ER模型。

1、ER模型

ER模型用实体关系模型描述企业业务,在范式理论上满足3NF。数仓中的3NF是站在企业角度面向主题的抽象,而不是针对某个具体业务流程的实体对象关系的抽象。

采用ER模型建设数据仓库模型的出发点是整合数据,将各个系统中的数据按照主题进行相似性整合,并进行一致性处理。

ER模型特点
需要全方位了解企业业务数据
实施周期较长
对建模人员要求教高

2、维度建模

维度建模按照事实表和维度表来构建数仓。

维度建模从分析决策的需求出发构建模型,为分析需求服务。重点关注用户如何快速的完成数据分析,可以直观的反应业务模型中的业务问题,需要大量的数据预处理、数据冗余,有较好的大规模复杂查询的响应性能。

事实表
发生在现实世界中的操作性事件,其产生的可度量数值,存储在事实表中。从最细粒度级别来看,事实表的一行对应一个度量事件。事实表表示对分析主题的度量。‘

事实表中包含了与各个维度表相关联的外键,可与维度表关联。事实表的度量通常是数值类型,且记录数不断增加,表数据量迅速增长。

维度表
维度表示分析数据时所用的环境。

每个维度表都包含单独的主键列。维度表行的描述环境应该与事实表行完全对应。维度表通常比较宽,是扁平型的非规范表,包含大量的低粒度的文本属性。

注意
事实表的设计是以能够正确记录历史信息为准则

维度表的设计是以能够以合适的角度来聚合主题内容为准则

维度建模的三种模式
星形模型:以事实表为中心,所有的维度直接连接在事实表上。由一个事实表和一组维度表组成。

雪花模型:是对星形模型的扩展。雪花模型的维度表可以拥有更细的维度,比星形更规范一点。维护成本较高,且查询是要关联多层维表,性能较低

星座模型:基于多张事实表,多张事实表共享维度信息

维度建模步骤
选择业务过程
选择粒度
选定事实表
选择维度

问题:数据湖的理解?

数据湖是一个存储企业的各种各样原始数据的大型仓库,其中的数据可供存取、处理、分析及传输。
算法面试必备-----数据仓库常见面试题_第1张图片
算法面试必备-----数据仓库常见面试题_第2张图片

问题:基本概念的解释:

元数据:

描述数据及其环境的数据。两方面用途:

首先,元数据能提供基于用户的信息,如记录数据项的业务描述信息的元数据能帮助用户使用数据。

其次,元数据能支持系统对数据的管理和维护,如关于数据项存储方法的元数据能支持系统以最有效的方式访问数据。

元数据机制主要支持以下五类系统管理功能:

(1)描述哪些数据在数据仓库中;

(2)定义要进入数据仓库中的数据和从数据仓库中产生的数据;

(3)记录根据业务事件发生而随之进行的数据抽取工作时间安排;

(4)记录并检测系统数据一致性的要求和执行情况;

(5)衡量数据质量。

元数据的理解?

https://www.jianshu.com/p/f7c26b4ebe3c

狭义来讲就是用来描述数据的数据

广义来看,除了业务逻辑直接读写处理的业务数据,所有其他用来维护整个系统运转所需要的数据,都可以较为元数据。

定义:元数据metadata是关于数据的数据。在数仓系统中,元数据可以帮助数据仓库管理员和数据仓库开发人员方便的找到他们所关心的数据;元数据是描述数据仓库内部数据的结构和建立方法的数据。按照用途可分为:技术元数据、业务元数据。

技术元数据

存储关于数据仓库技术细节的数据,用于开发和管理数据仓库使用的数据

1、数据仓库结构的描述,包括数据模式、视图、维、层次结构和导出数据的定义,以及数据集市的位置和内容

2、业务系统、数据仓库和数据集市的体系结构和模式

3、由操作环境到数据仓库环境的映射,包括元数据和他们的内容、数据提取、转换规则和数据刷新规则、权限等。

业务元数据

从业务角度描述了数据仓库中的数据,他提供了介于使用者和实际系统之间的语义层,使不懂计算机技术的业务人员也能读懂数仓中的数据。

1、企业概念模型:表示企业数据模型的高层信息。整个企业业务概念和相互关系。以这个企业模型为基础,不懂sql的人也能做到心中有数

2、多维数据模型。告诉业务分析人员在数据集市中有哪些维、维的类别、数据立方体以及数据集市中的聚合规则。

3、业务概念模型和物理数据之间的依赖。业务视图和实际数仓的表、字段、维的对应关系也应该在元数据知识库中有所体现。

元数据管理系统?

元数据管理往往容易被忽视,但是元数据管理是不可或缺的。一方面元数据为数据需求方提供了完整的数仓使用文档,帮助他们能自主快速的获取数据;另一方面数仓团队可以从日常的数据解释中解脱出来,无论是对后期的迭代更新还是维护,都有很大的好处。元数据管理可以让数据仓库的应用和维护更加的高效。

元数据管理功能

数据地图:以拓扑图的形式对数据系统的各类数据实体、数据处理过程元数据进行分层次的图形化展示,并通过不同层次的图形展现。

元数据分析:血缘分析、影响分析、实体关联分析、实体差异分析、指标一致性分析。

辅助应用优化:结合元数据分析功能,可以对数据系统的应用进行优化。

辅助安全管理:采用合理的安全管理机制来保障系统的数据安全;对数据系统的数据访问和功能使用进行有效监控。

基于元数据的开发管理:通过元数据管理系统规范日常开发的工作流程

数据管理标准

对于相对简单的环境,按照通用的元数据管理标准建立一个集中式的元数据知识库

对于比较复杂的环境,分别建立各部分的元数据管理系统,形成分布式元数据知识库,然后通过建立标准的元数据交换格式,实现元数据的集成管理。

元数据管理系统

自研

apache atlas

ODS: Operational Data Store

ODS为企业提供即时的,操作型的,集成的数据集合,具有面向主题性,集成性,动态性,即时性,明细性等特点

ODS作为数据库到数据仓库的一种过渡形式,与数据仓库在物理结构上不同,能提供高性能的响应时间,ODS设计采用混合设计方式。

ODS中的数据是”实时值”,而数据仓库的数据却是”历史值”,一般ODS中储存的数据不超过一个月,而数据仓库为10年或更多.

Data Mart

为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据(subjectarea)。在数据仓库的实施过程中往往可以从一个部门的数据集市着手,以后再用几个数据集市组成一个完整的数据仓库。需要注意的就是在实施不同的数据集市时,同一含义的字段定义一定要相容,这样再以后实施数据仓库时才不会造成大麻烦。

DDS(decision-support system)决策支持系统:

用于支持管理决策的系统。通常,DSS包括以启发的方式对大量的数据单元进行的分析,通常不涉及数据更新。

什么叫OLAP?用途是什么?

联机分析处理,On-Line Analysis Processing 即从数据仓库中抽取详细数据的一个子集并经过必要的聚集,存储到OLAP存储器中供前端分析工具读取。

OLAP系统按照数据存储格式可以分为关系OLAP(RelationalOLAP,简称ROLAP)、多维OLAP(MultidimensionalOLAP,简称MOLAP)和混合型OLAP(HybridOLAP,简称HOLAP)三种类型。

ROLAP将分析要用的多维数据存储在关系数据库中,并根据应用的需要有选择的定义一批实视图也存储在关系数据库中

MOLAP将OLAP分析所要用到的多维数据物理上存储为多维数组的形式,形成“立方体”的结构。

HOLAP能把MOLAP和ROLAP两种结构的优点有机的结合起来,能满足用户各种复杂的分析请求。

OLTP与OLAP的区别

OLTP特点如下

联机事务处理OLTP(on-line transaction processing)主要是执行基本的,日常的事务处理,比如数据库记录的增删改查,比如在银行存取一笔款,就是一个事务交易
-1)实时性要求高
2)数据量不是很大
3)交易一般是确定的,所以是OLTP是对确定性的数据进行存取(比如存取款都有一个特定的金额)
4)并发现要求高并且严格要求事物的完整性安全性(比如你和你的家人同时间在不同的银行取同一账户的钱)

OLAP特点如下

联机分析处理OLAP(on-line Analytical Processing)是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果.典型的应用就是复杂的动态报表系统
1)实时性要求不是很高,很多应用的顶多是每天更新一下数据
2)数据量大,因为OLAP支持的是动态查询,所以用户也许要通过很多数据的统计后才能得到想要的信息,例如时间序列分析等,所以处理的数据量很大
3)因为重点在于决策支持,所以查询一般是动态的,也就是说允许用户随时提出查询的要求,所以在OLAP中通过一个重要概念维来搭建一个动态查询的平台或技术,供用户自己去决定需要知道什么信息

简单来说:

OLTP就是我们常说的关系型数据库,即记录即时的增删改查就是我们常用的,这是数据库的基础,TPCC(Transaction Processing Performance Council)属于此类
OLAP即联机分析处理,是数据仓库的核心部分.所谓数据仓库是对于大量已经由OLTP形成的数据的一种分析型的数据库,用于处理商业智能,决策支持等重要的决策信息.数据仓库是在数据库应用到一定程度后对历史数据的加工与分析,读取较多,更新较少,TPCH属于此类,对于OLAP,列存储模式比通常的行存储模式可能更具有优势
OLAP不应该对OLTP产生任何影响,(理想情况下)OLTP应该完全感觉不到OLAP的存在

算法面试必备-----数据仓库常见面试题_第3张图片

OLAP和OLTP的模型方法的选择?

OLTP系统是操作事物型系统,主要数据操作是随机读写,主要采用满足3NF的实体关系模型存储数据,在事物处理中解决数据的冗余和一致性问题。

OLAP系统是分析型系统,主要数据操作是批量读写,不需要关注事务处理的一致性,主要关注数据的整合,以及复杂大数据量的查询和处理的性能。

事实表

事实表是包含大量数据值的一种结构。事实数据表可能代表某次银行交易,包含一个顾客的来访次数,并且这些数字信息可以汇总,以提供给有关单位作为历史的数据。

每个数据仓库都包含一个或者多个事实数据表。事实数据表只能包含数字度量字段和使事实表与维度表中对应项的相关索引字段.,该索引包含作为外键的所有相关性维度表的主键。

事实数据表中的“度量值”有两中:一种是可以累计的度量值,另一种是非累计的度量值。用户可以通过累计度量值获得汇总信息。

维度表

用来描述事实表的某个重要方面,维度表中包含事实表中事实记录的特性:有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,维度表包含帮助汇总数据的特性的层次结构

缓慢变化维:在实际情况下,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。

处理方法: 1新信息直接覆盖旧信息,2,保存多条记录,并添加字段加以区分(用y,n;0,1,2或用时间来区别新旧记录)
3.保存多条记录,并添加字段加以区分4.另外建表保存历史记录.5混合模式

退化维

般来说事实表中的外键都对应一个维表,维的信息主要存放在维表中。但是退化维仅仅是事实表中的一列,这个维的相关信息都在这一列中,没有维表与之相关联。比如:发票号,序列号等等。
那么退化维有什么作用呢?
1、退化维具有普通维的各种操作,比如:上卷,切片,切块等

(上卷汇总,下钻明细;切片,切块:对二维数据进行切片,三维数据进行切块,可得到所需要的数据)
2、如果存在退化维,那么在ETL的过程将会变得容易。
3、它可以让group by等操作变得更快

粒度:(granularity)

是指数据仓库的数据单位中保存数据的细化或综合程度的级别,细化程度越高,粒度就越小。

钻取:

首先从某一个汇总数据出发,查看组成该数据的各个成员数据。

KPI(Key Performance Indication)关键业绩指标用来衡量业绩好坏比如销售这个主题,销售增长率、销售净利润就是一个KPI

E T L

extract/transformation/load寻找数据,整合数据,并将它们装入数据仓库的过程。

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析的依据。

工作流

抽取 清洗,转换 加载 数据流 业务系统 ODS 数据仓库

一.抽取

方法有三种:1.利用工具,例如datastage,informatic,OWB,DTS,SISS. 2,利用存储过程. 3,前两种工具结合.

抽取前的调研准备工作:1.弄清数据是从哪几个业务系统中来,各个业务系统的数据库服务器运行什么DBMS. 2.是否存在手工数据,手工数据量有多大。3.是否存在非结构化的数据。

抽取中的数据处理方法:

业务系统服务器与DW的DBMS相同时,在DW数据仓库服务器与原业条系统之间建立直接的链接关系就可以写select语句直接访问.

业务系统服务器与DW的DBMS不同时,对不能建立直接链接的话,可以将源数据导入.txt文件,在导入ODS中,或通过程序接口来完成.

对于文件类型数据源(.txt.xls)利用数据库工程将这个数据导入指定的数据库,如(oracle的SQL*LOADER,db2的import)

如何实现增量抽取

业务系统会记录业务发生的时间,我们可以用来做增量的标志,每次抽取之前首先判断ODS中记录最大的时间,然后根据这个时间去业务系统取大于这个时间所有的记录。

二.清洗与转换

清洗

数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。

清洗的数据种类: 1,不完整数据,2,错误数据,3重复的数据.

转换

1.不一致数据转换:编码转换(m,f;男女);字段转换(balance,bal);度量单位的转换(cm,m)

2.数据粒度的转换;业务系统数据存储非常明细的数据,而数据仓库中数据是用分析的,不需要非常明细,会将业务系统数据按照数据仓库粒度进行聚合.

3.商务规则的计算.不同企业有不同的业务规则,不同的数据指标,在ETL过程,将这些数据计算好之后存储在数据仓库中,供分析使用(比如KPI)

三.加载经过前两步处理后的数据可直接加载入数据仓库

用过什么ETL工具(informatica,ssis,owb,datastage),以及该工具简单讲述特点。

DataStage是一套专门对多种操作数据源的数据抽取、转换和维护过程进行简化和自动化,并将其输入数据集市或数据仓库目标数据库的集成工具。

它有四个组件:Administrator:用来管理project和环境变量。Manager:用于job,表定义,的引导,引出。Designer:用来设计job。Direct:用运查看job运行日志。

维度建模(dimensional modeling):

是数据仓库建设中的一种数据建模方法。按照事实表,维表来构建数据仓库,数据集市。这种方法最被人广泛知晓的名字就是星型模式(Star-schema)。

查找表

什么叫查找表,为什么使用替代键?(其实目的和上面一样,从基础表到缓慢维度表的过程中的一种实现途径)

替代键(alternate key)可以是数据表内不作为主键的其他任何列,只要该键对该数据表唯一即可。换句话说,在唯一列内不允许出现数据重复的现象。

代理键:

在关系型数据库设计中,是在当资料表中的候选键都不适合当主键时,例如资料太长,或是意义层面太多,就会用一个attribute来当代理主键,此主键可能是用流水号,来代替可辨识唯一值的主键

在数据仓库领域有一个概念叫Surrogate key,中文一般翻译为“代理关键字”。代理关键字一般是指维度表中使用顺序分配的整数值作为主键,也称为“代理键”。代理关键字用于维度表和事实表的连接。可以避免通过主键的值就可以了解一些业务信息

问题:数据仓库项目最重要或需要注意的是什么,以及如何处理?

数据质量,主要是数据源数据质量分析,数据清洗转换,当然也可以定量分析

数据仓库有**两个重要目的,**一是数据集成,二是服务BI

数据准确性是数据仓库的基本要求,而效率是项目事实的前提,数据质量、运行效率和扩展性是数据仓库项目设计、实施高明与否的三大标志;

问题:数据仓库的基本架构是什么?(数据源,ETL, data stage,ODS,data warehouse,datamart,OLAP等等)

数据仓库系统体系结构

1.数据源-> 2.ETL -> 3.数据仓库存储与管理-> 4.OLAP -> 5.BI工具

数据源:是数据仓库系统的数据源泉,通常包括企业各类信息,包括存放于RDBMS中的各种业务处理数据和各类文档数据;各类法律法规、市场信息和竞争对手的信息等等;

数据的存储与管理:数据的存储和管理是整个数据仓库的核心,是关键。数据仓库的组织管理方式决定了它有别于传统数据库,同时也决定了其对外部数据的表现形式。从数据仓库的技术特点着手分析,来决定采用什么产品和技术来建立数据仓库,然后针对现有各业务系统的数据,进行抽取、清理,并有效集成,按照主题进行组织。数据仓库按照数据的覆盖范围可以分为企业级数据仓库和部门级数据仓库(通常称为数据集市)。

OLAP服务器:

对需要的数据进行有效集成,按多维模型予以组织,以便进行多角度、多层次的分析,并发现趋势。其具体实现可以分为:ROLAP(关系型在线分析处理)、MOLAP(多维在线分析处理)和HOLAP(混合型线上分析处理)。ROLAP基本数据和聚合数据均存放在RDBMS之中;MOLAP基本数据和聚合数据均存放于多维数据库中;HOLAP基本数据存放于RDBMS之中,聚合数据存放于多维数据库中。

前端工具:主要包括各查询工具、数据分析工具、数据挖掘工具、种报表工具以及各种基于数据仓库或数据集市的应用开发工具。

数据分析工具主要针对OLAP服务器。报表工具、数据挖掘工具主要针对数据仓库。

问题:如何构建数据仓库?

数仓模型的选择是灵活的,不局限于某种模型方法。

数仓数据是灵活的,以实际需求场景为导向。

数仓设计要兼顾灵活性、可扩展性,要考虑技术可靠性和实现成本。

https://www.zhihu.com/question/19703294

1、系统分析,确定主题。通过与业务部门的交流,了解建立数仓要解决的问题,确认各个主题下的查询分析要求

2、选择满足数据仓库系统要求的软件平台。选择合适的软件平台,包括数据库、建模工具、分析工具等

3、建立数据仓库的逻辑模型。确定建立数据仓库逻辑模型的基本方法,基于主题视图,把主题视图中的数据定义转到逻辑数据模型中

4、逻辑数据模型转换为数据仓库数据模型

5、数据仓库数据模型优化。随着需求和数据量的变化进行调整

6、数据清洗转换和传输。业务系统中的数据加载到数据仓库之前,必须进行数据的清洗和转换,保证数据仓库中数据的一致性。

7、开发数据仓库的分析应用。满足业务部门对数据进行分析的需求。

8、数据仓库的管理。包括数据库管理和元数据管理。

问题:数据库及数据仓库模型设计的三个主要步骤

概念数据模型CDM

conceptual data model

概念数据模型是最终用户对数据存储的看法,反映了最终用户综合性的信息需求,以数据类的方式描述企业级的数据需求。

概念数据模型的内容包括重要的实体与实体之间的关系。在概念数据模型中不包含实体的属性,也不包含定义实体的主键

概念数据模型的目标是统一业务概念,作为业务人员和技术人员之间沟通的桥梁,确定不同实体之间的最高层次的关系

逻辑数据模型LDM

logical data model

逻辑数据模型反应的是系统分析设计人员对数据存储的观点,是对概念数据模型的进一步的分解和细化。逻辑数据模型是根据业务规则确定的,关于业务对象、业务对象的数据项以及业务对象之间关系的基本蓝图

逻辑数据模型的内容包括所有的实体和关系,确定每个实体的属性,定义每个实体的主键,指定实体的外键,需要进行范式化处理。

逻辑数据模型的目标是尽可能详细的描述数据,但并不考虑在物理上如何实现

物理数据模型PDM

physical data model

物理数据模型是在逻辑数据模型的基础上,考虑各种具体的技术实现因素,进行数据库体系结构设计,真正实现数据在数据库中的存放。

物理数据模型的内容包括确定所有的表和列,定义外键用于确认表之间的关系,基于用户的需求可能要进行反范式化等内容。

问题:数据库和数据仓库有什么区别?

1.数据是面向事务处的,数据是由日常的业务产生的,常更新;数据仓库是面向主题的,数据来源于数据库或文件,经过一定的规则转换得到,用来分析的。

2.数据库一般是用来存储当前交易数据,数据仓库存储一般存储的是历史数据。

3.数据库的设计一般是符合三范式的,有最大的精确度和最小的冗余度,有利于数据的插入; .数据仓库的设计一般是星型的,有利于查询。

问题:构建企业级数据仓库五步法:

一、 确定主题

即确定数据分析或前端展现的主题(例:某年某月某地区的啤酒销售情况)。主题要体现出某一方面的各分析角度(维度)和统计数值型数据(量度)之间的关系,确定主题时要综合考虑.

二、 确定量度

确定主题后,需要考虑分析的技术指标(例:年销售额等等)。它们一般为数据值型数据,其中有些度量值不可以汇总;些可以汇总起来,以便为分析者提供有用的信息。量度是要统计的指标,必须事先选择恰当,基于不同的量度可以进行复杂关键性指标(KPI)的设计和计算。

三、 确定事实数据粒度

确定量度之后,需要考虑该量度的汇总情况和不同维度下量度的聚合情况.例如在业务系统中数据最小记录到秒,而在将来分析需求中,时间只要精确到天就可以了,在ETL处理过程中,按天来汇总数据,些时数据仓库中量度的粒度就是”天”。如果不能确认将来的分析需求中是否要精确的秒,那么,我们要遵循”最小粒度原则”,在数据仓库中的事实表中保留每一秒的数据,从而在后续建立多维分析模型(CUBE)的时候,会对数据提前进行汇总,保障产生分析结果的效率。

四、 确定维度

维度是分析的各个角度.例:我们希望按照时间,或者按照地区,或者按照产品进行分析。那么这里的时间,地区,产品就是相应的维度。基于不同的维度,可以看到各个量度汇总的情况,也可以基于所有的维度进行交叉分析。

维度的层次(Hierarchy)和级别(Level)。例:在时间维度上,按照”度-季度-月”形成了一个层次,其中”年” ,”季度” ,”月”成为了这个层次的3个级别。我们可以将“产品大类-产品子类-产品”划为一个层次,其中包含“产品大类”、“产品子类”、“产品”三个级别。

我们可以将3个级别设置成一张数据表中的3个字段,比如时间维度;我们也可以使用三张表,分别保存产品大类,产品子类,产品三部分数据,比如产品维度。

建立维度表时要充分使用代理键.代理键是数据值型的ID号码(每张表的第一个字段),它唯一标识了第一维度成员。在聚合时,数值型字段的匹配和比较,join效率高。同时代理键在缓慢变化维中,起到了对新数据与历史数据的标识作用。

五、 创建事实表

在确定好事实数据和维度后,将考虑加载事实表。业务系统的的一笔笔生产,交易记录就是将要建立的事实表的原始数据.

我们的做法是将原始表与维度表进行关联,生成事实表。关联时有为空的数据时(数据源脏),需要使用外连接,连接后将各维度的代理键取出放于事实表中,事实表除了各维度代理键外,还有各度量数据,不应该存在描述性信息。

事实表中的记录条数据都比较多,要为其设置复合主键各蛇引,以实现数据的完整性和基于数据仓库的查询性能优化。

问题:什么是数据中台?

数据中台是指通过数据技术,对海量数据进行采集、计算、存储、加工,同时统一标准和口径。数据中台吧数据统一之后,会形成标准数据,再进行存储,形成大数据资产层,进而为客户提供高效服务。

这些服务和企业的业务有较强的关联性,是企业所独有且能复用的,它是企业业务和数据的积淀,其不仅能降低重复建设,减少烟囱式协作的成本,也是差异化竞争的优势所在。

数据中台通过整合公司开发工具、打通全域数据、让数据持续为业务赋能,实现数据平台化、数据服务化和数据价值化。数据中台更加侧重于“复用”与“业务”。

问题:如何建设数据中台?

http://baijiahao.baidu.com/s?id=1651988047250956280&wfr=spider&for=pc

数据中台在企业落地实践时,结合技术、产品、数据、服务、运营等方面,逐步开展相关工作。
算法面试必备-----数据仓库常见面试题_第4张图片
1、理现状。了解业务现状、数据现状、IT现状、现有的组织架构
2、定架构。确认业务架构、技术架构、应用架构、组织架构
3、建资产。建立贴近数据层、统一数仓层、标签数据层、应用数据层
4、用数据。对数据进行输出、应用。
5、数据运营。持续运营、持续迭代

进,由技术和业务人员去执行和落地是一个漫长的过程,在实施数据中台时,最困难的地方就是需要有人推动。中台建设需要有全员共识,由管理层从上往下推

问题:数据中台、数据仓库、大数据平台的关键区别是什么?

基础能力上的区别
数据平台:提供的是计算和存储能力

数据仓库:利用数据平台提供的计算和存储能力,在一套方法论指导下建设的一整套的数据表

数据中台:包含了数据平台和数据仓库的所有内容,将其打包,并且以更加整合以及更加产品化的方式对外提供服务和价值。

业务能力上的区别
数据平台:为业务提供数据主要方式是提供数据集

数据仓库:相对具体的功能概念是存储和管理一个或多个主题数据的集合,为业务提供服务的方式主要是分析报表

数据中台:企业级的逻辑概念,提现企业数据产生价值的能力,为业务提供服务的主要方式是数据API

总的来说,数据中台距离业务更近,数据复用能力更强,能为业务提供速度更快的服务。数据中台是在数据仓库和数据平台的基础上,将数据生产为一个个数据API服务,以更高效的方式提供给业务。数据中台可以建立在数据仓库和数据平台之上,是加速企业从数据到业务价值的过程的中间层。

问题:大数据的一些相关系统?

数仓设计中心:按照主题域、业务过程,分层的设计方式,以维度建模作为基本理论依据,按照维度、度量设计模型,确保模型、字段有统一的命名规范

数据资产中心:梳理数据资产,基于数据血缘,数据的访问热度,做成本的治理

数据质量中心:通过丰富的稽查监控系统,对数据进行事后校验,确保问题数据第一时间被发现,避免下游的无效计算,分析数据的影响范围。

指标系统:管理指标的业务口径、计算逻辑和数据来源,通过流程化的方式,建立从指标需求、指标开发、指标发布的全套协作流程

数据地图:提供元数据的快速索引,数据字典、数据血缘、数据特征信息的查询,相当于元数据中心的门户。

问题:数仓中是如何划分主题的

主题(subject)是在较高层次上将企业信息系统中的数据进行综合,归类和分析利用的一个抽象概念,每一个主题基本对应一个宏观的分析领域.在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象.例如销售分析就是一个分析领域,因此这个数据仓库应用的主题就是销售分析

主题是根据分析的要求来确定的.这与按照数据处理或应用的要求来组织数据是不同的.如在生产企业中,同样是材料供应,在操作型数据库系统中,人们所关心的是怎样更方便和更快捷的进行材料供应的业务处理,而在进行分析处理时,人们就应该关心材料的不同采购渠道和材料供应是否及时及材料质量状况等

问题:数仓如何确定主题域?

https://www.jianshu.com/p/708f5606dd01

主题

主题是在较高层次上将数据进行综合、归类和分析利用的一个抽象概念,每一个主题基本对应一个宏观的分析领域。在逻辑意义上,它是对企业中某一宏观分析领域所涉及的分析对象。

面向主题的数据组织方式,就是在较高层次上对分析对象数据的一个完整并且一致的描述,能刻画各个分析对象所涉及的企业各项数据,以及数据之间的联系。

主题是根据分析的要求来确定的。

主题域

从数据角度看(集合论)
主题语通常是联系较为紧密的数据主题的集合。可以根据业务的关注点,将这些数据主题划分到不同的主题域。主题域的确定由最终用户和数仓设计人员共同完成。

从需要建设的数仓主题看(边界论)
主题域是对某个主题进行分析后确定的主题的边界。

数仓建设过程中,需要对主题进行分析,确定主题所涉及到的表、字段、维度等界限。

确定主题内容

数仓主题定义好以后,数仓中的逻辑模型也就基本成形了,需要在主题的逻辑关系中列出属性和系统相关行为。此阶段需要定义好数据仓库的存储结构,向主题模型中添加所需要的信息和能充分代表主题的属性组。

问题:数仓分层

一般情况下,将数据模型分为3层:

1.源数据层ODS
存放的是接入的原始数据
经过ETL之后装入本层,大多是按照源头业务系统的分类方式而分类的.为了考虑后续可能追溯数据,因此对这一层不建议做过多的数据清洗工作,原封不动接入元数据即可,至于数据的去噪,去重,异常处理等过程可以放在后面的DW层

2.数据仓库层DW
重点设计的数据仓库中间层数据,在这里ODS层获得的数据按照主题建立各种数据模型,DW又细分:

1)数据明细层:DWD(Data Warehouse Detail):
该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证,同时为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化到事实表中,减少事实表和维度表的关联.另外在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性

2)数据中间层DWM(Data Warehouse Middle):
在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表提升公共指标的复用性,减少重复加工,直观来说,就是对通用的核心维度进行聚合操作,算出相应的统计指标

3)数据服务层:DWS(Data Warehouse Service)
又称为数据集市或者宽表,按照业务划分,例如流量,订单,用户等,生成字段比较多的宽表,用于后续的业务查询,OLAP分析,数据分析等

3.数据应用层APP:面向业务定制的应用数据
主要提供给数据铲平和数据分析使用的数据,一般会放在ES,MYSQL,Redis等系统供线上系统使用,也可以放在Hive中供数据分析和数据挖掘使用

补充:维表层 Dimension
1,高基数维度数据:一般是用户资料表,商品资料表类似的资料表。数据量可能是千万级或者上亿级别
2,低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万

问题:简述数据仓库中的表的基本类型,以及为了保证引用完整性该以什么样的顺序对它们进行加载

答:数据仓库中的表的基本类型有维度表、事实表、子维度表、桥接表等几类。其中子维度表即雪花模型由支架维度技术处理,桥接表用来处理多值维度或层级结构。

数据仓库中需要加载的各类表之间有相互依赖的关系,所以加载时需要以一定的顺序进行加载。下面是一些加载的基本原则:
子维度表加载成功后,再加载维度表。
维度表加载成功后,再加载桥接表。
子维度表、维度表和桥接表都加载成功后,再加载事实表。
这个加载顺序可以通过主外键的关系来确定。(注意,此回答为总线架构的数据仓库的表的加载顺序。)

问题:事实表和维度表的概念及类型

事实表的概念

Ø 每个数据仓库都包含一个或者多个事实数据表。

Ø 事实数据表可能包含业务销售数据,如现金登记事务所产生的数据,事实数据表通常包含大量的行

Ø 一般事实表中只存放数字或者一些Flag用来统计(Count),如收益、数量、支出等

事实的类型

1、粒度事实表(Additive Fact)
2、周期快照事实表(Semi-Additive Fact)
3、聚合快照事实表(Non-Additive Fact)
4、非事实事实表(Factless Fact Table)

1、粒度事实表(AdditiveFact):
} 表示的是在特定时间、空间点上的一次瞬间的测量。与粒度同层次的事实表,可以直接将事实字段进行Sum,Count等聚合操作

} 在事实表的设计时,一定要注意一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中。

} 交易粒度事实表的来源伴随交易事件成生的数据,例如销售单。在ETL过程中,以原子粒度直接进行迁移。

2、周期快照事实表(Semi-AdditiveFact)
} 周期快照事实表表现的是一个时间段,或者规律性的重复。这类表非常适合跟踪长期的过程,例如银行账户和其他形式的财务报表。最常用的财务上的周期快照事实表通常有一个月粒度。在周期快照事实表中的数据必须符合该粒度(就是说,他们必须量测的是同一个时间段中的活动)。对于一个好的周期快照事实表来说就是在粒度上有更多的事实。

} 在ETL过程中,以固定的时间间隔生成累计数据。

3、聚合快照事实表(Non-AdditiveFact):

} 聚合快照事实表用于描述那些有明确开始和结束的过程,例如合同履行,保单受理以及常见的工作流。聚合快照不适合长期连续的处理,如跟踪银行账户或者描述连续的生产制造过程,如造纸。

} 聚合快照事实表的粒度是一个实体从其创建到当前状态的完整的历史。

} 在ETL过程中,随着业务处理过程的步骤逐步完善该表中的记录。

非事实事实表(FactlessFact Table):
} 每个事实表的粒度是一个事件量测。用来描述数据或事件。事件可以发生,但是没有具体的测量值。

维度表

Ø 维度表可以看作是用户来分析数据的窗口,

Ø 维度表中包含事实数据表中事实记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,

Ø 维度表包含帮助汇总数据的特性的层次结构。

维度分类

维度的类型:
1、缓慢变化维(Slowly Changing Dimension)

2、快速变化维(Rapidly Changing Dimension)

3、大维(Huge Dimension)和迷你维(Mini-Dimension)

4、退化维(Degenerate Dimension)

1、缓慢变化维(SCD):
} 大多数的维度的内容都会有不同程度的改变。比如:
} 雇员的升职
} 客户更改了他的名称或地址
} 我们如何去处理这些维度中的变化呢?
} 下面提供了三个处理缓慢变化维的方式
} 直接更新到原先记录中
} 标记记录有效时间的开始日期和结束日期,加入版本控制
} 在记录中添加一个字段来记录历史

2、快速变化维(FCD):
} 当某个维度的变化是非常快的时候,我们认定他为快速变化维(具体要看实际的变化频率),比如:
} 产品的价格,地产的价格等
} 例如在一个分析用户如何使用搜索引擎的DW项目中,将用户搜索的关键字作为一个维度。由于用户使用的关键字会快速变化,因此关键字维度中的数据量会迅速增加。
} 另外一个例子就是精度为秒的时间维度,每秒就会增加一个维度值
通常RCD的处理可以分为3类:
Rapidly Changing Small Dimensions – 即维度表字段并不多,表的数据量也不大的情况。这种情形应用SCD中的Type2就可以了。(即:新增一行,旧行置过期)
Rapidly Changing Large Dimensions – 即维度表字段较多,表的数据量较大的情况。这种情形Type2会增加过多的行并导致效率降低,因此通常采用Type3.(新增列:仅保存上一个值previous_value,current_value)
Rapidly Changing Monster Dimensions – 最糟糕的情况,即维度表字段较多,表的数据量很大,且维度表中的一部分字段频繁变化的情况。此时应将相对稳定的字段和频繁变化的字段分割开,频繁变化的字段独立出来形成新的维度表与事实表相连或形成新的雪花关系。(维表分离)

3、大维度(HugeDimension):
} 数据仓库中最有意思的维度是一些非常大的维度,比如客户,产品等等。一个大的企业客户维度往往有上百万记录,每条记录又有上百个字段。而大的个人客户维度则会超过千万条记录,这些个人客户维度有时也会有十多个字段,但大多数时候比较少见的维度也只有不多的几个属性。
} 大维度需要特殊的处理。由于数据量大,很多涉及大维度数据仓库功能可能会很慢,效率很低。你需要采用高效率的设计方法、选择正确的索引、或者采用其它优化技术来处理以下问题,包括:
向大维度表填充数据
非限制维度的浏览性能,尤其是那些属性较少的维度
多限制的维度属性值的浏览时间
涉及大维度表的对事实表查询的低效率问题
为处理第二类修改所需要增加的额外的记录
4、迷你维(MiniDimension):
} 将常用的大维度中的少数字段提取出来,形成一个字段少的维度,在查询的时候便可以使用迷你维中的字段
} 这样的设计明显提高查询效率

普通维:
普通维是基于一个维表的维度,由维表中的不同列来表示维度中的不同级别。

雪花维:
雪花维是基于多个维表的维度,各个维表间以外键关联,分别存储在同一维度中不同级别的成员列值。

父子维:
父子维是基于两个维表列的维度,由维表中的两列来共同定义各个成员的隶属关系,一列称为成员键列,标识每个成员,另一列称为父键列,标识每个成员的父代。
父子维度通俗的话来讲,这个表是自反 的,即外键本身就是引用的主键;类似这样的关系,如公司组织结构,分公司是总公司的一部分,部门是分公司的一部分,当然如果定义得好的话员工是部门的一部 分;通常公司的组织架构并非处在等层次上的,例如总公司下面的部门看起来就和分公司是一样的层次。因此父子维的层次通常不固定的。
因为父子维的复杂的自引用关系,如果按照缓慢维度的全历史记录方式来处理,必然导致逻辑关系混乱,处理起来比较棘手;任何一个组织的变动 (修改名称,更改引用,新增等等操作 )将会引起其下属节点相应的变动;任何一个意外都会导致整个结构的变化,同时发生意外后所带来的逻辑关系很难理顺。而 SQLServer2000中 Analysis Service对于这种急剧的变化处理并不稳定。
因此建议按照缓慢变化维的覆盖方式解决,即只根据主键这个唯一标志进行判断是否是新增还是修改。

索引:
与在其他关系数据库中一样,索引对数据仓库的性能具有重要作用。每个维度表都必须在主键上建立索引。在其他列如标识层次结构级别的列上,索引对于某些专用查询的性能也很游泳。事实数据表必须在由维度表外键构成的组件主键上建立索引。

粒度(Grain) 层次(Hierarchy):
Ø 粒度是指数据仓库的数据单位中保存数据的细化或综合程度的级别。细化程度越高,粒度级就越小;相反,细化程度越低,粒度级就越大。设计粒度是设计数据仓库中的一个重要的前提
Ø 层次指描述明细数据的层次
一些影响维度建模的因素:
Ø 数据或展现的安全性
Ø 复杂的查询和分析

问题:星型模型和雪花模型区别

星形模型(Star Schema):
Ø 事实被维度所包围,且维度没有被新的表连接
Ø 星形模型是一个比较折中的的建模方式(BIAPPS中都是用的是星形的建模方式)

雪花模型(Snowflake Schema):
} 事实表被多个维表或一个或多个层次所包围
} 雪花模型一般在处理大的且相对静态的层次的时候使用

根据事实表和维度表的关系,又可将常见的模型分为星型模型和雪花型模型。

星形模型概念:当所有维度表连接到事实表上的时候,整个图就像一个星星,故称之为星型模型。星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连,不存在渐变维度,所以数据有一定冗余。因为有冗余,所以很多统计不需要做外部的关联查询,因此一般情况下效率比雪花模型高。

雪花模型概念:当有多个维度表没有直接连接到事实表上,而是通过其他维度表连接到事实表上时,其图形就像雪花,故称雪花模型。雪花模型的优点是减少了数据冗余,所以一般情况下查询需要关联其他表。在冗余可接受的前提下使用星型模型。

星型模型和雪花模型的区别在于:维度表是直接连接到事实表还是其他维度表。

问题:拉链表使用场景和实现方式?

拉链表使用场景:需要查看历史某一时间节点的状态,同时考虑到存储空间。

实现方式
首先是拉链表dw_order_his的设置,有start_date和end_date两个字段;
其次在ods层创建一个ods_order_update表,储存当变化数据(包括insert和update的数据)
源表(order)
ods_order_update表和dw_order_his表的交集进行封链操作,end_date=current_date
ods_oder_update数据插入到his表中,对于记录的end_date=9999-12-31,start_date=current_date

【使用场景】
在数据仓库的数据模型设计过程中,经常会遇到下面这种表的设计:
 有一些表的数据量很大,比如一张用户表,大约10亿条记录,50个字段,这种表,即使使用ORC压缩,单张表的存储也会超过100G,在HDFS使用双备份或者三备份的话就更大一些。
 表中的部分字段会被update更新操作,如用户联系方式,产品的描述信息,订单的状态等等。
 需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态。
 表中的记录变化的比例和频率不是很大,比如,总共有10亿的用户,每天新增和发生变化的有200万左右,变化的比例占的很小。

【实现方式】
全量主要数据表加载的策略为每次加载时需要根据主键将目标表的数据与源表数据进行比对,删除目标表中在源数据表中的相关记录,然后将源表数据全部插入目标表。表现在脚本上为先delete相关记录,然后insert所有记录。主表加载策略主要用于大部分主表的加载,比如客户信息等主要数据表。
增量拉链是指每次加载时,将源表数据视为增量抽取后的结果,加载到目标表时需要考虑数据历史情况。一般数据发生变化时关闭旧数据链,然后开新数据链。增量拉链针对的是历史表情况,由于数据仓库中记录了大部分数据历史表变化情况,因此增量拉链加载策略在数据仓库中是使用比较广泛的一种加载策略。通常这种历史表都含有start_date和end_date字段,首先全字段对比源数据和目标表得出真正的增量数据,这里的全字段不包含start_date和end_date字段,然后根据主键对目标表进行关旧链操作,然后对新增数据开新链,这种拉链策略同样可以处理全量数据。

问题:拉链表性能优化

拉链表当然也会遇到查询性能的问题,比如说我们存放了5年的拉链数据,那么这张表势必会比较大,当查询的时候性能就比较低了,个人认为两个思路来解决:

1、在一些查询引擎中,我们对start_date和end_date做索引,这样能提高不少性能。

2、保留部分历史数据,比如说我们一张表里面存放全量的拉链表数据,然后再对外暴露一张只提供近3个月数据的拉链表。

问题:缓慢变化维的设计?

三种:直接覆盖,增加新行,增加新属性列

Type 1:直接覆盖:直接用新值代替旧值。

Type 2:增加新行。将当前行的状态设置为off,并设置一个endtime时间戳,将当前时间标记上。
同时新增1行,将其状态标记为on,设置begintime时间戳为上一个记录的endtime+1。

Type 3:增加新列:给表增加一个新列,来存储新值,同时保留原来的值不变。

问题:数据相关问题:

如何控制数据质量?

校验机制,每天进行数据量的比对 select count(*),早发现,早修复
数据内容的比对,抽样比对
复盘、每月做一次全量

如何做数据治理?

https://www.jianshu.com/p/44d7618f32b6

数据治理不仅需要完善的保障机制,还需要理解具体的治理内容,比如数据应该怎么进行规范,元数据该怎么来管理,每个过程需要那些系统或者工具来配合?

数据治理领域包括但不限于以下内容:数据标准、元数据、数据模型、数据分布、数据存储、数据交换、数据声明周期管理、数据质量、数据安全以及数据共享服务。
算法面试必备-----数据仓库常见面试题_第5张图片

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

构建数据仓库有两种方式:自上而下、自下而上

Bill Inmon推崇自上而下的方式,一个企业建立唯一的数据中心,数据是经过整合、清洗、去掉脏数据、标准的、能够提供统一的视图。要从整个企业的环境入手,建立数据仓库,要做很全面的设计。偏数据驱动

Ralph Kimball推崇自下而上的方式,认为数据仓库应该按照实际的应用需求,架子啊需要的数据,不需要的数据不要加载到数据仓库中。这种方式建设周期短,用户能很快看到结果。偏业务驱动

数据质量管理

https://blog.csdn.net/kuangfeng88588/article/details/99085074

数据质量管理是对数据从计划、获取、存储、共享、维护、应用、消亡生命周期的每个阶段里可能引发的数据质量问题,进行识别、度量、监控、预警等,通过改善了提高组织的管理水平使数据质量进一步提高。

数据质量管理是一个集方法论、技术、业务和管理为一体的解决方案。放过有效的数据质量控制手段,进行数据的管理和控制,消除数据质量问题,从而提高企业数据变现的能力。

会遇到的数据质量问题:数据真实性、数据准确性、数据一致性、数据完整性、数据唯一性、数据关联性、数据及时性

什么是数据模型?

数据模型就是数据组织和存储的方法,通过抽象的实体以及实体间联系的形式来表达现实世界中事务的相互关系的一种映射,他强调从业务、数据存取和使用角度合理的存储数据。

你可能感兴趣的:(算法岗面试笔试准备)