ETL 测试 – 面试问题
ETL 代表提取、转换和加载。它是数据仓库系统中的一个重要概念。提取代表从不同的数据源(例如事务系统或应用程序)提取数据。转换代表对数据应用转换规则,使其适合分析报告。 加载过程涉及将数据移动到目标系统(通常是数据仓库)。
ETL 周期涉及的三个层是 −
暂存层 − 暂存层用于存储从不同源数据系统提取的数据。
数据集成层 − 集成层转换来自暂存层的数据并将数据移动到数据库,在数据库中,数据被排列成层次组(通常称为维度)以及事实和聚合事实。 DW 系统中的事实表和维度表的组合称为模式。
访问层 − 最终用户使用访问层来检索分析报告的数据。
ETL 工具用于从不同的数据源提取数据、转换数据并将其加载到 DW 系统中。相比之下,BI 工具用于为最终用户生成交互式和临时报告、为高级管理层生成仪表板、为每月、每季度和每年的董事会会议生成数据可视化。
最常见的 ETL 工具包括 − SAP BO 数据服务 (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 − Power Center
- IBM − Websphere DataStage(以前称为 Ascential DataStage)
- SAP − Business Objects Data Services BODS
- IBM − Cognos Data Manager(以前称为 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 | No. of units sold |
---|---|---|---|
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
相交操作用于组合两个 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;
示例 − 员工表
Country | Salary |
India | 3000 |
US | 2500 |
India | 500 |
US | 1500 |
按国家/地区分组
Country | Salary |
India | 3000 |
India | 500 |
US | 2500 |
US | 1500 |
在将数据移入生产数据仓库系统之前,需要进行 ETL 测试。有时也被称为表平衡或生产协调。
ETL 测试的主要目的是识别和缓解在处理数据以进行分析报告之前发生的数据缺陷和一般错误。
下表列出了数据库和 ETL 测试的主要功能及其比较 −
功能 | 数据库测试 | ETL 测试 |
---|---|---|
主要目标 | 数据验证与集成 | BI 报告的数据提取、转换和加载 |
适用系统 | 业务流发生的交易系统 | 包含历史数据且不在业务流环境中的系统 |
市场上的常用工具 | QTP、Selenium 等 | QuerySurge、Informatica 等 |
业务需求 | 用于集成来自多个应用程序的数据,严重影响。 | 用于分析报告、信息和预测。 |
建模 | ER 方法 | 多维 |
数据库类型 | 通常用于 OLTP 系统 | 应用于 OLAP 系统 |
数据类型 | 具有更多连接的规范化数据 | 具有较少连接、更多索引和聚合的非规范化数据。 |
根据其功能,ETL 测试可分为以下类别 −
源到目标计数测试 − 它涉及源和目标系统中记录数量的匹配。
源到目标数据测试 − 它涉及源和目标系统之间的数据验证。它还涉及数据集成和阈值检查以及目标系统中的重复数据检查。
数据映射或转换测试 − 它确认源和目标系统中对象的映射。它还涉及检查目标系统中数据的功能。
最终用户测试 − 它涉及为最终用户生成报告,以验证报告中的数据是否符合预期。它涉及查找报告中的偏差并交叉检查目标系统中的数据以进行报告验证。
重新测试 − 它涉及修复目标系统中数据中的错误和缺陷并再次运行报告以进行数据验证。
系统集成测试 −它涉及测试所有单独的系统,然后结合结果来查找是否存在任何偏差。
ETL 过程中的数据丢失。
不正确、不完整或重复的数据。
DW 系统包含历史数据,因此数据量太大且非常复杂,无法在目标系统中执行 ETL 测试。
ETL 测试人员通常无权查看 ETL 工具中的作业计划。他们几乎无法访问 BI 报告工具来查看报告的最终布局和报告中的数据。
由于数据量太大且太复杂,因此很难生成和构建测试用例。
ETL 测试人员通常不了解最终用户报告要求和信息的业务流程。
ETL 测试涉及目标系统中数据验证的各种复杂 SQL 概念。
有时测试人员没有获得源到目标的映射信息。
不稳定的测试环境会导致开发和测试过程延迟。
ETL 测试人员的主要职责包括 −
验证源系统中的表 − 计数检查、数据类型检查、键是否缺失、重复数据。
在加载数据之前应用转换逻辑:数据阈值验证、代理键检查等。
从暂存区到目标系统的数据加载:聚合值和计算度量、关键字段是否缺失、目标表中的计数检查、BI 报告验证等。
ETL 工具及其组件的测试、测试用例 − 创建、设计和执行测试计划、测试用例、测试 ETL 工具及其功能、测试 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。