如何从文件中获取MIDDLE数据

时间:2014-06-17 13:15:24

标签: informatica informatica-powercenter

我在一个文件中有10条记录,我不需要第一行和最后一行,我只需要2到9行的数据。

有人能为我提供解决方案吗?

源文件示例:

SIDE,MTYPE,PAGENO,CONTIND,SUBACC,SIGN,DEAL QUANTITY,SECURITY,SOURCE SYSTEM,TODATE,SETTLEMENT DATE,REFERENCE 4,REFERENCE 2,TRADE DATE,ACCRUED INTEREST,ACCRUED INTEREST CURRENCY,XAMT1,XAMT2,XAMT3,XAMT4,XAMT5
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,00107020052_CSA,107020052,6/12/2013,0,USD,,0,250000,0,200000
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,00115020036_CSA,115020036,6/12/2013,0,USD,,0,250000,0,220000
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,00301410097_CSA,301410097,6/12/2013,0,USD,,0,226725,0,226725
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,00030020088_CSA,30020088,6/12/2013,0,USD,,0,250000,0,250000
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,00106410075_CSA,106410075,6/12/2013,0,USD,,0,250000,0,260000
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,00116510010_CSA,116510010,6/12/2013,300000,USD,,0,250000,0,260000
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,00177020015_CSA,177020015,6/12/2013,0,USD,,0,250000,0,270000
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,00189110093_CSA,189110093,6/12/2013,0,USD,,0,250000,0,280000
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,00272220015_CSA,272220015,6/12/2013,0,USD,,0,250000,0,10000
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,SLAVE1,189110093,6/12/2013,0,USD,,0,250000,0,250000
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,SLAVE2,272220015,6/12/2013,0,USD,,0,250000,0,1000
L,536,1,M,L_CAMS_COLATAGREEMENT,C,0,AGREEMENTS,CAMS_AGREEMENT,6/12/2013,6/12/2013,SLAVE3,301410097,6/12/2013,0,USD,,0,250000,0,200

3 个答案:

答案 0 :(得分:0)

不是Informatica的专家,但我在网上找到了以下答案,希望它对您有用。

步骤1:您必须为每条记录分配行号。使用表达式转换生成行号。在同一表达式转换中创建DUMMY输出端口,并为该端口分配1。因此,DUMMY输出端口每行总是返回1。

步骤2:将表达式转换的输出传递给聚合器,不要按条件指定任何组。在聚合器中创建输出端口Ototalrecords并为其分配Ocount端口。默认情况下,聚合器将返回最后一行。聚合器的输出包含值为1的DUMMY端口和具有源中记录总数值的Ototal_records端口。

步骤3:将表达式转换的输出,聚合器转换传递给joiner转换并在DUMMY端口上连接。在joiner转换中检查属性的排序输入,然后只有表达式和聚合器才能连接到joiner转换。

步骤4:在最后一步中使用路由器转换。在路由器转换中创建两个输出组。 在第一组中,条件应为Ocount = 1并将相应的输出组连接到表A.在第二组中,条件应为Ocount = Ototalrecords并将相应的输出组连接到表B.默认组的输出应为连接到表C,表C将包含除第一个和第一个之外的所有记录。持续。

来源:http://www.queryhome.com/47922/informatica-how-to-get-middle-data-from-a-file

答案 1 :(得分:0)

从informatica的角度来看,有多种方法可以做到这一点。 如果平面文件中的数据,sqloverride将无法正常工作。你可以创建两个管道,第一行从源读取并使用聚合器获取计数并分配给一个映射变量,如v_total。第二个管道你使用另一个变量v_count,初始化为0,调用计数函数。创建过滤器转换,过滤掉v_count = 1和(v_total-v_count)= 1,其余的将加载到目标。

答案 2 :(得分:0)

似乎有很多代码浪费在使用简单的unix命令(例如 head -9(currentfilename)(newinputfilename)

将完成这项工作。然后你需要做的就是使用新文件进行映射(如果你不再需要它)

对于等效的Windows服务器,请参阅https://serverfault.com/questions/490841/how-to-display-the-first-n-lines-of-a-command-output-in-windows-the-equivalent