Parallel Data Warehouse 用の dwloader コマンド ライン 読み込みツール

dwloader は、テーブル行を既存のテーブルに一括して読み込む Parallel Data Warehouse (PDW) コマンド ライン ツールです。 行を読み込むときに、すべての行をテーブルの末尾 (追加モード またはまたは fastappend モード) に追加したり、新しい行を追加して既存の行を更新したり (アップサート モード)、読み込む前にすべての既存の行を削除して、すべての行を空のテーブルに挿入 (リロード モード) したりできます。

データを読み込むプロセス

  1. ソース データを準備します。

    読み込むソース データを作成するには、独自の ETL プロセスを使用します。 ソース データは、変換先テーブルのスキーマと一致するように書式設定する必要があります。 ソース データを 1 つ以上のテキスト ファイルに格納し、テキスト ファイルを読み込みサーバー上の同じディレクトリにコピーします。 読み込みサーバーの詳細については、「読み込みサーバーの取得と構成」を参照してください。

  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_nameパスワードは必要ありません。

-fparameter_file_name
コマンド ライン パラメーターの代わりに、パラメーター ファイル parameter_file_name を使用します。 parameter_file_name には、user_nameパスワードを除く任意のコマンド ライン パラメーターを含めることができます。 コマンド ラインとパラメーター ファイルでパラメーターが指定されている場合、コマンド ラインはファイル パラメーターをオーバーライドします。

パラメーター ファイルには、- プレフィックスのない 1 行に 1 つのパラメーターが含まれています。

例:

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
変換先テーブルの 3 部構成の名前。

-Isource_data_location
1 つ以上の読み込みソース ファイルの場所。 各ソース ファイルは、gzip で圧縮されたテキスト ファイルまたはテキスト ファイルである必要があります。 各 gzip ファイルに圧縮できるソース ファイルは 1 つだけです。

ソース ファイルをフォーマットするには:

  • ソース ファイルは、読み込みオプションに従って書式設定する必要があります。

  • ソース ファイル内の各行には、1 つのテーブル行のデータが含まれています。 ソース データは、変換先テーブルのスキーマと一致している必要があります。 列の順序とデータ型も一致する必要があります。 行の各フィールドは、変換先テーブルの列を表します。

  • 既定では、フィールドは可変長であり、区切り記号で区切られます。 区切り記号の種類を指定するには、<variable_length_column_options>コマンド ライン オプションを使用します。 固定長フィールドを指定するには、<fixed_width_column_options>コマンド ライン オプションを使用します。

ソース データの場所を指定するには:

  • ソース データの場所には、ネットワーク パスまたは読み込みサーバー上のディレクトリへのローカル パスを指定できます。

  • ディレクトリ内のすべてのファイルを指定するには、ディレクトリ パスの後に * ワイルドカード文字を入力します。 ローダーは、ソース データの場所にあるサブディレクトリからファイルを読み込むことはありません。 gzip ファイルにディレクトリが存在すると、ローダーエラーが発生します。

  • ディレクトリ内のファイルの一部を指定するには、文字と * ワイルドカードの組み合わせを使用します。

1 つのコマンドで複数のファイルを読み込むには:

  • すべてのファイルが同じディレクトリに存在する必要があります。

  • ファイルは、すべてのテキスト ファイル、すべての gzip ファイル、またはテキスト ファイルと gzip ファイルの両方の組み合わせである必要があります。

  • ヘッダー情報を含めることができるファイルはありません。

  • すべてのファイルで同じ文字エンコードの種類を使用する必要があります。 e オプションを参照してください。

  • すべてのファイルを同じテーブルに読み込む必要があります。

  • すべてのファイルが連結され、1 つのファイルであるかのように読み込まれ、拒否された行は単一の拒否ファイルに移動します。

例:

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

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

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

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

  • -i \\loadserver\load\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 はリトル エンディアンで、UTF16BE はビッグ エンディアンです。 これらのオプションでは大文字と小文字が区別されません。

-tfield_delimiter
行の各フィールド (列) の区切り記号。 フィールド区切り記号は、1 つ以上のこれらの ASCII エスケープ文字または 1 つ以上の ASCII 16 進値です。

名前 Escape Character 16 進数文字
タブ \t 0x09
キャリッジ リターン (CR) \r 0x0D
ライン フィード (LF) \n 0x0a
CRLF \r?\n 0x0d0x0a
コンマ ',' 0x2c
二重引用符 \" 0x22
単一引用符 \' 0x27

コマンド ラインでパイプ文字を指定するには、二重引用符 "|" で囲みます。 これにより、コマンド ライン パーサーによる誤った解釈が回避されます。 その他の文字は、単一引用符で囲まれます。

例:

-t "|"

-t ' '

-t 0x0a

-t \t

-t '~|~'

-rrow_delimiter
ソース データ ファイルの各行の区切り記号。 行区切り記号は 1 つ以上の ASCII 値です。

復帰 (CR)、改行 (LF)、またはタブ文字を区切り記号として指定するには、エスケープ文字 (\r、\n、\t) またはその 16 進値 (0x, 0d, 09) を使用できます。 区切り記号として他の特殊文字を指定するには、その 16 進値を使用します。

CR + LF の例:

-r \r\n

-r 0x0d0x0a

CR の例:

-r \r

-r 0x0d

LF の例:

-r \n

-r 0x0a

Unix には LF が必要です。 Windows の場合は CR が必要です。

-sstring_delimiter
テキスト区切りの入力ファイル内の文字列データ型 フィールドの区切り記号。 文字列区切り記号は 1 つ以上の ASCII 値です。 これは、文字 (-s *など) または 16 進値 (二重引用符の場合は -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の各行には、1 つの列の名前とその列の文字数が含まれています。 次のように列ごとに 1 行あり、ファイル内の順序は変換先テーブルの順序と一致する必要があります。

column_name=num_chars

column_name=num_chars

固定幅構成ファイルの例:

SalesCode=3

SalesID=10

source_data_file_name の行の例:

230Shirts0056

320Towels1356

前の例では、最初に読み込まれた行には SalesCode='230' と SalesID='Shirts0056' があります。 読み込まれた 2 番目の行には、SalesCode='320' と SaleID='Towels1356' があります。

固定幅モードで先頭と末尾のスペースまたはデータ型の変換を処理する方法については、「dwloader のデータ型変換規則」を参照してください。

-echaracter_encoding
データ ファイルから読み込むデータの文字エンコードの種類を指定します。 オプションは ASCII (既定)、UTF8、UTF16、または UTF16BE です。UTF16 はリトル エンディアンで、UTF16BE はビッグ エンディアンです。 これらのオプションでは大文字と小文字が区別されません。

-e が UTF8 の場合、固定幅列はサポートされません。

-rrow_delimiter
ソース データ ファイルの各行の区切り記号。 行区切り記号は 1 つ以上の ASCII 値です。

復帰 (CR)、改行 (LF)、またはタブ文字を区切り記号として指定するには、エスケープ文字 (\r、\n、\t) またはその 16 進値 (0x, 0d, 09) を使用できます。 区切り記号として他の特殊文字を指定するには、その 16 進値を使用します。

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 }
入力ファイル内のすべての datetime フィールドの月 (m)、日 (d)、および年 (y) の順序を指定します。 既定の順序は ymd です。 同じソース ファイルに複数の順序形式を指定するには、-dt オプションを使用します。

ymd |dmy
ydm と dmy では、同じ入力形式を使用できます。 どちらの場合も、年を日付の先頭または末尾にすることができます。 たとえば、ydm 形式と dmy 日付形式の両方で、入力ファイルに 2013-02-03 または 02-03-2013 を含める場合があります。

ydm
ydm 形式の入力は、データ型 datetime と smalldatetime の列にのみ読み込むことができます。 datetime2、date、または datetimeoffset データ型の列に ydm 値を読み込むことはできません。

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 形式は、datetime_format_fileという名前のファイルで指定されます。 コマンド ライン パラメーターとは異なり、スペースを含むファイル パラメーターを二重引用符で囲むことはできません。 データを読み込む際に datetime 形式を変更することはできません。 コピー元データ ファイルとそれに対応するコピー先テーブルの列は、同じ形式である必要があります。

各行には、コピー先テーブルの列の名前とその datetime 形式が含まれます。

例:

LastReceiptDate=ymd

ModifiedDate=dym

-dstaging_database_name
新しいテーブルを格納するデータベースの名前。 既定値は、-T オプションを指定して指定されたデータベースです。これは、コピー先テーブルのデータベースです。 ステージング データベースの使用の詳細については、「ステージング データベースの作成」を参照してください。

-Mload_mode_option
データを追加、アップサート、または再読み込みするかどうかを指定します。 既定のモードは追加です。

append
ローダーは、コピー先テーブルの既存の行の末尾に行を挿入します。

fastappend
ローダーは、一時テーブルを使用せずに、コピー先テーブル内の既存の行の末尾に行を直接挿入します。 fastappend には、マルチトランザクション (-m) オプションが必要です。 fastappend を使用する場合は、ステージング データベースを指定できません。 fastappend によるロールバックはありません。つまり、失敗または中止された読み込みからの復旧は、独自の読み込みプロセスで処理する必要があります。

upsert -Kmerge_column [ ,...n ]
ローダーは、SQL Server マージ ステートメントを使用して既存の行を更新し、新しい行を挿入します。

-K オプションは、マージの基となる列を指定します。 これらの列は、固有の行を表すマージ キーを形成します。 マージ キーがコピー先テーブルに存在する場合は、行が更新されます。 マージ キーがコピー先テーブルに存在しない場合は、行が追加されます。

ハッシュ分散テーブルの場合、マージ キーは宛先列であるか宛先列を含んでいる必要があります。

レプリケート テーブルの場合、マージ キーは 1 つ以上の列の組み合わせです。 これらの列は、アプリケーションのニーズに応じて指定されます。

複数の列は、スペースを使用しないコンマ区切り、またはスペースでコンマ区切りし、単一引用符で囲む必要があります。

ソース テーブル内の 2 つの行に一致するマージ キー値がある場合、それぞれの行は同一である必要があります。

リロード
ローダーは、ソース データを挿入する前に、コピー先テーブルを切り捨てます。

-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 percentage と共に使用すると、ローダーは間隔 (-rs オプション) でパーセンテージを計算します。 したがって、失敗した行の割合が reject_value を超える可能性があります。

-rsreject_sample_size
増分パーセンテージ チェックを指定する -rt percentageオプションと共に使用されます。 たとえば、REJECT_SAMPLE_VALUE = 1000 の場合、ローダーによって1000 行の読み込みが試みられた後、失敗した行の割合が再計算されます。 1000 行ずつ追加で読み込みを試みた後、失敗した行の割合の再計算します。

-c
char、nchar、varchar、および nvarchar フィールドの左側と右側から空白文字を削除します。 空白文字のみを含む各フィールドを空の文字列に変換します。

例:

' ' は '' に切り捨てられます

' abc ' は 'abc' に切り捨てられます

-c を -E と共に使用すると、最初に -E 演算が実行されます。 空白文字のみを含むフィールドは、NULL ではなく空の文字列に変換されます。

-E
空の文字列を NULL に変換します。 既定では、これらの変換は実行されません。

-m
読み込みの第 2 フェーズにマルチトランザクション モードを使用します。ステージング テーブルから分散テーブルにデータを読み込む場合。

-m を使用すると、SQL Server PDW は負荷を並列で実行してコミットします。 これは、既定の読み込みモードよりもはるかに高速に実行されますが、トランザクション セーフではありません。

-m がない場合、SQL Server PDW は、各計算ノード内のディストリビューション間で、およびコンピューティング ノード間で同時に読み込みを実行およびコミットします。 この方法はマルチトランザクション モードよりも低速ですが、トランザクション セーフです。

-m は、追加再読み込みアップサート の場合はオプションです。

fastappend には -m が必要です。

-m はレプリケート テーブルでは使用できません。

-m は、2 番目の読み込みフェーズにのみ適用されます。 最初の読み込みフェーズ、ステージング テーブルへのデータの読み込みに適用されません。

マルチトランザクション モードでのロールバックはありません。つまり、失敗または中止された読み込みからの復旧は、独自の読み込みプロセスで処理する必要があります。

データを失うことなく復旧できるように、空のテーブルに読み込む場合にのみ -m を使用することをお勧めします。 読み込みエラーから復旧するには、宛先テーブルをドロップし、読み込みの問題を解決し、宛先テーブルを再作成して、読み込みを再実行します。

-N
ターゲット アプライアンスに、信頼された機関からの有効な SQL Server PDW 認証があることを確認します。 これを使用して、データが攻撃者によってハイジャックされ、承認されていない場所に送信されないようにします。 認証はアプライアンスに既にインストールされている必要があります。 認証をインストールする唯一の方法は、アプライアンス管理者が Configuration Manager ツールを使用して認証をインストールすることです。 アプライアンスに信頼された認証がインストールされているかどうかわからない場合は、アプライアンス管理者に問い合わせてください。

-se
空のファイルの読み込みをスキップします。 これにより、空の gzip ファイルの圧縮解除もスキップされます。

-l
CU7.4 更新プログラムで使用できるので、読み込むことができる最大行長 (バイト単位) を指定します。 有効な値は、32768 から 33554432 までの整数です。 クライアントとサーバーにより多くのメモリが割り当てられるので、大きな行 (32 KB を超える) を読み込む必要がある場合にのみ使用します。

リターン コードの値

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 のデータ型変換規則」を参照してください。

パラメーターに 1 つ以上のスペースが含まれている場合は、パラメーターを二重引用符で囲みます。

ローダーは、インストールされている場所から実行する必要があります。 dwloader 実行可能ファイルはアプライアンスと共にプレインストールされ、C:\Program Files\Microsoft SQL Server Data Warehouse\DWLoader ディレクトリにあります。

パラメーター ファイル (-f オプション) で指定されているパラメーターは、コマンド ライン パラメーターとして指定することでオーバーライドできます。

ローダーの複数のインスタンスを同時に実行できます。 ローダー インスタンスの最大数は事前に構成されており、変更できません。

読み込まれたデータでは、ソースの場所よりもアプライアンス上の領域が多かれ少なかれ必要になる場合があります。 データのサブセットを使用してテスト インポートを実行して、ディスクの使用量を見積もることができます。

dwloader はトランザクション処理であり、障害が発生すると正常にロールバックされますが、一括読み込みが正常に完了した後はロールバックできません。 アクティブな dwloader プロセスを取り消すには、Ctrl + C キーを押します。

制限事項と制約事項

同時に発生するすべての読み込みの合計サイズは、データベースのLOG_SIZEよりも小さくする必要があります。すべての同時読み込みの合計サイズは、LOG_SIZEの 50% 未満にすることをお勧めします。 このサイズ制限を実現するには、大きな読み込みを複数のバッチに分割します。 LOG_SIZE の詳細については、「CREATE DATABASE」を参照してください

1 つの読み込みコマンドを使用して複数のファイルを読み込むと、拒否されたすべての行が同じ拒否ファイルに書き込まれます。 拒否ファイルには、拒否された各行を含む入力ファイルは表示されません。

空の文字列は区切り記号として使用しないでください。 空の文字列を行区切り記号として使用すると、読み込みは失敗します。 列区切り記号として使用すると、読み込みでは区切り記号が無視され、列区切り記号として既定の "|" が引き続き使用されます。 文字列の区切り記号として使用すると、空の文字列は無視され、既定の動作が適用されます。

ロック動作

dwloader のロック動作は、load_mode_option によって異なります。

  • append - Append が推奨され、最も一般的なオプションです。 Append はステージング テーブルにデータを読み込みます。 ロックについては、以下で詳しく説明します。

  • 高速追加 - 高速追加は、ExclusiveUpdate テーブル ロックを受け取って最終的なテーブルに直接読み込み、ステージング テーブルを使用しない唯一のモードです。

  • reload - Reload はステージング テーブルにデータを読み込み、ステージング テーブルと最終テーブルの両方に排他的ロックを必要とします。 同時実行操作では、リロードは推奨されません。

  • upsert - Upsert はステージング テーブルにデータを読み込み、ステージング テーブルから最終テーブルへのマージ操作を実行します。 Upsert では、最終的なテーブルに対する排他的ロックは必要ありません。 upsert を使用すると、パフォーマンスが変わる場合があります。 環境内の動作をテストします。

ロック動作

追加モードのロック

Append はマルチトランザクション モード (-m 引数を使用) で実行できますが、トランザクション セーフではありません。 したがって、追加はトランザクション操作として使用する必要があります (-m 引数は使用しません)。 残念ながら、最後の INSERT-SELECT 操作では、トランザクション モードは現在、マルチトランザクション モードの約 6 倍遅くなります。

追加モードでは、2 つのフェーズでデータが読み込まれます。 フェーズ 1 では、ソース ファイルからステージング テーブルにデータを同時に読み込みます (断片化が発生する可能性があります)。 フェーズ 2 では、ステージング テーブルから最終的なテーブルにデータが読み込まれます。 2 番目のフェーズでは、IINSERT INTO...SELECT WITH (TABLOCK) 操作を実行します。 次の表は、最後のテーブルでのロック動作と、追加モードを使用するときのログの動作を示しています。

テーブルの種類 マルチトランザクション
Mode (-m)
テーブルが空です サポートされているコンカレンシー Logging
ヒープ はい 有効 はい 最小限
ヒープ はい いいえ はい 最小限
ヒープ いいえ はい いいえ 最小限
ヒープ いいえ いいえ いいえ 最小限
cl はい はい いいえ 最小限
cl はい いいえ はい Full
cl いいえ はい いいえ 最小限
cl いいえ いいえ はい Full

上の表は、マルチトランザクション フラグの有無にかかわらず、ヒープまたはクラスター化インデックス (CI) テーブルへの追加モードの読み込みを使用した dwloader と、空のテーブルまたは空でないテーブルへの読み込みを示しています。 このような読み込みの組み合わせごとのロックとログの動作がテーブルに表示されます。 たとえば、追加モードの (2 番目の) フェーズをマルチトランザクション モードなしでクラスター化インデックスに読み込み、空のテーブルに読み込むと、PDW によってテーブルに排他敵ロックが作成され、ログ記録は最小限になります。 つまり、顧客は (2 番目の) フェーズを読み込み、空のテーブルに同時にクエリを実行することはできません。 ただし、同じ構成を使用して空でないテーブルに読み込む場合、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 テーブルに読み込むデータを含むデータ ファイル DimAccount.txt の例を次に示します。

--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> は、読み込みを実行するアクセス許可を持つログインのログインとパスワードを指定します。