4

我有一个包含 10 条记录的平面文件,其中 5 条记录是重复记录(唯一键列:Customer_Idsource_system)。此平面文件必须加载到 Oracle 表中,这是第一次加载。

如何消除其中的重复项?

4

4 回答 4

6

有很多方法可以处理这个问题:

  1. 将数据加载到临时表,然后只选择不同的记录
  2. 使用排序器或聚合器转换,然后选择不同的选项(如果我没记错的话,在属性选项卡中)
  3. 使用动态查找,仅当尚未插入记录时才将记录插入缓存。
  4. 在表达式转换中使用变量端口,通过过滤器我们可以删除重复记录,即使是关系表或平面文件。由于动态查找成本高,这种方式是可取的。
于 2012-01-30T06:11:12.400 回答
2

您始终可以使用聚合器转换并按您想要使其与众不同的所有数据进行分组。因此,如果您按所有列分组,则只有那些不同的列最终会出现。

于 2012-02-14T01:56:47.077 回答
1

您可以使用排序器并检查加载不同的行。

于 2013-05-11T16:05:11.010 回答
0

SRC-->SQ-->SRT-->EXP-->RTR-->TGT

你从源头输入是

Col1 Col2
1 A
1 B
2 C
2 D
1 E
1 F
3 G
4 H
5 I
6 J
4 K
3 L

在排序器中按 col1 排序数据,排序器数据后看起来像这样

Col1 Col2
1 A
1 B
1 E
1 F
2 C
2 D
3 G
3 L
4 K
4 H
5 I
6 J

在 exp 你有两个输入端口

in_col1
in_col2

按如下顺序创建变量端口和输出端口

v_FLAG= IIF(v_col1=in_col1,2,1)

v_col1=in_col1

out_FLAG=v_FLAG

然后输出的表达式数据看起来像这样

Col1 Col2 FLAG
1,A, 1
1, B, 2
1, E, 2
1, F, 2
2, C, 1
2, D, 2
3, G, 1
3, L, 2
4, K,1
4, H, 2
5, I, 1
6, J, 1

在路由器中创建两组,一组用于唯一记录,另一组用于重复记录。

unique=(FLAG=1)

duplicate=(FLAG=2)

将两组连接到两个目标。SRC-->SQ-->SRT-->EXP-->RTR-->TGT

你从源头输入是

Col1 Col2
1 A
1 B
2 C
2 D
1 E
1 F
3 G
4 H
5 I
6 J
4 K
3 L

在排序器中按 col1 排序数据,排序器数据后看起来像这样

Col1 Col2
1 A
1 B
1 E
1 F
2 C
2 D
3 G
3 L
4 K
4 H
5 I
6 J

在 exp 你有两个输入端口

in_col1
in_col2

按如下顺序创建变量端口和输出端口

v_FLAG= IIF(v_col1=in_col1,2,1)

v_col1=in_col1

out_FLAG=v_FLAG

然后输出的表达式数据看起来像这样

Col1 Col2 FLAG
1,A, 1
1, B, 2
1, E, 2
1, F, 2
2, C, 1
2, D, 2
3, G, 1
3, L, 2
4, K,1
4, H, 2
5, I, 1
6, J, 1

在路由器中创建两组,一组用于唯一记录,另一组用于重复记录。

unique=(FLAG=1)

duplicate=(FLAG=2)

将两组连接到两个目标。

于 2014-03-24T13:22:43.220 回答