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 数据类型的大小,则数据在右侧补充零,以达到数据类型大小。 |
将文本插入日期和时间类型
日期和时间文本使用特定格式的字符串文本来表示,并使用单引号括起来。 下表定义了允许的文本类型、格式和转换规则,用于将日期或时间文本加载到 datetime、smalldatetime、date、time、datetimeoffset 或 datetime2 类型的列中。 这些表定义给定数据类型的默认格式。 可以指定的其他格式在日期时间格式部分中定义。 日期和时间文本不能包含前导或尾随空格。 date、smalldatetime 和 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 数据类型
下表定义了用于将文本值加载到 float 或 real 类型的列的规则。 数据转换规则与 SQL Server 相同。 有关详细信息,请参阅 MSDN 上的数据类型转换(数据库引擎)。
输入数据类型 | 输入数据示例 |
---|---|
整数文本 | 321312313123 |
小数文本 | 123344.34455 |
浮点文本 | 3.12323E+14 |
int、bigint、tinyint、smallint 数据类型
下表定义了用于将文本值加载到 int、bigint、tinyint 或 smallint 类型的列的规则。 数据源不能超过给定数据类型允许的范围。 例如,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。 下表定义了用于将文本值加载到 money 或 smallmoney 类型的列的规则。
输入数据类型 | 输入数据示例 | 转换为 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 数据类型
下表定义了用于将文本值加载到 char、varchar、nchar 和 nvarchar 类型的列的默认格式和规则。 数据源长度不能超过为数据类型指定的大小。 如果数据源长度小于 char 或 nchar 数据类型的大小,则在右侧补充空格以达到数据类型大小。
输入数据类型 | 输入数据示例 | 转换为字符数据类型 |
---|---|---|
字符串文本 | 格式:'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 支持的所有隐式转换。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈