dwloader 的数据类型转换规则 - Analytics Platform Service (PDW)

本文介绍 dwloader 命令行加载器将数据加载到 PDW 时支持的输入数据格式和隐式数据类型转换。 当输入数据与 SQL Server PDW 目标表中的数据类型不匹配时,会发生隐式数据转换。 在设计加载过程时使用此信息,以确保数据将成功加载到 SQL Server PDW 中。

将文本插入二进制类型

下表定义了用于将文本值加载到类型 binary (n) 或 varbinary(n) 的 SQL Server PDW 列的可接受文本类型、格式和转换规则。

输入数据类型 输入数据示例 转换为二进制或 varbinary 数据类型
二进制文本 [0x]hexidecimal_string

示例:12Ef 或 0x12Ef
0x 前缀是可选项。

数据源长度不能超过为数据类型指定的字节数。

如果数据源长度小于 binary 数据类型的大小,则数据在右侧补充零,以达到数据类型大小。

将文本插入日期和时间类型

日期和时间文本使用特定格式的字符串文本来表示,并使用单引号括起来。 下表定义了允许的文本类型、格式和转换规则,用于将日期或时间文本加载到 datetimesmalldatetimedatetimedatetimeoffsetdatetime2 类型的列中。 这些表定义给定数据类型的默认格式。 可以指定的其他格式在日期时间格式部分中定义。 日期和时间文本不能包含前导或尾随空格。 datesmalldatetime 和 null 值不能以固定宽度模式加载。

datetime 数据类型

下表定义了用于将文本值加载到 datetime 类型的列的默认格式和规则。 空字符串 ('') 转换为默认值 '1900-01-01 12:00:00.000'。 仅包含空白的字符串 (' ') 将生成错误。

输入数据类型 输入数据示例 转换为 datetime 数据类型
datetime 格式的字符串文本 'yyyy-MM-dd hh:mm:ss[.fff]'

示例:'2007-05-08 12:35:29.123'
插入值时,缺少的小数位数补为 0。 例如,文本 '2007-05-08 12:35' 插入为 '2007-05-08 12:35:00.000'。
smalldatetime 格式的字符串文本 'yyyy-MM-dd hh:mm'

示例:'2007-05-08 12:35'
插入值时,秒和其余的小数位数补为 0。
date 格式的字符串文本 'yyyy-MM-dd'

示例:'2007-05-08'
插入值时,时间值(小时、分钟、秒和分数)设置为 12:00:00.000。
datetime2 格式的字符串文本 'yyyy-MM-dd hh:mm:ss.fffffff'

示例:'2007-05-08 12:35:29.1234567'
源数据不能超过三个小数位。 例如,文本 '2007-05-08 12:35:29.123' 会被插入,但值 '2007-05-8 12:35:29.1234567' 将生成错误。

smalldatetime 数据类型

下表定义了用于将文本值加载到 smalldatetime 类型的列的默认格式和规则。 空字符串 ('') 转换为默认值 '1900-01-01 12:00'。 仅包含空白的字符串 (' ') 将生成错误。

输入数据类型 输入数据示例 转换为 smalldatetime 数据类型
smalldatetime 格式的字符串文本 'yyyy-MM-dd hh:mm' 或 'yyyy-MM-dd hh:mm:ss'

示例:'2007-05-08 12:00' 或 '2007-05-08 12:00:15'
源数据必须具有年份、月、日期、小时和分钟的值。 秒是可选的,如果存在,必须设置为值 00。 任何其他值都会产生错误。

秒是可选的。 加载到 smalldatetime 列时,dwloader 将向上舍入秒和秒的小数值。 例如,1999-01-05 20:10:35.123 将加载为 01-05 20:11。
date 格式的字符串文本 'yyyy-MM-dd'

示例:'2007-05-08'
插入值时,时间值(小时、分钟、秒和分数)设置为 0。

date 数据类型

下表定义了用于将文本值加载到 date 类型的列的默认格式和规则。 空字符串 ('') 转换为默认值 '1900-01-01'。 仅包含空白的字符串 (' ') 将生成错误。

输入数据类型 输入数据示例 转换为 date 数据类型
date 格式的字符串文本 'yyyy-MM-dd'

示例:'2007-05-08'

time 数据类型

下表定义了用于将文本值加载到 time 类型的列的默认格式和规则。 空字符串 ('') 转换为默认值 '00:00:00.0000'。 仅包含空白的字符串 (' ') 将生成错误。

输入数据类型 输入数据示例 转换为 time 数据类型
time 格式的字符串文本 'hh:mm:ss.fffffff'

示例:'12:35:29.1234567'
如果数据源的精度(小数位数)小于或等于 time 数据类型的精度,则数据在右侧补充零。 例如,文本 '12:35:29.123' 插入为 '12:35:29.1230000'。

ddatetimeoffset 数据类型

下表定义了用于将文本值加载到 datetimeoffset (n) 类型的列的默认格式和规则。 默认格式为 'yyyy-MM-dd hh:mm:ss.fffffff {+|-}hh:mm'。 空字符串 ('') 转换为默认值 '1900-01-01 12:00:00.0000000 +00:00'。 仅包含空白的字符串 (' ') 将生成错误。 小数位数取决于列定义。 例如,定义为 datetimeoffset (2) 的列将具有两个小数位数。

输入数据类型 输入数据示例 转换为 datetimeoffset 数据类型
datetime 格式的字符串文本 'yyyy-MM-dd hh:mm:ss[.fff]'

示例:'2007-05-08 12:35:29.123'
插入值时,缺少的小数位数和偏移值设置为 0。 例如,文本 '2007-05-08 12:35:29.123' 插入为 '2007-05-08 12:35:29.1230000 +00:00'。
smalldatetime 格式的字符串文本 'yyyy-MM-dd hh:mm'

示例:'2007-05-08 12:35'
插入值时,秒、其余的小数位数和偏移值设为 0。
date 格式的字符串文本 'yyyy-MM-dd'

示例:'2007-05-08'
插入值时,时间值(小时、分钟、秒和分数)设置为 0。 例如,文本 '2007-05-08' 插入为 '2007-05-08 00:00:00.0000000 +00:00'。
datetime2 格式的字符串文本 'yyyy-MM-dd hh:mm:ss.fffffff'

示例:'2007-05-08 12:35:29.1234567'
源数据不能超过 datetimeoffset 列中的指定秒数小数值。 如果数据源具有较小或相等的秒数小数值,则数据用零填充到右侧。 例如,如果数据类型为 datetimeoffset (5),则文本值 '2007-05-08 12:35:29.123 +12:15' 插入为 '12:35:29.12300 +12:15'。
datetimeoffset 格式的字符串文本 'yyyy-MM-dd hh:mm:ss.fffffff {+|-} hh:mm'

示例:'2007-05-08 12:35:29.1234567 +12:15'
源数据不能超过 datetimeoffset 列中的指定秒数小数值。 如果数据源具有较小或相等的秒数小数值,则数据用零填充到右侧。 例如,如果数据类型为 datetimeoffset (5),则文本值 '2007-05-08 12:35:29.123 +12:15' 插入为 '12:35:29.12300 +12:15'。

datetime2 数据类型

下表定义了用于将文本值加载到 datetime2 (n) 类型的列的默认格式和规则。 默认格式为 'yyyy-MM-dd hh:mm:ss.fffffff'。 空字符串 ('') 转换为默认值 '1900-01-01 12:00:00'。 仅包含空白的字符串 (' ') 将生成错误。 小数位数取决于列定义。 例如,定义为 datetime2 (2) 的列将具有两个小数位数。

输入数据类型 输入数据示例 转换为 datetime2 数据类型
datetime 格式的字符串文本 'yyyy-MM-dd hh:mm:ss[.fff]'

示例:'2007-05-08 12:35:29.123'
秒的小数值是可选的,在插入值时设置为 0。
smalldatetime 格式的字符串文本 'yyyy-MM-dd hh:mm'

示例:'2007-05-08 12'
插入值时,可选的秒和其余的小数位数补为 0。
date 格式的字符串文本 'yyyy-MM-dd'

示例:'2007-05-08'
插入值时,时间值(小时、分钟、秒和分数)设置为 0。 例如,文本 '2007-05-08' 插入为 '2007-05-08 12:00:00.0000000'。
datetime2 格式的字符串文本 'yyyy-MM-dd hh:mm:ss:fffffff'

示例:'2007-05-08 12:35:29.1234567'
如果数据源包含小于或等于 datetime2(n) 中指定值的数据和时间部分,则插入数据;否则将生成错误。

日期时间格式

Dwloader 对加载到 SQL Server PDW 的输入数据支持以下数据格式。 表后面列出了更多详细信息。

datetime smalldatetime date datetime2 datetimeoffset
[M[M]]M-[d]d-[yy]yy HH:mm:ss[.fff] [M[M]]M-[d]d-[yy]yy HH:mm[:00] [M[M]]M-[d]d-[yy]yy [M[M]]M-[d]d-[yy]yy HH:mm:ss[.fffffff] [M[M]]M-[d]d-[yy]yy HH:mm:ss[.fffffff] zzz
[M[M]]M-[d]d-[yy]yy hh:mm:ss[.fff][tt] [M[M]]M-[d]d-[yy]yy hh:mm[:00][tt] [M[M]]M-[d]d-[yy]yy hh:mm:ss[.fffffff][tt] [M[M]]M-[d]d-[yy]yy hh:mm:ss[.fffffff][tt] zzz
[M[M]]M-[yy]yy-[d]d HH:mm:ss[.fff] [M[M]]M-[yy]yy-[d]d HH:mm[:00] [M[M]]M-[yy]yy-[d]d [M[M]]M-[yy]yy-[d]d HH:mm:ss[.fffffff] [M[M]]M-[yy]yy-[d]d HH:mm:ss[.fffffff] zzz
[M[M]]M-[yy]yy-[d]d hh:mm:ss[.fff][tt] [M[M]]M-[yy]yy-[d]d hh:mm[:00][tt] [M[M]]M-[yy]yy-[d]d hh:mm:ss[.fffffff][tt] [M[M]]M-[yy]yy-[d]d hh:mm:ss[.fffffff][tt] zzz
[yy]yy-[M[M]]M-[d]d HH:mm:ss[.fff] [yy]yy-[M[M]]M-[d]d HH:mm[:00] [yy]yy-[M[M]]M-[d]d [yy]yy-[M[M]]M-[d]d HH:mm:ss[.fffffff] [yy]yy-[M[M]]M-[d]d HH:mm:ss[.fffffff] zzz
[yy]yy-[M[M]]M-[d]d hh:mm:ss[.fff][tt] [yy]yy-[M[M]]M-[d]d hh:mm[:00][tt] [yy]yy-[M[M]]M-[d]d hh:mm:ss[.fffffff][tt] [yy]yy-[M[M]]M-[d]d hh:mm:ss[.fffffff][tt] zzz
[yy]yy-[d]d-[M[M]]M HH:mm:ss[.fff] [yy]yy-[d]d-[M[M]]M HH:mm[:00] [yy]yy-[d]d-[M[M]]M [yy]yy-[d]d-[M[M]]M HH:mm:ss[.fffffff] [yy]yy-[d]d-[M[M]]M HH:mm:ss[.fffffff] zzz
[yy]yy-[d]d-[M[M]]M hh:mm:ss[.fff][tt] [yy]yy-[d]d-[M[M]]M hh:mm[:00][tt] [yy]yy-[d]d-[M[M]]M hh:mm:ss[.fffffff][tt] [yy]yy-[d]d-[M[M]]M hh:mm:ss[.fffffff][tt] zzz
[d]d-[M[M]]M-[yy]yy HH:mm:ss[.fff] [d]d-[M[M]]M-[yy]yy HH:mm[:00] [d]d-[M[M]]M-[yy]yy [d]d-[M[M]]M-[yy]yy HH:mm:ss[.fffffff] [d]d-[M[M]]M-[yy]yy HH:mm:ss[.fffffff] zzz
[d]d-[M[M]]M-[yy]yy hh:mm:ss[.fff][tt] [d]d-[M[M]]M-[yy]yy hh:mm[:00][tt] [d]d-[M[M]]M-[yy]yy hh:mm:ss[.fffffff][tt] [d]d-[M[M]]M-[yy]yy hh:mm:ss[.fffffff][tt] zzz
[d]d-[yy]yy-[M[M]]M HH:mm:ss[.fff] [d]d-[yy]yy-[M[M]]M HH:mm[:00] [d]d-[yy]yy-[M[M]]M [d]d-[yy]yy-[M[M]]M HH:mm:ss[.fffffff] [d]d-[yy]yy-[M[M]]M HH:mm:ss[.fffffff] zzz
[d]d-[yy]yy-[M[M]]M hh:mm:ss[.fff][tt] [d]d-[yy]yy-[M[M]]M hh:mm[:00][tt] [d]d-[yy]yy-[M[M]]M hh:mm:ss[.fffffff][tt] [d]d-[yy]yy-[M[M]]M hh:mm:ss[.fffffff][tt] zzz

详细信息:

  • 要分隔月、日和年值,可以使用 ' - '、' / ' 或 '。 '. 为简单起见,该表仅使用“-”分隔符。

  • 要将月指定为文本,请使用三个或更多字符。 包含 1 个或 2 个字符的月份会被解释为数字。

  • 要分隔时间值,请使用 ' : ' 符号。

  • 括在方括号中的字母是可选的。

  • 字母“tt”指定 AM|PM|am|pm。 AM 是默认值。 当指定“tt”时,小时值 (hh) 必须在 0 到 12 范围内。

  • 字母“zzz”以格式 {+|-}HH:ss] 为系统的当前时区指定时区偏移。

将文本插入数值类型

下表定义了用于将文本值插入使用数值类型的 SQL Server PDW 列的默认格式和转换规则。

bit 数据类型

下表定义了用于将文本值加载到 bit 类型的列的默认格式和规则。 空字符串 ('') 或仅包含空白的字符串 (' ') 转换为 0。

输入数据类型 输入数据示例 转换为 bit 数据类型
integer 格式的字符串文本 'ffffffffff'

示例:'1' 或 '321'
格式化为字符串文本的整数值不能包含负值。 例如,值 '-123' 生成错误。

大于 1 的值转换为 1。 例如,值 '123' 转换为 1。
字符串文本 'TRUE' 或 'FALSE'

示例:'true'
值 'TRUE' 转换为 1;值 'FALSE' 转换为 0。
整数文本 fffffffn

示例:1 或 321
大于 1 或小于 0 的值转换为 1。 例如,值 123 和 -123 都转换为 1。
小数文本 fffnn.fffn

示例:1234.5678
大于 1 或小于 0 的值转换为 1。 例如,值 123.45 和 -123.45 转换为 1。

decimal 数据类型

下表定义了用于将文本值加载到 decimal (p,s) 类型的列的规则。 数据转换规则与 SQL Server 相同。 有关详细信息,请参阅 MSDN 上的数据类型转换(数据库引擎)

输入数据类型 输入数据示例
整数文本 321312313123
小数文本 123344.34455

float 和 real 数据类型

下表定义了用于将文本值加载到 floatreal 类型的列的规则。 数据转换规则与 SQL Server 相同。 有关详细信息,请参阅 MSDN 上的数据类型转换(数据库引擎)

输入数据类型 输入数据示例
整数文本 321312313123
小数文本 123344.34455
浮点文本 3.12323E+14

int、bigint、tinyint、smallint 数据类型

下表定义了用于将文本值加载到 intbiginttinyintsmallint 类型的列的规则。 数据源不能超过给定数据类型允许的范围。 例如,tinyint 的范围为 0 到 255,int 的范围为 -2,147,483,648 到 2,147,483,647。

输入数据类型 输入数据示例 转换为整数数据类型
整数文本 321312313123
小数文本 123344.34455 小数点右侧的值将被截断。

money 和 smallmoney 数据类型

Money 文本值以数字字符串表示,其中前缀为可选的小数点和可选的货币符号。 数据源不能超过给定数据类型允许的范围。 例如,smallmoney 的范围是 -214,748.3648 到 214,748.3647,money 的范围是 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。 下表定义了用于将文本值加载到 moneysmallmoney 类型的列的规则。

输入数据类型 输入数据示例 转换为 money 或 smallmoney 数据类型
整数文本 321312 插入值时,小数点后面的缺失数位设置为 0。 例如,文本 12345 插入为 12345.0000
小数文本 123344.34455 如果小数点后的位数超过 4,则该值向上舍入为最接近的值。 例如,值 123344.34455 插入为 123344.3446。
Money 文本 $123456.7890 货币符号不随值一起插入。

如果小数点后的位数超过 4,则该值向上舍入为最接近的值。

将文本插入字符串类型

下表定义了用于将文本值插入使用字符串类型的 SQL Server PDW 列的默认格式和转换规则。

char、varchar、nchar 和 nvarchar 数据类型

下表定义了用于将文本值加载到 charvarcharncharnvarchar 类型的列的默认格式和规则。 数据源长度不能超过为数据类型指定的大小。 如果数据源长度小于 charnchar 数据类型的大小,则在右侧补充空格以达到数据类型大小。

输入数据类型 输入数据示例 转换为字符数据类型
字符串文本 格式:'character string'

示例:'abc'
NA
Unicode 字符串文本 格式:N'character string'

示例:N'abc'
NA
整数文本 格式:ffffffffffn

示例:321312313123
NA
小数文本 格式:ffffff.fffffff

示例:12344.34455
NA
Money 文本 格式:$ffffff.fffnn

示例:$123456.99
可选货币符号不随值一起插入。 要插入货币符号,请将值作为字符串文本插入。 这将匹配加载器的格式,该工具将每个文本视为字符串文本。

不允许使用逗号。

如果小数点后的位数超过 2,则该值向上舍入为最接近的值。 例如,值 123.946789 插入为 123.95。

使用 CONVERT 函数插入 money 文本时,仅允许默认样式 0(小数点后没有逗号和有 2 位数字)。

一般备注

dwloader 将执行 SMP SQL Server 执行的同一隐式转换,但不支持 SMP SQL Server 支持的所有隐式转换。