适用于 Parallel Data Warehouse 的 dwloader 命令行加载器

dwloader 是 Parallel Data Warehouse(PDW) 命令行工具,可将表行批量加载到现有表中。 加载行时,可以将所有行添加到表末尾(追加模式fastappend 模式)、追加新行并更新现有行(更新插入模式),或者在加载之前删除所有现有行,然后将所有行插入空表(重新加载模式)。

加载数据的过程

  1. 准备源数据。

    使用自己的 ETL 进程创建要加载的源数据。 必须设置源数据的格式,以匹配目标表的架构。 将源数据存储到一个或多个文本文件中,并将文本文件复制到加载服务器上的同一目录中。 有关加载服务器的信息,请参阅获取和配置加载服务器

  2. 准备加载选项。

    确定将使用哪些加载选项。 将加载选项存储在配置文件中。 将配置文件复制到加载服务器上的本地位置。 本主题介绍了 dwloader 配置选项。

  3. 准备加载失败选项。

    确定你要 dwloader 如何处理加载失败的行。 要执行加载,dwloader 首先将数据加载到暂存表中,然后将数据传输到目标表。 加载器将数据加载到暂存表中时,它会跟踪加载失败的行数。 例如,未正确设置格式的行将无法加载。 失败的行将复制到拒绝文件。 默认情况下,除非指定了不同的拒绝阈值,否则首次拒绝后加载中止。

  4. 安装 dwloader

    如果尚未安装 dwloader,请将 dwloader 安装到加载服务器上。

  1. 运行 dwloader

    登录到加载服务器,并使用相应的命令行选项运行可执行的 dwloader.exe

  2. 验证结果。

    你可以检查失败的行文件(使用 -R 指定)查看是否有任何行加载失败。 如果此文件为空,则已成功加载所有行。 dwloader 是事务性的,因此,如果任何步骤失败(除了拒绝的行意外),所有步骤都将回滚到其初始状态。

语法

dwloader.exe { -h }  
  
dwloader.exe   
    {  
        { -U login_name  -P password  }  
        | -W  
    }  
    [ -f parameter_file ]  
    [ -S target_appliance ]  
    { -T target_database_name . [ schema ] . table_name }   
    { -i source_data_location } [ <source_data_options> ]  
    { -R load_failure_file_name } [ <load_failure_options> ]  
    [ <loading_options> ]  
}  
  
<source_data_options> ::=  
{  
    [ -fh number_header_rows ]  
    [ < variable_length_column_options > | < fixed_width_column_options > ]  
    [ -D { mdy | myd | ymd | ydm | dmy | dym | custom_date_format } ]  
    [ -dt datetime_format_file ]  
}  
  
<variable_length_column_options> ::=  
{  
    [ -e character_encoding ]  
    -r row_delimiter   
    [ -s string_delimiter ]  
    -t field_delimiter   
}  
  
<fixed_width_column_options> ::=  
{  
    -w fixed_width_config_file   
    [ -e character_encoding ]   
    -r row_delimiter   
}  
  
<load_failure_options> ::=  
{  
    [ -rt { value | percentage } ]  
    [ -rv reject_value ]  
    [ -rs reject_sample_value ]  
}  
  
<loading_options> ::=  
{  
    [ -d staging_database_name ]  
    [ -M { append | fastappend | upsert -K merge_column [ ,...n ] | reload } ]  
    [ -b batchsize ]   
    [ -c ]  
    [ -E ]  
    [ -m ]  
    [ -N ]  
    [ -se ]
    [ -l ]   
}  

自变量

-h
显示有关使用加载器的简单帮助信息。 仅当未指定其他命令行参数时,帮助才会显示。

-Ulogin_name
具有执行加载的适当权限的有效 SQL Server 身份验证登录名。

-Ppassword
SQL Server 身份验证 login_name 的密码。

-W
使用 Windows 身份验证。 (不需要 login_namepassword。)

-fparameter_file_name
使用参数文件 parameter_file_name 替代命令行参数。 parameter_file_name 可以包含除u user_namepassword 以外的任何命令行参数。 如果在命令行和参数文件中指定了参数,则命令行将替代文件参数。

参数文件的每行包含一个没有 - 前缀的参数。

示例:

rt=percentage

rv=25

-Starget_appliance
指定将接收加载数据的 SQL Server PDW 设备。

对于 Infiniband 连接target_appliance 指定为 <appliance-name>-SQLCTL01。 要配置此命名连接,请参阅配置 InfiniBand 网络适配器

对于以太网连接,target_appliance 是控制节点群集的 IP 地址。

如果省略,dwloader 将默认设置为安装 dwloader 时指定的值。

-Ttarget_database_name。[架构]。table_name
目标表的三部分名称。

-Isource_data_location
要加载的一个或多个源文件的位置。 每个源文件都必须是文本文件或使用 gzip 压缩的文本文件。 只能将一个源文件压缩到每个 gzip 文件中。

要设置源文件格式:

  • 源文件必须按照加载选项设置格式。

  • 源文件中的每个行都包含一个表行的数据。 源数据必须与目标表的架构匹配。 列顺序和数据类型也必须匹配。 行中的每个字段都表示目标表中的一列。

  • 默认情况下,字段长度可变,并用分隔符分隔。 要指定分隔符类型,请使用 <variable_length_column_options> 命令行选项。 要指定固定长度字段,请使用 <fixed_width_column_options> 命令行选项。

要指定源数据位置,请执行以下操作:

  • 源数据位置可以是网络路径,也可以是加载服务器上的目录的本地路径。

  • 要指定目录中的所有文件,请输入目录路径,后跟 * 通配符。 加载器不会从源数据位置中的任何子目录中加载文件。 加载器在 gzip 文件中存在目录时出错。

  • 要指定目录中的某些文件,请使用字符和 * 通配符的组合。

要使用一个命令加载多个文件,请执行以下操作:

  • 所有文件必须存在于同一目录中。

  • 这些文件必须是所有文本文件、所有 gzip 文件或文本文本和 gzip 文件的组合。

  • 这些文件都不能包含标头信息。

  • 所有文件都必须使用相同的字符编码类型。 查看 -e 选项。

  • 所有文件都必须加载到同一个表中。

  • 所有文件将串联并加载,就像它们是一个文件一样,被拒绝的行将转到单个拒绝文件。

示例:

  • -i \\loadserver\loads\daily\*.gz

  • -i \\loadserver\loads\daily\*.txt

  • -i \\loadserver\loads\daily\monday.*

  • -i \\loadserver\loads\daily\monday.txt

  • -i \\loadserver\loads\daily\*

-Rload_failure_file_name
如果加载失败,dwloader 将存储加载失败的行,以及失败描述和名为 load_failure_file_name 的文件中的失败信息。 如果此文件已存在,dwloader 将覆盖现有文件。 发生第一次失败时会创建 load_failure_file_name。 如果所有行都成功加载,则不会创建 load_failure_file_name

-fhnumber_header_rows
source_data_file_name 开头要忽略的行数(行)。 默认值为 0。

<variable_length_column_options>
具有字符分隔的可变长度列的 source_data_file_name 的选项。 默认情况下,source_data_file_name 在可变长度列中包含 ASCII 字符。

对于 ASCII 文件,NULL 通过连续放置分隔符来表示。 例如,在竖线分隔的文件 ("|") 中,NULL 表示为 "||"。 在逗号分隔的文件中,NULL 表示为 ",,"。 此外,必须指定 -E (--emptyStringAsNull) 选项。 有关 -E 的详细信息,请参阅下文。

-echaracter_encoding
指定要从数据文件加载的数据的字符编码类型。 选项为 ASCII(默认值)、UTF8、UTF16 或 UTF16BE,其中 UTF16 为 little endian,UTF16BE 是 big endian。 这些选项不区分大小写。

-tfield_delimiter
行中每个字段(列)的分隔符。 字段分隔符是这些 ASCII 转义字符或 ASCII 十六进制值中的其中一个或多个。

名称 转义字符 十六进制字符
选项卡 \t 0x09
匹配回车符 (CR) \r 0x0d
换行 (LF) \n 0x0a
CRLF \r\n 0x0d0x0a
Comma ',' 0x2c
双引号 \" 0x22
单引号 \' 0x27

要在命令行上指定竖线字符,请使用双引号将其括起来 "|"。 这将避免命令行分析程序错误解释。 其他字符用单引号引起来。

示例:

-t "|"

-t ' '

-t 0x0a

-t \t

-t '~|~'

-rrow_delimiter
源数据文件的每一行的分隔符。 行分隔符是一个或多个 ASCII 值。

要将回车符 (CR)、换行符 (LF)或制表符指定为分隔符,你可以使用转义字符(\r、\n、\t)或其十六进制值(0x、0d、09)。 要将任何其他特殊字符指定为分隔符,请使用其十六进制值。

CR+LF 的示例:

-r \r\n

-r 0x0d0x0a

CR 的示例:

-r \r

-r 0x0d

LF 的示例:

-r \n

-r 0x0a

Unix 需要 LF。 Windows 需要 CR。

-sstring_delimiter
文本分隔的输入文件的字符串数据类型字段的分隔符。 字符串分隔符是一个或多个 ASCII 值。 它可以指定为字符(例如 -s *)或十六进制值(例如,双引号的 -s 0x22)。

示例:

-s *

-s 0x22

< fixed_width_column_options>
具有固定长度列的源数据文件的选项。 默认情况下,source_data_file_name 在可变长度列中包含 ASCII 字符。

当 -e 为 UTF8 时,不支持固定宽度列。

-wfixed_width_config_file
指定每列中的字符数的配置文件的路径和名称。 必须指定每个字段。

此文件必须驻留在加载服务器上。 此路径可以 UNC、相对路径或绝对路径。 fixed_width_config_file 中的每个行都包含一列的名称和该列的字符数。 每个列都有一行,如下所示,文件中的顺序必须与目标表中的顺序匹配:

column_name=num_chars

column_name=num_chars

固定宽度配置文件示例:

SalesCode=3

SalesID=10

source_data_file_name 中的示例行:

230Shirts0056

320Towels1356

在前面的示例中,第一个加载的行将具有 SalesCode='230' 和 SalesID='Shirts0056'。 第二个加载的行将具有 SalesCode='320' 和 SaleID='Towels1356'.。

有关如何在固定宽度模式下处理前导和尾随空格或数据类型转换的信息,请参阅 dwloader 的数据类型转换规则

-echaracter_encoding
指定要从数据文件加载的数据的字符编码类型。 选项为 ASCII(默认值)、UTF8、UTF16 或 UTF16BE,其中 UTF16 为 little endian,UTF16BE 是 big endian。 这些选项不区分大小写。

当 -e 为 UTF8 时,不支持固定宽度列。

-rrow_delimiter
源数据文件的每一行的分隔符。 行分隔符是一个或多个 ASCII 值。

要将回车符 (CR)、换行符 (LF)或制表符指定为分隔符,你可以使用转义字符(\r、\n、\t)或其十六进制值(0x、0d、09)。 要将任何其他特殊字符指定为分隔符,请使用其十六进制值。

CR+LF 的示例:

-r \r\n

-r 0x0d0x0a

CR 的示例:

-r \r

-r 0x0d

LF 的示例:

-r \n

-r 0x0a

Unix 需要 LF。 Windows 需要 CR。

-D { ymd | ydm | mdy | myd | dmy | dym | custom_date_format }
指定输入文件中所有日期时间字段的月 (m)、日 (d)和年份 (y) 的顺序。 默认顺序为 ymd。 要为同一源文件指定多个顺序格式,请使用 -dt 选项。

ymd | dmy
ydm 和 dmy 允许相同的输入格式。 两者都允许年份位于日期的开头或结尾。 例如,对于 ydmdmy 日期格式,输入文件中可以有 2013-02-03 或 02-03-2013。

ydm
只能将格式化为 ydm 的输入加载到数据类型为 datetime 和 smalldatetime 的列中。 不能将 ydm 值加载到 datetime2、date 或 datetimeoffset 数据类型的列中。

mdy
mdy 允许<月><空格><日><逗号><年>。

1975 年 1 月 1 日 mdy 输入数据的示例:

  • January 1, 1975

  • Jan 01, 75

  • Jan/1/75

  • 01011975

myd
2010 年 3 月 4 日输入文件示例:03-2010-04、3/2010/4

dym
2010 年 3 月 4 日输入文件示例:04-2010-03、4/2010/3

custom_date_format
custom_date_format 是自定义日期格式(例如 MM/dd/yyyy),仅为向后兼容而包含。 dwloader 不强制实施自定义日期格式。 相反,在指定自定义日期格式时,dwloader 会将它转换为 ymd、ydm、mdy、myd、dym 或 dmy 的相应设置。

例如,如果指定 -D MM/dd/yyyy,dwloader要求所有日期输入都按月第一、日和,然后年 (mdy) 进行排序。 它不强制使用自定义日期格式指定的 2 个字符月份、2 位数日期和 4 位数年份。 下面是当日期格式为 -D MM/dd/yyyy:01/02/2013、Jan.02.2013、1/2/2013 时,可以在输入文件中设置日期格式的一些示例方法

有关更全面的格式设置信息,请参阅 dwloader 的数据类型转换规则

-dtdatetime_format_file
每个日期时间格式都在名为 datetime_format_file 的文件中指定。 与命令行参数不同的是,包含空格的文件参数不得用双引号括起来。 加载数据时不能更改日期时间格式。 目标表中的源数据文件及其相应的列必须具有相同的格式。

每行都包含目标表中的列的名称及其日期时间格式。

示例:

LastReceiptDate=ymd

ModifiedDate=dym

-dstaging_database_name
将包含暂存表的数据库名称。 默认值为使用 -T 选项指定的数据库,它是目标表的数据库。 有关使用暂存数据库的详细信息,请参阅创建暂存数据库

-Mload_mode_option
指定是追加、更新插入还是重新加载数据。 默认模式为追加。

append
加载器在目标表中现有行的末尾插入行。

fastappend
加载器直接将行插入到目标表中现有行的末尾,而无需使用临时表。 fastappend 需要多事务 (-m) 选项。 在使用 fastappend 时,无法指定暂存数据库。 fastappend 没有回滚,这意味着从失败或中止的加载中恢复必须由你自己的加载进程处理。

更新插入 -Kmerge_column [ ,...n ]
加载器使用 SQL Server Merge 语句更新现有行并插入新行。

-K 选项指定合并所基于的一列或多列。 这些列构成合并键,该键应表示唯一行。 如果目标表中存在合并键,则会更新该行。 如果目标表中不存在合并键,则会追加该行。

对于哈希分布表,合并键必须是分布列或者包含分布列。

对于复制的表,合并键是一个或多个列的组合。 这些列根据应用程序的需求指定。

多个列必须用逗号分隔,不含空格,或以逗号分隔,包含空格,并以单引号括起。

如果源表中的两个行具有匹配的合并键值,则其各自的行必须相同。

reload
加载器在插入源数据之前截断目标表。

-bbatchsize
建议 batchsize 仅供 Microsoft Support 使用,它是 DMS 在计算节点上执行到 SQL Server 实例中的大容量复制的 SQL Server 批大小。 指定 batchsize 后,SQL Server PDW 将覆盖为每个加载动态计算的批处理加载大小。

从 SQL Server 2012 PDW 开始,默认情况下,控制节点会动态计算每个加载的批大小。 此自动计算基于多个参数,例如内存大小、目标表类型、目标表架构、加载类型、文件大小和用户的资源类。

例如,如果加载模式为 FASTAPPEND,并且表具有群集化的列存储索引,则 SQL Server PDW 默认会尝试使用 1,048,576 的批大小,以便行组变为 CLOSED 并直接加载到列存储中,而无需通过增量存储。 如果内存不允许 1,048,576 的批大小为,dwloader 将选择较小的批大小。

如果加载类型为 FASTAPPEND,则 batchsize 适用于将数据加载到表中,否则 batchsize 适用于将数据加载到暂存表中。

<reject_options>
指定用于确定加载器允许的加载失败次数的选项。 如果加载失败次数超过阈值,则加载器将停止,并且不会提交任何行。

-rt { value | percentage }
指定 -rvreject_value 选项中的 -reject_value 是行的文本数字(值)还是失败率(百分比)。 默认值为值。

百分比选项是根据 -rs 选项按间隔发生的实时计算。

例如,如果加载器尝试加载 100 行,25 行失败,75 成功,则失败率为 25%。

-rvreject_value
指定在停止加载之前允许的行拒绝数或百分比。 -rt 选项确定 reject_value 是否引用行数或行的百分比。

默认的 reject_value 为 0。

与 -rt 值一起使用时,加载器会在被拒绝的行计数超过 reject_value 时停止加载。

与 -rt 百分比一起使用时,加载器将按间隔计算百分比(-rs 选项)。 因此,失败行的百分比可能超过 reject_value

-rsreject_sample_size
-rt percentage 选项一起使用以指定增量百分比检查。 例如,如果 reject_sample_size 为 1000,则加载器会在尝试加载 1000 行后计算失败行的百分比。 它在尝试加载每个另外的 1000 行后会重新计算失败行的百分比。

-c
从 char、nchar、varchar 和 nvarchar 字段的左侧和右侧删除空格字符。 将仅包含空格字符的每个字段转换为空字符串。

示例:

' ' 被截断为 ''

' abc ' 被截断为 'abc'

当 -c 与 -E 一起使用时,首先发生 -E 操作。 仅包含空格字符的字段将转换为空字符串,而不是转换为 NULL。

-E
将空字符串转换为 NULL。 默认设置为不执行这些转换。

-m
对加载的第二阶段使用多事务模式;将数据从暂存表加载到分布式表中时。

-m 时,SQL Server PDW 并行执行并提交加载。 这比默认加载模式快得多,但不具有事务安全性。

如果没有 -m,SQL Server PDW 会在每个计算节点内的分布中以串行方式执行和提交加载,同时跨计算节点执行和提交加载。 此方法比多事务模式慢,但具有事务安全性。

-m 对于 appendreloadupsert 是可选的。

-m 是 fastappend 所必需的。

-m 不能与复制的表一起使用。

-m 仅适用于第二个加载阶段。 它不适用于第一个加载阶段;将数据加载到暂存表中。

多事务模式没有回滚,这意味着从失败或中止的加载中恢复必须由你自己的加载进程处理。

建议仅在加载到空表时使用 -m,以便可以在不丢失数据的情况下进行恢复。 要从加载失败中恢复:删除目标表,解决加载问题,重新创建目标表,然后再次运行加载。

-N
验证目标设备是否具有来自受信任机构的有效 SQL Server PDW 证书。 使用此操作帮助确保你的数据不会被攻击者劫持,且不会发送到未经授权的位置。 证书必须已安装在设备上。 安装证书的唯一支持方法是让设备管理员使用 Configuration Manager 工具进行安装。 如果不确定设备是否已安装受信任的证书,请咨询设备管理员。

-se
跳过加载空文件。 这还会跳过解压缩空 gzip 文件。

-l
CU7.4 更新可用,指定可以加载的最大行长度(以字节为单位)。 有效值为 32768 到 33554432 之间的整数。 仅在需要加载大型行(大于 32KB)时使用,因为这将在客户端和服务器上分配更多的内存。

返回代码值

0(成功)或其他整数值(失败)

在命令窗口或批处理文件中,使用 errorlevel 显示返回代码。 例如:

dwloader  
echo ReturnCode=%errorlevel%  
if not %errorlevel%==0 echo Fail  
if %errorlevel%==0 echo Success  

使用 PowerShell 时,请使用 $LastExitCode

权限

要求对目标表具有 LOAD 权限和适用权限(INSERT、UPDATE、DELETE)。 需要对临时数据库具有 CREATE 权限(用于创建临时表)。 如果不使用暂存数据库,则需要为对目标数据库具有 CREATE 权限。

一般备注

有关使用 dwloader 加载时数据类型转换的信息,请参阅 dwloader 的数据类型转换规则

如果参数包含一个或多个空格,请使用双引号将参数括起来。

应从其安装位置运行加载器。 dwloader 可执行文件随设备一起预安装,位于 C:\Program Files\Microsoft SQL Server Data Warehouse\DWLoader 目录中。

可以通过将参数文件(-f 选项)中指定的参数指定为命令行参数来将其替代。

可以同时运行加载器的多个实例。 加载器实例的最大数量是预配置的,不能更改。

与源位置相比,加载的数据可能需要更多或更少的设备空间。 可以使用数据子集执行测试导入,以估计磁盘消耗量。

尽管 dwloader 是一个事务进程,并且会在失败时正常回滚,但在大容量加载成功完成后,将无法回滚。 要取消活动的 dwloader 进程,请键入 CTRL+C。

限制和局限

并发发生的所有加载的总大小必须小于数据库的 LOG_SIZE,建议所有并发加载的总大小小于 LOG_SIZE 的 50%。 为了实现此大小限制,可以将大型加载拆分为多个批次。 有关 LOG_SIZE 的详细信息,请参阅 CREATE DATABASE

使用一个加载命令加载多个文件时,所有被拒绝的行都会写入同一拒绝文件。 拒绝文件不显示哪个输入文件包含每个被拒绝的行。

空字符串不应用作分隔符。 当空字符串用作行分隔符时,加载将失败。 用作列分隔符时,加载将忽略分隔符,并继续使用默认的 "|" 作为列分隔符。 用作字符串分隔符时,将忽略空字符串,并应用默认行为。

锁定行为

dwloader 锁定行为因 load_mode_option 而异。

  • append - Append 是建议的,也是最常见的选项。 Append 会将数据加载到暂存表中。 下面对锁定进行了详细描述。

  • fast append - Fast-append 直接加载到采用 ExclusiveUpdate 表锁的最终表中,并且是唯一不使用暂存表的模式。

  • reload - Reload 将数据加载到暂存表中,并且对于暂存表和最终表都需要排他锁。 对于并发操作,不建议 Reload。

  • upsert - Upsert 将数据加载到暂存表中,然后执行从暂存表到最终表的合并操作。 Upsert 不需要最终表上的排他锁。 使用 upsert 时性能可能会有所不同。 请在环境中验证该行为。

锁定行为

追加模式锁定

追加可以在多事务模式下运行(使用 -m 参数),但它不具有事务安全性。 因此,追加应用作事务操作(不使用 -m 参数)。 遗憾的是,在最终的 INSERT-SELECT 操作期间,事务模式当前比多事务模式慢约 6 倍。

追加模式分两个阶段加载数据。 第一阶段将数据从源文件同时加载到暂存表中(可能发生片段)。 第二阶段将数据从暂存表加载到最终表。 第二阶段执行 INSERT INTO...SELECT WITH (TABLOCK) 操作。 下表显示了最终表的锁定行为,以及使用追加模式时的日志记录行为:

表类型 多项事务
模式 (-m)
表为空 支持的并发 日志记录
最小
最小
最小
最小
Cl 最小
Cl 完全
Cl 最小
Cl 完整

上表显示了使用追加模式加载到堆或群集化索引 (CI) 表中(其中包含或不带多事务标志)并加载到空表或非空表中的 dwloader。 每个此类加载组合的锁定和日志记录行为将显示在表中。 例如,在追加模式下将(第二)阶段加载到一个没有多事务模式的群集化索引和一个空表中将使 PDW 在表上创建一个排他锁,且日志记录是最小的。 这意味着客户无法将(第二)阶段和查询同时加载到空表中。 但是,将同一配置加载到非空表中时,PDW 不会对表发出排他锁,并且可以并发。 遗憾的是,会进行完整的日志记录,从而降低进程速度。

示例

A. 简单的 dwloader 示例

以下示例显示加载器的启动,其中仅选择了所需的选项。 其他选项取自全局配置文件 loadparamfile.txt

使用 SQL Server 身份验证的示例:

--Load over Ethernet  
dwloader.exe -S 10.192.63.148 -U mylogin -P 123jkl -f /configfiles/loadparamfile.txt  
  
--Load over InfiniBand to appliance named MyPDW  
dwloader.exe -S MyPDW-SQLCTL01 -U mylogin -P 123jkl -f /configfiles/loadparamfile.txt  

此示例使用 Windows 身份验证。

--Load over Ethernet  
dwloader.exe -S 10.192.63.148 -W -f /configfiles/loadparamfile.txt  
  
--Load over InfiniBand to appliance named MyPDW  
dwloader.exe -S MyPDW-SQLCTL01 -W -f /configfiles/loadparamfile.txt  

对源文件和错误文件使用参数的示例。

--Load over Ethernet  
dwloader.exe -U mylogin -P 123jkl -S 10.192.63.148  -i C:\SQLData\AWDimEmployees.csv -T AdventureWorksPDW2012.dbo.DimEmployees -R C:\SQLData\LoadErrors  

B. 将数据加载到 AdventureWorks 表中

以下示例是将数据加载到 AdventureWorksPDW2012 的批处理脚本的一部分。 要查看完整脚本,请打开 AdventureWorksPDW2012 安装包随附的 aw_create.bat 文件。

以下脚本片段使用 dwloader 将数据加载到 DimAccount 和 DimCurrency 表中。 此脚本使用以太网地址。 如果使用的是 InfiniBand,则服务器将为 <appliance_name>-SQLCTL01

set server=10.193.63.134  
set user=<MyUser>  
set password=<MyPassword>  
  
set schema=AdventureWorksPDW2012.dbo  
set load="C:\Program Files\Microsoft SQL Server Parallel Data Warehouse\100\dwloader.exe"  
set mode=reload  
  
--Loads data into the AdventureWorksPDW2012.dbo.DimAccount table  
--Source data is stored in the file DimAccount.txt,   
--which is in the current directory.  
  
set t1=DimAccount  
%load% -S %server% -E -M %mode% -e Utf16 -i .\%t1%.txt -T %schema%.%t1% -R %t1%.bad -t "|" -r \r\n -U %user% -P %password%   
  
--Loads data from the DimCurrency.txt file into  
--AdventureWorksPDW2012.dbo.DimCurrency  
set t1=DimCurrency  
%load% -S %server% -E -M %mode% -e Utf16 -i .\%t1%.txt -T %schema%.%t1% -R %t1%.bad -t "|" -r \r\n -U %user% -P %password%  

下面是 DimAccount 表的 DDL。

CREATE TABLE DimAccount(  
AccountKey int NOT NULL,  
ParentAccountKey int,  
AccountCodeAlternateKey int,  
ParentAccountCodeAlternateKey int,  
AccountDescription nvarchar(50),  
AccountType nvarchar(50),  
Operator nvarchar(50),  
CustomMembers nvarchar(300),  
ValueType nvarchar(50),  
CustomMemberOptions nvarchar(200))  
with (CLUSTERED INDEX(AccountKey),  
DISTRIBUTION = REPLICATE);  

下面是数据文件 DimAccount.txt 的示例,其中包含要加载到表 DimAccount 中的数据。

--Sample of data in the DimAccount.txt load file.  
  
1||1||Balance Sheet||~||Currency|  
2|1|10|1|Assets|Assets|+||Currency|  
3|2|110|10|Current Assets|Assets|+||Currency|  
4|3|1110|110|Cash|Assets|+||Currency|  
5|3|1120|110|Receivables|Assets|+||Currency|  
6|5|1130|1120|Trade Receivables|Assets|+||Currency|  
7|5|1140|1120|Other Receivables|Assets|+||Currency|  
8|3|1150|110|Allowance for Bad Debt|Assets|+||Currency|  
9|3|1160|110|Inventory|Assets|+||Currency|  
10|9|1162|1160|Raw Materials|Assets|+||Currency|  
11|9|1164|1160|Work in Process|Assets|+||Currency|  
12|9|1166|1160|Finished Goods|Assets|+||Currency|  
13|3|1170|110|Deferred Taxes|Assets|+||Currency|  

°C 从命令行加载数据

示例 B 中的脚本可以通过在命令行上输入所有参数来替换,如以下示例所示。

C:\Program Files\Microsoft SQL Server Parallel Data Warehouse\100\dwloader.exe -S <Control node IP> -E -M reload -e UTF16 -i .\DimAccount.txt -T AdventureWorksPDW2012.dbo.DimAccount -R DimAccount.bad -t "|" -r \r\n -U <login> -P <password>  

命令行参数的说明:

  • C:\Program Files\Microsoft SQL Server Parallel Data Warehouse\100\dwloader.exe 是 dwloader.exe 的安装位置。

  • -S 后跟控制节点的 IP 地址。

  • -E 指定将空字符串加载为 NULL。

  • -M reload 指定在插入源数据之前截断目标表。

  • -e UTF16 指示源文件使用 little endian 字符编码类型。

  • -i .\DimAccount.txt 指定数据位于当前目录中的名为 DimAccount.txt 的文件中。

  • -T AdventureWorksPDW2012.dbo.DimAccount 指定要接收数据的表的 3 部分名称。

  • -R DimAccount.bad 指定加载失败的行将写入名为 DimAccount.bad 的文件中。

  • -t "|" 指示输入文件 DimAccount.txt 中的的字段使用竖线字符分隔。

  • -r \r\n 指定 DimAccount.txt 中的每个行以回车符和换行符结尾。

  • -U <login_name> -P <password> 指定有权执行加载的登录名和登录密码。