自定义datastage阶段

来源:互联网 发布:阿里云服务器域名 编辑:程序博客网 时间:2024/05/20 20:02
  1. 新建两个表定义,用于阶段的输入(InTableDef)输出(OutTableDef)。


1.InTableDef的定义如下(输入字段为:inID):




2.OutTableDef的定义如下(输出字段为vaild)



  1. 创建一个新的buildstage


  1. 编辑阶段常规属性(命名阶段的名称为ID_VER):


  1. 编辑阶段构建->接口->输入属性(表名为:选择我们刚刚新建的表定义)


  1. 编辑阶段构建->接口->输出属性(表名为:选择我们刚刚新建的表定义)






  1. 编辑阶段构建->接口->传输属性




  1. 编辑阶段构建->逻辑->定义属性(也可以在 每条记录 里面直接定义




  1. 编辑阶段构建->逻辑->每条记录属性(在这里编写功能代码,这里是身份证有效性的验证代码,来源IBM官网)


源代码:来源IBM官网

APT_StringaddressNumber[] ={"11","22","35","44","53","12","23","36","45","54","13","31","37","46","61","14","32","41","50","62","15","33","42","51","63","21","34","43","52","64","65","71","81","82","91"};

intiWeight[]={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};

staticchar sVerCode[]="10X98765432";

boolbResult;

bResult=true;

boolb_IsLeapYear=false;

int Days[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

inti,length;

intiYear;

intiMonth;

intiDay;

APT_StringID;

APT_StringIdtemp;

intiS = 0;

intiY;

ID= InRec.inID;



ID.trimWhitespace();

length= ID.length();

//lengthverify

if(length!= 15 && length != 18)

{

bResult= false;

}

else

{

//provinceverify

for(i = 0; i<= 34; i++)

{

if(ID.substring(0,2) == addressNumber[i])

break;

elseif (i == 34)

{

bResult= false;

}

}

if(bResult)

{

//Year,Month,Dayverify

intiYear = atoi(ID.substring(6, 4).data());

intiMonth = atoi(ID.substring(10, 2).data());

intiDay = atoi(ID.substring(12, 2).data());

if(iMonth<1|| iMonth>12)

{

bResult= false;

}

else

{

if(iYear%4== 0)

{

b_IsLeapYear= true;

if(!(iYear%100==0 && iYear%400==0)) b_IsLeapYear=false;

}

if(b_IsLeapYear)

Days[1]=29;

else

Days[1]=28;

if(iDay<0 || iDay>Days[iMonth-1])

{

bResult= false;

}

else

{

//verifycheck code

if(ID.length()!= 17)

{

for(i=0;i<17;i++)

{

iS+= (int)(ID[i]-'0') * iWeight[i];

}

intiY = iS%11;

if(sVerCode[iY]!= ID[17])

{

bResult = false;

}

}

}

}

}

}

if(bResult)

vaild= "TRUE";

else

vaild= "FALSE";

  1. 编写完成后,点击下方的生成后,会弹出日志反馈是否成功,不成功继续调试。

  2. 实例验证stage的正确性:


输出结果:

  1. 源表:511**为正确的身份证


2.文件,记录了错误的身份证号的那条记录


  1. 目标表,结果是和源表一样的:


注意事项:1.自定义的stageID_VER的输入为inID,所以DSLink1的输出字段必须定义为inID

2.filter的属性编辑:


3.OutputLink的确定是在“链接排序”里边。


0 0
原创粉丝点击