我有一个遗留数据库,我正在做一些ETL工作。我在旧表中有列有条件地映射到我的新表中的列。条件基于关联列(同一个表中的一列表示对象的形状,我们可以将该列称为SHAPE)。例如:
列dB4D映射到列:
如果SHAPE = 5,则为B4 B3如果SHAPE = 1 X如果SHAPE = 10
或者Y
我正在使用条件基于SHAPE拆分表格,然后我使用10-15"复制列"转换以获取旧列(dB4D)并将其映射到新列(B4,B3,X等)。
其中一些列"重叠"。例如,我有多个传统列(dB4D,dB3D,dB2D,dB1D,dC1D,dC2D等)和多个新列(A,B,C,D等)。在其中一个"复制列" (由SHAPE分解)我可以有类似的东西:
如果SHAPE = 10
+--------------+--------------+
| Input Column | Output Alias |
+--------------+--------------+
| dB4D | B |
+--------------+--------------+
如果SHAPE = 5
+--------------+--------------+
| Input Column | Output Alias |
+--------------+--------------+
| dB4D | C |
+--------------+--------------+
我现在需要将这些全部合并到一个最终的临时表(或#34;目的地")中。不是两行具有相同的大小,因此没有冲突。但我需要根据另一列中的值将dB4D(和其他列)映射到不同的新列。我试图合并它们但不能合并多个数据源。我试图加入它们但不是所有列(或输出别名)都会显示在目标中。任何人都可以推荐如何解决这个问题吗?
以下是目前可能有所帮助的设计:
答案 0 :(得分:0)
作为数据流的输入,您有一组列dB4D,dB3D,dB2D等。
您的目的地只有源数据中不存在的列名。
根据Shape列,您可以将dB列投影到目标表的不同映射中。
如果条件分割逻辑有意义,请不要尝试将它全部联合起来。相反,只需连接8个OLE DB目标。您可能必须将它们从“快速加载”选项更改为表名选项。这意味着它将执行单例插入,因此希望数据量不会成为问题。如果是,则创建8个临时表,您执行使用“快速加载”选项,然后对数据流执行后续任务,以便在最终表中执行基于集合的插入。
您将使用Union All组件遇到的挑战是,如果您对源进行任何更改,Union All很少会接收到更改(列从varchar更改为int,抱歉!)。