将列数据拆分为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.....
我用这种方式工作,还有其他任何建议吗?
答案 0 :(得分:0)
您可以使用管道规范化器转换将列拆分为行。