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
и группировать по всем столбцам.