ETL系统维护手册
1.概述
文件包括以下方面的内容:
?简要描述了ETL系统的概念,目标和系统边界。
?描述了ETL系统的整个处理流程。
?描述了ETL系统的系统结构和功能模块。
?确定了ETL服务器的目录结构和ETL作业的命名原则,从而能够以此为依据来设计、管理经营分析系统的数据转换作业。
2.ETL系统概念
ETL系统是经营分析系统的一个子系统,完成经营分析系统所必须的ETL过程。
ETL是extraction,transformation和load的缩写,意思是抽取,转换和加载。
下面对三个概念分别说明:
?抽取:将经营分析所关注的原始的未经转换的源数据从源系统中抽取出来,按照一定的格式形成数据块,并按照特定的传输协议从源系统传到ETL系统,做为ETL系统下一步操作的数据源。
?转换:将源系统传来的源数据按照经营分析系统的所规定的正确性,一致性,无冗余性的要求进行转换。
?加载:将数据加载到经营分析系统的数据仓库中。
1.1. ETL目标
ETL系统的目标是经过适当的抽取,转换和加载过程,将经营分析系统所关注的数据从源系统中正确地,一致地,无冗余地载入经营分析系统的数据仓库中。
1.2. ETL系统边界
ETL系统边界包括两部分:
?ETL系统同源系统的接口界面:
ETL系统同源系统的交互是通过文件形式完成的。源系统按照经营分析
系统的要求按照特定的周期以特定的格式生成源数据文件,ETL系统取
得源系统生成的数据文件进行下一步的处理。
?ETL系统同经营分析系统其它子系统的接口界面:
ETL系统同经营分析系统其它子系统的交互是通过数据仓库的基层表形
式完成的。ETL按照经营分析系统的要求,将数据加载到数据仓库的基
层表,经营分析系统其它子系统根据基层表中的内容形成面向分析使用
的中间表,多维数据库表等等。
1.3. ETL处理流程
ETL处理流程包括以下几个方面:
?取数据文件流程:取数据文件流程即是ETL系统同源系统的接口处理流程,包括以下几个步骤:
?取得源系统当前传送的数据文件文件名列表
?校验文件的完整性,根据文件名列表中文件大小和我们实际取得的文件的文件大小进行比较,可以得到源数据是否完整。若文件名列
表中文件大小和我们实际取得的文件的文件大小相等,表示数据文
件是完整的,若不相等,表示数据文件不完整。将不完整文件转移
到特定目录中,并向监控系统提出报警信息。
?校验文件的有效性,根据文件名中所带的任务周期信息判断源系统产生的数据文件是否是当前的任务周期所需的数据文件。若数据文
件无效,将数据文件转移到特定目录中,并向监控系统提出报警信
息。
?加载流程:加载流程是将校验通过的正确的数据文件无转换地直接加载到数据仓库的ETL临时表,临时表的结构同于源系统传来的数据文件的结构。?转换流程:转换流程是将ETL临时表中的数据按照正确性,一致性,无冗余性的原则转换到数据仓库的基层表中。
?转换原则包括以下各点:
正确性:要求源数据各字段按照确定的转换规则正确地转换到数据仓库的基层表中,这是转换的最基本的要求。
一致性:要求不同数据源取来的具有相同含义的字段取值按照数据仓库基层表的数据定义做归一化处理。
无冗余性:由于不同数据源传来的数据中难免有部分数据重复,所以在转换过程中就要求删除这部分冗余数据,使得加载到数据
仓库的基层表中的数据应是无冗余的。
?转换类型包括以下各点:
字段类型转换:由于源数据的字段定义不一定同于数据仓库基层表字段定义,所以就要求字段类型转换,转换过程不应造成信息
丢失和错误转换。
归一化转换:不同数据源取来的具有相同含义的字段取值按照数据仓库基层表的数据定义做归一化处理
数据合并:由于数据仓库基层表的实体定义有可能对应到源系统中多个实体,在这种情况下就要求将源系统中多个实体的数据合
并入一个数据仓库基层表实体中。在合并过程中应注意无冗余性
转换原则。
数据拆分:由于源系统中一个实体有可能对应到数据仓库基层表的多个实体,在这种情况下就要求将源系统中一个实体的数据拆
分到数据仓库多个基层表中。
?转换逻辑组成:
?转换逻辑由多个独立的任务组组成
?每一个任务组由多个相互依赖的任务组成
? 任务是转换逻辑的最小单位,包含具体的转换逻辑,实现特定 ? 频率,特定时间的数据转换。
1.4. ETL 系统结构
1.5. ETL 功能模块
ETL 总控模块:
ETL 总控模块负责调度取数据模块,多个加载模块,多个转换模块。 它包括以下部分:
? 任务配置表,它包含了以下信息:
ETL过程所须的所有任务标识信息,包括任务标识,任务名
所有任务的任务周期,任务触发的日期和时间段信息
任务之间的依赖关系信息,一个任务是否依赖于其它任务的完成,一个任务的完成是否应触发其它任务的执行
所有任务对应的执行模块的路径
?任务状态表,它包含了当前任务周期内任务执行状态,具体记录了当前任务周期内哪些任务已执行,执行是否成功等。
?总控逻辑:根据任务配置表和任务状态表中信息完成任务的调度和任务周期的更新。
?数据预处理模块:
取数据模块根据源系统传来的数据文件文件名列表完成数据文件的完整性和有效性校验,若校验不通过,则将错误文件移到特定目录中,并通过状态日志模块对监控系统提出告警。若校验通过,则将数据文件文件名和路径提供给下一个总控模块
?加载模块:
加载模块将清空数据仓库ETL临时表,并将源数据文件加载到数据仓库ETL临时表。
?转换模块:
转换模块按照经营分析的要求将数据从数据仓库的ETL临时表中转换到数据仓库的基层表中。
?控制参数接口模块:
控制参数接口模块是ETL管理员同ETL系统交互的接口,ETL管理员通过控制参数接口模块调整总控模块的任务配置表和查看总控模块中任务状态表
?状态日志模块:
状态日志模块将ETL过程产生的各种状态日志信息写入状态日志文件中,用于监控和查错处理
1.6. ETL 系统实现
ETL 系统将实现为ETL AUTOMATION 工作框架和处理脚本。
1.7. ETL AUTOMATION 工作框架
ETL AUTOMATION 的工作流程图为:
它包括以下各部分:
ETL AUTOMATION 工作框架:ETL AUTOMATION 工作框架由多个守
护进程构成。它提供了一个开放性的体系结构,允许不同的转换加载逻辑以PERL 脚本的形式作为插件加入到整个ETL AUTOMATION 工作流程中。
Control File/Data Files
/ETL/DATA/receive /ETL/DATA/fail/bypass or
?控制文件:控制文件是一个文本文件,由源系统生成,作为源系统同ETL AUTOMATION之间的接口,源系统使用控制文件通知源系统以生成了源数据文件,需要ETL AUTOMATION进行处理。
?控制文件的文件名形如:
dir.XXXXXYYYYMMDD,
dir.XXXXXXXX.YYYYMMDD,DXXXXXMMDD
?内容包括:
源数据文件的文件名
源数据文件的大小
源数据文件的记录数(可选)
?etlrecv.pl:etlrecv.pl程序是ETL系统的取数据模块,它监控是否源系统有新的控制文件生成,若有则进行文件完整性和有效性检查,若检查失败,则将源数据文件移入错误目录,若正确,则将控制文件和源数据文件移入QUEUE目录,等待下一步处理。
?etlmaster.pl:etlmaster.pl程序监视QUEUE目录,看是否有新的控制文件,若有,则将控制文件和源数据文件转入PROCESS目录中并生成一个执行etlslave_nt.pl的子进程。它作为处理监听进程,是ETL
AUTOMATION工作框架的一部分。
?etlslave_nt.pl:etlslave_nt.pl查看PROCESS目录,根据控制文件中的源数据文件的文件名调用对应的处理脚本,在处理脚本成功完成后,将控制文件和源数据文件移入complete目录中,若处理失败,则将控制文件和源数据文件移入错误目录中
?处理脚本:处理脚本是使用PERL语言编写的程序,包含具体的加载和转换逻辑,它作为ETL AUTOMATION的插件实现了ETL
AUTOMATION系统的开放性,可扩充性和适应性。
?etlagent.pl:此程序是GUI前端管理程序的代理程序,接收GUI前端管理程序发出的命令,根据命令完成取日志文件,取脚本文件,置脚本文
件,启动任务,强制启动任务,查询状态等功能,并将结果返回给GUI
前端管理程序。
?etlclean.pl:此程序完成ETL AUTOMATION系统内部状态日志信息的清除。
?GUI前端管理程序:此程序由JAVA语言编写,用户使用此程序,完成任务的配置,任务状态的查询,任务的启动,脚本文件和日志文件的查
看等等。
1.8. 处理脚本
需要实现的处理脚本包括两部分:
?加载脚本:加载脚本使用teradata的FastLoad,MultiLoad工具将源数据文件不经转换地直接加载到数据仓库的临时表中。
◆转换脚本:加载脚本使用teradata的BTEQ工具将数据仓库的临时表
中数据转换到数据仓库的中间表中。
3.ETL数据装载环境
1.9. 服务器系统名及IP定义
系统名:***ETL
IP: 127.0.0.1
1.10. 所安装ETL的软件及作用
?ETL AUTOMATION的工作框架,包括:
?PERL执行环境。
?Perl DBI 接口模块,一个类似 ODBC 的接口程序,提供了一组标准的函数界面让我们可以使用来对于数据库进行运作。
?Perl DBD-ODBC 接口模块,通过DBD-ODBC 界面呼叫使用
Teradata 所提供的 ODBC 驱动程序来连接 Teradata 的数据库。
?Teradata 的 ODBC 驱动程序。
?ETL Automation 服务端程序,包括
etlrcv.pl,etlmaster.pl,etlslave_nt.pl,etlagent.pl,etlclean.pl等。
?ETL前端管理和监控程序
?安装 Java 执行环境。
?安装 ETL 前端管理程序- ETLAdmin.jar,用户使用此程序完成ETL 任务,任务组,任务依赖关系的配置。
?安装 ETL 前端监控程序 - ETLMonitor.jar,用户使用此程序完成ETL任务当前运行状态的监控。
1.11. E TL服务器目录结构及说明
以上目录结构所对应的权限如下表所示:
1.1
2. E TL处理环境变量
在ETL的异常处理中,有多个不同的环境变量需要设定,其中包括了放置错误文件的目录、进行话单及结算预处理的目录、源数据的存放目录…等。表1.1中列出
的环境变量都必须配置到System Environment中:
以下我们来解释表1.1中的环境变量的意义。
第一个环境变量AUTO_DATA_RECEIVE 为ETL 的receive 目录,ETL 将扫描此目录下并对目录下的数据文件进行加载。第二个变量AUTO_DATA_PRD 为源数据传送的目录,数据文件都会先送至此目录,经过ETLEnhancedAdmin 程式的处理后再传送到对应的目录。第三个变量AUTO_DATA_ERR 为错误数据的储存目录,在ETLEnhancedAdmin 程式中检查出错的数据文件都将传送至此目录下。另外由于不同系统中所设定的目录路径或有不同,请根据目前系统的配置来更改环境变量的内容。
前端ETL 环境变量
说明如下:
其它部分与ETL 部分是完全一致的,主要是增加了三个前端所使用的数据
库定义的变量:
AUTO_MIDDLEDB=PRDMIDDLE 定义了前端中间表数据的存储位置; AUTO_MARTDB=PRDMART 定义了前端事实表存储的位置; AUTO_REPORTDB=PRDREPORT 定义了集团公司报表数据存书的位置;
表1.1
说明如下:
LOGON_CUBE
运行CUBE任务所使用的数据库登录文件;
LOGON_FE
运行事实表加载任务所使用的数据库登录文件;
LOGON_MIDDLE
运行中间表任务所使用的数据库登录文件;
LOGON_REPORT
运行报表任务所使用的数据库登录文件;
如果这些文件被误删除,必需使用工具生成,并存储至相应目录下,才能正常运行日常加载任务。
数据预处理服务ETLEnhancedAdmin扫描处理目录,检查源系统接口数据的完整性,对数据进行初检,并将初检合格数据移到ETL处理目录中。并产生一个日志报告传送至ETL_GROUP中的相关人员的email中。通过日志报告我们可以知道当前ETL中的任务的一个概括状况。
4.源数据文件获取
1.13. 初始抽取数据
?初始抽取数据采用全量抽取方式
?对于通话记录,结算清单、帐单,抽取最近3个月的记录。
?初始抽取中数据仓库基层表只有部分历史表源系统保存了历史变更信息?对于源系统不保存历史变更信息的数据仓库历史表初始装载时不需装载。
?数据仓库中非历史表的装载按照映射关系编写脚本,转换规则同于日常加载。
?初始抽取在系统上线前的一定时间内一次性完成。
1.14. 日常变更数据
?日常变更数据的加载按照增量加载和全量加载两种方式。
增量加载只要求源系统将每个加载周期内发生变动的记录发送至ETL
系统。
全量加载是要求源系统在每个加载周期将源表中所有记录发送至ETL
系统
?记录变更的保存方式:
记录变更的保存方式分为以下几种:
?历史表方式,记录的当前状态保存在实体表而变更前的历史记录保存在历史表中,历史表比对应的实体表多了变更开始时间和变更结束
时间两个字段,用以表明此条记录存在的时间窗口。此种方法适合于
增量加载。
?时间戳方式,历史记录和当前记录同时存在于实体表中,不同历史时期的记录根据时间戳区分。此种方法适合增量加载和全量加载两种
方式。
?数据加载周期:
数据加载周期分为按日加载和按月加载两种方式。
对于重要的和变化频度大的源表采用按日加载方式,其它按月加载。
数据加载周期同时结合需求进行考虑。
1.15. 源数据提供方式
1.1.1.源数据文件格式
数据文件统一采用如下格式:
?采用文本文件;
?每条记录一行,各字段间以“|”为分隔符,各字段内容禁止含有“|”字符,每行必须以换行符结尾;
?存放顺序:每行中数据的存放顺序必须严格按照数据文件格式说明中字段的排列顺序存放;
?数据文件中的数据遵循以下编码规则
字符集,汉字使用GBK内码,西文使用ASCII码;
数字格式
?在上传数据文件中,数字的表示必须规范,小数点的前后必需有数字不能有“.01”或“34.”这种表示;
?符号处理:数字最高位的左边第一位为符号位;对于负数,符号位为“-”,正数不用加符号位;
空值(NULL)
数据仓库系统中不允许出现NULL(所有业务系统中出现的NULL在数据仓库中被认为是无意义的,数据仓库系统将采用自己的处理规则对业务系统中的NULL值进行处理),所有业务系统中的NULL值在数据文件中表现为在两个分隔符之间没有任何字符(如:姓名、年龄、性别三个字段,如果数据文件中的值是“张三||男”,则表示:姓名为“张三”,年龄为NULL,性别为“男”);
空格的处理
?对于业务系统中整个字段都为空格的,在数据文件中必须转换为NULL值;
?对于字段后面的空格视为无意义,在生成数据文件时,必须将字段后面的空格去掉(如:“张三”应转换为“张三”);
日期类型
日期类型统一采用YYYY-MM-DD格式,YYYY-MM-DD必须为有意义的日期
?YYYY为四位数字,必须是有效的年份
?MM为两位数字,必须是有效的月份(01-12)
?DD为两位数字,必须是有效的日期(01-31)
时间类型
统一采用HH:MM:SS格式
?HH为两位数字,必须是有效的小时(00-23),24小时制
?MM为两位数字,必须是有效的分钟(00-59)
?SS为两位数字,必须是有效的秒(00-59)