1、ODS的接口表信息保存在一个EXCEL表中
该表格有如下特性:
1)、所有的接口清单都在一个工作簿中;
2)、每一个sheet中存放来自一类源业务系统表的接口信息;
3)、不同阶段的接口表,只要是来自同一个源业务系统,都放在同一张sheet中,有[阶段]字段加以区分;
4)、每个sheet中也都会有一个[业务系统]字段,但对于同一个sheet,其应是同一值;
5)、对于一个sheet,可以添加一些衍生字段,如[edw期望加载方式]、[接口表测试环境存在情况]、[接口提出时间]等,但最重要的无非是下表所列示的7个;
6)、每一个sheet中都使用相同的表结构格式。
阶段 |
业务系统 |
业务系统中文名 |
业务系统原表名 |
ODS表名 |
ODS加载方式 |
备注 |
仓库1期 |
CMIS |
授信合同 |
CMIS_SXHT |
ODS_CMS_CMIS_SXHT |
增量 |
|
仓库1期 |
CMIS |
担保合同 |
CMIS_DBHT |
ODS_CMS_CMIS_DBHT |
增量 |
|
仓库2期 |
WFM |
其他抵押资产 |
BIZ_COLLATERAL_ACCEPTANCEBILL |
ODS_WFM_BIZ_COL_BA |
全量 |
|
仓库2期 |
WFM |
产品列表 |
BIZ_PRODUCT |
ODS_WFM_BIZ_PRODUCT |
全量 |
|
2、元数据进仓
初期,ODS要提供的接口表信息是存储在如上的EXECL表格中的。为了入仓及其他一些方面的应用,需要将EXECL中的清单信息导入到数据库中。
1)、存储ODS源接口表的表结构
-- Create table create table EDW_ODS_TAB_SRC ( STAGE VARCHAR2(18), SRC_SYS VARCHAR2(18), SRC_TAB_NAME_CN VARCHAR2(36), SRC_TAB_NAME VARCHAR2(30), ODS_TAB_NAME VARCHAR2(30), ODS_LOAD_TYPE VARCHAR2(18), REMARK VARCHAR2(100) ); -- Add comments to the table comment on table EDW_ODS_TAB_SRC is '数据仓库源数据接口清单表'; -- Add comments to the columns comment on column EDW_ODS_TAB_SRC.STAGE is '阶段'; comment on column EDW_ODS_TAB_SRC.SRC_SYS is '业务系统'; comment on column EDW_ODS_TAB_SRC.SRC_TAB_NAME_CN is '业务系统表中文名'; comment on column EDW_ODS_TAB_SRC.SRC_TAB_NAME is '业务系统表原名'; comment on column EDW_ODS_TAB_SRC.ODS_TAB_NAME is 'ODS表名'; comment on column EDW_ODS_TAB_SRC.ODS_LOAD_TYPE is 'ODS数据加载方式'; comment on column EDW_ODS_TAB_SRC.REMARK is '备注';
2)、生成插入库初始化脚本的perl程序
###################################################################### use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; ###################################################################### $Win32::OLE::Warn = 3; my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); my $fielname = q(C:/Users/nisj/Desktop/仓库源数据接口清单表设计/数据仓库源系统接口表格式.xls); my $Book = $Excel->Workbooks->Open("$fielname"); open(F,'>C:/Users/nisj/Desktop/仓库源数据接口清单表设计/Ods_Interface_Data_Int.SQL'); print F "TRUNCATE TABLE EDW_ODS_TAB_SRC;"; print F "/n"; foreach my $Sheetnum(1..$Book->Worksheets->count){ my $Sheet = $Book->Worksheets($Sheetnum)||die "over"; my $Source_Business_Systems = $Sheet->{Name}; print F "--源业务系统:【$Source_Business_Systems】接口表的加载..."; print F "/n"; my $error_count = 0; for(my $ROW = 2;;$ROW++){ last if ($error_count == 1); ($error_count++,next) unless defined $Sheet->Cells($ROW,5)->{'Value'}; my $stage = $Sheet->Cells($ROW,1)->{'Value'}; $stage=uc($stage); my $src_sys = $Sheet->Cells($ROW,2)->{'Value'}; $src_sys=uc($src_sys); my $src_tab_name_cn = $Sheet->Cells($ROW,3)->{'Value'}; $src_tab_name_cn=uc($src_tab_name_cn); my $src_tab_name = $Sheet->Cells($ROW,4)->{'Value'}; $src_tab_name=uc($src_tab_name); my $ods_tab_name = $Sheet->Cells($ROW,5)->{'Value'}; $ods_tab_name=uc($ods_tab_name); my $ods_load_type = $Sheet->Cells($ROW,6)->{'Value'}; $ods_load_type=uc($ods_load_type); my $remark = $Sheet->Cells($ROW,7)->{'Value'}; $remark=uc($remark); print F "INSERT INTO EDW_ODS_TAB_SRC(STAGE, SRC_SYS, SRC_TAB_NAME_CN, SRC_TAB_NAME, ODS_TAB_NAME, ODS_LOAD_TYPE, REMARK)"; print F "VALUES(TRIM('$stage'), TRIM('$src_sys'), TRIM('$src_tab_name_cn'), TRIM('$src_tab_name'), TRIM('$ods_tab_name'), TRIM('$ods_load_type'), TRIM('$remark'));/n"; } print F "commit;/n"; } # clean up after ourselves $Book->Close; close(F);
3、此方案只是针对ODS源表的接口清单元数据入仓的方便,其他的诸如SDM映射关系元数据入仓都是同样的道理。