1.概述本文档是用来对ETL开发人员初步熟悉整个基于DataStage平台进行ETL开发指导手册。整个DS处理的过程如下:从一张业务系统数据源表到DW模型目的表的数据流处理在开发CODING中一般分4个JOB,包含一个调度JOB。第一个JOB(XXXX_DS10CD)用于队连续2天的数据源表进行比较和记录的筛选(选出新增和变化的)第二个JOB(XXXX_DS20)对第一步处理后的数据进行Trim和简单的校验格式处理确认、以及生成各个目的表所需要的KEY值(比如各IP主题区域表的IP_ID)第三步JOB(XXXX_DS30)将第二步处理后的数据分别映射到各个目的表、代码转换,最终形成按照各个目的表结构的文件。注:以下的说明及示例中所列例子都是为本文档所需而命名,具体的各个文件和STAGE的命名规范请参考《CZB-ETL-Design-V1.1.doc》2.DS处理流程2.1.组件快速使用2.1.1.数据源结构导入及筛选在进行Ds开发中,会经常对表结构进行导入导出,已加快ETL开发速度。下面是对元数据结构如何导入和保存进行整体说明。2.1.1.1.结构导入在DataStageDesigner的工作窗口左边“Repository”区域的“TableDefinitions”中导入数据源的表结构。导入数据结构存放路径参考《CZB-ETL-DESIGN-V1.1.DOC》。如下图:2.1.1.2.数据源结构筛选导入的数据源结构跟实际ETL所需要进行加工的结构是不同的,ETL只对源结构中有用的字段进行加工,所以真正实际的数据源文件中所包含的字段是不同于数据源表的字段。DataStage要处理这些文件就需要对导入的数据源结构字段进行筛选。在“Repository”中找到该表结构,打开该表字段属性的界面,然后根据《》接口文档对不用的字段进行删除。如下图:2.1.2.DS函数的查看在开发过程的映射中需要用到很多函数,比如用于查询IP主题的IP_ID函数IPLookUp,查询AR主题的AR_ID函数的ARLookUp等。所有函数查看都可以使用DSmanagerClient登录服务进行查看。(注意事项:不是原作者请不要进行修改其代码,查看后,点击cancel)如下图:2.1.3.SharedContainers的查看在开发过程中有些STAGE可以直接使用公共的“SharedContainer”,比如IP主题的TEL_ADR表,只要知道电话及其该电话在IP主题中的IP_ID就可以通过名为“TELC”的Container生成符合TEL_ADR结构的文件。(注意事项:不是具体的源作者不要进行任何修改。否则可能对其它的引用此job的job带来影响。打开查看后,点击cancel,不要点击Ok。)如下图:2.2.DS10CD2.2.1.IntroductionDS10主要完成将数据源的连续2天的文件进行比较以选出新增和UPDATE的记录到CHANGE文件以供后续步骤进行。主要STAGE包括:3个SequentialFile(T-1文件和T文件以及CHANGE文件)1个HashedFile(T-1文件经过CRC处理后生成)2个Transformer(T-1文件进行CRC处理以及比较处理)2个InterProcess(分别代表比较后ins和upd的数据流)1个LinkCollector(将ins和upd的数据流进行合并)。2.2.2.参数DS10CD包含如下参数:$PATH_SRC_XXXX(XXXX表示源系统如“ACMS”,下同):数据源文件存放路径$PATH_HASH_XXXX:HashedFile存放路径$PATH_WRK_XXXX:中间处理文件及最终文件存放路径以上三个参数是由Ds的环境变量,统一添加。要添加请提交DSProject的管理人员,暂为:商军雷DATEOLD:处理日上一日日期DATENEW:处理日当日日期注:参数命名规范请参考《CZB-ETL-DESIGN-V1.1.DOC》2.2.3.STAGE流程2.2.3.1.流程方向说明1)前一日数据源文件到CRC处理2)CRC处理到HASH文件3)HASH文件和当日数据源文件到比较处理4)比较处理分开INSERT和UPDATE数据流5)INSERT和UPDATE合并6)合并数据到第一步生成文件示例图(本图未按照命名规范来实施,请参照具体的命名规范)注:以上示图各个STAGE和LINK命名在实际开发中请参考《CZB-ETL-DESIGN-V1.1.DOC》2.2.3.2.STAGE属性a.SRC_OLD_FILE:Stage的sheet中NLS选择“MS936”Outputs的sheet中General界面的“Filename”填入“#$PATH_SRC_XXXX#/YYYY#DATEOLD#”,其中“XXXX”指源系统如“ACMS”,“YYYY”指该处理的源系统文件名如“IND_INFO”,“DATEOLD”指处理日前一日,必须跟参数的“处理日上一日”命名一样。Outputs的sheet中Columns界面表示该文件的字段,可以直接导入:b.SRC_OLD_HASHStage的sheet中Directorypath填入“#$PATH_HASH_XXXX#”其中“XXXX”表示源系统如“ACMS”Inputs和Outputs中的columns的字段导入参考“SRC_OLD_FILE”的Stage属性说明c.SRC_OLD_CR在右上部分的映射表中除了KEY外每个字段都需经过“CRC()”的处理,如下图:d.SRC_NEW_FILEOutputs的sheet中General界面的“Filename”填入处理日当日文件,命名参考《CZB-ETL-DESIGN-V1.1.DOC》其他部分与“SRC_OLD_FILE”的Stage属性说明一致e.TODAY_INS/TODAY_UPD/TODAY_COLLECTInputs和Outputs中的columns的字段导入参考“SRC_OLD_FILE”的Stage属性说明。注:此处因为已经是经过了连续2天的数据文件的比较,所以在数据源表原有的字段最后再增加一列“ETL_FLAG”以表示该记录是“I”还是“U”(新增和修改)f.Update左上部分的2个输入文件其KEY值的约束关系需填入,如下图:将左上部分“NEW_2_COMP”表里的字段全部选中拖拽到右上部分的“COMP_2_INS”中;左上部分则将表里的除了KEY外每个字段进行比较,函数CompaCol(HASH_2_COMP.Col1,NEW_2_COMP.Col1)目的:如果记录比较发生变化则取变化值,否则就置“BDWNOCHG”。如下:最后一个“ETL_FLAG”字段,“COMP_2_UPD”中填“U”,“COMP_2_INS”填“I”右上部分2张表都需要填如约束条件“COMP_2_INS”填“ISNULL(HASH_2_COMP.KeyCol)”即表示2张表比较只要旧文件中不存在而新文件中存在即认为是新增记录应该进入“COMP_2_INS”;“COMP_2_UPD”填:Not(isnull(HASH_2_COMP.KeyCol))and((NEW_2_COMP.KeyColHASH_2_COMP.KeyCol)or(crc(NEW_2_COMP.Col1)HASH_2_COMP.Col1)or(crc(NEW_2_COMP.Col2)HASH_2_COMP.Col2)or……即表示2张比较只要同一KEY的2条记录有一个字段发生变化即认为是修改记录进入“COMP_2_UPD”g.TODAY_CHANGEOutputs的sheet中General界面的“Filename”填入2天文件比较后生成的当日变化记录文件,命名参考《CZB-ETL-DESIGN-V1.1.DOC》其他部分与“SRC_OLD_FILE”的Stage属性说明一致注意:在DS10job中有时一些字段的值需要在后期进行查询等操作。需要全程保留。具体的情况再具体分析。2.3.DS202.3.1.IntroductionDS20主要完成将第一步DS10处理之后的数据进行简单的处理之后生成一些关键字段的ID_KEY。比如IP_ID,AR_ID等。主要STAGE包括:2个SequentialFile(DS20的输入和输出文件)。2个Transformer(一个输入文件的Trim和简单校验,一个生成各种ID_KEY)。一个InterProcess(连接2个Transformer)。2.3.2.参数$PATH_WRK_XXXX:中间处理文件及最终文件存放路径DATE:处理日当日日期注:参数命名请参考《CZB-ETL-DESIGN-V1.1.DOC》2.3.3.STAGE流程2.3.3.1.流程方向说明DS10后的处理文件“TODAY_CHANGE”到Transformer“VALIDATE”进行Trim和简单校验;VALIDATE经过InterProcess到GENERATEKEY进行ID_KEY的生成;a.示例图2.3.3.2.STAGE属性a.TODAY_CHANGEOutputs的sheet中General界面的“Filename”填入第一步DS10种最后一步所生成的文件(即与DS10的TODAY_CHANGE一致),命名参考《CZB-ETL-DESIGN-V1.1.DOC》。其他部分与“DS10”的“TODAY_CHANGE”Stage一致b.VALIDATE将左上部分“CHG_2_VALI”的字段全部选中拖拽到右上部分的VALI_2_PROC中。除了KEY外其他字段都进行Trim处理。电话字段需加入“ValidatePhone”,日期字段需调用函数(如AcmsToDateFormat)将该日期转成DW所需的标准格式“YYYY-MM-DD”,时间字段亦此。c.INTERPROCESS处理方式与DS10中的“TODAY_INS/TODAY_UPD”Stage一致d.GENERATEKEY先将左上部分“PROC_2_GENKEY”的全部字段拖拽到右上部分;通过映射文档统计需要查询ID_KEY的字段。比如需要电话的LOID,工作地址的LOID,客户的IP_ID,操作员的IP_ID等;这些新的DS表结构需要保存,后期有可能用到。保存遵循规范《CZB-ETL-DESIGN-V1.1.DOC》。在右上部分的“StageVariables”表里增加变量,将统计出来的所需ID的变量放入,表左半部分的“Derivation”则根据映射文档中的函数填入,如下图:在ST2_T中的ColumnName中增加字段,将查询到的各个ID值也放入到Stage文件里,如下图:e.CHANGE_KEYOutputs的sheet中General界面的“Filename”填入生成ID_KEY之后的文件,命名参考《CZB-ETL-DESIGN-V1.1.DOC》其他部分与“DS10”的“TODAY_CHANGE”Stage一致。注:这里又在原表的基础上新增了各个ID_KEY的字段。2.4.DS30上图是DS30的范例,名称:IND_INFO_DS30,存放路径:Jobs\01_SRC\0102_ACMS\IND_INFO,命名规则和存放路径参考文档《CZB-ETL-Design-V1.1.doc》。这个JOB的功能是代码表转换、文件拆分,最终生成BDW准实体SSA文件。规则是从源文件IND_INFO_SK通过Split得到目标文件IND_INFO_SPLIT。其中IND_INFO_SK是由IND_INFO_DS20产生的,Split是一个Transformer,在其中制定拆分规则,IND_INFO_SPLIT标识产生的目标文件,文件可能有多个。其拆分规则需要参照ETLMapping规则文档。2.4.1.定义参数如下图,进入JOB的JobProperties。选择Parameters标签,填入需要定义的参数。上图是我们需要的参数。工作路径($PAT