0

我需要帮助来规范用冒号分隔的单个列中的字段“DSC_HASH”。

输入: 在此处输入图像描述

输出: 在此处输入图像描述

4

2 回答 2

0

Informatica 中没有通用解析器或循环构造可以获取一条记录并输出任意数量的记录。

有一些方法可以绕过这个限制:

  • 像您一样使用 Java 转换,这可能是最简单的……如果您了解 Java :) 性能或多线程可能会受到限制。
  • 使用具有固定数量输出记录的路由器或规范器,足以覆盖所有情况,然后过滤掉空记录。提取字段的表达式编写起来有点复杂(维护)。
  • 使用 XML Parser,但您必须先将数据转换为 XML,并设计 XML 模式。例如,您的第一行将被更改(为了便于阅读,在多行上):

    <e><n>2320</n><h>-1950312402</h></e>
    <e><n>410</n><h>103682488</h></e>
    <e><n>4301</n><h>933882987</h></e>
    <e><n>110</n><h>-2069728628</h></e>
    
  • 使用 SQL 转换或存储过程转换来使用数据库标准或自定义函数,但这会导致对每个输入行进行 SQL 查询,这在性能方面很糟糕

  • 使用自定义转换。有人想为此编写 C++ 吗?

对于这种情况,Java 转换显然是一个很好的解决方案。

于 2019-09-18T08:53:26.423 回答
0

我通过 java 转换实现了我所需要的:

1) 在 java 转换中,我创建了 4 个输出列:COD1_out、COD2_out、COD3_out 和 DSC_HASH_out

2)然后我输入以下代码:

String [] column_split;
String column_delimiter = ";";
String [] column_data;
String data_delimiter = ":" ;

Column_split = DSC_HASH.split(column_delimiter);
COD1_out = COD1;
COD2_out = COD2;
COD3_out = COD3;

for (int I =0;  i < column_split.length; i++){
    column_data = column_split[i].split(data_delimiter);
    DSC_HASH_out = column_data[0];
    generateRow();
}
于 2019-09-18T03:12:08.397 回答