当前位置:文档之家› 数据仓库编程规范

数据仓库编程规范

未经允许,不可全部或部分发表、复制、使用于任何目的文档修订摘要1引言编写目的编写《数据仓库开发规范(dbsql系统)(1.0)》的目的是:dbsql封装了访问db2,oracle,greenplum,Sybase 和Teradata数据库的方法,形成了一套访问db2,oracle,greenplum,sybase和Teradata数据库的统一接口。

dbsql不仅提供了对db2,oracle,greenplum,sybase和Teradata访问方法的统一,而且提供了一些方法屏蔽5个数据库之间sql语言的差别。

这样对于应用程序,只需要编写一套代码,就可以操纵db2,oraclee,greenplum,sybase和Teradata数据库,对开发工程师而言,只用熟悉sql92的标准sql和此文档sql函数就本文档供以下相关人员阅览:◆参于数据仓库设计评审的专家人员;◆参与数据仓库软件开发的软件部人员;◆参与数据分析系统测试人员。

1.1 背景介绍◆开发的软件系统的名称:数据仓库编程规范◆开发单位:数据分析部◆系统使用单位:◆该软件系统是数据仓库底层开发跨平台异构数据仓库的基础平台1.2 术语定义1.3 参考资料参考资料共包括:◆《Tcl/Tk 编程权威指南》◆《Expert One on One: Oracle》◆《Oracle 数据库DBA专题技术精粹》2DBsql环境配置2.1 目录设置2.2 环境变量主要环境变量设置包括:$DBSQL:程序安装点,开发时设置为个人目录。

$AGENTLOGDIR:Scehdule Server日志采集目录,通常设置为$DBSQL/log$AGENTTRACEDIR:日志及TRACE文件目录。

(Schedule Server不采集,可用于存放调试信息)$TOOLS:存放tcl运行环境包及异构数据库编译的动态包安装目录。

用户可以在用户目录下创建.profile文件,例如:2.3 开发与安装开发时需要作如下设置:将dss及_common.tcl复制到$DBSQL/bin下;将_common.cfg复制到$DBSQL/etc下;参照dwd_trade_base_ds.tcl开发各处理程序,有关dwd_trade_base_ds.tcl 的详细说明参见具体例子;如需要专用配置文件则在$DBSQL/etc下创建<rootname>.cfg文件,专用配置文件中允许覆盖公共配置项,但需要慎用。

执行方法(以dwd_trade_base_ds.tcl为例):注意:1)$DBSQL在安装时被定义为安装点路径,因此,每个用户需要在开发时把该变量定义到自己的开发目录下。

2)dss、_common.tcl为公用程序,common.cfg为公共配置,均不得进行修改。

3DBsql编程规范3.1 注释在每一个tcl源文件头部都要加上关于本文件的注释,列出:文件名、功能描述、作者、生成日期、修改日志、版权说明等。

建议采用如下格式:元数据注释信息在每一个函数头部都要加上关于本函数的注释,列出:函数名称、功能描述、输入参数、输出参数、返回值等。

建议采用如下格式:注释应考虑程序易读及外观排版的因素,使用的语言若是中、英兼有的,建议多使用中文,除非能用非常流利准确的英文表达。

在程序块的结束行下一行加注释标记,以表明某程序块的结束。

当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。

3.2 编辑风格代码缩进统一采用采用4个空格长的TAB键,对于VI,可在HOME目录下的.exrc文件中设置set tabstop=4。

函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格.若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。

划分出的新行要进行适当的缩进,使排版整齐,语句可读。

程序块的分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。

在函数体的开始、以及if、for、while、switch语句中的程序都要采用的缩进方式。

对双目操作,需要在操作符前后加空格;对单目操作,则不必加空格。

6 注释与所描述内容进行同样的缩排。

这样可使程序排版整齐,并方便注释的阅读与理解。

7 将注释与其上面的代码用空行隔开。

避免在一行代码或表达式的中间插入注释,否则容易使代码可理解性变差。

3.3 表名程序名命名规范◆表名命名格式说明:[层次]_[主题] [_表内容]_[分表规则]◆解释:✧层次:数据仓库的分层定义,目前数据库自低到高分为ODS, DWD, DW, DM,ST,表命名时根据表具体所属层次填写,如ODS_TRD_BYD_BASE_YYYYMMDD,DWD_TRD_BYD_BASE_YYYYMMDD✧主题:数据仓库的当前主题✧表内容:在表名总长度不超过30个字符,尽量详尽说明表的具体内容,在所有层次中表内容应保持一致。

对于出现一下关键字单词的按以下规则进行缩写,如果缩写后表名部分出现和主题相同的缩写请去除表名中该缩写(如对表DWD_BEYOND_TRADE_FUND_BILL进行规范划缩写则为DWD_TRD_BYD_TRD_FUND_BILL,出现重复TRD,所以最后缩表名应为DWD_TRD_BYD_FUND_BILL):✧分表规则:日表YYYYMMDD,月表YYYYMM,日汇总DS,月汇总MS,日累计DT,月累计MT◆程序名命名格式说明[目标表名(去除分表规则部分)]_[程序类型].tcl程序名称一律小写◆解释:目标表名(去除分表规则部分):目标表名为程序生成数据的表名,如数据ODS_TRD_BYD_BASE_YYYYMMDD-> DWD_TRD_BYD_BASE_YYYYMMDD,那么程序命名成dwd_trd_byd_base_dd.tcl程序类型:3.4 标识符命名规则标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。

较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写。

例如如下单词的缩写能够被大家基本认可。

temp可缩写为tmpmessage可缩写为msg函数或过程名建议统一采用匈牙利记法,函数或者过程的名称能够简单体现函数或过程的功能。

GetCustStatusOdsToBalanceGetNotNull对于局部变量命名,可以采用全小写加下划线的风格,也可以用单个有具体含义的单词做变量名,但禁止用单个字符(如i、j、k...)做变量名,i、j、k可以做局部循环变量。

例如:log_fdtrace_fd对于全局变量命名,尽量使用匈牙利记法,首字母小写,与过程名区分。

例如:opTimecityId3.5 SQL书写规范由于SQL语句在DBSQL系统中是一个非常重要的组成部分,所以对SQL 语句的书写规范做单独说明。

1、SQL语句的所有表名、字段名全部小写,系统保留字、内置函数名、SQL保留字大写。

示例:连接符or、in、and、以及=、<=、>=等前后加上一个空格。

多表连接时,使用表的别名来引用列。

对较为复杂的SQL语句加上注释,说明算法、功能。

注释风格:⏹注释单独成行、放在语句前面。

⏹应对不易理解的分支条件表达式加注释;⏹对重要的计算应说明其功能;⏹过长的函数实现,应将其语句按实现的功能分段加以概括性说明;⏹每条SQL语句均应有注释说明(表名、字段名)。

⏹字段别名需要使用AS,如sysdate AS NOW_TIME⏹常量及变量注释时,应注释被保存值的含义(必须),合法取值的范围(可选)。

SQL语句的缩进风格⏹一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进;⏹where子句书写时,每个条件占一行,语句令起一行时,以保留字或者连接符开始,连接符右对齐。

⏹不要采用select * 的方式查找纪录,必须显示地写出字段名,每个字段占一行,连接符右对齐。

书写优化性能建议:⏹避免嵌套连接。

例如:A = B and B = C and C = D;⏹where条件中尽量减少使用常量比较,改用主机变量;⏹尽量避免相同语句由于书写格式的不同,而导致多次语法分析;⏹尽量使用共享的SQL语句;查询的WHERE过滤原则,应使过滤记录数最多的条件放在最前面;任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。

4DBsql函数说明(二次封装)4.1 DBsql系统调用函数封装4.1.1proc Help { }功能:屏幕输出帮助信息输入:N / A输出(返回值):1)成功:0备注:N / A4.1.2proc GetCurrentTime { }功能:获取当前系统时间输入:N / A输出(返回值):1)成功:当前系统时间,格式:"YYYY-MM-DD HH24:MM:SS"备注:N / A4.1.3proc LogMsg { msg msg_detail log_fd }功能:记录日志并输出屏幕信息输入:1)msg:日志信息2)msg_detail:日志详细信息3)log_fd:日志文件句柄输出(返回值):1)成功:0备注:使用-o参数时,屏幕输出日志信息,否则仅记入日志文件,不作屏幕输出。

4.1.4proc TraceMsg { err err_detail trace_fd }功能:记录诊断信息输入:1)err:诊断信息2)err_detail:诊断详细信息3)trace_fd:trace文件句柄输出(返回值):1)成功:0备注:N / A4.1.5proc LogAgentMsg { log_fd cmd_status log_content }功能:记录Schedule Server采集日志输入:1)log_fd:日志文件句柄cmd_status:命令执行状态,一般只用到3和4set CMDSTATUS(READY) 0set CMDSTATUS(RUNNING) 1 正在运行set CMDSTATUS(HOLD) 2set CMDSTATUS(SUCCESSED) 3 运行成功set CMDSTATUS(ERROR) 4 运行错误set CMDSTATUS(DISPA TCHED) 5set CMDSTATUS(INITERR) 6set CMDSTATUS(AGENTFULL) 7set CMDSTATUS(STARTERR) 8set CMDSTATUS(NOPID) 9set CMDSTATUS(NOEXEFILE) 10 本地无文件,远程也无法下载文件1)log_content:当前状态详细说明输出(返回值):1)成功:02)失败:""备注:日志文件(log_fd)为程序本身的日志句柄,而不是Schedule Server采集的日志文件。

相关主题