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

背景信息:

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

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

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

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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

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

标签: etl rdbms data-warehouse


【解决方案1】:

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

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

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

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

3) 删除不需要的 UNIONs

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

干杯 尼丁

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2021-06-13
    • 2020-09-09
    • 2012-06-24
    • 2021-05-28
    • 2020-03-31
    • 2020-06-20
    相关资源
    最近更新 更多