2

同じデータ スキーマを持つ複数のシートを含む Excel ブックがあります。単一のシートからデータをロードするための作業実装があります。

JoinOperation またはそのような操作を使用して、同様のレコード (スキーマ) を単一のセット (行) にマージする方法はありますか?

私の理解では、MergeRows の戻り値の型が Row であるため、JoinOperation は左結合、右結合、外部結合、および内部結合に使用できますが、ユニオンには使用できません。

前もって感謝します。

4

1 に答える 1

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;
    }
}

更新:ここで並列バージョンを参照してください。

次のようなプロセスで使用します。

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

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

これにより、unionall操作が実行されます。個別の行を返すユニオンが必要な場合はAbstractAggregationOperation、すべての列に、およびグループを実装します。

于 2012-12-20T05:50:44.490 に答える