ETL 脚本书写规范

来源:互联网 发布:安卓跑分软件 编辑:程序博客网 时间:2024/06/06 01:40

2014/11/24

1.  前言

为了统一软件开发过程中关于SQL(Structured Query Language)编码的格式,使编码人员编写SQL代码遵从特定的风格,并养成良好的开发习惯,从而增强代码的可读性,便于交流和维护,特此收集。


1.1边界定义

规范主要应用于Teradata SQL DML以下几个语句编写约定

Select  语句;

Insert  语句;

Delete 语句;

逻辑判断语句;

类型转换语句;

以及相关的Teradata 函数、

Teradata 数据仓库项目实施过程中数据表现形态约定等内容

1.2 原则定义

1、 要求代码行清晰、整齐,具有一定的可观赏性;

2、 代码编写要充分考虑执行速度最优的原则;

3、 代码行整体层次分明、结构化强;

4、 代码中应有必要的注释以增强代码的可读性;

5、 规范要求非强制性约束代码开发人员的代码编写行为,在实际应用中在不违反常规要求的前提下允许存在可理解的偏差。


2. 格式编排规范

2.1 注释约定

对于较为复杂的数据操作例程应有充分的注释,注明实现的功能,业务逻辑关系输入输出关系等内容,对于修改脚本,需在注释中标明修改人、修改时间。

注释中应包含以下内容:

脚本头注释:

脚本头的注释中需要注明修改人、修改时间、修改目的。

脚本行注释:

对于脚本中的硬编码需要注明含义。

单行或多行注释都用 ’ /*   */’ 来标识。

注释中不可出现“@”符号。

脚本块注释:

对于脚本块的注释,修改人需要注释掉原脚本,对新增的脚本需要在第一行的注释中注明“start”,在最后一行注明“end”。



对于较为复杂的过程必须注明代码实现的功能以及相关的创建、修改记录

在主体上有分割的代码行建议加一空白行以示区分;


2.2 

(1). 代码段中应用到的所有Teradata 关键字、保留字都应大写


可以使用 PL/SQL Developer:

    Tools  ==>

        Edits ==> 

   keyword case ==>

uppercase


(2).  表名、视图名、宏和存储过程名、字段名、字段别名以首字大写加下划线连接符来命名。

(3). 四个空格一个缩进

(4).  对应的括号通常要求在同一列的位置

(5). 行宽不超过120字符

(6). 同一级别的子句要求对齐

(7). 逗号放在每行的开头

(8). 分号放在SQL语句的最后,独占一行


3. 语法及数据操作约定



case语句:


用好子查询是提高代码执行速度的一个好方法,采用子查询来缩小结果集之间的操作将使系统运算的开销更小,当然Teradata的优化器也会优化代码的处理过程以最优的路径来完成用户的需求,但我们在编写代码时也要考虑性能的优化。子查询嵌套在Teradata数据仓库系统开发中是经常要用到的,因此代码的分层编排就非常重要。




表别名定义:



临时表的命名按照如下形式:

VT_ + 普通表名 [+功能]

VT”表示该表为临时表,“普通表名”就是普通形式的表名,“功能”为可选项,一般可用PreCurInsDelUpd等来表示.


SQL语句中引用变量时,要在变量名两端加花括号

 对日期变量的引用要在单引号内,如'${MYDATE}'

PDATA区中的表操作库名要用变量,不可以写死。对STAGE区中的表一般直接写库名


NULL 的处理

ZEROIFNULL (数字型字段)或者

COALESCE (数字型字段,0)或

COALESCE  (字符字段,’‘)


CAST       (日期型字段        AS   DATE FORMAT 'YYYYMMDD')

说明:通过以上函数处理后,如果字段值为NULL将返回 0值。


CASE 

WHEN ( substr (id,strat_point, len) ( CASESPECIFIC)) ='Gt' THEN '1'


CAST(trade_date AS DATE FORMAT 'YYYYMMDD')

=CAST(str AS DATE FORMAT 'YYYYMMDD')


chars 取字符长度函数,需要对字段先trim,否则返回对应字段的最大长度。


对于全表删除,最后都要有all,且不需要和后面的insert组成多语句提交。



4. ETL加载策略规范

5. 常用TD SQL 知识介绍







Q:

除删除表的SQL语句外,每个SQL结束应该有.IF ERRORCODE <> 0 THEN .QUIT 12;判断语句。

在数据仓库系统项目开发中不建议使用UPDATE语句来进行数据的更新操作,可以采用替代的中间过度表完成表中数据的重新组织,从而实现原表数据值的更新。


一. 字段连接

需检查连接(||)出来的结果中间有没有存在空格,如有空格需要特殊处理。

一. UNION使用

A、union的时候所有字段定义均以第一个集合定义的为准,导致后面的集合如果定义的字符长度比第一个集合长,就会按照第一个集合定义的字符长度截断。                      

B、除非是特殊需要,建议采用多个insert代替union



0 0
原创粉丝点击