ETL 测试 – 面试问题
ETL 测试 – 面试问题
ETL 代表提取、转换和加载。它是数据仓库系统中的一个重要概念。提取代表从不同的数据源(例如事务系统或应用程序)中提取数据。转换代表对数据应用转换规则,使其适用于分析报告。该加载过程涉及将数据移动到目标系统,通常的数据仓库。
ETL 循环中涉及的三层是 –
-
暂存层– 暂存层用于存储从不同源数据系统中提取的数据。
-
数据集成层– 集成层转换来自暂存层的数据并将数据移动到数据库,在数据库中数据被排列成层次结构组,通常称为维度,以及事实和聚合事实。DW 系统中的事实表和维度表的组合称为模式。
-
访问层– 最终用户使用访问层来检索数据以进行分析报告。
ETL 工具用于从不同的数据源提取数据、转换数据并将其加载到 DW 系统中。相比之下,BI 工具用于为最终用户生成交互式和临时报告,为高级管理人员生成仪表板,为月度、季度和年度董事会会议生成数据可视化。
最常见的 ETL 工具包括 – SAP BO 数据服务 (BODS)、Informatica、Microsoft – SSIS、Oracle Data Integrator ODI、Talend Open Studio、Clover ETL 开源等。
最常见的 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 – Data Integrator ODI(以前称为 Sunopsis Data Conductor)
- SAS – 数据集成工作室
- Oracle – 仓库构建器
- ABInitio
- 开源 Clover ETL
暂存区是位于数据源和数据仓库/数据集市系统之间的中间区域。临时区域可以设计为提供许多好处,但使用它们的主要动机是提高 ETL 过程的效率、确保数据完整性并支持数据质量操作。
与数据挖掘相比,数据仓库是一个更广泛的概念。数据挖掘涉及从数据中提取隐藏信息并解释它以供未来预测。相比之下,数据仓库包括诸如生成详细报告和临时报告的分析报告、生成交互式仪表板和图表的信息处理等操作。
OLTP 代表在线事务处理系统,它通常是一个关系数据库,用于管理日常事务。
OLAP 代表在线分析处理系统,它通常是一个多维系统,也称为数据仓库。
假设一家公司向客户销售其产品。每笔销售都是公司内部发生的事实,事实表用于记录这些事实。每个事实表存储将事实表连接到维度表和度量/事实的主键。
示例– Fact_Units
Cust_ID | 产品编号 | 时间 ID | 售出单位数 |
---|---|---|---|
101 | 24 | 1 | 25 |
102 | 25 | 2 | 15 |
103 | 26 | 3 | 30 |
维度表存储描述事实表中对象的属性或维度。它是事实表的一组伴随表。
示例– Dim_Customer
Cust_id | 客户名称 | 性别 |
---|---|---|
101 | 杰森 | 米 |
102 | 安娜 | 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 中常见的集合运算符是 –
- 联盟
- 联合所有
- 相交
- 减
相交操作用于组合两个 SELECT 语句,但它只返回两个 SELECT 语句中共有的记录。在 Intersect 的情况下,列数和数据类型必须相同。MySQL 不支持 INTERSECT 运算符。Intersect 查询如下所示 –
select * from First INTERSECT select * from second
减法运算合并两个 Select 语句的结果,只返回属于第一组结果的那些结果。减号查询如下所示 –
select * from First MINUS select * from second
如果执行source减目标和目标减源,并且如果减查询返回一个值,则应将其视为行不匹配的情况。
如果减号查询返回一个值并且计数相交小于源计数或目标表,则源表和目标表包含重复行。
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 | 薪水 |
India | 3000 |
US | 2500 |
India | 500 |
US | 1500 |
按国家分组
Country | 薪水 |
India | 3000 |
India | 500 |
US | 2500 |
US | 1500 |
ETL 测试在数据移入生产数据仓库系统之前完成。它有时也称为表平衡或生产对帐。
ETL 测试的主要目标是识别和减轻在处理数据以进行分析报告之前发生的数据缺陷和一般错误。
下表捕获了数据库和 ETL 测试的主要功能及其比较 –
Function | 数据库测试 | ETL测试 |
---|---|---|
Primary Goal | 数据验证和集成 | 用于 BI 报告的数据提取、转换和加载 |
Applicable System | 业务流程发生的交易系统 | 包含历史数据且不在业务流程环境中的系统 |
Common Tools in market | QTP、硒等 | QuerySurge、Informatica 等 |
Business Need | 它用于集成来自多个应用程序的数据,影响严重。 | 它用于分析报告、信息和预测。 |
Modeling | ER法 | 多维 |
Database Type | 它通常用于 OLTP 系统 | 应用于OLAP系统 |
Data Type | 具有更多连接的规范化数据 | 具有更少连接、更多索引和聚合的非规范化数据。 |
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 中的 Source Qualifier Transformation)来完成。
可以通过比较源系统和目标系统中的不同值来检查关键数据列。
您可以使用 Minus 和 Intersect 语句来执行数据完整性验证。当您执行源减目标和目标减源并且减查询返回一个值时,则它是不匹配行的标志。
如果减号查询返回一个值并且计数相交小于源计数或目标表,则存在重复行。
快捷方式转换是对共享文件夹中可用对象的引用。这些引用通常用于在不同项目或环境之间共享的各种源和目标。
在存储库管理器中,通过分配“共享”状态来创建快捷方式。稍后,可以将对象从此文件夹拖到另一个文件夹。此过程允许对对象进行单点控制,并且多个项目不会将所有导入源和目标都放入其本地文件夹。
Reusable Transformation是本地文件夹。示例– 用于分配仓库客户 ID 的可重用序列生成器。从多个源系统加载客户详细信息并为每个新的源密钥分配唯一的 ID 很有用。
当您将单个表连接到自身时,它称为自连接。
数据库规范化是组织关系数据库的属性和表以最小化数据冗余的过程。
规范化涉及将表分解为冗余较少(和较小)的表,但不会丢失信息。
无事实事实表是没有任何度量的事实表。它本质上是维度的交集。有两种类型的无事实表:一种用于捕获事件,另一种用于描述条件。
缓慢变化的维度是指属性值随时间的变化。SCD 分为三种类型 – 类型 1、类型 2 和类型 3。