如何提高 ETL 性能?

Posted

技术标签:

【中文标题】如何提高 ETL 性能?【英文标题】:How do I improve my ETL performance? 【发布时间】:2017-05-29 01:04:00 【问题描述】:

背景信息:

我有一个传统的 ETL(在 SQL Server 上),大约需要 6 个小时才能完成。我正在寻找优化 ETL。以下是我已经采取的步骤:

    从逻辑中删除了不必要的 CURSOR。对于我无法删除的其余部分,我使用了 READ_ONLY、FAST_FORWARD、INSENSITIVE。

    发生了一些数据排序,我将其删除。

    使用编译器提示或联接提示调整长时间运行的 SQL 查询。

    删除了从源中获取的不必要的列。

    也对表进行了分区。我使用了分区开关,它确实提高了一些性能。

我还缺少任何其他方法可以帮助加快 ETL 吗?在这一点上,我们没有选择添加更强大的硬件资源或迁移到 Hadoop。

任何帮助将不胜感激。

【问题讨论】:

这不是很多信息。您正在使用什么样的操作?你知道这个过程的哪些部分花费的时间最长吗?您可以发布任何相关代码吗? 你用的是什么ETL工具? 没有像 informatica 或 Appworx 这样的自定义 ETL 工具。 ETL 是使用 SQL 存储过程和 Unix Shell 脚本自定义编写的。财务部分花费的时间最长。你想要整个 etl 的代码吗? OK 让您稍微了解您的情况。您的 ETL 是加载 所有 历史记录还是仅加载当前周期?不要发布所有代码。采取下一步并确定代码的哪一部分最慢并考虑发布。如果您只是发布一堵无济于事的代码墙。哦,您需要标记 RDBMS(Oracle、SQL Server 等) ETL 确实加载了所有历史记录,但仅用于财务休息是增量加载。正如你所建议的,我将发布长时间运行的脚本。 【参考方案1】:

几个问题: 您的来源是 SQL Server 数据库吗? 您是否查看过您的目的地数据库? 这是维度数据仓库还是规范化数据存储?

如果对您的来源和目的地没有太多了解,我可能会推荐一些其他的东西:

1)删除不需要的查找转换,如果有的话。

2) 如果您负担得起,我会考虑在您的一些源表上创建索引。并不总是可行,但这有助于相信我。

3) 删除不需要的 UNIONs

如果可能的话,请分享有关您的 ETL/数据库架构的更多信息,我相信这里的许多大脑都能够获得更多智慧。

干杯 尼丁

【讨论】:

以上是关于如何提高 ETL 性能?的主要内容,如果未能解决你的问题,请参考以下文章

SSIS - ETL - 执行性能问题

「集成架构」Talend ETL 性能调优宝典

SQL Server ->> 尝试优化ETL中优化Merge性能

ETL工具kettle简单的性能调优

同步还是异步?ETL架构的选择,为何关系到数据处理速度和系统性能

java中大量数据如何提高性能?