Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >加速SSIS包(插入和更新)

加速SSIS包(插入和更新)
EN

Stack Overflow用户
提问于 2012-11-19 13:36:45
回答 1查看 2.2K关注 0票数 4

这里引用了Twitter上的#sqlhelp (解决了--见文章末尾的解决方案)。

我正在尝试加速一个SSIS包,该包插入2 900万行新数据,然后用另外2列更新这些行。到目前为止,包循环遍历包含文件的文件夹,将平面文件插入数据库,然后执行更新并存档文件。添加(感谢@billinkc):SSIS顺序是Foreach循环、数据流、执行SQL任务、文件任务。

不需要很长时间的内容:循环,文件移动和截断表(工作台)。什么需要很长时间:插入数据,运行下面的语句:

代码语言:javascript
代码运行次数:0
复制
UPDATE dbo.Stage
SET Number = REPLACE(Number,',','')
## Heading ##
-- Creates temp table for State and Date
CREATE TABLE #Ref (Path VARCHAR(255))
INSERT INTO #Ref VALUES(?)

-- Variables for insert
DECLARE @state AS VARCHAR(2)
DECLARE @date AS VARCHAR(12)

SET @state = (SELECT SUBSTRING(RIGHT([Path], CHARINDEX('\', REVERSE([Path]))-1),12,2) FROM #Ref)
SET @date = (SELECT SUBSTRING(RIGHT([Path], CHARINDEX('\', REVERSE([Path]))-1),1,10) FROM #Ref)

SELECT @state
SELECT @date

-- Inserts the values into main table
INSERT INTO dbo.MainTable (Phone,State,Date)
SELECT d.Number, @state, @date
FROM Stage d

-- Clears the Reference and Stage table
DROP TABLE #Ref
TRUNCATE TABLE Stage

请注意,我曾在insert和Max insert提交大小上处理过每批增加行的操作,但这两种操作都没有影响包的速度。

解决并添加:

对于那些对数字感兴趣的人: OP包的时间是11.75分钟;使用William的技术(见下面这个),它下降到9.5分钟。当然,有2900万行,在一个速度较慢的服务器上,这是可以预期的,但希望这能向您展示实际数据的有效性。关键是尽可能多地保持数据流任务上发生的进程,因为更新数据(在数据流之后)占用了明显的一部分时间。

希望这能帮助其他有类似问题的人。

更新二:我添加了一个IF语句,它将它从9分钟减少到4分钟。执行SQL任务的最后代码:

代码语言:javascript
代码运行次数:0
复制
-- Creates temp table for State and Date
CREATE TABLE #Ref (Path VARCHAR(255))
INSERT INTO #Ref VALUES(?)

DECLARE @state AS VARCHAR(2)
DECLARE @date AS VARCHAR(12)
DECLARE @validdate datetime

SET @state = (SELECT SUBSTRING(RIGHT([Path], CHARINDEX('\', REVERSE([Path]))-1),12,2) FROM #Ref)
SET @date = (SELECT SUBSTRING(RIGHT([Path], CHARINDEX('\', REVERSE([Path]))-1),1,10) FROM #Ref)
SET @validdate = DATEADD(DD,-30,getdate())

IF @date < @validdate
BEGIN
    TRUNCATE TABLE dbo.Stage
    TRUNCATE TABLE #Ref
END
ELSE
BEGIN
-- Inserts new values
INSERT INTO dbo.MainTable (Number,State,Date)
SELECT d.Number, @state, @date
FROM Stage d

-- Clears the Reference and Stage table after the insert
DROP TABLE #Ref
TRUNCATE TABLE Stage
END
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-19 14:00:43

据我所知,您正在读取平面文件中的29,000,000行,并将它们写入一个暂存表中,然后运行一个sql脚本,该脚本在暂存表中更新(读/写)相同的29,000,000行,然后将这29,000,000条记录(从暂存到写入)移动到最后一个表。

您不能从平面文件中读取、使用SSIS转换来清理数据并添加两个额外的列,然后直接写入最后一个表。您将只在每组不同的数据上工作一次,而不是处理进程所做的三次(如果计算为不同的读写次数则为六次)?

我将更改您的数据流,以便在处理所需项时进行转换,并将其直接写入我的最后一个表。

编辑

从问题中的SQL中,您似乎正在通过从PHONE字段中移除逗号来转换数据,然后从当前处理的文件路径的特定部分检索状态和日期,然后将这三个数据点存储到NAT表中。这些事情可以通过数据流中的派生列转换来完成。

对于State和Date列,设置两个名为State和Date的新变量。使用变量定义中的表达式将它们设置为正确的值(就像在SQL中所做的那样)。当Path变量更新(在您的循环中,我假设)。状态变量和日期变量也将更新。

在派生列转换中,将State变量拖到表达式字段中,并创建一个名为State的新列。

重复约会。

对于PHONE列,在派生列transforamtion中创建如下表达式:

替换(电话、“”)

将派生列字段设置为替换“Phone”

对于输出,创建NAT表的目标,并将数据流中的Phone、State和Date列链接到NAT表中的相应列。

如果输入中有其他列,则可以选择不从源引入这些列,因为从原始数据看,您只对电话列进行操作。

/edit

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

https://stackoverflow.com/questions/13462681

复制
相关文章
jQuery练习——下拉菜单
实现效果:当鼠标移到不同的一级菜单,会显示相应的二级菜单,鼠标移走,二级菜单消失。
颜颜yan_
2022/12/01
27K0
jQuery练习——下拉菜单
jQuery下拉菜单经典案例
jQuery下拉菜单经典案例  源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <
红目香薰
2022/11/29
11.1K0
jQuery下拉菜单经典案例
javascript下拉菜单代码(用jquery做下拉菜单)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126047.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/01
11.4K0
javascript下拉菜单代码(用jquery做下拉菜单)
jQuery 动态绑定
这是在项目过程中所遇到的一个问题,给 JS 动态生成的元素绑定事件失效,代码如下所示:
Nian糕
2018/08/21
2K0
jQuery 动态绑定
jquery事件绑定
.bind()   为一个元素绑定一个元素处理程序。   .bind(eventType[,eventData],handler(eventObject))     eventType       一个包含一个或多个DOM事件类型的字符串,或自定义事件的名称。     eventData       一个对象,它包含的数据键值对映射将被传递给事件处理程序。     handler(eventObject)       每当事件
用户1197315
2018/01/19
3.6K0
jQuery预绑定
文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书
Tyan
2022/05/09
5670
jquery 绑定click事件
有时候需要获得匹配元素相对于其同胞元素的索引位置,此时可以用index()方法获取
Devops海洋的渔夫
2019/05/30
4.5K0
jQuery on绑定事件问题
以前没注意,最近在使用on绑定事件时发现,通过for循环绑定动态绑定时,多个元素最终绑定的都是最后一次事件,不知道用while是不是也是一样,谁有清楚这种现象也可以说一下原因!!!
sucl
2019/08/07
2.5K0
jQuery简单实现二级下拉菜单
下拉菜单原理:滑过一级的li才让第二层的li显示,利用jq简单的抓取元素,让一级下的二级li显示就能解决,使用jq比css的思路更加明确!
十月梦想
2018/08/29
4.3K0
jquery 使用 unbind 解决重复绑定执行事件
在jquery监听click事件的时候会出现点击一次没有重复,点击第二次就重复的情况。出现这个问题的原因是之前的click事件被绑定后,并没有解绑。
Devops海洋的渔夫
2019/08/02
1.6K0
jquery绑定事件的坑,重复绑定问题
我实现点击table表格中的删除按钮,找到当前按钮的祖先元素tr 然后删除该行,但是我首先点击删除的时候要先弹出提示框,是否要下载,这时在点击删除按钮删除,之前没有考虑到事件重复绑定问题,所以每次点击删除的时候就会多选择几行,之后选择的越来越多,经过网友解答,成功解决,先把重复绑定的删除的click事件解绑再继续绑定,就没问题。
蓓蕾心晴
2018/07/24
2.4K0
第72天:jQuery实现下拉菜单
1、块元素居中:给块元素本身设置:margin:0 auto;,块元素必须设置宽度
半指温柔乐
2018/09/11
1.9K0
JQuery 事件绑定不生效
一个同时问我,JQuery事件绑定为什么不生效,最好通过查找,发现了问题。 一般而言,JQuery事件绑定不生效,是一些新手经常遇到的问题,其实都是简单的问题,大概分两种情况。 先上代码,以下两个button的事件绑定都不生效。
用户3158888
2019/05/29
2.6K0
Jquery获取DOM绑定事件
获取到当前正在执行的事件: $('#testDive').bind('click', function(event){alert('event: ' + event.type)}); 获取所有绑定事件: $._data(document.getElementById('testDive'), 'events');
就只是小茗
2018/10/10
2.2K0
jquery 绑定回车(Enter )事件
如果想模拟Tab键,只要写成 if (window.event.keyCode==13) window.event.keyCode=9 就行了,它会跳到另一个元素上。
Yiiven
2022/12/15
2.8K0
js_jQuery【下拉菜单联动dom操作】
下拉菜单联动dom操作案例  源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </hea
红目香薰
2022/11/29
14.1K0
js_jQuery【下拉菜单联动dom操作】
使用 jQuery 对下拉菜单 SELCET 进行增加、删除和修改的操作
jQuery 获取下拉菜单 SELECT 选择的 Text 和 Value: //获取Select选择的Text var checkText=jQuery("#select_id").find("option:selected").text(); //获取Select选择的option Value var checkValue=jQuery("#select_id").val(); //获取Select选择的索引值 var checkIndex=jQuery("#select_id ").get(
Denis
2023/04/15
1.3K0
jQuery 事件绑定 和 JavaScript 原生事件绑定
jQuery 中提供了四种事件监听绑定方式,分别是 bind、live、delegate、on,
Krry
2018/09/10
5.7K0
jQuery 事件绑定 和 JavaScript 原生事件绑定
使用jQuery.data()查看元素上绑定的事件
最近遇到一个诡异的问题,发现我添加在一个HTMLElement片段上面的事件绑定,会在后续的流程中,无故丢失了。但是,我不知道它是什么时候丢失的。
libo1106
2018/08/08
1.9K0
前端基础-jQuery简单事件绑定
第4章 简单事件绑定 所有事件在jquery中都是jquery对象的方法 click(handler) 单击事件 mouseover(handler) 鼠标悬浮事件 mouseout(handler) 鼠标离开事件 ... <input type="button" value="我是一个按钮" id="btn"> <script> $(function(){ $('#btn').click(function(){ alert("来了老弟~"); }
cwl_java
2020/03/26
6900

相似问题

使用jquery重新绑定Kendo下拉菜单

20

无法绑定jquery下拉菜单

10

在ruby on rails中使用jQuery绑定下拉菜单

10

使用jquery绑定或重新加载Select 2下拉菜单

20

在asp.net中使用下拉菜单绑定图像的jQuery

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文