SSIS2012数据流中查找转换控件案例详解

浏览: 2435

开篇介绍

     查找转换控件跟合并联接转换控件实现结果是一样的,但是实现方式有本质区别。查找转换通常在内存中缓存数据集,然后在输入管道中,将引用的数据集每一行与缓存中的数据进行比较查找。

查找转换的三种缓存模式:完全缓存,部分缓存,无缓存。

                          Clipboard Image.png

完全缓存:从数据库加载缓存,输入管道数据在缓存中查找有没有对应的数据,找到输出,未找到输出。(一般用于引用的数据集比较小,缓存速度快)

部分缓存:例如userid=1先在数据库中查找,如果找到,获取username,并将userid/username组合放入缓存中。如果以后userid=12再次通过组件,将会从本地缓存中获取username。然而,如果本地缓存没有找到该键,那么会再次检查数据库是否存在该键(有可能以前存在本地缓存中,由于内存压力过大,释放了部分内存)。如果没找到,则视为不匹配行。(如果在缓存中命中率低,会造成数据库重复调用的。解决办法:为不匹配的项添加缓存即可,把缺失缓存与部分缓存结合使用)

缺失缓存:只有部分缓存模式才有缺失缓存功能。如图所示:

                         Clipboard Image.png

无缓存:输入一条数据,就请求数据库一次。可想而知消耗性能多大。慎重使用。(系统参考数据不稳定的时候,任何缓存都只会显示旧的,错误的结果。这时无缓存模式就体现出价值了。)


案例介绍

         AdventureWork数据库做示例,将订单标题SaleOrderHeader与订单信息SaleOrderDetail用合并联接,在查找转换查找订单对应用户名Customer。

步骤

a.SaleOrderHeader与订单信息SaleOrderDetail用合并联接,详细步骤就不细将了。

SRC_Detail的Sql命令:

Clipboard Image.png

SRC_ORDER_Header的Sql命令:

Clipboard Image.png

Clipboard Image.png

注意:两端输入源要告诉合并联接控件,我是排序的。可以合并。

两种方法:一.用排序控件即可 。

                二.右击数据来源控件,显示高级编辑->输入和输出属性,issorted属性改为True。

               Clipboard Image.png

                指定要排序的那列,把SortKeyPostion 改为1 。合并联接就知道它是排序的了。

               Clipboard Image.png

b.查找转换控件查找对应用户名

              最终图(Union All控件只是为了作为数据目标,测试作用):

              Clipboard Image.png

 查找转换控件配置:

           常规:customer表数据不大,用完全缓存最优。连接类型用OLEDB连接管理器。(以后再讲,缓存连接管理器的作用)

                     将无匹配行重定向输出。如果选择则组件失败,那么引用表customer中无匹配的数据将会报错。

             Clipboard Image.png

         连接:连接customer表,引用customer表查找对应名字。

              Clipboard Image.png

      错误输出:用户名截断设置为重定向,把截断的数据重定向输出

               Clipboard Image.png

     匹配行结果UnionAll:三张表数据查找联接一起。

             Clipboard Image.png


附加:级联查询

              有时候需要使用多个查找转换来完成相应工作,可以实现更高的性能。上图做说明

    Clipboard Image.png

 使用80/20规则改进解决方案:

 例子说明:夏天棉袄基本不可能卖出去,那为什么还要加载到查找转换中?加载使用频率高的产品会更合适。根据使用频率和普及率将其中20%加载到完全缓存。

第一个查找转换(完全缓存)存储20%的参考行,并且是频繁查找的行,有希望成功应答80%的查找请求。很大程度上取决于创建正确的查询以获取20%正确参考行的用户。对于剩下20%请求失败的,将它们重定向到部分缓存查找转换中,该操作将针对其他80%的参考行(没有存储在第一个查找转换中的参考行)来进行。

 因为部分缓存,对内存要求不超过限制。有时候部分缓存和无缓存一起使用或者替代部分缓存。

总结

        级联查询优点:对于常见的查找进行有效执行,而对于不常见的项将其转移到较慢模式下执行,提高整体效率。

  缺点:牺牲多点的开发时间。

    

推荐 1
本文由 粽子job 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册