gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:37:03 26 4
gpt4 key购买 nike

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

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

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

最佳答案

不要在下拉列表中使用表选择器,除非您需要每一行中的每一列,否则您不应该这样做,而是编写查询以仅拉回匹配或扩充现有数据所需的列。在您的情况下,您将需要添加一个有点挑剔的过滤器。
我发现的最佳方法是在字符串类型的变量中编写查找查询。在其中,我将构建查询并应用所需的过滤器。下面,你会看到我定义了两个变量。一个 int 将用作我的过滤器,然后是使用它的查询本身。
enter image description here
我的 SourceQuery 变量上的表达式是

"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]
我的数据流看起来像
enter image description here
我有我的来源,它进行了查找,并根据匹配的结果转到两个存储桶之一。我的源查询只生成数字 1 到 10,查找是生成从 2 到 20 的偶数的查询。
在设计时,该查询看起来像
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 拆分
enter image description here
目标当然是使查找查询采用一个参数,如源组件之一,但您很快就会发现
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 > ?
不会飞。相反,您必须返回到控制流并选择数据流,右键单击并选择属性。在数据流的窗口中,转到表达式并单击省略号 (...)
enter image description here
将有一个属性命名为您的查找任务。分配使用表达式的变量使其全部动态化,瞧,最大值为 6 我只找到 3 个匹配项
enter image description here
最后要注意的是,部分缓存可能是您正在寻找的,也可能不是。这是一个实际的查找设置,用于控制它如何平衡查找数据的成本与在本地缓存它的成本。完整缓存会将适用范围的所有指定列放入内存中,这就是您只想指定所需列的原因。如果你能把它缩小到几个细小的列,即使它有数百万行,你可能不会感到痛苦。

关于ssis - 将查找转换部分缓存限制为加载的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19574737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com