ETL 测试 - 面试问题



ETL 代表提取、转换和加载。它是数据仓库系统中的一个重要概念。**提取**是指从不同的数据源(例如交易系统或应用程序)中提取数据。**转换**是指对数据应用转换规则,使其适合分析报告。**加载**过程包括将数据移动到目标系统,通常是数据仓库。

ETL 周期中涉及的三层是:

  • **暂存层** - 暂存层用于存储从不同源数据系统提取的数据。

  • **数据集成层** - 集成层将暂存层中的数据进行转换,并将数据移动到数据库中,其中数据被排列成层次结构组,通常称为**维度**,以及事实和聚合事实。DW 系统中事实和维度表的组合称为**模式**。

  • **访问层** - 访问层供最终用户检索数据以进行分析报告。

ETL 工具用于从不同的数据源提取数据、转换数据并将其加载到 DW 系统中。相反,BI 工具用于为最终用户生成交互式和临时报表、为高级管理层生成仪表板、为每月、每季度和每年的董事会会议生成数据可视化。

最常见的 ETL 工具包括:SAP BO 数据服务 (BODS)、Informatica、Microsoft – SSIS、Oracle 数据集成器 ODI、Talend Open Studio、Clover ETL 开源等。

最常见的 BI 工具包括:SAP Business Objects、SAP Lumira、IBM Cognos、JasperSoft、Microsoft BI 平台、Tableau、Oracle Business Intelligence Enterprise Edition 等。

市场上流行的 ETL 工具包括:

  • Informatica - Power Center
  • IBM - Websphere DataStage(以前称为 Ascential DataStage)
  • SAP - Business Objects 数据服务 BODS
  • IBM - Cognos 数据管理器(以前称为 Cognos Decision Stream)
  • Microsoft - SQL Server Integration Services SSIS
  • Oracle - 数据集成器 ODI(以前称为 Sunopsis Data Conductor)
  • SAS - 数据集成工作室
  • Oracle - 仓库构建器
  • ABInitio
  • 开源 Clover ETL

暂存区是数据源和数据仓库/数据市场系统之间的一个中间区域。可以设计暂存区以提供许多好处,但使用它们的主要动机是为了提高 ETL 过程的效率、确保数据完整性和支持数据质量操作。

与数据挖掘相比,数据仓库是一个更广泛的概念。数据挖掘涉及从数据中提取隐藏信息并将其解释为未来的预测。相反,数据仓库包括诸如分析报告以生成详细报告和临时报告、信息处理以生成交互式仪表板和图表等操作。

OLTP 代表联机事务处理系统,通常是关系数据库,用于管理日常事务。

OLAP 代表联机分析处理系统,通常是多维系统,也称为数据仓库。

假设一家公司将其产品销售给客户。每次销售都是发生在公司内部的事实,事实表用于记录这些事实。每个事实表都存储主键以将事实表连接到维度表和度量/事实。

**示例** - Fact_Units

Cust_ID Prod_Id Time_Id 销售数量
101 24 1 25
102 25 2 15
103 26 3 30

维度表存储描述事实表中对象的属性或维度。它是事实表的一组伴侣表。

**示例** - Dim_Customer

Cust_id Cust_Name Gender
101 Jason M
102 Anna F

数据市场是数据仓库的一种简单形式,它专注于单个功能区域。它通常仅从少数来源获取数据。

**示例** - 在一个组织中,数据市场可能存在于财务、营销、人力资源和其他各个部门,这些部门存储与其特定职能相关的数据。

聚合函数用于对单个列的多个行进行分组以形成更重要的度量。当我们在数据仓库中保存聚合表时,它们也用于性能优化。

常见的聚合函数包括:

MIN 返回给定列中的最小值
MAX 返回给定列中的最大值
SUM 返回给定列中数值的总和
AVG 返回给定列的平均值
COUNT 返回给定列中值的总数
COUNT(*) 返回表中的行数

示例

SELECT AVG(salary) 
FROM employee 
WHERE title = 'developer'; 

数据定义语言 (DDL) 语句用于定义数据库结构或模式。

**示例** -

  • **CREATE** - 在数据库中创建对象

  • **ALTER** - 更改数据库的结构

数据操纵语言 (DML) 语句用于操作数据库中的数据。

**示例** -

  • **SELECT** - 从数据库中检索数据

  • **INSERT** - 将数据插入表中

  • **UPDATE** - 更新表中现有的数据

  • **DELETE** - 删除表中的所有记录,记录的空间保留

数据控制语言 (DCL) 语句用于控制对数据库对象的访问。

**示例** -

  • **GRANT** - 为用户授予对数据库的访问权限

  • **REVOKE** - 撤销使用 GRANT 命令授予的访问权限

操作符用于在 SQL 语句中指定条件,并用作语句中多个条件的连接词。常见的操作符类型包括:

  • 算术运算符
  • 比较/关系运算符
  • 逻辑运算符
  • 集合运算符
  • 用于否定条件的操作符

SQL 中常见的集合运算符包括:

  • UNION
  • UNION ALL
  • INTERSECT
  • MINUS

Intersect 操作用于组合两个 SELECT 语句,但它只返回两个 SELECT 语句中共同的记录。在 Intersect 的情况下,列数和数据类型必须相同。MySQL 不支持 INTERSECT 操作符。Intersect 查询如下所示:

select * from First 
INTERSECT 
select * from second 

Minus 操作组合两个 Select 语句的结果,并仅返回属于第一组结果的结果。Minus 查询如下所示:

select * from First 
MINUS 
select * from second 

如果执行源减去目标和目标减去源,如果减法查询返回一个值,则应将其视为不匹配行的案例。

如果减法查询返回一个值并且交集计数小于源计数或目标表,则源表和目标表包含重复行。

**Group-by** 子句与**select** 语句一起使用以收集类似类型的数据。**HAVING** 与**WHERE** 非常相似,除了其中的语句具有聚合性质。

**语法** -

SELECT dept_no, count ( 1 ) FROM employee GROUP BY dept_no;  
SELECT dept_no, count ( 1 ) FROM employee GROUP BY dept_no HAVING COUNT( 1 ) > 1;

**示例** - 员工表

国家 薪资
印度 3000
美国 2500
印度 500
美国 1500

按国家分组

国家 薪资
印度 3000
印度 500
美国 2500
美国 1500

ETL 测试是在将数据移动到生产数据仓库系统之前进行的。有时也称为表平衡或生产协调。

ETL 测试的主要目标是在处理用于分析报告的数据之前,识别和降低数据缺陷和一般错误。

下表记录了数据库和 ETL 测试的关键特征及其比较:

功能 数据库测试 ETL 测试
主要目标 数据验证和集成 用于 BI 报告的数据提取、转换和加载
适用系统 发生业务流程的事务系统 包含历史数据且不在业务流程环境中的系统
市场上的常用工具 QTP、Selenium 等。 QuerySurge、Informatica 等。
业务需求 用于从多个应用程序集成数据,影响严重。 用于分析报告、信息和预测。
建模 ER 方法 多维
数据库类型 通常用于 OLTP 系统 应用于 OLAP 系统
数据类型 规范化数据,连接更多 非规范化数据,连接较少,索引和聚合更多。

根据其功能,ETL 测试可以分为以下类别:

  • **源到目标计数测试** - 它涉及匹配源系统和目标系统中的记录数。

  • **源到目标数据测试** - 它涉及源系统和目标系统之间的数据验证。它还涉及数据集成和阈值检查以及目标系统中的重复数据检查。

  • **数据映射或转换测试** - 它确认源系统和目标系统中对象的映射。它还涉及检查目标系统中数据的功能。

  • **最终用户测试** - 它涉及为最终用户生成报告,以验证报告中的数据是否符合预期。它涉及查找报告中的偏差并在目标系统中交叉检查数据以进行报告验证。

  • **重新测试** - 它涉及修复目标系统中数据中的错误和缺陷,并再次运行报告以进行数据验证。

  • **系统集成测试** - 它涉及测试所有单个系统,然后组合结果以查找是否存在任何偏差。

  • ETL过程中数据丢失。

  • 数据错误、不完整或重复。

  • 数据仓库系统包含历史数据,因此数据量非常庞大,在目标系统中执行ETL测试非常复杂。

  • ETL测试人员通常无法访问ETL工具中的作业调度。他们几乎无法访问BI报表工具来查看报表的最终布局和报表中的数据。

  • 由于数据量过大和复杂性,难以生成和构建测试用例。

  • ETL测试人员通常不了解最终用户报表需求和信息的业务流程。

  • ETL测试涉及各种复杂的SQL概念,用于在目标系统中进行数据验证。

  • 有时不会向测试人员提供源到目标的映射信息。

  • 不稳定的测试环境会导致开发和测试过程延迟。

ETL测试人员的主要职责包括:

  • 验证源系统中的表:计数检查、数据类型检查、主键不缺失、数据不重复。

  • 在加载数据之前应用转换逻辑:数据阈值验证、代理键检查等。

  • 从暂存区加载数据到目标系统:聚合值和计算指标、关键字段不缺失、目标表中的计数检查、BI报表验证等。

  • 测试ETL工具及其组件,测试用例:创建、设计和执行测试计划、测试用例、测试ETL工具及其功能、测试数据仓库系统等。

转换是一组生成、修改或传递数据的规则。转换可以分为两种类型:主动转换和被动转换。

在主动转换中,一旦发生转换,创建为输出的行数可能会发生变化。这在被动转换期间不会发生。信息通过与作为输入给出的相同数量的信息传递。

分区是指将数据存储区域划分为多个部分。通常是为了提高事务的性能。

如果您的数据仓库系统规模庞大,则查找数据需要花费时间。存储空间的分区允许您更容易、更快地查找和分析数据。

分区可以分为两种类型:循环分区和哈希分区。

在循环分区中,数据均匀分布在所有分区中,因此每个分区中的行数相对相同。哈希分区是指服务器使用哈希函数来创建分区键以对数据进行分组。

  • Mapplet定义了转换规则。

  • 会话用于指示数据何时从源系统移动到目标系统。

  • 工作流是一组指示服务器执行任务的指令。

  • 映射是指将数据从源移动到目标。

查找转换允许您访问映射文档中未定义的关系表中的数据。它允许您更新缓慢变化的维度表以确定记录是否已存在于目标中。

代理键是具有序列生成的数字,没有意义,只是为了唯一地识别行。它对用户或应用程序不可见。它也称为候选键。

代理键具有序列生成的数字,没有意义。它旨在唯一地识别行。

主键用于唯一地识别行。它对用户可见,可以根据需要更改。

在这种情况下,您可以应用校验和方法。您可以从检查源系统和目标系统中的记录数量开始。选择总和并比较信息。

在此测试中,测试人员验证数据的范围。要检查目标系统中的所有阈值,以确保它们符合预期结果。

**示例**:年龄属性的值不应大于100。在日期列DD/MM/YY中,月份字段的值不应大于12。

Select Cust_Id, Cust_NAME, Quantity, COUNT (*)
FROM Customer GROUP BY Cust_Id, Cust_NAME, Quantity HAVING COUNT (*) >1;

当没有定义主键时,可能会出现重复值。

数据重复也可能是由于错误的映射以及在将数据从源系统传输到目标系统期间出现的人为错误造成的。

回归测试是指当我们对数据转换和聚合规则进行更改以添加新功能并帮助测试人员查找新错误时。在回归测试中出现的数据中的错误称为回归。

这三种方法是:自顶向下、自底向上和混合。

最常见的ETL测试场景包括:

  • 结构验证
  • 验证映射文档
  • 验证约束
  • 数据一致性检查
  • 数据完整性验证
  • 数据正确性验证
  • 数据转换验证
  • 数据质量验证
  • 空值验证
  • 重复验证
  • 日期验证检查
  • 使用减法查询进行完整数据验证
  • 其他测试场景
  • 数据清洗

数据清除是从数据仓库中删除数据的过程。它删除垃圾数据,例如包含空值或额外空格的行。

界面错误与应用程序的图形用户界面相关。它可能与字体样式、字体大小、颜色、对齐方式、拼写错误、导航等相关。

在执行阈值验证测试时出现的测试错误称为什么?

您可以通过创建映射变量和筛选转换来实现。您可能需要生成一个序列,以便获得所需的特定排序记录。

**值比较**:它涉及在源系统和目标系统中比较数据,转换最少或没有转换。可以使用各种ETL测试工具(例如Informatica中的源限定符转换)来完成此操作。

可以通过比较源系统和目标系统中的不同值来检查关键数据列。

您可以使用减法和交集语句来执行数据完整性验证。当您执行源减目标和目标减源,并且减法查询返回一个值时,则表示存在不匹配的行。

如果减法查询返回值,并且交集计数小于源计数或目标表计数,则表示存在重复行。

**快捷方式转换**是对共享文件夹中可用对象的引用。这些引用通常用于需要在不同项目或环境之间共享的各种源和目标。

在存储库管理器中,通过分配“共享”状态来创建快捷方式。之后,可以将对象从此文件夹拖到另一个文件夹。此过程允许对对象进行单点控制,并且多个项目不必将其所有导入源和目标导入到其本地文件夹中。

**可重用转换**是特定于文件夹的。**示例**:用于分配仓库客户 ID 的可重用序列生成器。它有助于从多个源系统加载客户详细信息并为每个新的源键分配唯一 ID。

当您将单个表连接到自身时,称为自连接。

数据库规范化是组织关系数据库的属性和表的流程,以最大程度地减少数据冗余。

规范化包括将表分解成冗余度更低(更小)的表,但不会丢失信息。

无事实事实表是没有度量的事实表。它本质上是维度的交集。无事实表有两种类型:一种用于捕获事件,另一种用于描述条件。

缓慢变化维度是指属性值随时间变化的情况。SCD 有三种类型:类型 1、类型 2 和类型 3。

广告