数据仓库面试题汇总
Posted DB架构
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据仓库面试题汇总相关的知识,希望对你有一定的参考价值。
一、分析
1.什么是逻辑数据映射?它对 ETL 项目组的作用是什么?
逻辑数据映射(Logical Data Map)用来描述源系统的数据定义、目标数据仓库的模型以及 将源系统的数据转换到数据仓库中需要做操作和处理方式的说明文档,通常以表格或 Excel 的格式保存如下的信息:
目标表名:
目标列名:
目标表类型:注明是事实表、维度表或支架维度表。
SCD 类型:对于维度表而言。三种 SCD(Slowly Changing Dimension)技术
SCD1 直接修改原维表信息,不保存任何维历史信息。
SCD2 创建新的记录而不删除或修改原有维信息。可通过为每条记录设定过期时间、生效时 间两个字段来区分各历史记录和当前记录(历史记录的过期时间均早于当前记录的生效时 间)。 SCD3 在维表中定义历史信息字段,只保存有限的历史信息(此技术很少应用)
源数据库名:源数据库的实例名,或者连接字符串。
源表名:
源列名:
转换方法:需要对源数据做的操作,如 Sum(amount)等。
逻辑数据映射应该贯穿数据迁移项目的始终,在其中说明了数据迁移中的 ETL 策略。在进 行物理数据映射前进行逻辑数据映射对 ETL 项目组是重要的,它起着元数据的作用。项目 中最好选择能生成逻辑数据映射的数据迁移工具。
逻辑数据映射分为两种:
1: 模型映射:
从源模型到 DW 目标模型之间的映射类型有:
一对一:一个源模型的数据实体只对应一个目标模型的数据实体。如果源类型与目标类型一 致,则直接映射。如果两者间类型不一样,则必须经过转换映射。
一对多:一个源模型的数据实体只对应多个目标模型的数据实体。在同一个数据存储空间, 常常出现会一个源实体拆分为多个目标实体的情况下。在不同的存储空间中,结果会对应到 不同的存储空间的实体。
一对零:一个源模型的数据实体没有与目标模型的数据实体有对应,它不在我们处理的计划 范围之内。
零对一:一个目标模型的数据实体没有与任何一个源数据实体对应起来。例如只是根据设计 考虑,时间维表等。
多对一:多个源模型的数据实体只对应一个目标模型的数据实体。
多对多:多个源模型的数据实体对应多个目标模型的数据实体。
2: 属性映射
一对一:源实体的一个数据属性列只对应目标实体的一个数据属性列。如果源类型与目标类 型一致,则直接映射。如果两者间类型不一样,则必须经过转换映射。
一对多:源实体的一个数据属性列只对应目标实体的多个数据属性列。在同一个实体中,常 常出现会一个源属性列拆分为目标的多个属性列情况。在不同实体中,结果会对应到不同的 实体的属列。
一对零:一个源实体的数据属性列没有与目标实体的数据属性列有对应,它不在我们处理的 计划范围之内。
零对一:一个目标实体的数据属性列没有与任何一个源数据属性列对应起来。例如只是根据 设计考虑,维表和事实表中的时间戳属性,代理健等。
多对一:源实体的多个数据属性列只对应目标实体的一个数据属性列。
多对多:源实体的多个数据属性列对应目标实体的多个数据属性列。
作用:
1 为开发者传送更为清晰的数据流信息。映射关系包括有关数据在存储到 DW 前所经历的 各种变化的信息,对于开发过程中数据的追踪审查过程非常重要。
2 把 ETL 过程的信息归纳为元数据,将数据源结构,目标结构,数据转换规则,映射关系, 数据的上下文等元数据保存在存储知识库中,为元数据消费者提供很好的参考信息,追踪数 据来源与转换信息,有助于设计人员理解系统环境变化所造成的影响;
开发设计者可以轻松的回答以下的问题:
1、这些数据从那里来?
2、这样的结果通过什么样的计算和转化得来?
3、这些数据是如何组织的?
4、数据项之间有什么联系?
5、如果源发生变化,有那几个系统,目标受影响?
2.在数据仓库项目中,数据探索阶段的主要目的是什么?
What are the primary goals of the data discovery phase of the data warehouse project?
答: 在逻辑数据映射进行之前,需要首先对所有的源系统进行分析。对源系统的分析通常包 括两个阶段,一个是数据探索阶段(Data Discovery Phase),另一个是异常数据检测阶段。
数据探索阶段包括以下内容:
A、收集所有的源系统的文档、数据字典等内容。
B、收集源系统的使用情况,如谁在用、每天多少人用、占多少存储空间等内容。
C、判断出数据的起始来源(System-of-Record)。
D、通过数据概况(Data Profiling)来对源系统的数据关系进行分析。 数据探索阶段的主要目的是理解源系统的情况,为后续的数据建模和逻辑数据映射打下 坚实的基础。
3.如何确定起始来源数据?
How is the system-of-record determined? 如何确定起始来源数据?
答: 这个问题的关键是理解什么是 System-of-Record。System-of-Record 和数据仓库领域 内的其他很多概念一样,不同的人对它有不同的定义。在 Kimball 的体系中, System-of-Record 是指最初产生数据的地方,即数据的起始来源。在较大的企业内,数据 会被冗余的保存在不同的地方,在数据的迁移过程中,会出现修改、清洗等操作,导致与数 据的起始来源产生不同。
起始来源数据对数据仓库的建立有着非常重要的作用,尤其是对产生一致性维度来说。 我们从起始来源数据的越下游开始建立数据仓库,我们遇到垃圾数据的风险就会越大。
二、架构
4.在 ETL 过程中四个基本的过程分别是什么?
What are the four basic Data Flow steps of an ETL process?
在 ETL 过程中四个基本的过程分别是什么?
答: Kimball 数据仓库构建方法中,ETL 的过程和传统的实现方法有一些不同,主要分为四 个阶段,分别是抽取(extract)、清洗(clean)、一致性处理(confirm)和交付(delivery), 简称为 ECCD。
A、抽取阶段的主要任务是:
读取源系统的数据模型。
连接并访问源系统的数据。
变化数据捕获。
抽取数据到数据准备区。
B、清洗阶段的主要任务是:
清洗并增补列的属性。
清洗并增补数据结构。
清洗并增补数据规则。
增补复杂的业务规则。
建立源数据库描述数据质量。
将清洗后的数据保存到数据准备区。
C、一致性处理阶段的主要任务是:
一致性处理业务标签,即维度表中的描述属性。
一致性处理业务度量及性能指标,通常是事实表中的事实。
去除重复数据。
国际化处理。
将一致性处理后的数据保存到数据准备区。
D、交付阶段的主要任务是:
加载星型的和经过雪花处理的维度表数据。
产生日期维度。
加载退化维度。
加载子维度。
加载 1、2、3 型的缓慢变化维度。
处理迟到的维度和迟到的事实。
加载多值维度。
加载有复杂层级结构的维度。
加载文本事实到维度表。
处理事实表的代理键。
加载三个基本类型的事实表数据。
加载和更新聚集。
将处理好的数据加载到数据仓库。
从这个任务列表中可以看出,
ETL 的过程和数据仓库建模的过程结合的非常紧密。换 句话说,ETL 系统的设计应该和目标表的设计同时开始。通常来说,数据仓库架构师和 ETL 系统设计师是同一个人。
5.在数据准备区中允许使用的数据结构有哪些?各有什么优缺点?
What are the permissible data structures for the data staging area? Briefly describe the pros. and cons. of each. 在数据准备区中允许使用的数据结构有哪些?各有什么优缺点?
答: A、固定格式的文本文件。(Flat File)
Flat File 指的是一种保存在系统上的一种文本文件格式,它以类似数据库的表的方式用 行和列来保存数据。这种文件格式经常用来进行数据交换。用于保存数据不太合适。
B、XML 数据集。 多用于数据交换,用户保存数据不太合适。
C、关系数据库的表。 保存数据的较理想选择。
D、独立的数据库表。
独立的数据库表一般指建立的表和其他表没有外键约束关系。这样的表多用于数据处理。
E、三范式或者关系型模型。
F、非关系型数据源。 非关系型数据源一般包括 COBOL copy books、VSAM 文件、Flat 文件、Spreadsheets 等。
G、维度模型。
H、原子事实表和聚集事实表。
I、代理键查找表。
6.简述 ETL 过程中哪个步骤应该出于安全的考虑将数据写到磁盘上?
When should data be set to disk for safekeeping during the ETL? 简述 ETL 过程中哪个步骤应该出于安全的考虑将数据写到磁盘上?
答: Staging 的意思就是将数据写到磁盘上。出于安全及 ETL 能方便重新开始,在数据准备 区(Staging Area)中的每个步骤中都应该将数据写到磁盘上,即生成文本文件或者将建立 关系表保存数据,而不应该以数据不落地方式直接进行 ETL。 例如,在数据抽取阶段,我们需要连接到源系统,为了对源系统的影响尽量小,我们需 要将抽取的数据保存成文本文件或者放入数据准备区的表中,这样,当 ETL 过程出现错误 而失败时,我们就可以从这些文本文件开始 ETL,而不需要再次影响源系统。
三、抽取
7.简述异构数据源中的数据抽取技术。
Describe techniques for extracting from heterogeneous data sources. 简述异构数据源中的数据抽取技术。
答: 在数据仓库项目中,需要抽取的数据经常来自不同的数据源,它们的逻辑结构和物理结 构都可能不同,即称之为异构数据源。 在对异构数据源进行整合抽取时,我们需要做的事情依次是标识出所有的源系统,对源 系统进行概况分析,定义数据匹配逻辑,建立筛选规则,生成一致性维度。 对于源数据的操作系统平台和数据平台各不相同的情况,我们需要根据实际情况来确定
如何进行数据抽取,通常的方法有建立 ODBC 连接、定义接口文件、建立 DBLINK 等方法。
8.从ERP源系统中抽取数据最好的方法是什么?
What is the best approach for handling ERP source data? 从 ERP 源系统中抽取数据最好的方法是什么?
答:ERP 系统的产生是为了解决企业内异构数据的整合。这个问题也是数据仓库系统 面临的主要问题。ERP 的解决方案是将企业内的各个应用(包括销售、会计、人力资源、 库存和产品等)建立在相同的平台和相同的应用框架下,即在应用操作层将企业内的数据进 行了一致性处理。而数据仓库是在应用操作层之上建立一致性的规则并进行一致性处理。目 前比较流行的 ERP 系统有 SAP、PeopleSoft、Oracle、Baan 和 J.D.EDwards(大部分没 接触过)。 如果企业内只有一套 ERP 系统,那么数据就已经是一致的了,为数据抽取提供了方便。 如果企业内除了 ERP 外还有其他系统,则数据抽取会变得复杂。因为目前的 ERP 系统的 数据模型都非常复杂,可能有几百几千个表,并且较难理解。直接在 ERP 系统上建立数据 捕获和抽取是非常复杂的。最好的办法是购买能针对 ERP 系统数据抽取提供功能的 ETL 工 具,将 ERP 内部的复杂性留给 ETL 厂商处理。
9、简述直接连接数据库和使用ODBC连接数据库进行通讯的优缺点
Explain the pros and cons of communicating with databases natively versus ODBC. 简述直接连接数据库和使用 ODBC 连接数据库进行通讯的优缺点。
答: 通常连接数据库的方式分为两类,一类是直接连接,另一类是通过 ODBC 连接。 直接连接的方式主要是通过 COBOL、PL/SQL、Transact-SQL 等方式连接数据库。这 种方式的优点是运行性能高,可以使用 DBMS 提供的一些特殊功能。缺点是通用性差。 ODBC 是为 windows 应用程序访问数据库提供的一组接口。ODBC 的优点是灵活性, 通过改变驱动和连接方式可以使用不同的数据库。ODBC 方式的缺点是性能差。使用 ODBC 连接方式实现 ETL 的话,在 ETL 程序和至少要有两层,分别是 ODBC Manager 层和 ODBC Driver 层。另外,使用 ODBC 方式不能使用 DBMS 提供的一些特殊的功能。
10.简述出三种变化数据捕获技术及其优缺点。
Describe three change data capture (CDC) practices and the pros and cons of each. 简述出三种变化数据捕获技术及其优缺点。
答: 变化数据捕获(CDC)技术是 ETL 工作中的重点和难点,通常需要在增量抽取时完成。 实现变化数据捕获时最理想的是找到源系统的 DBA。如果不能找到,就需要 ETL 项目组自 己进行检测数据的变化。
下面是一些常用的技术。
A、采用审计列
审计列指表中如“添加日期”、“修改日期”、“修改人”等信息的字段。应用程序在对该表 的数据进行操作时,同时更新这些字段,或者建立触发器(Trigger)来更新这些字段。采用这种方式进 行变化数据捕获的优点是方便,容易实现。缺点是如果操作型系统没有相应的审计字段,需 要改变已有的操作型系统的数据结构,以保证获取过程涉及的每张表都有审计字段。
B、数据库日志
DBMS 日志获取是一种通过 DBMS 提供的日志系统来获得变化的数据。它的优点是对 数据库或访问数据库的操作系统的影响最小。缺点是要求 DBMS 支持,并且对日志记录的 格式非常了解。
C、全表扫描
全表扫描或者全表导出文件后进行扫描对比也可以进行变化数据捕获,尤其是捕获删除 的数据时。这种方法的优点是,思路清晰,适应面广,缺点是效率比较差。
四、数据质量
11、数据质量检查的四大类是什么?为每类提供一种实现技术。
What are the four broad categories of data quality checks? Provide an implementat ion technique for each. 数据质量检查的四大类是什么?为每类提供一种实现技术。
答:数据质量检查是 ETL 工作中非常重要的一步,主要关注一下四个方面。
1.正确性检查(Corret) 检查数据值及其描述是否真实的反映了客观事务。例如地址的描述是否完全。
2.明确性检查(Unambiguous)检查数据值及其描述是否只有一个意思或者只有一个解释。例如地名相同的两个县需要加区分方法。
3.一致性检查(Consistent) 检查数据值及其描述是否统一的采用固定的约定符号来表示。例如币别中人民币用'CNY'。
4.完全性检查(Complete) 完全性有两个需要检查的地方,一个是检查字段的数据值及其描述是否完全。例如检查是否 有空值。另一个是检查记录的合计值是否完全,有没有遗忘某些条件。
12、简述应该在ETL的哪个步骤实现概况分析?
At which stage of the ETL should data be profiled? 简述应该在 ETL 的哪个步骤来实现概况分析? 答:数据概况分析是对源数据内容的概况进行分析,应该在项目的开始后尽早完成,它会对 设计和实现有很大的影响。在完成需求收集后就应该立即开始数据概况分析。 数据概况分析不光是对源系统的数据概况的定量描述,而且为 ETL 系统中需要建立的错误 事件事实表(Error Event Table)和审计维度表(Audit Dimension)打下基础,为其提供数 据。
13.ETL项目中的数据质量部分核心的交付物有哪些?
What are the essential deliverables of the data quality portion of ETL? ETL 项目中的数据质量部分核心的交付物有那些?
答:ETL 项目中数据质量部分的核心的交付物主要有下面三个:
1.数据概况分析结果
数据概况分析结果是对源系统的数据状况的分析产物,包括如源系统中有多少个表,每个表 有多少字段,其中多少为空,表间的外键关系是否存在等反映源系统数据质量的内容。这些 内容用来决定数据迁移的设计和实现,并提供给错误事件事实表和审计维度表需要的相关数 据。
2.错误事件事实表
错误事件事实表及相关的一系列维度表是数据质量检查部分的一个主要交付物。粒度是每一 次数据质量检查中的错误信息。相关维度包括日期维度表、迁移信息维度表、错误事件信息 维度表,其中错误事件信息维度表中检查的类型、源系统的信息、涉及的表信息、检查使用 的 SQL 等内容。错误事件事实表不提供给前台用户。
3.审计维度表
审计维度表是给最终用户提供数据质量说明的一个维度表。它描述了用户使用的事实表的数 据来源,数据质量情况等内容。
14.如何来量化数据仓库中的数据质量?
How can data quality be quantified in the data warehouse? 如何来量化数据仓库中的数据质量? 答:在数据仓库项目中,通常通过不规则数据的检测工作(Anomaly Detection)来量化源 系统的数据质量。除非成立专门的数据质量调查项目组,否则这个工作应该由 ETL 项目组 完成。通常可以采用分组 SQL 来检查数据是否符合域的定义规则。
对于数据量小的表,可以直接使用类似下面的 SQL 完成。
select state, count(*) from order_detail group by state
对于数据量大的表,一般通过采样技术来减少数据量,然后进行不规则数据检测。类似 SQ L 如下。
select a.* from employee a, (select rownum counter, a.* from employee a) B where a.emp_id = b.emp_id and mod(b.counter, trunc((select count(*) from employee)/100 0,0)) = 0
如果可以采用专门的数据概况分析工具进行的话,可以减少很大的工作量。
五、建立映射
15.什么是代理键?简述代理键替换管道如何工作。
代理键(surrogate key)是数据库表中的一种特殊的键,它被设计用来替代自然键(natural key),以解决一些数据管理和性能方面的问题。
自然键是指表中已经存在的某个列或一组列,可以用来唯一地标识每一行数据。但是,在某些情况下,自然键可能会出现重复、不稳定、数据类型复杂等问题,这会导致一些管理和查询上的困难。
代理键通过引入一个新的、无意义的、自动生成的键值,来替代自然键作为主键(primary key)使用。这个代理键通常是一个数字或一个UUID(通用唯一识别码),可以保证唯一性、稳定性和简单性。
代理键替换管道是指在数据仓库或数据集成系统中使用代理键来处理数据更新的过程。具体而言,代理键替换管道会在源数据中生成或者查找代理键,并且在目标数据中使用代理键来更新、插入或删除数据。
代理键替换管道通常涉及以下步骤:
- 对源数据进行抽取(extraction)、转换(transformation)、加载(loading)等处理,生成或查找代理键;
- 将代理键与目标数据进行匹配,使用代理键来更新、插入或删除数据;
- 对目标数据进行清理和去重等操作,保证数据质量和一致性。
代理键替换管道可以解决多个数据管理和性能问题,包括:
- 使数据查询和更新更加高效,减少自然键的冗长、不稳定和复杂;
- 支持复杂的数据集成和数据挖掘操作,方便数据的跨系统共享和分析;
- 支持数据历史记录和审计追踪等需求,方便数据治理和合规性管理。
16.为什么在 ETL 的过程中需要对日期进行特殊处理?
数据源的日期格式可能不同:不同的数据源可能使用不同的日期格式,如yyyy-MM-dd、MM/dd/yyyy等等。在进行数据提取时需要将不同格式的日期转换为一致的标准格式,以便于后续的数据处理和分析。
数据类型的匹配问题:在 ETL 过程中,源数据的日期可能被识别为字符串类型,需要进行转换为日期类型,以便于进行日期相关的计算和比较。否则,在计算日期差、日期排序等操作时可能会出现错误。
处理时间戳:在某些情况下,数据源可能使用时间戳而非日期,时间戳是从某个固定日期(通常是1970年1月1日)到某个时间点的毫秒数或秒数。在 ETL 过程中需要将时间戳转换为日期格式,以便于进行日期相关的处理。
处理时区问题:不同地区可能使用不同的时区,因此在 ETL 过程中需要将日期转换为 UTC(协调世界时)或其他标准时区的时间,以便于在不同地区的系统中进行一致的日期处理。
综上所述,日期在 ETL 过程中需要进行特殊处理,以确保数据的一致性和正确性。
17.简述对一致性维度的三种基本的交付步骤。
一致性维度是数据仓库中的一个关键概念,它描述了数据在不同来源之间的一致性程度。为了确保数据仓库中的数据一致性,需要进行一致性维度的设计和实现,其中包括以下三种基本的交付步骤:
确定一致性维度:首先需要确定一致性维度的定义和范围,包括哪些维度需要进行一致性控制、如何进行一致性控制、何时进行一致性控制等。
设计一致性控制策略:在确定了一致性维度之后,需要设计一致性控制策略,以确保数据在不同来源之间的一致性。一致性控制策略包括数据收集、数据清洗、数据转换、数据合并等多个方面。
实现一致性控制:在设计了一致性控制策略之后,需要将其实现到数据仓库的架构和数据流程中。这包括将数据收集、数据清洗、数据转换、数据合并等步骤实现到 ETL(Extract, Transform, Load)流程中,并且需要定期监测和更新数据仓库中的一致性维度,以确保数据的一致性。
总之,一致性维度的三种基本的交付步骤是:确定一致性维度、设计一致性控制策略、实现一致性控制。这些步骤可以确保数据仓库中的数据在不同来源之间的一致性,从而提高数据的可靠性和准确性。
18.简述三种基本事实表,并说明 ETL 的过程中如何处理它们。
在数据仓库中,事实表用于存储业务事件的度量,是构建数据仓库的关键组成部分。常见的三种基本事实表类型包括:
1.事务事实表(Transactional Fact Table):它包含业务交易和操作的度量,例如订单、发货、付款、退货等。这种事实表通常是最常用和最重要的,因为它们记录了业务活动的具体细节。
在 ETL 过程中,需要对事务事实表进行清洗和转换。这可能包括过滤掉无效数据,解析和拆分字段,进行数据类型转换,并在必要时进行聚合和计算。
2.周期快照事实表(Periodic Snapshot Fact Table):它包含事务在特定时间间隔内的度量,例如每周、每月或每季度的销售数据。这种事实表常用于跟踪业务趋势和变化。
在 ETL 过程中,需要将周期快照事实表中的数据进行聚合,以获得所需的周期度量。这可能涉及到使用聚合函数计算平均值、总和或计数等度量。
3.累积(聚合)快照事实表(Accumulating Snapshot Fact Table):它包含一组重要的时间点上的度量,例如销售订单的生命周期。这种事实表用于跟踪业务过程中的关键步骤和状态变化。
在 ETL 过程中,需要将累积快照事实表中的数据进行聚合,并计算每个关键时间点的度量。这可能需要对多个事实表进行 JOIN 操作以获得所需的信息。
总的来说,在 ETL 过程中需要处理这些事实表中的数据以确保其质量、一致性和可靠性。这包括清洗、转换、聚合和计算等操作,以生成可供分析和决策支持的高质量数据。
19.简述桥接表是如何将维度表和事实表进行关联的?
桥接表(Bridge Table)是一种用于将维度表和事实表进行关联的技术。它通常用于多对多关系的情况,即一个或多个维度表与一个或多个事实表之间存在多对多的关联。
桥接表包含两个或多个维度表的主键,以及与这些维度表相关联的事实表的外键。这样,桥接表将多个维度表与多个事实表之间的关系连接起来,从而实现了多对多的关联。
例如,假设我们有一个销售事实表和两个维度表:产品维度和销售人员维度。由于一个销售人员可以销售多个产品,一个产品也可以被多个销售人员销售,因此我们需要一个桥接表来将它们关联起来。
桥接表包含两个维度表的主键以及销售事实表的外键。这使得我们可以在桥接表中存储每个销售人员和每个销售的产品的组合,同时记录与这些组合相关的销售度量,例如销售额、数量等。
在查询时,我们可以通过桥接表来连接这些表,从而实现多维度的查询。例如,我们可以使用桥接表将销售事实表与产品维度表和销售人员维度表关联起来,并根据不同的维度进行查询和分析。
总之,桥接表是一种用于解决多对多关系的技术,它将多个维度表和事实表之间的关系连接起来,从而实现多维度的查询和分析。
20.迟到的数据对事实表和维度表有什么影响?怎样来处理这个问题?
数据仓库中的事实表和维度表是用于存储业务事件和相关属性信息的核心结构。如果数据在实际处理之前延迟到达,这可能会对数据仓库中的事实表和维度表产生影响。
具体来说,延迟的数据可能会导致以下问题:
不完整的数据:如果数据延迟到达,那么相应的事实表中可能会存在不完整的数据。例如,在某个时间段内没有记录某些销售数据,这会导致数据仓库中的事实表中缺少这些数据。
不一致的数据:如果数据的延迟不同步,那么可能会导致事实表和维度表之间的数据不一致。例如,如果某个销售人员的职位在维度表中被更新了,但是在事实表中相应的销售数据还是使用旧的职位信息,那么就会出现数据不一致的情况。
不准确的数据:如果延迟的数据包含了一些重要信息,那么可能会导致数据仓库中的事实表和维度表的数据不准确。例如,在某个时间段内某个产品的销售量非常高,但是由于数据延迟,这些数据没有及时被记录到事实表中,从而导致事实表中该产品的销售数据不准确。
为了解决这些问题,可以采取以下措施:
设计数据仓库时考虑数据延迟的可能性,尽量保证事实表和维度表能够容忍一定程度的数据延迟。
对于每个数据源,设定一个最大延迟时间,如果数据超过该时间还未到达,则需要进行异常处理和数据补偿。
在 ETL 过程中,可以使用数据缓存和数据分批加载等技术来处理延迟的数据,并尽可能减少数据延迟对事实表和维度表的影响。
使用实时或近实时的数据处理技术,例如流式数据处理,可以尽可能减少数据延迟的影响,并更快地将数据写入数据仓库中的事实表和维度表。
总之,处理延迟的数据需要综合考虑数据仓库设计、数据源管理、ETL 技术以及实时处理技术等因素,以确保数据仓库中的事实表和维度表能够尽可能准确、完整和一致。
六、元数据
21.举例说明各种 ETL 过程中的元数据。
ETL(抽取、转换、加载)是将数据从源系统转移到数据仓库的关键过程之一,需要通过各种元数据来描述和管理这些数据。以下是各种 ETL 过程中的元数据及其示例:
- 抽取元数据:抽取元数据描述了从源系统中提取数据的过程。例如,抽取元数据可以包括源系统的名称、位置、数据源类型、数据抽取时间、数据抽取的方法和策略等。例如,从 Oracle 数据库中抽取客户信息的元数据示例如下:
- 数据源名称:Oracle_Database
- 数据源类型:关系型数据库
- 数据表名称:CUSTOMER
- 抽取时间:2022-02-01 00:00:00
- 抽取方法:使用 SQL 语句抽取数据
- 抽取策略:增量抽取,每天抽取增量数据
2.转换元数据:转换元数据描述了将抽取的数据转换为数据仓库中的目标数据的过程。例如,转换元数据可以包括转换规则、数据清洗规则、数据过滤规则、聚合规则等。例如,将客户信息数据进行清洗和转换的元数据示例如下:
- 清洗规则:删除重复的记录、替换空值为默认值、修复错误的数据类型等
- 转换规则:将姓名和地址字段进行分解,拆分为多个子字段,例如姓、名、街道地址、城市、州等
- 过滤规则:只保留有效的客户信息记录,删除无效的或已删除的记录
- 聚合规则:按照城市或州进行客户信息聚合,以便后续分析
3.加载元数据:加载元数据描述了将转换后的数据加载到目标数据仓库中的过程。例如,加载元数据可以包括目标表的名称、位置、数据仓库的模式、加载时间、加载策略等。例如,将客户信息数据加载到数据仓库中的元数据示例如下:
- 目标表名称:DIM_CUSTOMER
- 目标表位置:数据仓库中的 DIM_CUSTOMER 表
- 加载时间:2022-02-01 01:00:00
- 加载策略:全量加载,每天替换数据仓库中的 DIM_CUSTOMER 表
通过对这些元数据的描述和管理,可以更好地理解和控制 ETL 过程中的数据流动和转换,以确保数据质量和一致性,并支持数据分析和报告等业务需求。
22.简述获取操作型元数据的方法。
操作型元数据是描述系统运行时的数据,包括数据源、数据流、数据处理规则、运行状态等。获取操作型元数据的方法如下:
日志分析法:通过分析系统的运行日志,可以了解系统运行时的各种信息,例如数据源、数据流、数据处理规则等。这种方法需要系统具有详细的日志记录机制,并且需要进行逐行的日志分析,效率较低。
系统调查法:通过与系统的管理员、开发人员和用户沟通,了解系统的功能和配置,以及数据的来源、处理方式和目的等信息。这种方法需要与多个人员进行沟通,并且需要考虑到信息的可靠性和完整性。
自动化工具法:通过使用自动化工具来收集系统的操作型元数据,例如使用监控工具收集系统的性能数据、使用数据质量工具收集数据的质量信息等。这种方法可以提高效率,但需要选择和配置合适的工具。
数据库元数据表法:在系统设计时,将操作型元数据作为系统元数据存储在数据库中,例如表结构、字段类型、数据源信息等,通过查询数据库元数据表可以获得系统的操作型元数据。这种方法可以快速地获得系统的操作型元数据,但需要在系统设计时考虑到元数据的存储和管理。
综上所述,获取操作型元数据的方法可以通过多种途径来完成,需要根据实际情况选择合适的方法。
23.简述共享业务元数据和技术元数据的方法。
共享业务元数据和技术元数据可以提高数据管理的效率和数据质量,以下是两种方法:
- 共享业务元数据:业务元数据是指描述业务对象、业务流程、业务规则等业务信息的元数据。共享业务元数据可以通过以下方式实现:
- 制定企业级元数据管理策略和规范,规定元数据的定义、使用和管理方式;
- 在企业内部建立元数据管理中心,负责业务元数据的采集、管理和维护;
- 使用元数据管理工具,例如专门的元数据管理系统,实现业务元数据的共享和管理;
- 建立数据字典和业务词汇表,明确业务术语和定义,统一业务语言,减少业务沟通中的误解。
2. 共享技术元数据:技术元数据是指描述数据存储、处理、传输等技术信息的元数据。共享技术元数据可以通过以下方式实现:
- 在数据仓库设计阶段,制定技术元数据的定义、使用和管理方式;
- 建立元数据仓库,存储技术元数据,例如表结构、索引、数据质量规则、数据转换规则等;
- 使用元数据管理工具,例如数据建模工具、数据集成工具等,实现技术元数据的共享和管理;
- 建立技术文档和标准,明确技术规范和流程,统一技术语言,减少技术沟通中的误解。
综上所述,共享业务元数据和技术元数据可以通过制定管理策略和规范、建立元数据管理中心、使用元数据管理工具等多种方式来实现,可以提高数据管理效率和数据质量,减少沟通误解。
七、优化/操作
24.简述数据仓库中的表的基本类型,以及为了保证引用完整性该以什么样的顺序对它们 进行加载。
在数据仓库中,表的基本类型包括事实表、维度表和桥接表。
事实表(Fact Table): 事实表是数据仓库中最重要的表,它包含了与业务过程相关的事实数据,例如销售额、订单数量等。通常情况下,事实表都是大型的、高度规范化的表,以支持数据查询和分析的复杂需求。
维度表(Dimension Table): 维度表是描述事实数据的属性的表,例如产品、时间、地点等。它们通常比事实表更小,更规范化,并且具有大量的预先计算的聚合数据。维度表与事实表之间的关系通常是一对多的,即一个事实表可以对应多个维度表。
桥接表(Bridge Table): 桥接表用于解决多对多关系的问题。在数据仓库中,多个维度表之间可能存在多对多的关系,这种关系通常通过创建桥接表来解决。桥接表通常包含了两个或多个维度表的键,用于在事实表中查找相关的数据。
为了保证引用完整性,数据仓库中的表应该按照以下顺序进行加载:
先加载维度表,因为事实表通常需要与维度表进行关联查询,因此必须先加载维度表,确保事实表的查询结果是准确的。
桥接表应该在维度表加载之后加载,因为桥接表通常与维度表之间存在关联,需要先加载维度表才能建立桥接表与维度表之间的关联。
最后加载事实表,因为事实表包含了大量的数据,加载事实表需要比加载维度表和桥接表更多的时间和资源。
综上所述,为了保证数据仓库中的表的引用完整性,应该按照维度表、桥接表、事实表的顺序进行加载。
25.简述 ETL 技术支持工作的四个级别的特点。
ETL(抽取、转换和加载)技术是数据仓库构建过程中的关键步骤,它将源系统中的数据抽取到数据仓库中,并将其转换成适合数据仓库中的数据格式,并最终加载到数据仓库中。在 ETL 技术支持工作中,可以根据不同的级别来描述其特点,一般分为四个级别:
手工 ETL: 手工 ETL 是最基本的级别,它需要人工干预,包括手动运行程序、数据复制和手动转换数据等。手工 ETL 的特点是简单、灵活,但是容易出错,需要大量的人工操作,效率较低。
脚本 ETL: 脚本 ETL 是在手工 ETL 的基础上进一步发展而来的,它使用脚本语言进行数据抽取、转换和加载。脚本 ETL 的特点是能够通过编写脚本自动化数据抽取和转换,但是需要编写复杂的脚本程序,需要具备一定的编程技能。
ETL 工具支持: ETL 工具支持是指使用专门的 ETL 工具来进行数据抽取、转换和加载的过程。ETL 工具通常提供了可视化的界面和多种数据转换和加工功能,如数据清洗、转换、聚合等。ETL 工具支持的特点是高效、可靠、易于使用,但是需要购买相应的软件和学习使用技能。
数据集成平台: 数据集成平台是在 ETL 工具的基础上进一步发展而来的,它将 ETL 工具与其他数据集成工具(如数据挖掘、数据质量管理等)进行集成,提供了更全面的数据集成解决方案。数据集成平台的特点是能够进行更复杂的数据集成操作,具有更强的扩展性和可维护性,但是需要更高的技术水平和更高的成本。
综上所述,ETL 技术支持工作从手工 ETL、脚本 ETL、ETL 工具支持和数据集成平台等级别的特点逐步发展,提供了越来越高效、可靠和全面的数据集成解决方案,但是也需要相应的技术水平和成本投入。
26.如果 ETL 进程运行较慢,需要分哪几步去找到 ETL 系统的瓶颈问题。
如果 ETL 进程运行较慢,需要进行性能优化来找到 ETL 系统的瓶颈问题。通常情况下,可以通过以下几个步骤来进行定位和优化:
数据源的抽取: 首先,需要检查数据源的抽取是否存在瓶颈,包括网络带宽、数据源服务器资源等。如果数据源的抽取存在瓶颈,可以考虑优化数据源的访问,如增加带宽、优化服务器资源等。
数据转换: 数据转换是 ETL 过程中的重要步骤,如果数据转换存在性能问题,可能会导致整个 ETL 过程运行缓慢。需要检查数据转换的复杂度和效率,以及所使用的转换工具是否适合当前数据量和数据类型。可以尝试使用更高效的转换算法或更适合当前数据类型的转换工具。
目标数据加载: 目标数据加载是 ETL 过程的最后一步,如果目标数据加载存在性能问题,可能会导致整个 ETL 过程运行缓慢。需要检查目标数据的存储方式、索引设置和负载等因素,以及目标系统的硬件资源和网络带宽是否足够。可以考虑优化目标数据的存储方式和索引设置,或者增加目标系统的硬件资源和网络带宽。
系统资源: 如果以上步骤都没有找到瓶颈问题,可以考虑检查 ETL 系统本身的资源使用情况,包括 CPU 使用率、内存使用率、磁盘 I/O 等。如果发现资源使用率过高,可以考虑优化 ETL 系统的资源配置或增加系统硬件资源。
综上所述,如果 ETL 进程运行较慢,可以通过检查数据源的抽取、数据转换、目标数据加载和系统资源等方面来定位和解决瓶颈问题。
27.简述如何评估大型 ETL 数据加载时间。
评估大型 ETL(Extract-Transform-Load)数据加载时间的方法可以分为以下几个步骤:
确定评估指标:在评估大型 ETL 数据加载时间之前,需要确定评估指标。常见的指标包括加载速度、处理效率、错误率等。
确定数据样本:为了评估大型 ETL 数据加载时间,需要选择一定数量的数据样本,以便进行测试。可以从现有的生产数据中选择样本,或者生成模拟数据进行测试。
进行测试:测试时需要记录各个阶段的耗时,包括数据提取、数据转换和数据加载。测试可以在模拟环境下进行,也可以在生产环境下进行。
分析测试结果:对测试结果进行分析,查找性能瓶颈和瓶颈原因。可以使用一些工具来辅助分析测试结果,如性能监控工具、日志分析工具等。
优化:根据分析结果,采取相应的优化措施,如调整数据提取的方式、调整数据转换逻辑、调整数据加载的方式等。
需要注意的是,在评估大型 ETL 数据加载时间时,要考虑到数据的大小、复杂度和来源等因素,以便更准确地评估数据加载的时间。此外,还需要考虑到数据的安全性和可靠性,避免对生产环境产生影响。
八、实时 ETL
28.简述在架构实时 ETL 时的可以选择的架构部件。
实时 ETL(Extract-Transform-Load)是指在数据到达时立即对其进行处理和转换,以便实时更新和分析数据。在实时 ETL 的架构设计中,可以选择以下几个部件:
数据提取:数据提取是从源系统中获取数据的过程。可以选择使用增量式提取方式,只获取最新的数据,减少数据传输的负载。
消息队列:消息队列是用于异步传输数据的中间件。当数据到达时,它们可以被发送到消息队列中,并且可以通过订阅的方式实时地将数据传输到其他系统或数据处理应用程序中。
流处理框架:流处理框架用于实时处理和转换数据。例如,Apache Kafka 和 Apache Flink 都是流处理框架,它们支持实时流处理和转换,并提供了灵活的处理和转换操作。
数据仓库:数据仓库是用于存储和管理数据的中央数据存储库。可以使用现有的数据仓库,如 Apache Hadoop、Amazon S3 等,以存储实时处理和转换后的数据。
数据可视化工具:数据可视化工具用于将处理后的数据可视化展示,以便用户更容易地理解和分析数据。
在架构实时 ETL 时,还需要考虑到数据的安全性和可靠性,确保数据的完整性和保密性。
29.简述几种不同的实时 ETL 实现方法以及它们的适用范围。
实时 ETL(Extract-Transform-Load)是指在数据到达时立即对其进行处理和转换,以便实时更新和分析数据。根据实现方法的不同,实时 ETL 可以分为以下几种实现方法:
流处理:流处理是一种实时处理和转换数据的方法,可以将数据作为无限流来处理。这种方法适用于处理高速的实时数据流,例如,通过 Apache Kafka 或 Apache Flink 等流处理框架来实现。
内存处理:内存处理是将数据保存在内存中,并使用实时计算引擎来处理和转换数据的方法。这种方法适用于处理数据量较小的实时数据,例如,通过 Apache Spark 等内存计算引擎来实现。
分布式处理:分布式处理是将大型数据集分割成小块并使用多台计算机同时处理和转换数据的方法。这种方法适用于处理大量的实时数据,例如,通过 Apache Hadoop 等分布式计算引擎来实现。
数据仓库处理:数据仓库处理是将数据存储在数据仓库中,并使用实时 ETL 工具来处理和转换数据的方法。这种方法适用于处理大量的历史数据和实时数据,并将它们组合在一起以进行更深入的分析。
需要根据实时 ETL 的实际需求和情况选择适合的实现方法。同时,在实现实时 ETL 时,还需要考虑到数据的安全性和可靠性,确保数据的完整性和保密性。
30.简述实时 ETL 的一些难点及其实现方法。
实时 ETL(Extract-Transform-Load)是指在数据到达时立即对其进行处理和转换,以便实时更新和分析数据。实时 ETL 面临的难点和挑战包括以下几个方面:
高效性:实时 ETL 的处理速度需要达到实时或几乎实时的水平,否则就无法满足业务需求。为了实现高效性,可以采用流处理、内存处理等高性能处理技术。
可扩展性:实时 ETL 需要应对高并发的数据流,需要能够随着数据量的增加而扩展计算资源,以支持更高的并发量和处理能力。
容错性:实时 ETL 有可能面临数据丢失或处理失败的情况,需要具备一定的容错机制,如数据备份、故障转移等措施。
数据一致性:由于实时 ETL 处理的是实时数据,而实时数据可能存在数据乱序、数据延迟等问题,需要考虑如何保证数据的一致性。
实现实时 ETL 需要采用一些特定的技术和方法,如:
增量式处理:采用增量式处理可以避免对全量数据进行处理,只处理新增的数据,从而提高处理效率。
缓存技术:采用缓存技术可以减少对数据存储系统的访问,提高数据处理速度。
并行处理:采用并行处理可以同时处理多个数据流,从而提高处理效率。
事件驱动架构:采用事件驱动架构可以实现数据的实时处理和转换,从而实现实时 ETL 的目标。
实时计算引擎:使用实时计算引擎,如 Apache Flink、Apache Spark Streaming、Apache Storm 等,可以方便地进行流处理,从而实现实时 ETL 的目标。
需要根据实时 ETL 的实际需求和情况选择适合的实现方法和技术,同时,需要注意数据的安全性和可靠性,确保数据的完整性和保密性。
以上是关于数据仓库面试题汇总的主要内容,如果未能解决你的问题,请参考以下文章