数据仓库设计规范

数据仓库设计规范

一、模型层次结构

数据仓库设计规范_第1张图片

ODS 原始数据层

由业务方生成的原始数据,直接放入原始数据层

如果需要查原始日志可以从ODS层进行检查

DWD 仓库明细层

是对原始数据层的提炼和清洗,这一层注重对原始数据的清洗和简单汇总

DWB 仓库核心明细层

这一层主要是还是明细,在这一层中,可以和其他的维表进行关联,进而产生产品经理或分析师较为关注的字段

DWS 仓库核心汇总

在这一层中,主要是汇总信息,比如统计ID访问次数,PC登陆人数等汇总后的统计信息

ST / DIM 应用层

主要用于业务部门使用,该层是最后一层,也是终端展示层

二、表的命名规范

第一个字段:T 和TMP

T: T表为临时表的一种,一般T表只会保留最近一段时间的数据。现在大部分CBAS的表都为这种类型,保留最近的一段时间,该表多为日志明细表,数据量大,保存时间短,这种表保存时间短,该表内的汇总信息会长时间保存。

针对T表,后缀内容需要注意

分表后缀由两个字母组成,结构及含义如下:[时间周期 D, W, T, M, Q, Y][增量S/全量D]

DD:标示该表是按日运行生成,任何一个分区都保存当前的全量明细数据,即最新分区即可取到最新的全量数据。

MS:标示该表是按月运行生成,任何一个分区保存当前数据周期计算数据,即一个分区对应该数据日期当日的增量或汇总数据。

TMP:tmp表是一个完整的php脚本执行过程中使用的临时表,每个php脚本中都可以根据需要设置若干个tmp表

tmp表的名字具有唯一性

tmp表的使用具有独占性,即一个tmp表只能被一个php脚本使用,生命周期在该php内。

php脚本执行前,需要先清空所有用到的tmp表(分区)

tmp表命名规则:

[tmp][php脚本名称][序号] tmp_dws_biz_operate_base_ds_01

第二个字段:模型层次

遵循仓库模型架构定义的层次结构命名

如ODS, DWD, DWB,DWS, DM,ST……

第三个字段:主题

用户(CRD) 用户信息,标签等以用户(不包括游客)为维度的数据集合

订单(ORD) 交易购买行为,包括购买的产品,基金,股票等

行为(ACT) 用户(包括游客)在网页,PC客户端,app,股灵通等平台或者产品上的行为基础数据,通用的行为分析数据

产品/业务(BIZ) 各产品或业务的基础层独立数据,特别分析数据,包括效果分析等,如果是较为通用的行为分析,可以放到行为主题中

其它(OTH) 只有公共类维表等与业务无关的小数据表可以放到该主题中,如dim_oth_pub_date

客服(CRM) 客服工作量等客服相关,或者给客服提供的服务数据

第四个字段:有意义的名字

取业务相关的名称即可

三、建表规范

建表时使用三种字段类型

string(字符串)

bigint(长整型,用于金额等字段类型,如金额单位为元,从dwb层开始需要转换成分)

double(仅用于服务费率等含小数字段类型,以及源系统单位是元的同步数据)

除tmp表之外,一律建成外部表

表数据存储格式一律用textfile,非压缩,字段间用制表符(\t)分割,行间隔用换行符(\n)分割

如果采用分区表,分区字段定义为p_date;除维表(dim)之外,其余表建成分区表(使用时需要避免全表扫描)

建表语句模板:

CREATE EXTERNAL TABLE dim_oth_stock_code

(

stock_code string

,stock_name string

,stock_parent_id string

,begin_date string

,end_date string

,gmt_ins string

)

partitioned by (p_date string)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ‘\t’

STORED AS TEXTFILE

LOCATION ‘/user/hive/warehouse/dim/oth/dim_oth_stock_code’

;

alter table dim_oth_stock_code set serdeproperties(‘serialization.null.format’ = ‘’);

四、数据格式

日期格式字段统一使用yyyymmdd的格式,类型使用string

Timestamp格式字段统一使用yyyy-mm-dd hh24:mi:ss的格式,类型使用string,hive处理时会自动做为时间型数据来处理

如建成分区表,分区字段p_date格式为“yyyymmdd”

五、数据仓库存储结构

HADOOP目录/ 模型层次/ 主题域

例:

/user/hive/warehouse/ods(dwd、dwb、dws、dm、st、dim、t、tmp…)/crd(ord、act、biz、oth、crm…)/dim_oth_stock_code/p_date=20141031/

六、PHP调度脚本规范

php程序命名

ETL清洗任务: [目标表名].php

程序名称一律小写

   例:

   目标表:              dim_oth_stock_code

   对应的php名称:       /dim_oth_stock_code/dim_oth_stock_code.php

特殊情况

多个php脚本往一个表生成数据,通过[目标表名]+[序列号].php 实现

   例:

   dim_oth_stock_code_1.php

   dim_oth_stock_code_2.php

具体可见PHP 模板

七、常用HQL语句模板

常用建表语句模板

CREATE TABLE tmp_dim_biz_percentile_period

(

report_date string

,sec_desc string

,amt_per_00 string

,amt_per_01 string

,amt_per_02 string

,amt_per_03 string

,amt_per_04 string

,amt_per_05 string

,amt_per_06 string

,amt_per_07 string

,amt_per_08 string

,amt_per_09 string

,amt_per_10 string

,gmt_ins string

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ‘\t’

STORED AS TEXTFILE

LOCATION ‘/user/hive/warehouse/dim/biz/tmp_dim_biz_percentile_period’

;

alter table tmp_dim_biz_percentile_period set serdeproperties(‘serialization.null.format’ = ‘’);

常用ETL插入表数据语句模板

insert overwrite table dim_biz_percentile_period partition(p_date)

select report_date

   ,sec_desc

   ,amt_per_00

   ,amt_per_01

   ,amt_per_02

   ,amt_per_03

   ,amt_per_04

   ,amt_per_05

   ,amt_per_06

   ,amt_per_07

   ,amt_per_08

   ,amt_per_09

   ,amt_per_10

   ,from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as gmt_ins

   ,a.report_date as p_date

from tmp_dim_biz_percentile_period a

where a.report_date is not null

你可能感兴趣的:(数据仓库设计规范)