如何在Informatica中将列数据拆分为行

时间:2016-05-11 20:13:34

标签: split informatica

将列数据拆分为Informatica中的行:

示例数据:

ID     VALUE
123    lod,!,cfgda,!,mwtbvmailg,!
456    fod,!,cbgda,!
789    cfgda,!,mwtbv,!mailg,!cxsew,!

用于拆分此数据的SQL查询:

 SELECT DISTINCT ID, VALUE FROM 
  (SELECT DISTINCT ID, 
   UPPER (TRIM (REGEXP_SUBSTR (SUBSTR (VALUE, 1), '[^,!]+', 1,
   LEVELS.COLUMN_VALUE))) AS VALUE FROM T1,
 TABLE (CAST (MULTISET (SELECT LEVEL FROM DUAL 
 CONNECT BY LEVEL <= LENGTH (REGEXP_REPLACE (SUBSTR (VALUE, 1), '[^,!]+')) 
 + 1) AS SYS.ODCINUMBERLIST)) LEVELS)
 WHERE VALUE IS NOT NULL;

在这里,如果我们尝试在Informatica ETL中使用Normalizer,则代码不能正常工作,因为normalizer仅适用于要拆分的固定行数,在我们的例子中,数据是动态的。

因此,使用Informatica Java Transformation,我们能够实现所需的输出:

在EXP中:

i/p port = VALUE
variable port = REPLACECHR(0, VALUE, ',!', ' ')
o/p port = variable port

在Java转换中,粘贴到文本下面:

// To split VALUE to multiple rows
String str=VALUE;
String[] temp;
String delimiter =" ";
temp = str.split(delimiter);
for (int i =0; i< temp.length; i++)
{
VALUE = temp[i];
generateRow();
}

列VALUE然后分成多行,如下所示:

ID     VALUE
123    lod
123    cfgda
123    mwtbvmailg
456    fod
456    cbdga
etc.....

我用这种方式工作,还有其他任何建议吗?

1 个答案:

答案 0 :(得分:0)

您可以使用管道规范化器转换将列拆分为行。