首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将查找转换部分缓存限制为已加载的值

将查找转换部分缓存限制为已加载的值
EN

Stack Overflow用户
提问于 2013-10-24 19:21:05
回答 2查看 2.7K关注 0票数 2

我使用SSIS将数据从平面文件加载到SQL表。平面文件包含新行和更新行。每次进程运行时,更新的行将影响SQL表的一个小子集,由“句点”列指定(例如,一个过程可能只影响周期3、4和5)。

我使用查找转换将新行(查找没有匹配输出)与现有行的(查找匹配输出)分开。由于所加载的引用集和数据集都非常大,所以我想使用部分缓存进行查找。是否可以以某种方式修改部分缓存查询,使其只包括平面文件中包含的句号中的行?

例如,我的参考表可能包含句点1-10的数据,但是正在加载的平面文件可能只有3-5个句点的数据。因此,我只想缓存3-5期的数据,因为我已经知道句点1-2和6-10永远不会产生匹配。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-24 19:58:33

不要在下拉列表中使用表选择器,除非您需要每行的每一列,否则永远不应该使用该选项,而是编写查询,以便只撤回匹配或增强现有数据所需的列。在您的情况下,您将需要添加一个过滤器,这是一个有点挑剔。

我发现的最佳方法是用字符串类型的变量编写查找查询。在其中,我将构建查询并应用所需的过滤器。下面,我定义了两个变量。一个作为我的过滤器的int,然后是使用它的查询本身。

我的SourceQuery变量上的表达式是

代码语言:javascript
复制
"SELECT 
    D.rn
FROM
(
SELECT TOP 10
    ROW_NUMBER() OVER (ORDER BY (SELECT NULL))  * 2 AS rn
FROM
    sys.all_columns AS SA
) AS D(rn) 
WHERE D.rn <= " + (DT_WSTR, 10) @[User::MaxID]

我的数据流看起来

我有我的源代码,它点击一个查找,并根据匹配的结果,它去两个桶之一。我的源查询只生成数字1到10,查找是一个查询,生成从2到20的偶数。

在设计时,该查询如下所示

代码语言:javascript
复制
SELECT 
    D.rn
FROM
(
SELECT TOP 10
    ROW_NUMBER() OVER (ORDER BY (SELECT NULL))  * 2 AS rn
FROM
    sys.all_columns AS SA
) AS D(rn) 

正常运行会导致水桶之间的50/50分裂。

当然,目标是使查找查询接受一个类似于源组件的参数,但是您很快就会发现

代码语言:javascript
复制
SELECT 
    D.rn
FROM
(
SELECT TOP 10
    ROW_NUMBER() OVER (ORDER BY (SELECT NULL))  * 2 AS rn
FROM
    sys.all_columns AS SA
) AS D(rn) 
WHERE D.rn > ?

不会飞。相反,您必须返回到Control流并选择数据流,右键单击并选择Properties。在数据流窗口中,转到表达式并单击省略号(.)

将有一个名为“查找任务”的属性。为使用表达式的变量赋值,使其全部是动态的,瞧,最大it为6,我只找到3次匹配。

最后,部分缓存可能是你想要的,也可能不是你想要的。这是一个实际的查找设置,它控制如何平衡查找数据的成本和本地缓存数据的成本。完整缓存将将适用范围的所有指定列删除到内存中,这就是为什么只需要指定所需的列的原因。如果你能把它写成几根瘦削的柱子,即使它是几百万行,你也可能不会感到疼痛。

票数 2
EN

Stack Overflow用户

发布于 2013-10-24 19:53:28

人为的例子:

  1. 在运行时收集句点最小值和最大值,并将它们存储在两个变量中,PeriodMinimum和PeriodMaximum (我假设这是一个范围,我将在最后讨论替代方案)。
  2. 将它们作为派生列添加到源流中。
  3. 在“查找编辑器”的“高级”选项卡下,使用一个自定义查询(人工设置的示例):选择“查找”,“从引用中选择值在哪里?然后呢?
  4. 单击“参数”按钮,适当地使用输入列。

如果你想要随机选择周期(3,6,10)而不是一个范围,那么你必须做一些更人为的事情.

  1. 创建多变量,Period1,2,3.并将默认值设置为-1或某个值,该值不是有效期间。
  2. 根据需要使用要筛选的句点填充这些变量。
  3. 在自定义查询中,使用SELECT查找,值从引用中的句点=?或周期=?或周期=?.
  4. 使用输入列设置每个参数。

总之,通常,当您想要基于运行时数据的动态查找查询时,请使用带有参数的自定义查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19574737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档