目次


IBM InfoSphere Optim Test Data Management Solution 解説

第 3 回 Optim Designer による変換サービスの作成

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: IBM InfoSphere Optim Test Data Management Solution 解説

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:IBM InfoSphere Optim Test Data Management Solution 解説

このシリーズの続きに乞うご期待。

はじめに

IBM InfoSphere Optim Test Data Management Solution (以下、Optim TDM) はアプリケーション開発において、効果的なテスト・データ管理を実現するソリューションです。
前回は Optim Designer (以下、Designer) の GUI の説明と初期設定、およびデータベース内のデータを外部ファイルに保存する抽出サービスの作成方法について説明しました。
今回は、抽出ファイル内の個人情報データをマスクする変換サービスの作成手順について説明します。

変換サービスとは

変換サービスは抽出ファイル内に記録された表のデータを別のデータに置き換えるサービスです。また、データの保存先の表や列を変えることもできます。変換結果はファイル (抽出ファイルや CSV ファイル) に出力されます。

サンプル・シナリオでは、アプリケーションの機能拡張のために必要なテスト・データを用意するというストーリーになっています。アプリケーションの開発作業は外部ベンダーに依頼することもあるので、本番環境のデータをそのままテストに使用するのは個人情報保護の観点からみて大変危険です。そこで顧客一覧表の中の姓、名、住所、郵便番号等を、変換サービスを使って架空のものに置き換えます。Optim TDM ではこのような置き換え作業を「マスク」と呼んでいます。

表マップと列マップ

変換サービスを作成する際には、変換元の表と変換先の表の関連を指定する必要があります。この指定のために以下の二つのオブジェクトを用意します。

  • 表マップ ― 変換元と変換先の表の対応付けを指定します。
  • 列マップ ― 表マップで対応付けられた表の中の列の対応付けを指定します。データのマスク (置き換え) の方法もここで指定します。

それでは、実際に表マップと列マップを作成してみましょう。ここでは、表マップを独立した名前付きオブジェクトとして作成し、列マップはこの表マップの一部として含まれるローカル・オブジェクトとして作成します。

表マップの作成と編集

ディレクトリー・エクスプローラーでフォルダーを右クリックし、「新規表マップ」を選択して、「新規表マップ」ウィザードを表示します (図 1)。

図 1. 新規表マップ・ウィザード

名前 (TEST.TM01) と説明を入力し、「次へ」をクリックします。
次に、表マップのソース (変換の元となるデータ) を指定します (図 2)。
今回は前回抽出サービスで作成した抽出ファイルを使用します。このファイルは Optim ディレクトリーに登録されているので、「Optim ディレクトリー内のファイルを位置指定」を選択し、「ファイルの表示」ボタンを押します。Optim ディレクトリーに登録されていないローカル・ファイル・システム上のファイルを指定する場合は「Optim ファイルを参照」を選択します。また、「アクセス定義から作成」を選択し、アクセス定義が参照している表をソースとすることもできます。
ソースとする抽出ファイル (TEST.MASTER01) を選択し、「終了」をクリックします。

図 2. 表マップ・ソースの選択

表マップが作成されると、ディレクトリー・エクスプローラーのフォルダ内にアイコンと名前が表示され、表マップ・エディターが開きます (図 3)。
しかし、この時点ではソース表の情報のみが指定された状態なので、表マップの作成は完了していません。そこで、この表マップ・エディターで必要な残りの情報を入力して完成させます。エディターの中に出てくるターゲット表は、ソースから変換されるデータの出力形式を指定するものです。今回は表の構成は変更しないので、ソースとターゲットを同じ表にします。

図 3. 表マップ・エディター

「表マップ」タブを選択し、「ターゲット・データ・ストア別名」と「ターゲット・スキーマ」にソースと同じものを選択します。
選択が完了すると Designer はソース表に対応する表をターゲット・スキーマ内から自動的に見つけ出し、ターゲット表として下のリストに表示します。今回はソースとターゲットが同一なのでソースと同じ表が表示されます。表の対応付けは手動で編集することもできます。対応付けが行われた表の「ターゲット表状況」の欄には「有効」と表示されます。すべての表について「有効」となったことを確認し、一旦保存します。表マップ・エディタは開いたままにしておきます。

列マップの作成と編集

顧客一覧の表には顧客の住所・氏名などの個人情報が入っています。このデータをマスクするために列マップを作成します。
表マップ・エディタ下部のソース表で「顧客一覧」の行の「列マップ名」の欄をクリックしてから、「列マップの追加」ボタンを押して、「新規列マップ」ウイザードを表示させます (図 4)。

図 4. 新規列マップ・ウィザード

「ローカル列マップの作成」を選択し、「終了」を選択します。ローカル列マップが作成されると、ディレクトリー・エクスプローラーの、元の表マップ (TEST.TM01) のツリーの下にアイコンと名前が表示され、エディター領域に列マップ・エディターが表示されます (図 5)。
列マップ・エディターには、ターゲット表の列に対応するソース表の列が並べて表示されます。ターゲットの列と、名前とデータ・タイプの同じ列がソース表から自動で選択されます。見つからない場合は「ソース」の欄は空欄となりますので、手動で設定します。

図 5. 列マップ・エディター

今回はソース表とターゲット表が同一なので、ソースにはターゲット列名と全く同じものが対応づけられています。このままだとソースのデータがそのままターゲットに出力されるだけで変換は何も行われません。そこで顧客名や住所などの列をマスクの機能を使って架空のものに置き換えることにします。
データのマスクには「ポリシー」と呼ばれる関数を使います。ポリシーは言うなればデータ変換のためのルールで、Optim TDM には各種のポリシーが用意されています。
関数で生成できない人名などは、架空のデータが入った表からランダムに選び出すことで置き換えを行います。このような作業のためにあらかじめ用意しておく表を「ルックアップ表」と呼びますが、Optim TDM ではいくつかのルックアップ表をサンプル・データとして提供しています。

今回のシナリオでは、「日本用 Data Privacy Data」 という名前で製品に付属しているルックアップ表のデータ集を使用してマスクを行います。

具体的なマスクの方法について見ていきましょう。ルックアップ表のデータは開発環境 DB (WORK) にすでにロードされているという前提で説明していきます。

表 1. 使用するマスクの一覧
ターゲット列名マスク
顧客 IDソースの値をそのまま使用します
OPTIM_JP_PERSON 表からランダムに取得します
ソース列上の表記:
RAND_LOOKUP(WORK.DEVADMIN.OPTIM_JP_PERSON, LASTNAME)
OPTIM_JP_PERSON 表からランダムに取得します。
ソース列上の表記:
RAND_LOOKUP(WORK.DEVADMIN.OPTIM_JP_PERSON, FIRSTNAME)
郵便番号ソースの郵便番号からハッシュ値を生成し、OPTIM_JP_ADDRESSES 表から取得します
ソース列上の表記:
HASH_LOOKUP(郵便番号, WORK.DEVADMIN.OPTIM_JP_ADDRESSES(SEQ, ZIPCODE))
都道府県ソースの郵便番号からハッシュ値を生成し、OPTIM_JP_ADDRESSES 表から取得します
ソース列上の表記:
HASH_LOOKUP(郵便番号, WORK.DEVADMIN.OPTIM_JP_ADDRESSES(SEQ, PREFECTURE))
市区町村ソースの郵便番号からハッシュ値を生成し、OPTIM_JP_ADDRESSES 表から取得します
ソース列上の表記:
HASH_LOOKUP(郵便番号, WORK.DEVADMIN.OPTIM_JP_ADDRESSES(SEQ, CITY))
住所 1ソースの郵便番号からハッシュ値を生成し、OPTIM_JP_ADDRESSES 表から取得します
ソース列上の表記:
HASH_LOOKUP(郵便番号, WORK.DEVADMIN.OPTIM_JP_ADDRESSES(SEQ, ADDRESS1))
住所 2「X 丁目 X 番地」の形式の住所をランダムに生成します。
ソース列上の表記:
RAND(1,5)+'丁目'+RAND(1,14)+'番地'
累計売り上げソースの値をそのまま使用します
電話番号'0X0-XXXX-XXXX' の形式の電話番号をランダムに生成します。
ソース列上の表記:
'0'+RAND(8,9)+'0-'+RAND(1000, 9999)+'-'+RAND(1000,9999)

姓名のマスク:

顧客名は (架空の) 日本人の名前の入ったルックアップ表: OPTIM_JP_PERSON から姓と名をそれぞれランダムに取得します。

マスクの指定のための具体的な操作方法は以下の通りです。
列マップ・エディターの「列マップ」タブで、ソース列の「姓」を右クリックし、「ポリシーの適用」を選択します。表示される「ポリシーの適用」ダイアログで、「ルックアップ・プライバシー関数」-「Random Lookup 関数」を選択し、「OK」ボタンをクリックします (図 6)。

図 6. ポリシー選択ダイアログ

列マップ・エディターの下部の列マップ式の欄に 関数のテンプレート (ひな形) として RAND_LOOKUP(lktablename, value) が挿入されます。この関数はルックアップ表 'lktablename' の中からランダムに選んだ行に含まれる列: 'value' からデータを取り出します。エディターを使って引数の部分を実際の表と列の名前に書き換えます (表 1 参照)。同様の操作で「名」の列もマスクします。

住所のマスク:

住所関連の列のマスクには日本の郵便番号と住所の入ったルックアップ表 OPTIM_JP_ADDRESSES を使用します。ポリシーには Hash Lookup 関数を使います。この関数ではソース列の値からハッシュ値を生成し、その値を使って、ルックアップ表のどの行からデータを取得するかを決めます。ソースの「郵便番号」のハッシュ値を共通のキーとして使い、ターゲットの各行毎に「郵便番号」、「都道府県」、「市町村」、「住所 1」がルックアップ表の同じ行から取得されるようにします。こうすることによって、郵便番号と住所に整合性のとれた別のデータに置き換えることができます (図 7)。

図 7. ルックアップ表を使った氏名と住所のマスク

「住所 2」は郵便番号と関連性がないので、ランダムな値で「丁目」と「番地」のデータを生成します

電話番号のマスク:

電話番号も RAND 関数を用いて「0X0-XXXX-XXXX」の形式のデータを生成します。

「顧客 ID」と「累計売上」はソースの値をそのまま使用するので変更しません。

列マップ・エディターにエラーの表示がないことを確認し、変更を保存してエディターを閉じます (図 8)。

図 8. マスクの設定が完了した列マップ

表マップ・エディターには列マップがローカルに作成されたことを示す ”Local” が「列マップ名」の欄に表示されます。表マップ・エディターも保存して閉じます。

ポリシーのバリエーション

ポリシーはデータを置き換えるための変換の関数です。サンプル・シナリオでは RAND_LOOKUPHASH_LOOKUP といった関数を使って顧客リストの氏名や住所を架空のものに置き換えました。Optim TDM ではこの他にも様々なポリシーが用意されています (表 2)。各ポリシーの詳しい使い方や仕様については製品に付属のマニュアルをご覧ください。

表 2. ポリシーのグループとその内容
グループ内容
データ・マッピング数値、文字列、ブール値、日時などの値を直接指定するポリシーです。
データ操作連続値、ランダム、シャッフルなど、元のデータを規則に従って別のデータに変換するポリシーです
ルックアップ・プライバシー関数ルックアップ表を使って置き換えるポリシーです、今回説明した二つの他に、単純にルックアップ表を参照する LOOKUP があります。
個人情報名前、電話番号、生年月日などを生成するためのポリシーです。
口座番号銀行口座やクレジットカード番号を生成するためのポリシーです。
識別番号欧米各国の社会保障番号などを生成するためのポリシーです。
住所情報住所や e-mail アドレスなどを生成するためのポリシーです。

プロシージャー

このようにいくつものポリシーがあらかじめ用意さていますが、既存のポリシーでは対応しきれない複雑なビジネス・ロジックが必要な場合もあります。そのようなときにはプロシージャーを用います。プロシージャーは変換ロジックをスクリプト言語 (Lua) で記述しておく事ができる Optim のオブジェクトです。列マップの中でポリシーの代わりにプロシ-ジャーを指定すれば、必要に応じた変換作業を行うことができます。

変換サービスの作成

表マップと列マップが用意できたので、それらを使用して変換サービスを作成します。
ディレクトリー・エクスプローラーでフォルダーを右クリックし、「新規」 - 「サービス」を選択して、「新規サービス」ウィザードを表示します (図 9)。

図 9. 新規サービス・ウィザード

名前と説明を入力し、サービス・タイプとして「変換」を選択して、「次へ」をクリックします。「ソース・ファイルの選択」画面が表示されるので、表マップを作成したときと同様に、変換元の抽出ファイルを指定し、「次へ」をクリックします。「表マップの選択」画面では「表マップの選択」を選択し、先ほど作成した表マップ (TEST.TM01) を選択して、「次へ」をクリックします (図 10)。

図 10. 表マップの選択

最後にターゲット・ファイルの形式とファイル名を入力します。今回は Optim の「抽出」形式を選択します。変換後に出力されるファイル名 (TEST.WORK01) を入力し、「終了」をクリックします (図 11)。

図 11. ターゲット・ファイル・プロパティーの入力

変換サービス・エディター

変換サービスが作成されると、ディレクトリー・エクスプローラーのフォルダ内にアイコンと名前が表示され、エディター領域に変換サービス・エディターが開きます (図 12)。

図 12. 変換サービス・エディター

変換サービス・エディターの各タブの機能は表 3 の通りです。

表 3. 変換サービス・エディターのタブとその機能
タブ名機能
ファイル変換元のファイルを指定します。
ターゲット・ファイル・オプション変換後の出力ファイルの形式とファイル名を指定します。
レポート・オプションサービスの実行結果を知らせる処理レポートについての指定を行います。
処理オプション変換時の処理を指定します。
通知サービスの処理終了時に結果をメールで知らせる先を指定します。
サービス抽出サービスは実行後に関連付けられた変換サービスを連動させて実行することができます。このような場合「サービス」タブには関連元の抽出サービスの情報が表示されます。

変換サービスの実行

では、作成した変換サービスを実行してみましょう。
抽出サービスのときと同様に、組み込み Manager の「サービス管理」タブから実行し、「サービス・モニター」タブで結果を確認します。

変換結果を Browse ユーティリティーで見てみましょう。図 13 のように氏名、住所、電話番号が変換された文字列になっています。

図 13. 変換されたデータの確認

まとめ

今回は、本番データから作成した抽出ファイルの個人情報を変換サービスによってマスクしました。Designer を使用すると郵便番号と整合性のある架空の住所や、ランダムな電話番号を生成できます。出力されたファイルは個人情報がマスクされているので外部の開発者などにもテスト・データとして提供できるようになりました。
次回はマスクされた抽出ファイルからテスト・データを開発環境に挿入するサービスについて説明します。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Information Management
ArticleID=982882
ArticleTitle=IBM InfoSphere Optim Test Data Management Solution 解説: 第 3 回 Optim Designer による変換サービスの作成
publish-date=09122014