介绍

在本文中我们将利用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” 选项允许数据流任务执行一次迭代,一次迭代执行完成以后会中断 .

让我们把每个步骤分解一下:

  1. “FOREACH Temperature File” Foreach loop 进入$Project::SourceFolder  项目参数指定的目录 .
  2. 每个CSV文件被辨识,一个文件一次. 读入到 User::SourceFileName 变量.
  3. User::SourceFileName 操控 “FFCM Temperature and Humidity” 连接管理器的 ConnectionString 属性
  4. “DFT Stage Temperature and Humidity”数据流任务一次执行个 CSV 文件.
  5. T“FFSrc Temperature and Humidity” 数据源适配器 连接 “FFCM Temperature and Humidity”连接管理器指定的CSV文件 .
  6. 数据被“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 (多文件导入)的更多相关文章

  1. [译]Stairway to Integration Services Level 12 - 高级日志配置

    介绍 本文中,我们将结合之前学习的时间冒泡,日志记录,以及复制模型.建立一个自定义的SSIS包日志模型. SSIS Task事件回顾    Reviewing SSIS Task Events 在做实 ...

  2. [译]Stairway to Integration Services Level 9 - Control Flow Task Errors

    介绍 在本文中,我们会实验 MaximumErrorCount和ForceExecutioResult 故障容差属性,并且还要学习Control Flow task errors, event han ...

  3. [译]Stairway to Integration Services Level 18 – 部署和执行

    介绍 在本文中,我们要创建一个SSIS Catalog 实例,部署我们的项目,并且运行 weather data loader 包. SSIS 2012 部署模型   SSIS 2012 Deploy ...

  4. [译]Stairway to Integration Services Level 15 – SSIS 参数回顾

    介绍 在本文中我们会研究SSIS变量姐妹: SSIS 变量. 我们会演示参数配置,通过包参数管理动态属性值,然后会演示SSIS包执行的时候参数怎么被配置的. SSIS Parameters 101 S ...

  5. [译]Stairway to Integration Services Level 13 - SSIS 变量回顾

    介绍 在前一篇中我们组合了已经学过的事件冒泡 event bubbling, 日志记录 logging, 和父子模型 Parent-Child pattern 建立了自定义的SSIS包日志记录. 本文 ...

  6. [译]Stairway to Integration Services Level 11 - 日志配置

    介绍 在前一个章节我们讨论了事先行为,分享了如何操作默认的行为和时间冒泡,并且介绍了父子模型. 本文中,我们会配置SSIS日志. 进行简单及高级日志配置,存储,和检索的实验.并且生成自定义日志信息. ...

  7. [译]Stairway to Integration Services Level 8 - SSIS 工作流管理高级

    介绍 在前两个章节我们,建立了一个新的SSIS包,简单的使用了一下scripting还有优先约束,并且测试了MaxConcurrentExecutables 属性.  同时实验了  “On Succe ...

  8. [译]Stairway to Integration Services Level 7 - SSIS 工作流管理中级

    介绍 前一个章节我们对SSIS的优先约束做了初步了解,并且实验了MaxConcurrentExecutables 包属性的设置. 本文将测试“On Success”, “On Completion”, ...

  9. [译]Stairway to Integration Services Level 6 - SSIS 工作流管理基础

    简介 在之前的章节中,我们学习了增量载入数据. 本文中.我们通过优先约束(Precedence Constraints)来管理SSIS的工作流. 添加一个SSIS包 图 1 将新建的Package1. ...

随机推荐

  1. Linux系统环境变量的四个配置文件的关系

    Linux系统环境变量配置有四个文件分别是: /etc/environment,/etc/profile,/etc/bash.bashrc,~/.bashrc 各配置文件意义 /etc/environ ...

  2. 为SQL Server 增加链接到SQL Server 的链接服务器

    整体的分析一下好有一个思路.我们的目的是完成一个到远程服务器的链接. 第一:我们要知道这台服务器在哪(也就是要知道它的IP地址,如果是在同一个网络中知道它的计算机名也是可以的.因为一台服务器上可以安装 ...

  3. Linux ---> 监控JVM工具

    Linux ---> 监控JVM工具shkingshking 发布时间: 2013/10/10 01:27 阅读: 2642 收藏: 26 点赞: 1 评论: 0 JDK内置工具使用 jps(J ...

  4. HDU 3336 Count the string

    题解:利用next数组来保存前缀位置,递推求解. #include <cstdio> #include <cstring> char pat[200005]; int next ...

  5. 男装电子零售商East Dane即将面世_衣装_YOKA时尚网

    男装电子零售商East Dane即将面世_衣装_YOKA时尚网 男装电子零售商East Dane即将面世

  6. Mysql文件太大导入失败解决办法总结

    Mysql文件太大导入失败解决办法总结 在使用phpmyadmin导入数据库的时候可能会碰到由于数据库文件太大而无法导入的问题! 英文提示如下:File exceeds the maximum all ...

  7. 在SSIS包中使用 Checkpoint从失败处重新启动包

    使用SSIS做ETL的过程中会遇到各种各样的错误,对于一些大数据量的Job失败以后我们不希望重新运行,因为重新运行的时间开销是非常大的,我们只希望从失败的部分开始运行,这样可以省去很多的时间. SSI ...

  8. 在基类中的析构函数声明为virtual

    #include <iostream> using namespace std; class Father { public: ~Father() { cout << &quo ...

  9. 反射,得到Type引用的三种方式

    1.使用System.Object.GetType()得到Type引用 使用一个SportsCar实例得到类型信息 SportsCar sc=new  SportsCar(); Type t=sc.G ...

  10. U3d 手游优化概述

    移动平台瓶颈 体积小 芯片要求改 功耗小 影响计算系能 带宽小 传输方面受限 性能优化 资源方面 美术方面 自带地形(地形是非常占用资源的) a.控制地形的分辨率 b.地形高度图尺寸小于257 c.地 ...