dwloader - Analytics Platform Service (PDW) 的資料型態轉換規則

本文說明 dwloader Command-Line Loader 在將資料載入 PDW 時所支援的輸入資料格式及隱含資料型態轉換。 當輸入資料與 SQL Server PDW 目標資料表中的資料型別不符時,隱含資料轉換就會發生。 設計載入流程時請使用此資訊,確保資料能順利載入 SQL Server PDW。

在二進位型別中插入常值

下表定義了將字面值載入 SQL Server PDW 欄位(類型為 二進位n) 或 varbinaryn) 時,所接受的文字型別、格式與轉換規則。

輸入資料類型 輸入資料範例 轉換為二進位或變數資料型態
二進位字面 [0x]hexidecimal_string

範例:12EF 或 0x12Ef
0x 前綴是可選的。

資料來源長度不得超過該資料型別所指定的位元組數。

若資料來源長度小於 二進位 資料型態大小,資料會以零填充至右邊以達到資料型別大小。

在日期與時間類型中插入文字常數

日期與時間字面值以特定格式的字符串文字表示,並以單引號包圍。 以下表格定義了將日期或時間字面值載入到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。
日期 格式的字串常量 '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。
日期格式的字串字面值 「yyyy-MM-dd」

範例:『2007-05-08』
插入時間值(小時、分鐘、秒與分數)時設為 0。

日期資料型別

下表定義了將文字值載入 date 欄位的預設格式與規則。 空字串('')會轉換成預設值 '1900-01-01'。 僅包含空白(' ')的字串會產生錯誤。

輸入資料類型 輸入資料範例 轉換為日期資料型別
日期 格式的字串常量 'yyyy-MM-dd'

範例:『2007-05-08』

時間資料型別

下表定義了將文字值載入 time 型態欄位的預設格式與規則。 空字串('')會轉換成預設值 '00:00:00.0000'。 僅包含空白(' ')的字串會產生錯誤。

輸入資料類型 輸入資料範例 轉換為時間資料型別
時間格式中的字串文字 「hh:mm:ss.fffffff」

範例:『12:35:29.1234567』
如果資料來源的精度(小數位數)小於或等於 時間 資料類型的精度,則資料會在右側填充零。 例如,字面值 '12:35:29.123' 會入為「12:35:29.12300000'。

datetimeoffset 資料型別

下表定義了將文字值載入 datetimeoffsetn) 型樣欄位的預設格式與規則。 預設格式為「yyyy-MM-dd hh:mm:ss.fffffff {+|-}hh:mm」。 空字串('')會轉換成預設值 '1900-01-01 12:00:00.000000000 +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。
日期 格式的字串常量 'yyyy-MM-dd'

範例:『2007-05-08』
插入時間值(小時、分鐘、秒與分數)時設為 0。 例如,字面上的「2007-05-08」會插入為「2007-05-08 00:00:00.00000000 +00:00」。
datetime2 格式的字串常值 「yyyy-MM-dd hh:mm:ss.fffffff」

範例:『2007-05-08 12:35:29.1234567』
來源資料在日期時間偏移欄位中不得超過指定的分秒數。 若資料來源的分秒數較小或相等,則資料右側會填充零。 例如,若資料型態為 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 (5),則字面值 '2007-05-08 12:35:29.123 +12:15' 會插入為「12:35:29.12300 +12:15」。

datetime2 資料型別

下表定義了將文字值載入 datetime2n) 型別欄位的預設格式與規則。 預設格式是「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。
日期 格式的字串常量 'yyyy-MM-dd'

範例:『2007-05-08』
插入時間值(小時、分鐘、秒與分數)時設為 0。 例如,字面上的「2007-05-08」會插入為「2007-05-08 12:00:00.000000000」。
datetime2 格式的字串常值 「yyyy-mm-dd hh:mm:ss:fffffff」

範例:『2007-05-08 12:35:29.1234567』
如果資料來源中的資料和時間成分小於或等於 datetime2n) 所指定的值,則會插入該資料;否則會產生錯誤。

日期時間格式

Dwloader 支援以下資料格式,適用於其載入 SQL Server PDW 的輸入資料。 更多細節請見表格後面。

日期時間 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-[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 欄位(使用數字型別)的預設格式與轉換規則。

位元資料型別

下表定義了將文字值載入 type bit 欄位的預設格式與規則。 空字串('')或僅包含空白的字串(' ')會被轉換成 0。

輸入資料類型 輸入資料範例 轉換為位元資料型別
數格式的字串文字 「呼呼呼呼」

範例:「1」或「321」
整數值格式化為字串文字時,不能包含負值。 例如,值 '-123' 會產生錯誤。

大於1的數值會轉換為1。 例如,數值「123」會轉換成 1。
字串字面值 「真」或「假」

範例:「'true'」
「TRUE」的值會轉換成 1;「FALSE」的值會被轉換成 0。
整數常值 If "fffffffn" is understood in the context and the context was missing, then the translation would require additional information to provide an accurate and specific translation. If it's a placeholder or an acronym that's supposed to remain untranslated, it should be kept as "fffffffn" (假設沒有另外的來源或信息指引其具體意義)。

範例:1 或 321
大於1或小於0的數值會轉換為1。 例如,123 和 -123 的值會被轉換成 1。
十進位字面值 fffnn.fffn

範例:1234.5678
大於1或小於0的數值會轉換為1。 例如,123.45 和 -123.45 的值會轉換成 1。

十進位資料型別

下表定義了將文字值載入十 位(p,s)欄位的規則。 資料轉換規則與 SQL Server 相同。 欲了解更多資訊,請參閱 MSDN 上的資料型別轉換(資料庫引擎)。

輸入資料類型 輸入資料範例
整數常值 321312313123
十進位字面值 123344.34455

float 與實數資料型態

下表定義了將文字值載入 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 小數點右側的數值會被截斷。

貨幣與小額貨幣資料類型

貨幣的字面價值以一串數字表示,並可選擇使用小數點,並以可選的貨幣符號作為前綴。 資料來源不得超過指定資料型別允許的範圍。 例如, 小額貨幣 的範圍為 -214,748.3648 至 214,748.3647,貨幣 範圍為 - 922,337,203,685,477.5808 至 922,337,203,685,477.5807。 下表定義了將字面值載入 moneysmallmoney 類型的欄位的規則。

輸入資料類型 輸入資料範例 轉換為貨幣或小錢資料型別
整數常值 321312 小數點後的缺位數字在插入該值時設為 0。 例如,字面值 12345 插入為 12345.0000
十進位字面值 123344.34455 若小數點後的數字數超過4,則將該值向上取整至最接近的數值。 例如,值 123344.34455 會入為 123344.3446。
金錢的字面意義 $123456.7890 貨幣符號不會隨價值一併插入。

若小數點後的數字數超過4,則將該值向上取整至最接近的數值。

在字串類型中插入文字

以下表格定義了將字面值載入使用 SQL Server PDW 欄位(使用字串型別)的預設格式與轉換規則。

char、varchar、nchar 及 nvarchar 資料型別

下表定義了將字面值載入 charvarcharncharnvarchar 型別欄位的預設格式與規則。 資料來源長度不得超過資料型別所指定的大小。 若資料來源長度小於 charnchar 資料型別的大小,資料會以空白填充右側以達到資料型別大小。

輸入資料類型 輸入資料範例 轉換為字元資料型別
字串字面值 格式:「字串」

範例:「abc」
NA
Unicode 字串字面值 格式:N'字串'

範例:N'abc'
NA
整數常值 格式:ffffffffffn

範例:321312313123
NA
十進位字面 格式:ffffff.fffffff

範例:12344.34455
NA
錢是字面上的 格式:$ffffff.fffnn

範例:$123456.99
選用的貨幣符號不會隨值一併插入。 要插入貨幣符號,請將該值以字串字面值形式插入。 這會符合載入器的格式,載入器將每個字面值視為字串字面值。

不允許使用逗號。

若小數點後的位數超過2,則取整至最接近的數值。 例如,值 123.946789入為 123.95。

使用 CONVERT 函式插入貨幣字面值時,僅允許預設的 0 型(無逗號且小數點後有兩位數)。

一般備註

dwloader 執行與 SMP SQL Server 相同的隱式轉換,但不支援 SMP SQL Server 所支援的所有隱含轉換。