ETL作为交易

时间:2009-07-31 19:10:10

标签: sql sql-server transactions etl

对于我到目前为止所写的所有ETL,我从未对它们进行过交易 - 即如果表4失败,则回滚所有内容。

这方面的最佳做法是什么?

要“BeginTran + Commit”或不要“BeginTran + Commit”

编辑:我有一个主程序包调用其他4个程序包 - 是否可以将它们全部转换为一个事务处理?

3 个答案:

答案 0 :(得分:2)

在SSIS中,我总是Begin Trans + Commit。我想确保我可以在没有问题的情况下重新运行包(或者如果它失败则必须找到实际插入的行)。

它使恢复和清理变得更加容易。

答案 1 :(得分:2)

以可管理的批量大小开始+提交。您不希望每晚将6小时导入包装到单个事务中。保持批量最多可以在2-3分钟内完成。您将遇到ETL失败的数据纯度问题是给定的,因此至少减少对可管理事物的影响(即,不要触发将持续另一个 6小时完成的回滚)

答案 2 :(得分:1)

您经常在ETL中移动太多数据以使用SQL事务(日志必须存储所有要回滚的数据,请记住)。我更喜欢设计包,以便它们可以非破坏性地重新运行。理想情况下,他们应该设置好,如果他们在中游死亡,你可以启动他们,他们将继续在他们离开的地方继续。有时会对此造成性能损失,但我认为这是值得的。

从技术上讲,您可以将包卷成一个单独的交易;实际上,也许不是。