我在这里有一个基于场景的问题。 假设我有一个表,它是一百万个记录的几列,我想根据行数将数据加载到sis中的两个不同的目的地,前三行应该进入一个表,第二组三行应该进入另一个表直到所有记录都加载到两个目的地为止。
表1:
ID
1
2
3
4
5
6
7
8
9
10
11
12
所以第一个目标表应该有记录
1
2
3
7
8
9
第二张桌子应该有
4
5
6
10
11
12
请让我现在使用方法
答案 0 :(得分:1)
您可以使用Conditional Split Transformation
。为此,
在您的情况下,流量条件可以为ID % != 0
和ID % 3 == 0
答案 1 :(得分:1)
您可以使用与OLEDB Source相似的SQL命令,它将生成一列,该列根据行号拆分数据。
SELECT ID, DENSE_RANK() OVER(PARTITION BY ID % 3 ORDER BY ID) % 2 as DestinationTable
FROM Table1 ORDER BY ID
之后,您可以使用条件拆分组件将流拆分为rwo目标。
注意:处理大量数据时,必须确保已创建相应的索引)
OLEDB Source
,该数据将从源表中读取脚本代码(VB.NET)
Public Class ScriptMain
Inherits UserComponent
Private RowCounter As Integer = 0
Private DestinationTableID As Integer = 1
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
RowCounter += 1
Row.DestinationTable = DestinationTableID
If RowCounter = 3 Then
RowCounter = 0
If DestinationTableID = 1 Then
DestinationTableID = 2
Else
DestinationTableID = 1
End If
End If
End Sub
End Class
如果您的目标是在没有任何条件的情况下将数据分发到两个目标,则只能使用条件拆分转换使用以下表达式(以2为目标数)对(模)数据进行拆分。您需要)
Row.ID % 2 == 0
或者您可以使用Balanced Data Distributor来实现这一目标,而无需任何手动实施。