[译]Stairway to Integration Services Level 16 – Flexible Source Locations (多文件导入)
介绍
在本文中我们将利用SSIS参数,变量 以及 Foreach Loop Container 从多个源动态导入数据.
开始前我们先下载一些数据.WeatherData_Dec08_Apr09.zip 解压以后我们看到有三个目录数据

Figure 1
每个月年目录包含一个子目录 TH.每个TH 目录包含文件 sensor1-all.csv. 这些文件是 December 2008 至 April 2009 温度和湿度数据. February 2009 的文件包括December 2008 至February 2009 的数据, April 2009 的文件包括December 2008 至 April 2009 每个文件开始如下
Date,Time,Min T,Max T,Average T,Min H,Max H,Average H,Comfort zone,Min DP,Max DP,Average DP,Min HI,Max HI,Average HI,Low Batt
2008-12-25,19:00,8.5,10.9,9.71,32,36,33,2,-6.0,-5.0,-5.71,--,--,--
2008-12-25,20:00,6.3,8.5,7.21,36,40,38,2,-6.0,-5.0,-5.95,--,--,--
2008-12-25,21:00,5.3,6.7,6.37,39,43,40,0,-6.0,-6.0,-6.00,--,--,--
Listing 1
因为三个文件有冗余记录,所以我们要用增量导入策略. 可以查看以前的文章:
[译]Stairway to Integration Services Level 3 - 增量导入数据
[译]Stairway to Integration Services Level 4 - 增量更新数据
[译]Stairway to Integration Services Level 5 - 增量删除数据
因为我们的数据是向前滚动 “forward-only”的, 没有更新或者删除. 所以我们只要更新新行就可以. 我们会采用这篇文章的方式导入数据. [译]Stairway to Integration Services Level 3 - 增量导入数据
打开 LoadWeatherData.dtsx SSIS 包 :

Figure 4
双击“DFT Stage Temperature and Humidity” 进去:

Figure 5
把 FFSrc Temperature and Humidity” 与“OLEDest Stage Temperature” 之间的data flow path 删掉 :

Figure 6
再拖个 Lookup Transformation :

Figure 7
把 “FFSrc Temperature and Humidity”连到 Lookup transformation :

Figure 8
打开 Lookup Transformation Editor. “Specify how to handle rows with no matching entries” 下拉框选择 “Redirect rows to no match output”

Figure 9
点击 Connection 页.选择WeatherData数据库的连接. 点 “Use results of a SQL query” 输入以下查询语句:
Select [Date], [Time]
From dbo.StageTemperature
Listing 3

Figure 10
点击 Columns 页,映射如下 :

Figure 11
注: 如果我们选择 table or view, 那整个表都会载入到内存.. 如果我们用 OLE DB Connection Manager 连接类型并使用 Full Cache 模式, 缓存会在 Data Flow Task 的 PreExecute 事件开始.
从Lookup transformation 拖一个output 到 “OLEDest Stage Temperature”

Figure 12
选择 “Lookup No Match Output” 并确定:

Figure 13
先把StageTemperature 清一下
Use WeatherData
go
Truncate Table StageTemperature
Listing 2
执行一下包,你的数据流看着应该同下面一样:

Figure 14
再次运行, 现在应该和下图一样了 :

Figure 15
一开始因为没有记录所以把106条记录都导进去了,但是第二次运行以后进行匹配. 因为没新数据.所以导入数量为0
循环 Loop It!
接着我们要改动一下 “FFCM Temperature and Humidity” 连接管理器
首先把包参数里面的 SourceFilePath 删除:

Figure 16
接着,打开项目参数Project.params :

Figure 17
添加如下变量:
- Name: SourceFolder
- Data type: String
- Value: < WeatherData_Dec08_Apr09.zip 的解压目录>
- Sensitive: False
- Required: False
- Description: The folder containing the weather data files.

Figure 18
在 LoadWeatherData.dtsx 里拖一个 Foreach Loop Container:

Figure 19
在吧 “DFT Stage Temperature and Humidity” 拖进去,然后把Foreach Loop Container 改名为 “FOREACH Temperature File”

Figure 21
双击“FOREACH Temperature File” 进行配置
Collection 里面Enumerator属性选择“Foreach File Enumerator”
Expressions 选择 Directory 并且值设置为 项目变量 SourceFolder
把 Files 值由“*.*”改为“*.csv” 来设置美剧只返回 CSV (comma-separated values) 文件.
然后选择 “Fully qualified” 选项,这样可以接收完整的CSV文件路径 .
勾选“Traverse subfolders” 这样可以递归查询目录:

Figure 27
这里的 Variable Mappings 是干嘛的? 由于Foreach File Enumerator 会递归循环我们指定的目录 ,一次返回一个CSV文件的路径,然后执行一次循环. 我们需要一个变量存储CSV文件的路径,并且逐步加载 .点击 “<New Variable…>” :

Figure 28
变量名 SourceFileName.

Figure 29
索引值默认为0

Figure 30
最后一部是改变“FFCM Temperature and Humidity” 平面文件连接管理器的 ConnectionString 属性 选择新的变量 @[User::SourceFileName]

Figure 34
在“DFT Stage Temperature and Humidity” 上加个断点,方便我们测试 :

Figure 35
选择 “Break when the container receives the OnPostExecute event” 选项:

Figure 36
选择“Break when the container receives the OnPostExecute event” 选项允许数据流任务执行一次迭代,一次迭代执行完成以后会中断 .
让我们把每个步骤分解一下:
- “FOREACH Temperature File” Foreach loop 进入$Project::SourceFolder 项目参数指定的目录 .
- 每个CSV文件被辨识,一个文件一次. 读入到 User::SourceFileName 变量.
- User::SourceFileName 操控 “FFCM Temperature and Humidity” 连接管理器的 ConnectionString 属性
- “DFT Stage Temperature and Humidity”数据流任务一次执行个 CSV 文件.
- T“FFSrc Temperature and Humidity” 数据源适配器 连接 “FFCM Temperature and Humidity”连接管理器指定的CSV文件 .
- 数据被“DFT Stage Temperature and Humidity” 数据流任务传输 .
让我们实际做一遍:
按F5

Figure 37
因为是在 PostExecute 事件中断,所以 “DFT Stage Temperature and Humidity” 数据流任务已经执行. 执行结果如下:

Figure 38
因为有106条数据之前已经存在表中,所以这次只导入了 1,877 条.
查看下变量窗口 (Debug -> Windows –> Locals )
查看User::SourceFilePath 变量,注意 sensro1-all.csv 在 Apr09目录里面:

Figure 40
继续运行,因为Dec08 的文件已经到如果,所以这次没有记录被导入到表中 .

Figure 41
再次看 Locals窗口 User::SourceFilePath 变量已经变了

Figure 42
直到第三次中断以后,整个包执行完成.
原文地址 : http://www.sqlservercentral.com/articles/Integration+Services+(SSIS)/106587/
项目文件 : My_First_SSIS_Project_After_Step_16.7z
[译]Stairway to Integration Services Level 16 – Flexible Source Locations (多文件导入)的更多相关文章
- [译]Stairway to Integration Services Level 12 - 高级日志配置
介绍 本文中,我们将结合之前学习的时间冒泡,日志记录,以及复制模型.建立一个自定义的SSIS包日志模型. SSIS Task事件回顾 Reviewing SSIS Task Events 在做实 ...
- [译]Stairway to Integration Services Level 9 - Control Flow Task Errors
介绍 在本文中,我们会实验 MaximumErrorCount和ForceExecutioResult 故障容差属性,并且还要学习Control Flow task errors, event han ...
- [译]Stairway to Integration Services Level 18 – 部署和执行
介绍 在本文中,我们要创建一个SSIS Catalog 实例,部署我们的项目,并且运行 weather data loader 包. SSIS 2012 部署模型 SSIS 2012 Deploy ...
- [译]Stairway to Integration Services Level 15 – SSIS 参数回顾
介绍 在本文中我们会研究SSIS变量姐妹: SSIS 变量. 我们会演示参数配置,通过包参数管理动态属性值,然后会演示SSIS包执行的时候参数怎么被配置的. SSIS Parameters 101 S ...
- [译]Stairway to Integration Services Level 13 - SSIS 变量回顾
介绍 在前一篇中我们组合了已经学过的事件冒泡 event bubbling, 日志记录 logging, 和父子模型 Parent-Child pattern 建立了自定义的SSIS包日志记录. 本文 ...
- [译]Stairway to Integration Services Level 11 - 日志配置
介绍 在前一个章节我们讨论了事先行为,分享了如何操作默认的行为和时间冒泡,并且介绍了父子模型. 本文中,我们会配置SSIS日志. 进行简单及高级日志配置,存储,和检索的实验.并且生成自定义日志信息. ...
- [译]Stairway to Integration Services Level 8 - SSIS 工作流管理高级
介绍 在前两个章节我们,建立了一个新的SSIS包,简单的使用了一下scripting还有优先约束,并且测试了MaxConcurrentExecutables 属性. 同时实验了 “On Succe ...
- [译]Stairway to Integration Services Level 7 - SSIS 工作流管理中级
介绍 前一个章节我们对SSIS的优先约束做了初步了解,并且实验了MaxConcurrentExecutables 包属性的设置. 本文将测试“On Success”, “On Completion”, ...
- [译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础
简介 在之前的章节中,我们学习了增量载入数据. 本文中.我们通过优先约束(Precedence Constraints)来管理SSIS的工作流. 添加一个SSIS包 图 1 将新建的Package1. ...
随机推荐
- AndroidStudio 使用Hide API
1.反射法 速度慢 2.生成新的android.jar 通常需要隐藏API的地方并不多 不需要整个都编译 而且编译出的framework.jar也不全 缺少java.*和javax.* 所以只把需要的 ...
- 由Mifare 1卡破解带来的危险以及应对方法
今年年初以来,一个消息的传出震惊了整个IC卡行业.最近,德国和美国的研究人员成功地破解了NXP的Mifare1芯片的安全算法.Mifare1芯片主要用于门禁系统访问控制卡,以及一些小额支付卡,应用范围 ...
- 一步一步学习SignalR进行实时通信_2_Persistent Connections
原文:一步一步学习SignalR进行实时通信_2_Persistent Connections 一步一步学习SignalR进行实时通信\_2_Persistent Connections Signal ...
- 让.net程序自动运行在管理员权限下
原文:让.net程序自动运行在管理员权限下 如何让.net程序自动运行在管理员权限下 VS2010 c# 编译的WINFORM程序 在Win7 以管理员身份运行 windows 7和vista提高的系 ...
- java类的结构(属性、方法、构造函数)
一.类的定义形式类定义的一般形式如下 [类定义修饰符] class <类名> { //类体 [成员变量声明] [构造函数] [成员方法] } 前面说过,在描述java语法时,方括号中 ...
- Duanxx的图像处理学习: 透视变换(一)
当人用眼睛看事物的时候,会感觉到近处的东西是比远处的东西要大一些的,通俗的说,这就是透视. 总的来说.透视变换是将3D的世界转换到2D图像上的一种手段,人的视觉系统和摄像头视觉系统也是基于这一工作原理 ...
- Objective-C中NSArray和NSMutableArray的基本用法
/*---------------------NSArray---------------------------*/ //创建数组 NSArray *array1 = [NSArray arrayW ...
- PHP中递归函数的一个常见逻辑问题
首先.我们得知道递归函数是什么东西.通俗来讲也就是自己调用自己本身的函数. 如今须要设计一段代码.解决1到10叠加的问题. 代码A: <?php //递归函数 $num=10; function ...
- chrome 、 火狐等浏览器对空格符 解析不同,页面显示不一致
最近初学web,从头开始,菜鸟级别,遇到的小问题记录下来. 网上资料说 空格在ie.firefox.chrome浏览器上显示的效果不太一样,主要是前面的空格宽度不同,这可能是因为不同的浏览器会有不同的 ...
- 简单的web三层架构系统【第三版】
今天是第三版,和前几天一样今天还是要对代码进行优化,三层架构是一种思想,具体能不能使得整个系统安全和高性能,还是要看代码编写的是否合理,逻辑性是否严谨. 昨天偶然间看到别人写的三层架构中,竟然没有在方 ...