单源限定符列到多列

Single Source Qualifier column into multiple columns

我有一个逗号分隔值 (csv) 文件,需要使用 Informatica 将其加载到 table。第一列包含一个连接值,由“~”连接,需要保存到 7 个不同的列中。

有什么办法吗?

我认为有四种方法可以做,但都有利有弊。

  1. 首先使用以 ~ 作为分隔符的源限定符读取并将其写入 csv 文件。所以现在所有列都用逗号分隔。然后使用此文件作为下一个过程的源。 Pro - 简单的过程。缺点 - 两步过程因此可能需要时间。此外,如果您的数据有 ,/~ 您需要使用“”将它们括起来。
  2. 使用 shell 脚本将 ~ 替换为逗号。所以现在你所有的列都用逗号分隔然后使用这个文件作为你下一个过程的源。缺点 - 脚本需要注意不要替换 ~ 内部数据。
  3. 您可以使用一个源限定符(以逗号分隔读取文件)并使用 INSTR/SUBSTR 组合将第一列拆分为 7 个部分。 Step1 - 首先在第一列中找到 ~ 的位置 -
v_pos1 = InStr( col1, '~', 1, 1)
v_pos2 = InStr( col1, '~', 1, 2)
v_pos3 = InStr( col1, '~', 1, 3)
...

第 2 步 -

o_val1 = iif(v_pos1 =0,col1, SubStr( col1, 1, v_pos1 - 1))
o_val2 = iif(v_pos2 =0,'', SubStr( col1, v_pos1 + 1), SubStr( col1, v_pos1 + 1, v_pos2 - v_pos1 - 1))
o_val2 = iif(v_pos2 =0,'', SubStr( col1, v_pos2 + 1), SubStr( col1, v_pos2 + 1, v_pos3 - v_pos2 - 1))
...
  1. 您还可以使用新创建的 LOOP 转换。这是一个扩展,需要一些研究