在SSIS查找中有3种类型的缓存。
完整、部分和无缓存。
在我们的解决方案中,它一直使用默认的(完整)。是否有任何特定的场景,可以使用部分缓存/无缓存?
在我们的解决方案中,锁定表总是很小(例如:-我们一直在查看小表来获取类型或获取描述)。这可能是它在默认(完整缓存)模式下配置的原因?
请将宝贵的建议和意见告诉我。
让我们介绍一下基础知识。
完全缓存 - 在实际执行数据流之前,完全缓存模式下的所有查找组件都将针对其源运行查询并在本地缓存所有数据。一旦数据流开始,这些转换的源系统就可以被删除,因为集成服务拥有该时间点的所有数据。
部分缓存 - 部分缓存不会预先缓存数据。对于流经转换的每一行,部分缓存将查看其内部缓存以查看查找键是否已通过。如果有,则将使用本地副本。否则,将针对引用的系统触发单例查询以查找该值。如果您有未优化的查找、拉回大量数据、非常独特的源密钥,那么这可能会变得相当昂贵。如果在远程系统中找到匹配项,则该数据将在本地缓存,直到包完成或足够的新查找已生成匹配项并且缓存已满。
无缓存 - 与部分缓存类似,但它将始终对源系统执行查询。即使您的整个导入集只有一个唯一的键值。
为什么我会选择一个而不是另一个
我使用完整缓存,除非有特定原因不这样做。
在数据仓库中,存在一种称为迟到维度的场景。您正在加载应在参考表中具有值的内容,但直到现在您才知道该值的存在!一般解决方案是在加载期间将该值打入参考表中。在完整的缓存中,引用该缺失值的每一行都不会找到它,然后尝试插入它,这会导致重复。部分/无缓存将在第一次未命中时解决此问题,这将导致插入到引用表中,随后的查找将找到它并将其添加到缓存中。
我遇到的另一个需要部分/不需要缓存的场景是当我需要范围查询时。我有桌子SurrogateKey|BusinessKey|StartDate|StopDate
我需要查找夹在 StartDate 和 StopDate 之间的 BusinessKey + MyDate。我使用 GUI 将 MyDate 拖到 StartDate,然后在高级编辑器中,修改现有查询以执行 BETWEEN StartDate 和 StopDate 之间的操作(但当然,我不会使用BETWEEN https://sqlblog.org/2009/10/16/bad-habits-to-kick-mis-handling-date-range-queries)
Related
- 将查找转换部分缓存限制为加载的值 https://stackoverflow.com/questions/19574737/restrict-lookup-transformation-partial-cache-to-loaded-values/19575417#19575417
- SSIS LookUp 没有像文档所说的那样处理 NULL https://stackoverflow.com/questions/7233766/ssis-lookup-is-not-dealing-with-nulls-like-the-docs-say-it-should/7236036#7236036
- 查找转换 http://msdn.microsoft.com/en-us/library/ms141821.aspx
- 区分大小写的查找 http://blogs.msdn.com/b/mattm/archive/2008/11/23/lookup-pattern-case-insensitive.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)