ETL 测试 – 面试问题


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

ETL 周期涉及的三层是 -

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

  • 数据集成层- 集成层将数据从暂存层转换并将数据移动到数据库,在数据库中数据被排列成分层组(通常称为维度),并转换为事实和聚合事实。DW 系统中事实表和维度表的组合称为模式

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

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

最常见的 ETL 工具包括 SAP BO Data Services (BODS)、Informatica、Microsoft – SSIS、Oracle Data Integrator ODI、Talend Open Studio、Clover ETL Open source 等。

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

市场上流行的 ETL 工具有:

  • Informatica – 电源中心
  • IBM - Websphere DataStage(以前称为 Ascential DataStage)
  • SAP - 业务对象数据服务 BODS
  • IBM - Cognos Data Manager(以前称为 Cognos Decision Stream)
  • Microsoft - SQL Server 集成服务 SSIS
  • Oracle - 数据集成商 ODI(以前称为 Sunopsis Data Conductor)
  • SAS - 数据集成工作室
  • Oracle - 仓库构建器
  • AB初始值
  • 开源 Clover ETL

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

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

OLTP 代表在线事务处理系统,通常是一个关系数据库,用于管理日常事务。

OLAP 代表在线分析处理系统,通常是一个多维系统,也称为数据仓库。

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

示例- Fact_Units

客户ID 产品ID 时间_Id 售出单位数量
101 24 1 25
102 25 2 15
103 26 3 30

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

示例- Dim_Customer

客户ID 客户名称 性别
101 贾森 中号
102 安娜 F

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

示例- 在组织中,数据集市可能存在于财务、营销、人力资源和其他存储与其特定职能相关的数据的单独部门。

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

常见的聚合函数是 -

最小 返回给定列中的最小值
最大限度 返回给定列中的最大值
返回给定列中数值的总和
平均电压 返回给定列的平均值
数数 返回给定列中值的总数
数数(*) 返回表中的行数

例子

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

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

例子-

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

  • ALTER - 改变数据库的结构

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

例子-

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

  • INSERT - 将数据插入表中

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

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

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

例子-

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

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

运算符用于指定 SQL 语句中的条件,并充当语句中多个条件的连接词。常见的运算符类型是 -

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

SQL 中常见的集合运算符是 -

  • 联盟
  • 联合所有
  • 相交

相交运算用于组合两个 SELECT 语句,但它仅返回两个 SELECT 语句中共有的记录。如果是相交,列数和数据类型必须相同。MySQL 不支持 INTERSECT 运算符。相交查询如下所示 -

select * from First 
INTERSECT 
select * from second 

减号运算组合两个 Select 语句的结果,并仅返回属于第一组结果的结果。减号查询如下所示 -

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 过程中数据丢失。

  • 数据不正确、不完整或重复。

  • DW系统包含历史数据,数据量太大且复杂,无法在目标系统中进行ETL测试。

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

  • 由于数据量太大且复杂,很难生成和构建测试用例。

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

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

  • 有时,测试人员不会获得源到目标的映射信息。

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

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

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

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

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

  • ETL 工具及其组件的测试、测试用例 - 创建、设计和执行测试计划、测试用例、测试 ETL 工具及其功能、测试 DW 系统等。

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

在活动转换中,一旦发生转换,就可以更改作为输出创建的行数。在被动转型期间不会发生这种情况。信息通过与输入相同的数字。

分区是将数据存储区域划分为多个部分。通常这样做是为了提高交易的性能。

如果您的DW系统规模巨大,那么定位数据将需要时间。存储空间分区可以让您更轻松、更快地查找和分析数据。

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

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

  • 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 测试场景是 -

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

数据清除是从数据仓库中删除数据的过程。它会删除垃圾数据,例如具有空值或多余空格的行。

外观错误与应用程序的 GUI 相关。它可以与字体样式、字体大小、颜色、对齐方式、拼写错误、导航等相关。

它被称为边界值分析相关错误。

您可以通过创建映射变量和过滤转换来完成此操作。您可能需要生成一个序列才能获得所需的专门排序的记录。

值比较- 它涉及在最小或没有转换的情况下比较源系统和目标系统中的数据。可以使用各种 ETL 测试工具(例如 Informatica 中的源限定符转换)来完成。

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

您可以使用 Minus 和 Intersect 语句来执行数据完整性验证。当您执行源减去目标和目标减去源并且减去查询返回一个值时,则表明行不匹配。

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

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

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

可重用转换是文件夹本地的。示例- 用于分配仓库客户 ID 的可重用序列生成器。从多个源系统加载客户详细信息并向每个新的源密钥分配唯一的 ID 非常有用。

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

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

规范化涉及将表分解为冗余较少(且较小)的表,但不会丢失信息。

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

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