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可空字段拼接字符串特别需要注意的问题: