我正在使用EzAPI库以编程方式构建一个相当复杂的SSIS数据流,并且遇到了一个问题。我附上了一张我正在努力实现的图像。

我已经让启动(直到合并连接)正常工作,但是在尝试将合并连接组件的输入映射到输出时失败了。
这是我到目前为止的代码(显然只是一小段代码)
int sortPosition;
var df = new EzDataFlow(p);
var cur = new EzOleDbSource(df);
cur.Connection = dstConn;
cur.Table = "Table1";
var hst = new EzOleDbSource(df);
hst.Connection = hstConn;
hst.Table = "Table2";
// Add all the columns to the sort transformation for the Current database table
var sortCurr = new EzSortTransform(df);
sortCurr.AttachTo(cur);
sortPosition = 1;
foreach (Column c in table.Columns)
{
sortCurr.SortOrder[c.ColumnName] = sortPosition++;
}
// Same for history
var sortHst = new EzSortTransform(df);
sortHst.AttachTo(hst);
sortPosition = 1;
foreach (Column c in table.Columns)
{
sortHst.SortOrder[c.ColumnName] = sortPosition++;
}
var mrg = new EzMergeJoin(df);
mrg.AttachTo(sortCurr, 0, 0);
mrg.AttachTo(sortHst, 0, 1);
mrg.JoinType = MergeJoinType.Full;
... now what?我到处寻找EzMergeJoin转换的示例或文档,但都没有用。有谁能给我指个方向吗?
发布于 2013-01-30 14:38:30
不幸的是,我们还没有找到一种方法来修复连接键不能通过数据流传递的问题。我们得到的唯一答案是在上游组件中使用不同的名称选择两次联接键。然后只对重复项进行排序,这会使合并联接使用重复项作为联接键。然后,原始列传递到数据流中的下一个组件。
下面是我们的代码示例,一旦正确设置了输入列,就没有什么特别的了:
MergeJoin = new EzMergeJoin(TransformTranFact);
MergeJoin.Name = "Merge Join";
MergeJoin.AttachTo(SourceChecksum, 0, 0);
MergeJoin.AttachTo(FactTranFact, 0, 1);
MergeJoin.LinkAllInputsToOutputs();
MergeJoin.JoinType = MergeJoinType.Full;
MergeJoin.NumKeyColumns = mchs.Count();mchs是一个XElement对象,其中包含来自在Dimodelo Architect中捕获的数据仓库设计的信息。我们使用EzAPI直接从Dimodelo Architect捕获的数据仓库设计中为数据仓库自动生成复杂的ETL。
发布于 2012-02-02 03:11:27
作为初始答案,请尝试添加
// Not sure how to handle multiple key columns
mrg.NumKeyColumns = 1;
mrg.LinkAllInputsToOutputs();我的数据流设置为Current分支,如下所示
(sorted)
的
Historical分支看起来像
(sorted)
的
我只对初始列进行了排序,因为我希望看到像source_id、col1、col2这样的输出。

我仍然在查看代码,以了解如何在其中添加联接键,但尚未找到它。
发布于 2012-08-03 00:09:54
目前,我找到了一个非最佳但实用的解决方案。如果您在其中一个查询中选择了联接键列两次,但只在其中一个查询上设置了排序选项,则它将链接到合并联接的输出。
https://stackoverflow.com/questions/9100186
复制相似问题