我正在努力提高SSIS包的性能。
我开始使用的一件事是过滤Lookups的参考表。到目前为止,我使用表作为查找的参考表。
第一个改进是将表更改为只从该表中选择我需要的列的SQL子句。
接下来,我想在此表中加载我知道我肯定会使用的记录。如果我在这种状态下维持它,我将加载30万行或更多(每行大约500 kb的二进制内容的大行)并且只使用它们中的大约100行。
我会在SQL查询中放置一些过滤器来设置查找的引用表,但是在该过滤器中我需要使用我的OLE DB源中加载的行的所有ID。
有没有办法做到这一点?
我想过使用OleDB命令而不是Lookup一次加载每一行,但除了耗费时间外,我可能会为100个不同的行加载相同的东西100次,当我可以加载一次在查找和使用它100次...
启用缓存仍然是另一种选择仍然听起来不太好,因为它会减慢我们的速度 - 我们已经非常慢了。
任何想法都非常适合。
答案 0 :(得分:0)
一种可能性是首先将不同的ID流式传输到一个数据流中的永久/临时表,然后在稍后的数据流中使用它(使用连接)(您可能必须推迟验证)。
在我们的许多ETL包中,我们首先将数据流式传输到Raw文件中,处理所有类型的转换以及那里的所有内容。然后,当所有这些转换都成功时,我们会处理创建新维度,然后处理链接到维度的事实。