获取维度键时在 SSIS 中加载事实表并不容易

Posted

技术标签:

【中文标题】获取维度键时在 SSIS 中加载事实表并不容易【英文标题】:Loading a fact table in SSIS when obtaining the dimension key isn't easy 【发布时间】:2012-05-04 15:04:47 【问题描述】:

我有一个需要连接到维度表的事实表,但是从源数据中获取这种关系并不容易。事实表是从具有大约一百万行的源表中加载的,因此根据最佳实践,我使用上一次运行日期来仅选择自上一次运行以来添加的源行。在获得我希望加载的行之后,我需要通过 3 个其他表才能对维度表进行查找。这 3 个表中的每一个也有大约一百万行。

我了解到,最佳做法是不要提取您知道不需要的源数据。最佳实践还说在源系统上尽可能轻触,因此避免 sql 连接。但就我而言,这两个最佳实践变得相互排斥。如果我只在中间表中提取更改的行,那么我需要在源查询中进行连接。如果我从源系统中提取所有行,那么我提取的数据比我需要的多得多,这可能会导致 SSIS 内存/性能问题。

我倾向于加入源数据的提取,但我一直无法找到任何关于这种方法的优缺点的讨论。这是正确的还是不正确的? (源表和DW表在Oracle中)。

【问题讨论】:

我发现如果不在源系统上使用连接,就完全不可能获取事实或维度数据。如果由于某种原因速度很慢,您可以要求 DBA 创建一个或两个索引。规范化的数据应该使用连接来查询。语句“...因此避免 sql 连接”在语法上纯属无稽之谈。 【参考方案1】:

您能否暂存您引用的 3 个源表?您可能在 DW 中不需要它们,但您可以将它们放在临时数据库中,纯粹是为了这个目的。但是,您仍然需要保持这些最新状态,但假设您可以拉回更改,这可能还不错。

【讨论】:

查询临时表和查询源表有什么区别?这不会对源系统产生同样的不利影响吗?或者您会建议在 Sql Server 而不是 Oracle 上暂存数据? 我的想法是您将数据从生产环境中取出,这样您就可以在源系统上保持“轻触”。不过,您是对的,对于实际的 SSIS 查找,您仍然会担心查询大量数据的性能问题。但是在分阶段时,你有更多的选择——你可以直接加入 SQL,或者使用 SSIS 查找任务......哪个更适合你。最主要的是你没有与实时源数据库保持连接。 我喜欢启示者的建议。这是我最近必须在预先存在的 ETL 解决方案中实现的。采集后源数据开始增长,ETL 解决方案现在花费了太多时间从源系统中提取数据。因此,我们更改了 ETL,以便在进行查找之前在 DW 系统上暂存我们需要的大部分内容。最重要的是,您受制于源数据模型......无论如何,您将不得不使用这 3 个大表来完成事实表加载。 大概使用数据库复制是创建登台环境的一种可接受的方式?这不是我读过的正在讨论的想法,但似乎是一个有点明智的想法。不利的一面可能是,成为 ETL 源的数据会随着源的变化而变化,因此无法实现暂存表提供稳定、可审计环境的好处。

以上是关于获取维度键时在 SSIS 中加载事实表并不容易的主要内容,如果未能解决你的问题,请参考以下文章

从 SSIS 中加载的数据集中过滤掉重复项

在滚动时在 recyclerview 中加载更多数据

如何在滑动时在 PageView 中加载新数据

SSIS包瓶颈插入记录

如何使用 JSON API 在滚动时在 recyclerview 中加载更多数据

数据库——事实表和维度表