sql >> データベース >  >> RDS >> Database

SortCL互換のIRIジョブでのテーブルルックアップ

    はじめに

    構造化データの定義と操作のIRI言語であるSortCLには、2列以上の値を含む外部セットファイルから置換値を描画する機能が長い間ありました。この機能は、CoSortを利用したVoracity ETL操作でのルックアップ変換、FieldShieldの仮名化と復元機能、RowGenテストデータ合成ジョブでのランダム/有効なペアのデータ選択に使用されます。

    これらのセットファイルは、頻繁に変更されない情報に最適です。ただし、セットファイルは列の内容で並べ替える必要があるため、行を追加する必要がある場合、特にセットファイルが開いている/使用中の場合は、使用が面倒になる可能性があります。

    さらに、セットファイルの内容は、実際にはデータベースに由来することがよくあります。このような場合、テーブルから設定ファイルに値を抽出するには、追加の手順(IRI Workbenchの「列からファイルを設定」ウィザードの実行やSQL操作など)をジョブフローに追加する必要がありました。

    これらの欠点に対処するために、既存のデータベーステーブルからの置換値の直接検索が有効になっています。データベーステーブルからのルックアップは、セットファイルに対してすでに実行されているテーブルルックアップと同じ構文と構造を使用します。これにより、SortCLジョブの機能の一貫性が維持され、(複数のデータベースおよびセットファイル内の)より多くの値に一度にアクセスできるようになります。

    構文

    セットファイル内のデータにアクセスするためのSortCLフィールド属性構文は、従来、次のようになっています。

    SET="<Set_Source>"[<[ Search List ]>]
        [DEFAULT="string"]
        [ORDER=<Order Option>]
        [SELECT=<Select Option>]
        [SEARCH=<Search Option>]

    ここで、 パラメータは、設定されたファイルのパス名を示します。このパラメーターは、infileまたはoutfileステートメントで使用されるものと同じように、ODBCテーブル名と接続文字列にすることもできます。検索リストパラメータは、テーブルルックアップの場合、入力ソースの1つからの単一のフィールドを参照する必要があります。

    次に、SortCL(または互換性のある)プログラムは、このフィールドの値とデータベースのルックアップ列の間で一致するものを探します。一致する場合は、この行の置換列の値が新しいフィールドの最終値として使用されます。このフィールドの名前は、入力ソースの1つから参照されているフィールドとは異なる必要があります。

    ルックアップで使用されるテーブル列は、SETサブ属性の初期実装に追加される単一の言語要素で指定されます。LOOKUP=” < lvalue >、<>」。

    パラメータlvalue 検索する値を保持するテーブル内の列の名前です。これは、セットファイルの左側の列または最初の列に対応します。 partは、2列セットファイルの右側の列に対応し、置換として返される値を保持する列です。

    従来のセットファイルルックアップと同様に、一致するものがない場合はデフォルト値を指定する必要があります。 DEFAULT =” string”構文(“ string”は手動で指定されたデフォルト値)が使用されます。設定したファイルパラメータの間にコンマを入れないでください。

    すべてをまとめると、テーブルルックアップの構文の考えられる例は次のようになります。

    SET =” new_schema.info; DSN =New MySQL;” [ACCOUNT_NUMBER] LOOKUP =” ACCOUNTNUM、PHONENUM”

    これは、SortCLフィールド定義内のパラメーターである必要があります。この場合、「info」テーブルにはACCOUNTNUMおよびPHONENUMという名前の列が必要です。

    これらの新しいセットルックアップは、本番環境でどのように使用できますか?次のIRIジョブスクリプトの例を検討してください。

    例1 :データベースの置換値を使用してデータを疑似名付けします。

    このFieldShieldジョブは、DSN「Mangled」を介してアクセスされる「lookuptable」という名前のテーブルの「id」列から値を検索します。 IDフィールドが入力(テキストファイル)で参照されているデータベーステーブルのID列と同じである場合、出力(テキストファイルでもあります)のすべてのフィールドは、偽の、しかし現実的な置換値に置き換えられます。同じ参照テーブル。一致するものがない場合は、代わりにスクリプトで指定されたデフォルト値が出力されます。

    /INFILE=sensitiveData.txt
        /PROCESS=DELIMITED
        /INCOLLECT=200 # limit to 200 records
        /FIELD=(ID, TYPE=ASCII, POSITION=1, SEPARATOR="|")
        /FIELD=(NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|")
        /FIELD=(SSN, TYPE=ASCII, POSITION=3, SEPARATOR="|")
        /FIELD=(ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|")
    
    /REPORT
    
    /OUTFILE=pseudonymizedData.txt
        /PROCESS=RECORD
        /FIELD=(PSEUDO_ID, TYPE=ASCII, POSITION=1, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”0123456789” LOOKUP="id,fakeid")
        /FIELD=(PSEUDO_NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”John” LOOKUP="id,fakename")
        /FIELD=(PSEUDO_SSN, TYPE=ASCII, POSITION=3, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”555-55-5555” LOOKUP="id,fakessn")
        /FIELD=(PSEUDO_ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”583 West Ridge Rd” LOOKUP="id,fakeaddress")

    例2 :別のデータベースの置換値を使用してデータベーステーブルの3つの列を仮名化し、残りの列を暗号化します。

    このスクリプトは、「inputTable」という名前のデータベーステーブルから取得したIDフィールドに基づいてルックアップを実行し、DSN「Mangled」を介してアクセスされる「lookuptable」という名前のテーブルの「id」列を調べます。 「fakeid」、「fakename」、「fakessn」、および「fakeaddress」列の一致する値は、入力データIDフィールドからテーブルの「id」列に一致する場合に取得されます。一致するものがない場合は、代わりにデフォルト値が出力されます。

    出力は別のターゲットテーブルに送信されます。出力は入力と同じテーブルに送信することもできます。これにより、データが所定の位置にマスクされます。

    /INFILE=”inputTable;DSN=Mangled;”
        /PROCESS=ODBC
        /FIELD=(ID, TYPE=ASCII, POSITION=1, SEPARATOR="|")
        /FIELD=(NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|")
        /FIELD=(SSN, TYPE=ASCII, POSITION=3, SEPARATOR="|")
        /FIELD=(ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|")
    
    /REPORT
    
    /OUTFILE=”outputTable;DSN=Mangled;”
        /PROCESS=ODBC
        /FIELD=(PSEUDO_ID, TYPE=ASCII, POSITION=1, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”0123456789” LOOKUP="id,fakeid")
        /FIELD=(PSEUDO_NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”John” LOOKUP="id,fakename")
        /FIELD=(ENCRYPT_SSN=enc_fp_aes256_alphanum(SSN,”EPWD:p4PagGZq9k7JFaj6/J1/JQ==”, TYPE=ASCII, POSITION=3, SEPARATOR="|")
        /FIELD=(PSEUDO_ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”583 West Ridge Rd” LOOKUP="id,fakeaddress")

    例3 :さまざまなマスキング方法の現実的な代替品を使用して個人情報(PII)を保護します。

    入力ファイルには、いくつかの列(フィールド)にPIIが含まれています。入力CSVファイルの名フィールドと「NAMES」テーブルの「FIRST_NAME」列が一致する場合、同じテーブルの「LAST_NAME」列から置換名が出力されます。 「NAMES」テーブルの姓は、個人データ自体とは異なります。

    /INFILES=personalData.csv
        /PROCESS=CSV
        /ALIAS=PERSONALDATA_CSV
        /FIELD=(FIRST_NAME, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME="\"")
        /FIELD=(LAST_NAME, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME="\"")
        /FIELD=(SSN, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME="\"")
        /FIELD=(BIRTH_DATE, TYPE=AMERICAN_DATE, POSITION=4, SEPARATOR=",", FRAME="\"")
        /FIELD=(ADDRESS, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME="\"")
    
    /REPORT
    
    /OUTFILE=maskedData.csv
        /PROCESS=RECORD
        /FIELD=(FIRST_NAME, TYPE=ASCII, POSITION=1, SEPARATOR=",")
        /FIELD=(LAST_NAME_DB_SET, TYPE=ASCII, POSITION=2, SEPARATOR=",", SET="NAMES;DSN=mangled;" [FIRST_NAME] LOOKUP="FNAME,LNAME")
        /FIELD=(SSNENC=enc_fp_aes256_alphanum(SSN), TYPE=ASCII, POSITION=3, SEPARATOR=",")
        /FIELD=(BIRTH_DATEPLUS=BIRTH_DATE + 30, TYPE=AMERICAN_DATE, POSITION=4, SEPARATOR=",") 
        /FIELD=(ADDRESSSET, TYPE=ASCII, POSITION=5, SEPARATOR=",", SET="C:/IRI/cosort100/sets/addresses.set" SELECT=ANY)

    同じジョブスクリプト、マッピング図の概要、および元の名前テーブルが、Eclipse上に構築されたIRIWorkbenchIDEに以下に示されています。

    例4 :IRIRowGenを使用して参照的に正しいテストデータを生成する

    特定の日付に対応するデータを保持するデータベーステーブル、またはその他の場合によっては複数のテーブルについて考えてみます。 IRI RowGenとテーブルルックアップ機能を使用すると、(セットファイルから、またはランダムに生成された)日付を選択して、提供された日付入力に基づいて現実的な値に対応するフィールドを出力に追加できます。

    この例では、日付からの対応するすべてのデータが、以下に示すルックアップテーブルに保持されます(ただし、任意の数のテーブルから取得できます)。この表には、1年分の日付と、対応する関連する値があります。

    DATE入力フィールドの設定ファイルから、テーブルに含まれる日付の範囲内にある3つの日付が選択されます。

    セットファイルには、2019-10-11、2019-11-11、2019-12-11の3つのエントリが含まれています。

    /INFILE=random_file_placeholder
        /PROCESS=RANDOM
        /INCOLLECT=3
        /FIELD=(DATE, TYPE=ALPHA_DIGIT, POSITION=1, SEPARATOR=",", SET="C:/Users/Devon/Downloads/dates.set" SELECT=ALL)
    
    /REPORT
    
    /OUTFILE=testPriceData.xml
        /PROCESS=XML
        /FIELD=(DATE, TYPE=ALPHA_DIGIT, POSITION=1, SEPARATOR=",")
        /FIELD=(OPEN, TYPE=ALPHA_DIGIT, POSITION=2, SEPARATOR=",", SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="170" LOOKUP="Date,Open")
        /FIELD=(HIGH, TYPE=ALPHA_DIGIT, POSITION=3, SEPARATOR=",", SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="171" LOOKUP="Date,High")
        /FIELD=(LOW, TYPE=ALPHA_DIGIT, POSITION=4, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="169" LOOKUP="Date,Low")
        /FIELD=(CLOSE, TYPE=ALPHA_DIGIT, POSITION=5, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="170.5" LOOKUP="Date,Close")
        /FIELD=(ADJ_CLOSE, TYPE=ALPHA_DIGIT, POSITION=6, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="170.5" LOOKUP="Date,Adj_Close")
        /FIELD=(VOLUME, TYPE=ALPHA_DIGIT, POSITION=7, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="523210182" LOOKUP="Date,Volume")

    この例の出力は、ルックアップ値を含む標準のXMLファイルです。

    例5 :IRIVoracityETLおよびレポートジョブでルックアップ変換を実行する

    この例では、複数の顧客の口座番号と延滞額を含むCSVファイルがあります。テーブルルックアップは、出力の2つのフィールドで使用され、MySQLのマスターカスタマーファクトテーブルから追加の一致情報を取得します。そのテーブルはマスターカスタマーテーブルとして機能します。

    マスターテーブルには未払い額に関する情報がなく、延滞顧客アカウントのみを表示する入力ファイルよりもはるかに多くの顧客が含まれています。これにより、アカウント番号に基づいてテーブルから名前と電話番号が検索され、顧客の連絡先情報が記載された便利なレポート形式で.XLSXスプレッドシートに出力されます。

    入力CSV

    検索するマスターカスタマーテーブルのスニペット

    /INFILE=C:/Users/Devon/Downloads/accountnumsandamountDue.csv
        /PROCESS=CSV
        /ALIAS=accountnumsandamountDue
        /FIELD=(ACCOUNT_NUMBER, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME="\"")
        /FIELD=(AMOUNT_DUE, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME="\"")
    
    /REPORT
    
    /OUTFILE="'Past Due',HEADER;report.xlsx"
        /PROCESS=XLSX
        /FIELD=(ACCOUNT_NUMBER, TYPE=ASCII, POSITION=1, SEPARATOR="\t")
        /FIELD=(LOOKUP_NAME,TYPE=ASCII,POSITION=2, SEPARATOR="\t",SET="new_schema2.info;DSN=New MySQL;" [ACCOUNT_NUMBER] LOOKUP="ACCOUNTNUM,NAME")
        /FIELD=(LOOKUP_PHONE,TYPE=ASCII,POSITION=3, SEPARATOR="\t",SET="new_schema2.info;DSN=New MySQL;" [ACCOUNT_NUMBER] LOOKUP="ACCOUNTNUM,PHONENUM")
        /FIELD=(AMOUNT_DUE, TYPE=ASCII, POSITION=4, SEPARATOR="\t")

    「期限が過ぎた」レポートを出力する

    IRIWorkbenchサポート

    データベーステーブルのルックアップは、新しいフィールドルールウィザードからルールとして設定できます。このタイプのルールは、生成ルールでは「テーブルルックアップ」と呼ばれますが、他のジョブのフィールドルールとして複数のソースまたはターゲットで使用できます。

    原則としてテーブルルックアップを選択する場合、データベーステーブルと列名にアクセスして選択するには、接続プロファイルがすでに設定されているか、プロンプトが表示されたら作成されている必要があります。

    そこから、ルックアップに使用するテーブル、ルックアップ列、および置換値列を選択します。これで、このテーブルルックアップを、マッチャーに基づいて適用されるルールとして設定できます。

    セットは、フィールドエディタダイアログ内のSet:TableLookup値変換タイプから変更できます。

    テーブルルックアップフィールドルールがすでに設定および適用されている場合、これは必要ありません。ただし、このダイアログでは、DSN、テーブル、検索フィールド、ルックアップ列、結果列などのテーブルルックアップコンポーネントを手動で編集できます。デフォルト値もここで指定できます。

    概要

    セットルックアップには、ルックアップに必要なデータの取得を大幅に拡張および容易にすることができる、SortCLの新しい可能なソースが含まれるようになりました。これは、関係を維持する現実的な置換値を提供するためのマスキングまたはデータ生成操作で役立ちます。

    将来的には、セットを拡張して、さらに多くのデータソースを含めることができます。詳細については、IRIの担当者にお問い合わせください。

    1. 現在、RowGenユーザーは、ルックアップパラメーターなしで値をランダムに選択するためにセットファイルを利用していることに注意してください。この機能は、DBテーブルルックアップの最初の実装ではサポートされていません。これは、各データベースに、テーブルからランダムな行を選択するための特定のメソッドまたは構文があるためです。一部のデータベースは、ランダム選択をまったくサポートしていない場合があります。

    1. 初心者の場合、MySQLとPostgreSQLには大きな違いがありますか

    2. SQL Serverエラー:文字列またはバイナリデータが切り捨てられます

    3. .NET / SQL Serverの接続プール?

    4. MySQLで特定の文字の前後のすべてを選択する方法– SUBSTRING_INDEX()