ETL 脚本书写规范
2014-11-25 19:19
417 查看
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”表示该表为临时表,“普通表名”就是普通形式的表名,“功能”为可选项,一般可用Pre、Cur、Ins、Del、Upd等来表示.
在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。
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”表示该表为临时表,“普通表名”就是普通形式的表名,“功能”为可选项,一般可用Pre、Cur、Ins、Del、Upd等来表示.
在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。
相关文章推荐
- PowerCenter 7.1.3 ETL UNIX Shell 脚本书写规范
- Qt在线讲座之QML脚本书写规范
- [老欧的经验]Robotium脚本书写规范
- mac 系统下 使用 crontab 命令设置定时执行脚本,定时书写规范
- <kernel>/scripts/checkpatch.pl脚本可用来检查代码书写不规范和作一些简单的代码静态检查
- Shell脚本的书写规范与优秀的开发习惯
- 12_Shell语言―――脚本的书写规范以及检查和调试脚本
- 规范unity脚本书写
- Qt在线讲座之QML脚本书写规范
- CSS 样式书写规范
- html5在书写规范上的更改简化
- PHP书写规范 PHP
- (DT系列二)device tree的书写规范
- 规范CSS样式书写顺序
- 【笔记】Sqoop 脚本开发规范
- Web前端面试指导(五十):CSS样式书写有哪些规范?
- (DT系列二)device tree的书写规范
- 推荐大家一个CSS书写规范
- 基于.NET项目的代码书写规范要求书
- 书写优雅的shell脚本(插曲)- /proc