Rhino.ETL - 联合运作

时间:2012-12-04 18:43:50

标签: merge union rhino-etl

我有一本excel工作簿,其中包含多张具有相同数据模式的工作表。我有工作实现从单页加载数据。

有没有办法使用JoinOperation或任何此类操作将类似的记录(架构)合并为单个集合(行)?

我的理解是JoinOperation可用于左,右,外和内连接,但不能用于union,因为MergeRows的返回类型是Row。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您可以实现AbstractOperation以组合多个输入操作,如下所示:

public class UnionAllOperation : AbstractOperation     {
    private readonly List<IOperation> _operations = new List<IOperation>(); 

    public override IEnumerable<Row> Execute(IEnumerable<Row> rows)
    {
        foreach (var operation in _operations)
            foreach (var row in operation.Execute(null))
                yield return row;
    }

    public UnionAllOperation Add(IOperation operation) {
        _operations.Add(operation);
        return this;
    }
}

更新:请参阅here上的并行版本。

在以下过程中使用它:

public class Process : EtlProcess {
    protected override void Initialize() {

        Register(
            new UnionAllOperation()
                .Add(new ExtractFromExcel("WorkBook1.xls"))
                .Add(new ExtractFromExcel("WorkBook2.xls"))
        );
    }
}

执行 union all 操作。如果您需要一个返回不同行的 union ,请在所有列上实现AbstractAggregationOperation和分组。