一括インポート操作と一括エクスポート操作について
Microsoft SQL Server 2005 では、SQL Server テーブルからのデータの一括エクスポート、および SQL Server テーブルまたはパーティション分割されていないビューへのデータの一括インポートがサポートされています。使用できる基本的な方法を次に示します。
方法 | 説明 | データのインポート | データのエクスポート |
---|---|---|---|
データの一括エクスポートと一括インポート、およびフォーマット ファイルの生成を行うコマンド ライン ユーティリティ (Bcp.exe)。 |
○ |
○ |
|
データ ファイルのデータをデータベース テーブルまたはパーティション分割されていないビューに直接インポートする Transact-SQL ステートメント。 |
○ |
× |
|
INSERT ステートメントでデータを選択するために OPENROWSET(BULK…) 関数を指定することによって、OPENROWSET 一括行セット プロバイダを使用してデータを SQL Server テーブルに一括インポートする Transact-SQL ステートメント。 |
○ |
× |
インプロセス操作とアウト プロセス操作
BULK INSERT ステートメントおよび OPENROWSET(BULK) 関数は、SQL Server と同一のメモリ アドレス空間を共有してインプロセスで実行されます。データ ファイルが SQL Server プロセスによって開かれるので、クライアント プロセスと SQL Server プロセスとの間でデータのコピーは行われません。BULK INSERT または INSERT ... SELECT * FROM OPENROWSET(BULK...) を使用してデータをインポートする際のセキュリティに関する考慮事項については、「BULK INSERT または OPENROWSET(BULK...) を使用した一括データのインポート」を参照してください。
一方、bcp ユーティリティはアウト プロセスで実行されます。bcp を使用してプロセス メモリ領域の間でデータを移動するには、プロセス間のデータ マーシャリングを使用する必要があります。プロセス間のデータ マーシャリングは、メソッド呼び出しのパラメータをバイト ストリームに変換するプロセスです。**このプロセスにより、プロセッサに大きな負荷がかかる場合があります。ただし、bcp では、クライアント プロセスでデータを解析しネイティブの保存形式に変換するので、SQL Server プロセスの解析とデータ変換にかかる負荷が軽減される場合があります。そのため、CPU に制約がある場合は、BULK INSERT または INSERT ... SELECT * FROM OPENROWSET(BULK) を使用するのではなく bcp を使用することにより、複数個の CPU が搭載された 1 台のコンピュータか複数の異なるコンピュータで、一括インポートのパフォーマンスが向上する場合があります。
フォーマット ファイル
bcp ユーティリティ、BULK INSERT、および INSERT ... SELECT * FROM OPENROWSET(BULK...) では、フォーマット ファイルという特殊なファイルを使用して、データ ファイル内のフィールドごとにフォーマット情報を格納することができます。また、フォーマット ファイルには、対応する SQL Server テーブルに関する情報が含まれる場合もあります。フォーマット ファイルは、SQL Server のインスタンスからデータを一括エクスポートしたり、このインスタンスにデータを一括インポートしたりするのに必要なすべてのフォーマット情報を指定するために使用できます。
フォーマット ファイルを使用すると、インポートの際にデータ ファイルの形式に従ってデータを解釈したり、エクスポートの際にデータ ファイル内のデータに形式を適用する処理を柔軟に行えるようになります。これにより、SQL Server または外部アプリケーションの特定の必要性に応じてデータの解釈や再フォーマットを行うことだけを目的としたプログラムを作成する必要がなくなります。たとえば、コンマ区切り値が必要なアプリケーションに読み込まれるデータを一括インポートする場合、フォーマット ファイルを使用すると、エクスポートされたデータにフィールド ターミネータとしてコンマを挿入できます。
SQL Server 2005 では、XML フォーマット ファイルと XML 以外のフォーマット ファイルの 2 種類がサポートされます。XML 以外のフォーマット ファイルは、SQL Server の以前のバージョンでもサポートされていますが、XML フォーマット ファイルは SQL Server 2005 で新しくサポートされます。
フォーマット ファイルを生成できるツールは、bcp ユーティリティだけです。詳細については、「フォーマット ファイルの作成」を参照してください。フォーマット ファイルの詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル」を参照してください。
メモ : |
---|
一括エクスポート操作または一括インポート操作でフォーマット ファイルが正しく提供されなかった場合に備えて、ユーザーはコマンド ラインで既定の形式を上書きすることもできます。 |
クエリ プロセッサと一括インポート
データを SQL Server のインスタンスに一括インポートする際には、bcp ユーティリティ、BULK INSERT ステートメント、および INSERT ... SELECT * FROM OPENROWSET(BULK...) ステートメントがすべてクエリ プロセッサと連動して機能します。
これら 3 つのどの方法でも、データ ファイル内のデータは OLE DB の行セットに変換されます。ただし、変換方法は次のように異なります。
- bcp ユーティリティはデータ ファイルを読み取り、SQL Server の一括コピー プログラム (BCP) API に TDS ストリームを送信します。すると、この API によってデータが OLE DB の行セットに変換されます。
- BULK INSERT および OPENROWSET 一括行セット プロバイダはどちらも、ファイル データを OLE DB の行セットに直接変換します。
OLE DB の行セットがクエリ プロセッサによってインポート先テーブルに挿入されます。各操作はクエリ プロセッサによって計画および最適化されます。
パフォーマンスに関する注意点
大量のデータをインポートする場合は、パフォーマンスに関する注意点が重要になる場合もあります。一括インポート操作または一括エクスポート操作において、次の 1 つ以上の項目に対して処理方法を変更すると、パフォーマンスが向上する場合があります。
- バッチ スイッチ
- CHECK 制約の制約チェック
- 一括トランザクションのログ方法 (通常は完全復旧モデルを使用するデータベースに関して)
- エクスポートされたデータの並べ替え
- データの並列インポート
- テーブルのロック
- トリガの実行
詳細については、「一括インポートのパフォーマンスの最適化」を参照してください。
メモ : |
---|
一括エクスポート操作には特殊な最適化技法はありません。この操作では SELECT ステートメントを使用してエクスポート元のテーブルのデータを選択するだけです。 |
参照
概念
データの一括インポートに関する基本的なガイドライン
データをインポートまたはエクスポートするためのデータ形式
データの一括インポートとエクスポートのシナリオ
単一 SQL ステートメントの処理
その他の技術情報
XML データの一括読み込みの実行 (SQLXML 4.0)
SQL Server Integration Services
一括コピー操作の実行
bcp ユーティリティ
BULK INSERT (Transact-SQL)
データのインポートまたはエクスポート用のフォーマット ファイル
OPENROWSET (Transact-SQL)