2.5对数据进行HASH分区的STAGE的设置细节
例子:
在用JOIN STAGE对两张表进行关联,关联的条件是UID,再设置的该STAGE对数据按照UID进行HASH分区,所有的STAGE都设置正确无误后,运行JOB,老是在JOIN STAGE里有一个WARNING。 原因: 这种情况是由于设置HASH分区后产生的(数据分区的概念将另述) 解决方法:
打开产生WARNING的STAGE的前一个(是前一个!)也进行了HASH分区的STAGE的设置面板,在Stage Page——Advance Tab里,选择Preserve partitioning下拉选项中的“Clear”值。默认是“Propagate”值,其意义是下一个STAGE在做HASH分区时,会继承上一个 (即该STAGE)对HASH分区的设置参数。按照HASH分区的机制,这样继承会出现数据丢失的可能,所以DS就会产生WARNING。而选择 “Clear”的意义就时让下一个要做HASH分区的STAGE不要继承上一个STAGE的HASH分区设置,而重新按照用户的设置来进行HASH分去。
.6把结果输出到平面文件时的注意事项
例子:在原来调试过正确无误的JOB,把最后的数据文件由原来的DATA SET改为SEQUENCE文件时,JOB运行正常,且可以重运行,就上没有实际的数据输入到结果文件里,文件所对应的输入LINK显示有数据输入,结果 文件也创建了,但打开的是一个空白文件,VIEW也VIEW不到有数据,提示说没有结果返回。
原因:平面文件的默认格式设置引起。默认下,平面文件的输入格式是,每个字段都要有值输入。如果输入到平面文件的数据中有空值,而平面文件又用默认设置的话,输入就会给REJECT掉。 解决方法:设置平面文件的数据格式。在Stage Page——Format里,设置空值的处理方式,比如设为NULL,则遇到空值时,DS就会在平面文件的该字段里填充NULL。
2.7DATASTAGE中INTEGER型数值上限为2000000000(20亿)
2.8对于那些关联不上而又为非空的字段,DS会自动赋默认值,数字型默认值为0,字符型默认值为''
例子:
表A通过JOIN STAGE与表B进行左关联,取B表的流水ID,B表的ID字段可空性为NO,把B表的ID传递给A表,然后通过TRANSFORM STAGE设置条件取出关联不上的记录来,TRANSFORM STAGE的过滤条件是:IsNull(ID),由于关联不上的记录的ID字段会是NULL,这样设置按理应该是可以把关联不上的记录输出的,而实际上是 输出不到的。
原因:B表ID字段是非空的,那么传递给A表的ID的也将是非空。对于那些关联不上的记录,理论上ID字段应该为NULL,但由于ID是非空的,所以DS 会把一个默认值插入到ID中去。经过如此处理,使用IsNull(ID)就当然不能数据正确记录了,因为ID根本就不是NULL。 解决方法:
方法一:在传递ID字段给A表时,用NullToZero或者NullToEmpty函数对ID封装起来。如果ID是数字型的,用NullToZero, 如果ID是字符型的,用NullToEmpty。相应的,TRANSFORM STAGE的过滤条件就应该改为ID = 0或ID = '',即可把关联不上的记录正常输出来。
方法二:直接修改TRANSFORM STAGE的过滤条件,修改为:NullToZero(ID) = 0或者NullToEmpty(ID) = ''。 注意:经过DS赋予默认值后,ID其实已经不为NULL了,所以理论上使用NullToZero或NullToEmpty是不适合的。但实际开发中,上述方法确实能够解决问题。
2.9可空字段拼接字符串特别需要注意的问题:
在拼接字段串时,要注意所以拼接的字段当中有没有空字段,如果有,一定要用NullToZero或者
NullToEmpty函数对该字段进行封装。如果不是经过函数封装处理,如果碰到某条记录,它用来拼接的字段是NULL,那么这条记录就会给过滤掉,从 而影响了结果。
由于拼接字符串一般都是几个到十几二十个字段,有时候容易令人忽略这个问题,常常发现本来应该可以从TRANSFORM STAGE输出的数据却给REJECT掉,就要注意是否存在可空字段拼接字符串,而且数据当中的确存在一些记录,里面用于拼接的字段是NULL的情况了。
2.10使用TRANSFORM STAGE进行条件判断过滤数据,一般用于判断的字段是Nullable
3实例介绍
最后说一个datastage在unix中应用的实例,以供大家参考: 一个完整的ETL,其步骤是:
1.业务用户接口(java,jsp等友好界面)触发 2.Shell运行
3.启动Controljob运行 4.Controljob启动job
5.监控job状态的Controljob运行(循环运行,直到所有job结束) 6.返回job执行情况到shell 7.Shell返回执行情况到业务接口 8.用户得到结果
可以看出,这里包括了几个主要元素:业务接口,shell,controljob,getstatus controljob,job
其中只给大家列出controljob,getstatus controljob,以及shell中的controljob调度命令,其他的部分就不再详述了
一、普通的control job
1.带斜线、下划线并加粗 的部分需要考虑是否是并行的,如果是并行的就不需要这句 2.原始层需要加进蓝色的行
3.红色的表示job的名字,用来替换job的名字
该行对应原始层的job,当需要从文本load数据时,需要在这里调用相应的sh * Setup DXrtInc, run it, wait for it to finish, and test for success hJobDXrtInc1 = DSAttachJob(\DXrtInc\ If NOT(hJobDXrtInc1) Then
Call DSLogFatal(\ Abort End
Call DSExecute(\\Output, SystemReturnCode)
*If FAIL Then RESET
Status = DSGetJobInfo(hJobDXrtInc1, DSJ.JOBSTATUS) If Status = DSJS.RUNFAILED Then
ErrCode = DSRunJob(hJobDXrtInc1, DS
4.Datastage 技术介绍——技术优势
4.1开发优势
由于Ascential公司雄厚的信息技术实力,DataStage XE系列可为开发者在构建与集成数据环境时提供特别的优势.DataStage XE系列通过集成数据资源、转换数据和调试等手段,设计开发应用软件,并将此作为起点,简化了开发流程、使应用软件的集成和运行更加容易. 1.1)应用程序设计
DataStage Designer是以图形界面起点,开始展开数据集成工作的设计的.这一方式使开发者可宏观地使用图形,清楚地显示数据在整个环境中的流动过程.设计者遵循一种工作流思考方式来选择来源、目标与过程图标,并将之置于一个最初看起来像一个空格一样的\草稿表\模板上.对于每一典型的来源或目标结合体,都存在这些被称作\的图标.设计者用一种叫做\链接\的箭头来连接这些具代表性的图标,而这些箭头则阐明了运行开始后数据与元数据的流向.在创建DataStage任务时,用户可以在设计草图上添加注释、说明、标签或是其他可以添加给作业的描述性文字.DataStage使用图形方式建立表的查询、连接关系、排序和汇总运算.
以这种方式设计作业可以快速完成整个应用程序,更为简单的采用由其他开发小组制定的逻辑,从而使长期的维护变得更容易实现.开发者只需将代表数据源、数据目标以及中间过程的图标拖放至界面中即可.这些中间过程包括排序、汇总和绘制单独列.Designer同样也支持将目标从Manager面板拖放至Designer面板.而且开发者也可以通过同样的图形化拖放界面,添加诸如表名称和排序关键字这样的细节性项目.DataStage通过连接主关键字和外关键字,用图示的方式阐明了查询关系.DataStage只需单击鼠标右键在弹出菜单中,选择函数名即可实现函数调用.开发者也可从下拉列表中,选择用户自定义函数.也可以引入事先存在的ActiveX例程,或者用其他编辑测试工具开发自己的ActiveX例程.在运行期间,DataStage将完成所有在整个作业中移动行与列所需的操作,将图形图像转换为实体.
同样的图形隐喻也可扩展到单独域级别,单独域级别列对列映射的建立是非常直观的.开发者用横线将每一数据源、行或中间结果集合定义与它们对应的目标连起来.通过使用下拉列表中列出的内建函数扩充列表,开发者可以清楚的阐明Designer中复杂的布尔逻辑运算、字符串操作与数学函数.开发者采用点
击的方式来构建转换表达式.如果开发者需要使用由用户定义的外部例程,也可以从同一菜单中选择.对于支持指向单一或多重目标行分离的过滤器和基于值的约束条件,也是采用这种模型设计解释的.
开发者可以使数据集成应用程序的长期维护工作变得简单.开发组成员可以共享作业逻辑,同时对于那些继承了多步转换作业的开发者,也不会因需要浏览数千行复杂程序逻辑而变得气馁或被耽搁. 1.2)调试
DataStage Debugger完全整合于Designer之中.Debugger是一种测试工具,它允许数据集成人员在程序运行期间,同时浏览转换逻辑从而提高了开发工作效率.在行级处理的基础上,开发者设定断点,并观察数列数据在整个作业中的流程.DataStage可以立刻发现并纠正逻辑错误或意外的遗留数据值错误.这种错误检测提高了开发工作的效率,特别是在进行日期格式转换,或者是在调试诸如隶属于某一具体的成本中心的数据行之类的复杂数据转换时,或者是确定为何星状结构中某些维趋向空或为零时.利用扩充报表输出或日志文件,进行详细分析是不必要的,这是因为DataStage Debugger通过图形化方式识别用户设定的可验证逻辑的断点,这遵循了DataStage Designer的易用图形隐喻. 1.3)处理多来源与多目标
DataStage的出现使比较和集成多重、不同来源的行变为可能---无需编写底层代码.多重来源可以是平面文件,为了分解变化的数据或出于查询目的而添加的异构表,需要对这些文件的值进行比较.由服务器引擎进行底层SQL语句,比较平面文件,处理连接细节.对性能最为关键的是以流方式进行的文件比较,和满足所选的、不断涌入的其余转换过程的联合特性的数据行.
DataStage设计支持多个目标表的写入.在同样的作业中,多重目标表可以同时做到以下几点: 来源多样化(不同的RDBMS类型或文件类型) 具有多个网络目的地(表被发送至远端)
通过支持RDBMS厂商的加载程序、平面文件I/O以及SQL语句插入等多种策略加载数据
经过设计,在开发者最初通过图形化方式表现作业流程时可以进行数据行的分离或复制.DataStage可以根据多重逻辑路径随意复制行,也可以在横向上根据列值在纵向上根据发往每个目标的不同列转换为多行.而且DataStage可以推动从同一来源开始的分离作业流动.从一个图形图表来年服务器引擎可以分离单一的行,同时记录到多路径中或在完成作业进调用多过程.没有为达到此目的而设立的中间控制区域.最终的好处是减少了数据传递、I/O操作并对真实世界数据流动的需求做出了简单明了的阐释. 1.4)对通用关系数据库系统的本地支持
DataStage可以与使用专门应用程序界面的通用数据库进行交流从而减少网络开销.几乎对每个决策支持应用软件而言,关系数据库都是关键的组成部分.它们常常会被用作存储集成数据的介质.在许多情况下,它们也是商业信息的来源.为实现与这些数据库系统的相互作用,需要使用SQL从数据源结构中检索数据或将结果写入目标.即使拥有数量众多的加载程序可以获得更好的工作性能,但数据集成例行程序仍需要动态SQL执行记录排序、更新或是其他的行处理操作.对于数据集成工具来说,提供与这些数据库以及多样化的厂商配置最为有效交流方式是非常重要的.ODBC是提供此种互动能力最为灵活的方式,但它无法确保总是能够以最少的开销获得最佳的性能.
DataStage支持ODBC方式并为许多通用的RDBMS提供了驱动支持,它同样也致力于提供直接API访问,允许数据集成开发者饶过ODBC以直接调用方式与数据源和目标结构直接进行本地\对话\不论是何地,只要可能DataStage都会采用由厂商API提供的特殊的性能配置,从而缩减了软件额外配置与支持的开销. 1.5)转换的应用
DataStage包含一个执行列操作与转换的函数与例程库.开发者可以直接使用函数执行列映射或者在遵循较为复杂的转换与运算法则前提下执行合并操作.在使用函数和例程执行理想的列映射操作后,开发者单击\编译\图标,首先编译器将对作业进行分析,然后如何最好的对数据流进行管理.接着编译器将为每一个独立的转换映射生成目标代码,并在数据字节发往目的地时采用尽可能高效的方式对数据字节进行操作.
DataStage预制有120多个小例程,可完成从子字符串操作到字符转换和复杂运算的各种操作.转换脚本语言是BASIC语言的扩展,它包含有大量专用的字符串操作与数据类型转换函数,非常适用于数据存储.而且这种语言有一个经过验证的调用库,15年来它一直都支持数据集成应用以及在线交易处理系统. 此外,DataStage还拥有200多种复杂转换,涉及到如数据类型转换、数据操作、字符串函数、公用程
序,行处理以及度量(包括距离、时间和重量)转换等许多方面. 1.6)图形化作业定序器
在DataStage中作业系统被称为\批处理\它可以执行其他作业调用其他批处理.DataStage提供一个直观的图形化界面来构建批处理作业或进行作业排序.在图形化界面当中\进程\和\链接\被用于构建批处理作业或进行作业排序,其中\进程\表示活动(如运行一个作业),\链接\表示活动之间流的控制.
作业顺序的控制是很重要的,因为它支持一个具有内部处理依赖性作业系统的建立.例如在某个特定的数据集成应用程序中,假设\审计收入\是首先要执行的作业,那么直到(或除非)该作业完成并返回一个零代码其他作业方可继续进行.当\审计收入\作业完成后,相应的命令语言将会发出信号通知DataStage,DataStage将同时运行两个不同的维数作业.而第四个\过程事实\作业还在等待这两个维数作业的完成,因为它在自己的转换操作中使用完成的报表.虽然采用线性的方式这些作业照样可以正确的运行,但应用程序整体的运行时间将会大大延长.两个维数作业同时运行但互不干扰.在一台配置完善的服务器上,
鉴于一系列的排序可能会变得非常复杂,两个作业将分别占用各自的处理器运行.
4.2高级维护
一旦集成数据环境建立并开始运作,它将会在维护与更新两方面带来新的挑战.工业专家称涉及到数据集成工程的总费用增加额中70%与维护集成环境有关.Ascential公司的解决方案从一开始就已经考虑到了维护方面所带来的挑战,它提供对象再利用、版本控制以及捕获变化的数据等功能,有助于开发者迅速满足不断出现的用户需求而不会增加信息技术资源方面的负担. 2.1)对象再利用与共享
开发者可以在所有其他DataStage服务器上重新利用同一工程内用DataStage开发的转换.而且他们可以通过各种不同的组件轻易共享转换,如使用DataStage的中央控制工具实现数据容器的导出到集成.使用容器,开发者可以将同一数据集成过程中的几步处理合为一个单独的单元.容器可以只用于某一个作业,也可在多个作业中共享.本地容器对于某一作业而言是私有的,只能建立该存储器的作业内部进行编辑.共享的存储器是独立的DataStage组件,可以在多个作业中使用,但所有作业的数据源需一致.共享的存储器对于重复的如再利用生成的测试数据或一个外部报表结构的详细数据等数据集成任务来说是非常有用的.
2.2)版本控制
此外,DataStage提供版本控制功能,它保存了所有数据集成开发的历史沿革,保留了应用程序组件,如表定义,转换规则和源/目标列映射等.开发者可以查阅过去的规则,并可随意恢复所有可移动至远方区域的版本.DataStage系列产品允许开发者在必要时于本地增加分发的组件.组件要以只读的方式进行移动,以保留其具体特性.公司信息技术人员可以查阅本地变化,并在中心地区记录其版本.版本控制可以为开发者跟踪源代码和如外部SQL脚本、命令行和模型等文本文件.版本控制也可保护转换规则的本地只读版本,使其免受不安全网络或机器故障的影响,这样某一节点发生故障就不会使全世界范围内全部决策支持基础设施瘫痪. 2.3)捕捉更改数据
处理更改数据的也是数据集成应用程序性能的一项重要指标.决策支持系统需要定时进行更新,更新所需的装载时间是由以下这些变量决定的: 更新频率
目标的可获得性 访问数据源的能力 更改数据的预计量 OLTP数据库的技术结构
网络超载和过长的装载时间都是量密集型的环境所不能接受的.对更改数据捕捉的支持可以使刷新目标环境所需的装载时间达到最小化.