使用 Integration Services 将数据加载到 Parallel Data Warehouse

提供使用 SQL Server Integration Services (SSIS) 包将数据加载到 SQL Server Parallel Data Warehouse 的参考和部署信息。

基础知识

Integration Services 是 SQL Server 的组件,用于高性能提取、转换和加载 (ETL) 数据,通常用于填充和更新数据仓库。

PDW 目标适配器是一个 Integration Services 组件,可用于使用 Integration Services dtsx 包将数据加载到 PDW 中。 在分析平台系统 (PDW) 的包工作流中,可以加载和合并来自多个源的数据,并将数据加载到多个目标。 加载将在包内和同时运行的多个包中并行发生,直到在同一工具上并行运行最多 10 个加载。

除了本主题中所述的任务之外,还可以使用 Integration Services 的其他功能在将数据加载到数据仓库之前筛选、转换、分析和清理数据。 还可以通过运行 SQL 语句、运行子包或发送电子邮件,增强包的工作流。

有关 Integration Services 的完整文档,请参阅 SQL Server Integration Services

运行 Integration Services 包的方法

使用以下方法之一运行 Integration Services 包。

从 SQL Server 2008 R2 Business Intelligence Development Studio (BIDS) 运行

若要从 BIDS 中运行包,请右键单击包并选择“执行包”

默认情况下,BIDS 使用 64 位二进制文件运行包。 这由 Run64BitRuntime 包属性确定。 若要设置此属性,请转到“解决方案资源管理器”,右键单击项目并选择“属性”。 在“Integration Services 属性页”上,转到“配置属性”并选择“调试”。 将在“调试选项”下看到 Run64BitRuntime 属性。 要使用 32 位运行时,请将此项设置为 False。 要使用 64 位运行时,请将此项设置为 True

从 SQL Server 2012 SQL Server Data Tools 运行

若要从 SQL Server Data Tools 中运行包,请右键单击包并选择“执行包”

从 PowerShell 运行

要从 Windows PowerShell 运行包,请使用 dtexec 实用工具:dtexec /FILE <packagePath>

例如: dtexec /FILE "C:\Users\User1\Desktop\Package.dtsx"

从 Windows 命令提示符运行

要从 Windows 命令提示符运行包,请使用 dtexec 实用工具:dtexec /FILE <packagePath>

例如:dtexec /FILE "C:\Users\User1\Desktop\Package.dtsx"

数据类型

使用 Integration Services 将数据从数据源加载到 SQL Server PDW 数据库时,数据首先从源数据映射到 Integration Services 数据类型。 这允许来自多个数据源的数据映射到一组通用的数据类型。

然后将数据从 Integration Services 映射到 SQL Server PDW 数据类型。 对于每个 SQL Server PDW 数据类型,下表列出了可转换为 SQL Server PDW 数据类型的 Integration Services 数据类型。

PDW 数据类型 映射至 PDW 数据类型的 Integration Services 数据类型
BIT DT_BOOL
BIGINT DT_I1、DT_I2、DT_I4、DT_I8、DT_UI1、DT_UI2、DT_UI4
CHAR DT_STR
DATE DT_DBDATE
DATETIME DT_DATE、DT_DBDATE、DT_DBTIMESTAMP、DT_DBTIMESTAMP2
DATETIME2 DT_DATE、DT_DBDATE、DT_DBTIMESTAMP、DT_DBTIMESTAMP2
DATETIMEOFFSET DT_WSTR
DECIMAL DT_DECIMAL、DT_I1、DT_I2、DT_I4、DT_I4、DT_I8、DT_NUMERIC、DT_UI1、DT_UI2、DT_UI4、DT_UI8
FLOAT DT_R4、DT_R8
INT DT_I1、DTI2、DT_I4、DT_UI1、DT_UI2
MONEY DT_CY
NCHAR DT_WSTR
NUMERIC DT_DECIMAL、DT_I1、DT_I2、DT_I4、DT_I8、DT_NUMERIC、DT_UI1、DT_UI2、DT_UI4、DT_UI8
NVARCHAR DT_WSTR、DT_STR
REAL DT_R4
SMALLDATETIME DT_DBTIMESTAMP2
SMALLINT DT_I1、DT_I2、DT_UI1
SMALLMONEY DT_R4
TIME DT_WSTR
TINYINT DT_I1
VARBINARY DT_BYTES
VARCHAR DT_STR

对数据类型精度的有限支持

如果映射其中包含精度大于 28 的值的 DT_NUMERIC 或 DT_DECIMAL 输入列,PDW 将生成验证错误。

不支持的数据类型

SQL Server PDW 不支持以下 Integration Services 数据类型:

  • DT_DBTIMESTAMPOFFSET

  • DT_DBTIME2

  • DT_GUID

  • DT_IMAGE

  • DT_NTEXT

  • DT_TEXT

要将包含这些类型的数据的列加载到 SQL Server PDW 中,必须在数据流上游添加数据转换以将数据转换为兼容的数据类型。

权限

若要运行 Integration Services 加载包,需要:

  • 数据库的 LOAD 权限。

  • 目标表的适用 INSERT、UPDATE、DELETE 权限。

  • 如果使用暂存数据库,则为对暂存数据库的 CREATE 权限。 这用于创建临时表。

  • 如果不使用暂存数据库,则为对目标数据库的 CREATE 权限。 这用于创建临时表。

一般备注

当 Integration Services 包运行多个 SQL Server PDW 目标并且其中一个连接终止时,Integration Services 将停止将数据推送到所有 SQL Server PDW 目标。

限制和局限

对于 Integration Services 包,同一数据源的 SQL Server PDW 目标数受活动负载最大数目的限制。 该最大值是预先配置的,用户不可配置。

当包运行时,同一数据源的每个 Integration Services 包目标都计为一个负载。 例如,假定处于活动状态的加载的最大数目为 10。 如果该包尝试为相同数据源打开 11 个或更多的目标,则该包将不运行。

多个包可以同时运行,只要每个包所使用的处于活动状态的加载数目未超过该最大数目。 例如,如果处于活动状态的加载的最大数目为 10,则您可以同时运行两个包,每个包使用 10 个目标。 在一个包运行时,另一个包在加载队列中等待。

如果加载队列中加载的数目超过排队的最大加载数,则该包将不运行。 例如,如果每个设备的最大负载数为 10,并且每个设备的最大排队负载数为 40,则可以同时运行每 10 个打开目标的 5 个 Integration Services 包。 如果您尝试运行第 6 个包,该包将不会运行。

重要

将 SSIS 中的 OLE DB 数据源与 PDW 目标适配器结合使用时,如果源表包含具有 SQL 排序规则的 char 和 varchar 列,可能会导致数据损坏。 如果源表包含具有 SQL 排序规则的 char 或 varchar 列,则建议使用 ADO.NET 源。

锁定行为

使用 Integration Services 加载数据时,分析平台系统 (PDW) 使用行级锁来更新目标表中的数据。 这意味着,在更新每一行时,对于读取和写入操作,将锁定每一行。 在数据加载到临时表中时,将不锁定目标表中的行。

示例

A. 从平面文件进行简单加载

以下演练演示了使用 Integration Services 将平面文件数据加载到 SQL Server PDW 设备的简单数据加载。 此示例假定已在客户端计算机上安装 Integration Services,并且已安装 SQL Server PDW 目标,如上所述。

在此示例中,我们将加载到具有以下 DDL 的 Orders 表中。 Orders 表属于 LoadExampleDB 数据库。

CREATE TABLE LoadExampleDB.dbo.Orders (  
   id INT,  
   city varchar(25),  
   lastUpdateDate DATE,  
   orderDate DATE)  
;  

下面是加载数据:

id        city           lastUpdateDate     orderdate  
--------- -------------- ------------------ ----------  
1         Seattle        2010-05-01         2010-01-01  
2         Denver         2002-06-25         1999-01-02  

为准备加载,请创建包含加载数据的平面文件 exampleLoad.txt

id,city,lastUpdateDate,orderDate  
1,Seattle,2010-05-01,2010-01-01  
2,Denver,2002-06-25,1999-01-02  

首先,通过执行以下步骤创建 Integration Services 包:

  1. 在 SQL Server Data Tools (SSDT) 中,依次选择“文件”、“新建”和“项目”。 从列出的选项中选择“Integration Services 项目”。 给该项目命名为 ExampleLoad,然后单击“确定”

  2. 单击“控制流”选项卡,然后将“数据流任务”从“工具箱”拖动到“控制流”窗格。

  3. 单击“数据流”选项卡,然后将“平面文件源”从“工具箱”拖到“数据流”窗格。 双击刚刚创建的框以打开“平面文件源编辑器”

  4. 单击“连接管理器”,然后单击“新建”

  5. 在“连接管理器名称”框中,为连接输入易记的名称。 对于本示例,为Example Load Flat File CM

  6. 单击“浏览”,然后在本地计算机中选择 ExampleLoad.txt 文件。

  7. 由于平面文件包含带列名的行,请单击“第一个数据行中的列名”框。

  8. 单击左侧列中的“列”,并预览将加载的数据,以确保正确解释列名和数据。

  9. 在左侧列中,单击“高级”。 单击每个列名称以查看已与数据关联的数据类型。 在框中更改类型,以便加载数据的数据类型与目标列类型兼容。

  10. 单击“确定”保存连接管理器。

  11. 单击“确定”退出“平面文件源编辑器”

指定数据流的目标。

  1. 将“SQL Server PDW 目标”从“工具箱”拖到“数据流”窗格。

  2. 双击刚刚创建的框以加载“SQL Server PDW 目标编辑器”

  3. 单击“连接管理器”旁边的向下箭头。

  4. 选择“创建新连接”

  5. 使用特定于设备的信息填写服务器、用户、密码和目标数据库的信息。 (下面显示了示例。) 。

    对于 InfiniBand 连接,“服务器名称”:输入 <appliance-name>-SQLCTL01,17001。

    对于以太网连接,“服务器名称”:输入控制节点群集的 IP 地址,逗号,端口 17001。 例如 10.192.63.134,17001。

    用户user1:

    密码:password1

    “目标数据库”:LoadExampleDB

  6. 选择目标表:Orders

  7. 选择“追加”作为加载模式,然后单击“确定”

指定从源到目标的数据流。

  1. 在“数据流”窗格中,将绿色箭头从“平面文件源”框拖动到“SQL Server PDW 目标”框。

  2. 双击“SQL Server PDW 目标”框,以便再次看到“SQL Server PDW 目标编辑器”。 应会在左侧看到平面文件中的列名称,位于“未映射的输入列”下。 应该会在右侧“未映射的目标列”下的目标表中看到列名。 通过对“未映射的输入列”和“未映射的目标列”列表中的匹配列名称双击,或将其拖动到“映射列”框来映射列。 单击确定以保存设置。

  3. 单击“文件”菜单上的“保存”来保存包。

在计算机的 Integration Services 上运行包。

  1. 在 Integration Services“解决方案资源管理器”(右列)中,右键单击 Package.dtsx 并选择“执行”

  2. 包将运行,进度以及任何错误将显示在“进度”窗格中。 使用 SQL 客户端确认负载,或通过 SQL Server PDW 管理控制台监视负载。

另请参阅

创建使用 SSIS PDW 目标适配器的脚本任务
SQL Server Integration Services
设计和实现包 (Integration Services)
教程:使用向导创建基本包
入门 (Integration Services)
动态包生成示例
设计适用于并行的 SSIS 包(SQL Server 视频)
使用变更数据捕获改进增量加载
渐变维度转换
大容量插入任务