適用於平行處理資料倉儲的 dwloader 命令列載入器

dwloader 是一個 Parallel Data Warehouse (PDW) 命令列工具,可將資料表資料列大量載入現有的資料表。 載入資料列時,您可以將所有資料列新增至資料表結尾 (append 模式fastappend 模式)、附加新的資料列並更新現有的資料列 (upsert 模式),或在載入之前刪除所有現有的資料列,然後再將所有資料列插入空白資料表中 (reload 模式)。

載入資料的程序

  1. 準備來源資料。

    使用您自己的 ETL 程序來建立您要載入的來源資料。 來源資料的格式必須符合目的地資料表的結構描述。 將來源資料儲存到一個或多個文字檔中,並將文字檔拷貝到載入伺服器上的相同目錄。 如需載入伺服器的相關資訊,請參閱取得和設定載入伺服器

  2. 準備載入選項。

    決定將使用哪些載入選項。 將載入選項儲存在設定檔中。 將設定檔拷貝到載入伺服器上的區域位置。 本主題說明 dwloader 設定選項。

  3. 準備載入失敗選項。

    決定您希望 dwloader 如何處理載入失敗的資料列。 若要執行載入,dwloader 會先將資料載入暫存表格,然後將資料傳輸至目的地資料表。 當載入器將資料載入暫存表格時,它會追蹤載入失敗的資料列數目。 例如,未正確格式化的資料列將無法載入。 失敗的資料列會拷貝到拒絕檔案。 根據預設,除非指定不同的拒絕閾值,否則載入會在第一次拒絕之後中止。

  4. 安裝 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 可以包含 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.[schema].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_falure_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 為位元組由小到大,UTF16BE 為位元組由大到小。 這些選項不區分大小寫。

-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 為位元組由小到大,UTF16BE 為位元組由大到小。 這些選項不區分大小寫。

當 -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 允許 <month><space><day><comma><year> 格式。

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/yyyyy,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、upsert 還是 reload 模式。 預設模式為 append。

附加
載入器會在目的地資料表中現有資料列的結尾插入資料列。

fastappend
載入器會將資料列直接插入至目的地資料表中現有資料列的結尾,而不使用暫存資料表。 fastappend 需要多交易 (-m) 選項。 使用 fastappend 時,無法指定臨時資料庫。 fastappend 沒有回復功能,這表示要從失敗或中止的載入恢復,必須由您自己的載入程序來處理。

upsert -Kmerge_column [ ,...n ]
載入器會使用 SQL Server Merge 陳述式來更新現有的資料列,並插入新的資料列。

-K 選項指定合併所依據的資料行。 這些資料行會形成合併索引鍵,以代表唯一資料列。 如果目的地資料表中存在合併索引鍵,則會更新資料列。 如果目的地資料表中沒有合併索引鍵,則會附加資料列。

如果是雜湊散發的資料表,則合併索引鍵必須是或包含散發資料行。

對於復寫的資料表,合併索引鍵是一個或多個資料行的組合。 這些資料行會根據應用程式的需求來指定。

多個資料行必須以逗號分隔且不含空格,或以逗號分隔且包含空格但以單引號括住。

如果來源資料表中的兩個資料列具有相符的合併索引鍵值,其各自的資料列必須相同。

重新載入
載入器會在插入來源資料之前截斷目的地資料表。

-bbatchsize
建議只供 Microsoft 支援服務使用,batchsize 是 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

權限

需要目的地資料表上的載入權限和適用權限 (插入、更新、刪除)。 需要臨時資料庫的建立權限 (用於建立暫存資料表)。 如果未使用臨時資料庫,則需要目的地資料庫的建立權限。

一般備註

如需使用 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 時,效能可能會有所不同。 請測試環境中的行為。

鎖定行為

Append 模式鎖定

Append 可以在多交易模式中執行 (使用 -m 引數),但不具備交易安全性。 因此,Append 應該當做交易作業使用 (不使用 -m 引數)。 不幸的是,在最終的 INSERT-SELECT 作業期間,交易模式的速度目前比多交易模式慢約六倍。

Append 模式會以兩個階段載入資料。 第一階段會將來源檔案中的資料同時載入暫存表格 (可能發生分段)。 第二階段會將資料從暫存表格載入最終資料表。 第二階段會執行 INSERT INTO...SELECT WITH (TABLOCK) 作業。 下表顯示最終資料表上的鎖定行為,以及使用 append 模式時的記錄行為:

資料表類型 多交易
模式 (-m)
資料表空白 支援的並行 記錄
堆積 Yes .是 Yes 最少
堆積 Yes 最少
堆積 No .是 No 最少
堆積 No No 最少
Cl Yes .是 No 最少
Cl Yes 完整
Cl No .是 No 最少
Cl No Yes 完整

上表顯示 dwloader 使用 append 模式載入至堆積或叢集索引 (CI) 資料表 (其中包含或不含多交易旗標),以及載入至空白資料表或非空白資料表。 表中顯示了每個這類載入組合的鎖定和記錄行為。 例如,透過 append 模式載入至叢集索引 (未使用交易模式) 和載入至空白資料表的載入 (第二) 階段,會讓 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 表示來源檔案使用位元組由小到大字元編碼類型。

  • -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> 指定具有執行載入的權限之登入的登入名稱和密碼。