Rhino.ETL - союзная операция

У меня есть рабочая книга Excel с несколькими листами с одинаковой схемой данных. У меня есть рабочая реализация для загрузки данных с одного листа.

Есть ли способ объединить похожие записи (схемы) в один набор (строки), используя JoinOperation или любую такую ​​операцию?

Насколько я понимаю, JoinOperation можно использовать для левого, правого, внешнего и внутреннего объединений, но не для объединения, поскольку тип возвращаемого значения MergeRows - Row.

Заранее спасибо.

1 ответ

Вы могли бы реализовать 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"))
        );
    }
}

Это выполняет объединение всех операций. Если вам нужно объединение, которое возвращает отдельные строки, реализуйте AbstractAggregationOperationи группировать по всем столбцам.

Другие вопросы по тегам