ETL 开发规范.docx
- 文档编号:8975523
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:12
- 大小:253.67KB
ETL 开发规范.docx
《ETL 开发规范.docx》由会员分享,可在线阅读,更多相关《ETL 开发规范.docx(12页珍藏版)》请在冰豆网上搜索。
ETL开发规范
ETL开发规范
2009年2月
文档控制
版本
文件准备人
修改内容
准备日期
审核
目录
1前言2
1.1读者对象2
1.2编写目的2
2ETL简介2
3开发ETL需要的背景知识3
4常用SQL知识介绍3
4.1NOTIN与MINUS3
4.2多表连接中的条件限制(WHEREANDON)3
4.3游标尽量少使用5
4.4异常捕捉5
5SQL编写规范6
5.1原则定义6
5.2大小写规则6
5.3缩进与换行6
5.4别名7
5.5运算符前后间隔要求8
5.6变量引用8
5.7注释8
5.8其它9
6脚本编写规范9
6.1UltraEdit9
6.2PERL10
6.3SHELL10
7ETL开发流程10
7.1ETL开发流程10
7.2文档编写要求11
1
前言
1.1读者对象
1、所有的ETL开发人员
2、需要了解ETL开发过程的相关人员
3、数据仓库应用开发人员(开发中需要写SQL)
1.2编写目的
随着软件项目规模的日益扩大,随之而来的项目团队也不断增加,这给项目代码组装和后期维护带来很大的挑战。
为便于项目的代码组装以及降低项目的后期维护成本,本文总结了ETL开发过程中各种共性的东西,包括需要优先准备的一些背景知识、SQL编写要求、脚本编写要求、开发流程、容易出现问题的地方等,提供给所有参与ETL开发的同事使用。
2ETL简介
ETL是指数据的抽取(Extract),转换(Transform)和加载(Loading),是数据仓库系统实施的一个非常重要的环节,在项目实施的第一阶段中是项目实施的工作重点,建立一套完整、正确、高效的数据抽取、转换和加载机制,是数据仓库的基础性目标。
在ETL的设计中,ETL的模式可以是ETL,ELT,ETLT,现在比较基本的是ETLT。
✓ETL是指先从源系统中将数据抽取出来,然后通过使用高级语言编写的应用程序进行文件级的转换(一般是指码制、格式等转换,不需要使用数据库的表关联方式),然后进行加载。
✓ELT是指先从源系统中将数据抽取出来,然后加载到数据仓库中,然后在数据仓库中实现数据的转换,一般通过SQL来实现。
✓ETLT是指先从源系统中将数据抽取出来,经过一定的转换再加载到数据仓库中,然后再按照最终PDM的要求再次进行一次转换。
广义的ETL,还包括产生数据集市的数据、产生OLAP数据等。
即从用户的源系统准备数据开始,直到数据仓库的最终用户可用的数据的过程,都属于ETL。
3开发ETL需要的背景知识
这里只是指出需要优先学习的部分内容。
1.ANSISQL。
2.数据库,如ORACLE10g。
3.操作系统,如AIX、Linux等。
4常用SQL知识介绍
4.1NOTIN与MINUS
NOTIN和MINUS是在数据仓库的SQL中是经常使用的语句,但经常发生使用错误。
主要是NULL惹的祸。
参与比较的双方,只要有一方为NULL,比较的结果就只能是未知。
请大家记住,使用NOTIN时,在两个运算集合中不可以有NULL出现。
使用MINUS时,可以允许NULL出现。
但从性能上考虑,NOTIN要比MINUS要快很多。
所以在使用时,如果你发现要比较的运算集合中每个字段都是非空(NOTNULL),建议使用NOTIN,如果你不确定是否都是非空,建议使用MINUS,会比较保险一些。
4.2多表连接中的条件限制(WHEREANDON)
对于内连接来说,使用where/and/on对连接条件进行限制,其结果都是一样的。
对于外连接来讲,其结果就大不相同了。
AND是对连接前的各个表进行限制,WHERE是对连接之后的结果集进行限制。
大家可以仔细体会下面几个例子:
4.3游标尽量少使用
数据库计算的优势在于集合计算,而人为的使用游标使得集合计算演变为单记录计算,这样不仅很难充分利用数据库本身的优化器,而且影响事务处理的原子性。
所以对游标有以下建议:
1.在数据进行清洗的过程中,需使用游标来对脏数据进行清洗;
2.在数据清洗完成后的业务计算,全部采用集合计算,即不要使用游标;
4.4异常捕捉
存储过程中,不允许对异常捕捉后不做任何处理(即异常丢失)。
所有的SQL都需要检查其SQLCODE值,并做相应记录。
对SQLCODE为非零的情况一定要返回给父进程进行后处理,这部分处理一般有两种方法:
其一是标记错误;其二直接出错退出。
前者适合一般错误,如字段不符合业务规则等,后者则针对严重错误,如维度表为空。
5SQL编写规范
5.1原则定义
1、要求代码行清晰、整齐,具有一定的可观赏性;
2、代码编写要充分考虑执行速度最优的原则;
3、代码行整体层次分明、结构化强;
4、代码中应有必要的注释以增强代码的可读性;
5、规范要求非强制性约束代码开发人员的代码编写行为,在实际应用中在不违反常规要求的前提下允许存在可理解的偏差。
5.2大小写规则
✓所有的SQL语句中的保留字均采用全部大写,不要使用缩写;表别名也要大写;
如ALLASCASECREATEDATABASEDELETEFROMININSERTJOINLEFTNONOTNULLOUTSELECTTABLETITLEUPDATEVIEWWHERE等。
✓表名、视图名、宏和存储过程名:
全部大写;
✓字段名:
每个单词的首字母大写,其余部分小写,如Party_Id,Cust_Id,Prod_Inst_Id,Acct_Id,Type_Id等;
✓存储过程中的内部变量名,全部小写;
5.3缩进与换行
整个的SQL语句最好按照子句进行分行编写,SELECTFROMWHEREUPDATEINSERT等每个关键字都要另起一行如
✓同一级别的子句间要对齐
✓逗号放在每行的开头
✓分号放在SQL语句的最后,单独占一行
✓每行宽度不超过120字符(每个字符为8个点阵宽),超过行宽的代码可折行与上行对齐编排;
下面的编写方式不是好的形式:
在所有需要缩进的地方,每次缩进4格;在以下情况下需要缩进:
✓不同层次的SQL语句之间
✓SELECTINSERT等关键字之后的字段列表和关键字之间
5.4别名
SQL语句别名的命名,分层命名,从第一层次至第四层次,分别用P、S、U、D(都是大写字母)表示,取意为Part,Segment,Unit,Detail。
对于同一层次的多个子句,在字母后加1、2、3、4……区分。
如下图所示:
5.5运算符前后间隔要求
算术运算符、逻辑运算符的前后至少要保留一个空格,如下图所示:
5.6变量引用
✓在SQL语句中引用主机变量(如PERL、SHELL等)时,要在变量名两端加花括号
✓对日期变量的引用要在单引号内,如'${MYDATE}'
5.7注释
针对复杂的SQL语句,请尽量增加相应的注释说明,以便自己和其它同事事后可以比较容易的读懂和修改。
注释中应包含以下内容:
✓编写人/编写日期
✓修改人/修改日期
✓该脚本的编写目的与主要内容
✓如果有特殊处理、特别的技巧等内容,一定要在注释中详细说明
✓每一大的模块之前要有注释,说明该模块的主要作用
以下是注释必需项:
1.程序头注释,应说明以下几项:
✓功能
✓创建日期
✓创建人
✓修改记录(修改人、修改日期、修改描述)
✓源表
✓目标表
✓参数
✓调用
以下是一个典型的程序头注释区:
2.程序体注释,应说明以下几项:
✓变量声明区
✓变量初始化区
✓主程序开始
✓垃圾回收区
5.8其它
对于内连接和外连接的使用,要求该使用外连接的地方都已经使用了外连接,不需要外连接的地方一定不使用外连接。
表中的字段若是从其它表引用的,要确保该字段在被引用的表中存在。
此外,SQL代码中尽量不要使用*,必须明确具体字段列表。
6脚本编写规范
6.1UltraEdit
编写SQL。
6.2PERL
脚本开头可参照下面:
6.3SHELL
7ETL开发流程
7.1ETL开发流程
ETL的开发通常会以PDM的一个表或几个相关表为单位,我们称之为JOB。
每一个JOB的开发通常会包含以下步骤:
1)编写加载说明文档(包括MAPPING文档)
2)开发初始与日常加载脚本
3)测试初始与日常加载脚本
4)编写测试报告
加载说明文档的模板和测试报告的模板因项目而异,格式可以参考每个项目具体的文档模板。
开发时最好以JOB为单位,由易到难,一个JOB结束以后再着手开发下一个JOB。
当第一个JOB开发完成之后,由ETL相关负责人员确认文档、脚本等都没有问题以后,再进行下一个JOB的开发。
对于JOB的开发,我们实行“终身版权制”,在项目结束之前,只要开发人员还在项目中,其开发的JOB出现问题,开发人员拥有最终的解释权,并负责解决出现的问题。
7.2文档编写要求
必须在文档中注明初始开发人员与日期、每次变更的人员、变更内容及日期。
开发说明中既要详细说明每一步处理过程,也要概括说明总体的处理思路,用来和具体的处理步骤进行验证。
要说明源数据来自哪个地市、哪个源系统。
要说明数据转换的具体过程,包括对数据的所作的转换,所采用的具体方法等。
说明对源数据所作的清洗。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ETL 开发规范 开发 规范