我有一本excel工作簿,其中包含多张具有相同数据模式的工作表。我有工作实现从单页加载数据。
有没有办法使用JoinOperation或任何此类操作将类似的记录(架构)合并为单个集合(行)?
我的理解是JoinOperation可用于左,右,外和内连接,但不能用于union,因为MergeRows的返回类型是Row。
提前致谢。
答案 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
和分组。