このモデルケース3では、Access上のテーブルのデータをCSVファイルに転送します。
テーブルをCSVファイルに出力するだけなら、Accessのマニュアル操作でも簡単に実行できます。またAccessのコマンドラインオプションを利用して、エクスポートを実行するマクロなどを自動起動させ、それをタスクスケジューラに設定することで夜間処理などを自動的に行わせることもできます。しかし、SSISを使うことで、他のさまざまなタスクと組み合わせた上でCSVファイルへのエクスポートを実行させることができますので、より拡張的な運用システムにすることができます。たとえば、CSVファイルとともにSQL
Serverへもエクスポートしたり、エクスポートしたCSVファイルをFTPでアップロードしたりといったことができます(もちろんこれらもAccess単体で実現できますが複雑なプログラムなどが必要となります)。
ここでは、Access上の「商品」テーブルの全レコードをそのまま「商品.csv」というファイル名で転送するパッケージを作成してみます。
- まず、プロジェクトに新しいSSISパッケージを追加し、その名前を「Case03.dtsx」とします。
- このパッケージに「データフロータスク」を追加します。
- 「制御フロー」タブ上の「データフロータスク」をダブルクリックして、「データフロー」タブに切り替えます。
- そこに「OLE DBソース」コンポーネントを追加します。
今回の場合、データの転送元はAccessのデータベースファイルなので、“OLE DBソース”となります。
- 次にデータの転送先を設定しますが、今回はCSVというテキストベースのファイルですので、ツールボックスの「データフローの変換先」のカテゴリから「フラットファイル変換先」コンポーネントをドラッグ&ドロップで追加します。
- データ転送のフローに沿って、「OLE DBソース」から「フラットファイル変換先」へと緑色のコネクタを結合します。
- 次に「OLE DBソース」の詳細設定を行いますが、このパッケージは新規作成されたものなので、接続マネージャがひとつも設定されていません。もちろん、これまでの説明のように「OLE
DBソースエディタ」ダイアログ上で新しい接続を作ることもできますが、同じプロジェクト内にせっかく同じAccessデータベースへの接続が定義されているので、それを流用することにします。
それには、前回までに作ったパッケージ(Case02.dtsxなど)を開いて、接続マネージャのウィンドウから当該Access接続を右クリックして[コピー]を実行、このCase03.dtsx上で[貼り付け]を実行します。それによってAccessへの接続マネージャの設定がこのパッケージへとコピーされます。
- 次に、「OLE DBソース」コンポーネントをダブルクリックして「OLE DBソースエディタ」ダイアログを開き、接続マネージャや転送元のテーブル名(ここでは「商品」テーブル)を指定します。
- 画面左のリストから「列」を選択し、「商品」テーブルのすべてのフィールドの中からCSVファイルに出力するフィールドを選択します。
- ここでは「説明」というフィールドがあり、これはAccess上「メモ型」フィールドになっています。メモ型フィールドの転送にはさらに別のコンポーネントを配置する必要がありますので、この時点ではチェックマークを外して出力対象外とします。
→ メモ型の転送についてはあとで説明します
- [OK]ボタンをクリックして設定を確定、「OLE DBソースエディタ」ダイアログを閉じます。
- 次に、「データフロー」タブ上の「フラットファイル変換先」コンポーネントをダブルクリックして、「フラットファイル変換先エディタ」ダイアログを開きます。
- フラットファイルの接続マネージャはまだ未設定ですので、[新規作成]ボタンをクリックしてそれをまず作成します。
- まずフラットファイルの形式を選択するダイアログが表示されます。これを見ると、カンマ区切りの他、固定長のファイルにも出力できることが分かると思います。ここでは[区切り記号]を選択して[OK]ボタンをクリックします。
- 「フラットファイル接続マネージャエディタ」ダイアログが表示されたら、[参照]ボタンを使うなどして「ファイル名」欄に出力先のCSVファイルのフルパスを指定します。
- ファイル名を指定したら必要に応じてその形式のいくつかの項目を設定します。・・・・ここでは「先頭データ行を列名として使用する」にチェックを付け、先頭行に見出しを出力するようにしています
- 次に、画面左のリストから「詳細設定」を選択します。これによって、列ごとの細かい属性を指定することができます。・・・・ここでは特に設定変更を行わずそのまま次へ進みます
- [OK]ボタンをクリックして設定を確定、「フラットファイル接続マネージャエディタ」ダイアログを閉じます。
- 「フラットファイル変換先エディタ」に戻ったら、「マッピング」を選択して転送元と転送先のフィールドの関係を確認します。必要であれば結合線を操作して変更を行います。
- 最後に[OK]ボタンをクリックして設定を確定、「フラットファイル変換先エディタ」ダイアログを閉じます。
- すべての設定変更が完了しましたので、デバッグ実行して、動作や処理結果を確認します。
さて、上記の設定では、Accessのテーブル上にあるメモ型フィールドをあえて除外してありました。ここで今後はメモ型フィールドも転送対象としてみます。
- まず「OLE DBソースエディタ」でメモ型フィールドである「説明」フィールドにチェックを付けます。
- 「フラットファイル変換先エディタ」ダイアログのマッピングで入力列と変換先列の「説明」フィールドどうしを結合します。
- デザイナに戻って「フラットファイル変換先」コンポーネントを確認してみると、赤丸に×のマークが表示されており、何らかの設定ミスがあることが分かります。さらにその上にマウスを移動してみると、エラー内容がポップアップ表示されます。
- この状態でパッケージを実行してみると、次のようなエラーメッセージが表示されます。
このメッセージから、メモ型である「説明」フィールドのデータはそのままではANSI形式のCSVファイルに出力できず、「データ変換」コンポーネントというものを使ってデータ変換しなければいけないことが分かります。
- そこで、ツールボックスの「データフロー変換」のカテゴリにある「データ変換」コンポーネントをデザイナ上にドラッグ&ドロップし、「OLE DBソース」と「フラットファイル変換先」の間に挿入(操作としてはコネクタのつなぎ変え)します。
- このような操作を行うときは、「OLE DBソース」から出ている緑色のコネクタをそのまま「データ変換」コンポーネントにつなぎ変えることができませんので、その線をクリックしてDELETEキーで削除したあと、あらためて緑色のコネクタを接続し直します。
- 新たに配置された「データ変換」コンポーネントをダブルクリックして「データ変換 変換エディタ」ダイアログを開きます。
- ここで、「名前」という項目にチェックマークを付けます。それによってすべての列が一度に選択されます(場合によってはひとつずつチェックを付けていきます)。
すると画面の下半分に列の一覧が表示されますが、よく見ると「説明」フィールドのデータ型が「Unicodeテキストストリーム [DT_NTEXT]」となっていることが分かります。これがエラーの原因です。そこで、ANSI形式のCSVファイルに保存できるように、「テキストストリーム
[DT_TEXT]」に変更します。
- なおここで、入力元の「説明」というフィールド名は、変換後の別名出力フィールド名として自動的に「説明 のコピー」となっていることが分かります。「データ変換」コンポーネントの処理では、入力元そのままのデータと、変換されたデータの両方が出力されるため、変換されたデータの方は入力元とは別の名前を指定する必要があるからです。この「○○○のコピー」という名称も、この画面で変更することができますので、適宜分かりやすい名前に変更します(例:「説明
のコピー」→「説明変換」)。
- [OK]ボタンをクリックしこのダイアログを閉じ、今度は「フラットファイル変換先エディタ」ダイアログを開きます。
- このダイアログで「マッピング」を選択すると、結合線が「データ変換」コンポーネントを追加する前の状態になっていることが分かります。そこで、データ変換後の列(「○○○のコピー」という列)と変換先の列をすべて結合し直します。また今回追加した「説明
のコピー」も、変換先の「説明」フィールドに新たに結合します。
- この設定で実行してみます。今度はメモ型フィールドもうまく変換処理され、エラーが起ることなく処理が完了します。
|