ETL开发规范文档格式.docx
- 文档编号:17385945
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:11
- 大小:253.75KB
ETL开发规范文档格式.docx
《ETL开发规范文档格式.docx》由会员分享,可在线阅读,更多相关《ETL开发规范文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
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 开发 规范