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

インクリメンタルデータのマスキングとマッピング:変更の検出と更新…

    増分データレプリケーション、マスキング、統合(ETL)、およびその他のデータ更新操作は、頻繁に更新されるデータベース環境では一般的です。これらのジョブでは、テーブルへの追加と更新を検出する必要があります。このような動的な操作は、IRI Workbench(WB)で設計および実行されるIRIVoracityワークフローで簡単に自動化できます。

    この記事には、Voracity、FieldShield、CoSort、またはNextForm DBMSエディションのユーザーが実装できるワークフローの例が含まれており、ソーステーブル(この場合はOracle)の変更を定期的にチェックして、データを新しいターゲット(MySQL)に移動するタイミングを決定します。また、このプロセスの一部としてデータを条件付きでマスクする方法も示しています。 IRIは、デルタ列の値を必要とせずにリアルタイムでデータをインクリメントするログベースのアプローチにも取り組んでいることに注意してください。

    タスクでスケジュールされたバッチファイルまたはシェルスクリプトを使用して、変更をさまざまなデータベースまたはファイルにロードできます。これは、タイムスタンプとソーステーブルの特定のフィールドを使用して実行できます。エラーチェックも含まれており、対処することもできます。

    この例は、Windowsマシンで作成および実行されています。 LinuxまたはUnixプラットフォームで動作するように簡単に変更できます。

    バッチファイルの作成は、WBのVoracityフロー図を使用して簡単に行えます。この例では、ソーステーブルに CREATED_DATEという名前の列が含まれています およびUPDATED_DATE それはこの仕事で重要です。

    以下の画像は、バッチファイルに含まれているステップを示しています。要約すると:

    • ジョブは特定のディレクトリで実行されます
    • 環境変数は、最後に実行されたジョブのタイムスタンプを使用して設定されます
    • 現在のタイムスタンプが記録されます
    • 現在の変更がキャプチャされます
    • エラーレベルがチェックされ、成功したかどうかに応じて対処されます
    • 現在のタイムスタンプが最後に実行されたタイムスタンプを上書きします
    • 「edu」で終わるメールを編集するルールがターゲットで使用されています
    • SSNフィールドを部分的に編集するルールがターゲットで使用されています
    • 変更されたデータがMySQLにロードされます
    • エラーレベルがチェックされ、一時タイムスタンプファイルの名前が変更されます

    ワークフローの各タスクブロックについて、以下で説明します。 2つの藤色ブロックは変換マッピングブロックであり、CoSortSortCLジョブスクリプトを表します。わかりやすくするために、各ブロックで表されるマッピング図とジョブスクリプトを以下に示します。パレットからVoracityワークフローを構築する方法については、この記事を参照してください。

    ディレクトリの変更

    このブロックは、現在の作業ディレクトリを指定されたディレクトリに変更します。

    LASTTIMEを設定

    このコマンドラインブロックは、 LASTTIMEと呼ばれる環境変数を設定します 。変数に設定される値は、ファイル LastTime.txtの内容です。 。このファイルのタイムスタンプは、このジョブの最後の実行中に記録されたタイムスタンプです。これが最初の実行である場合、このファイルは、このジョブが実行される前の日付の任意のタイムスタンプを使用して手動で作成する必要があります。

    このファイルには、「2008-09-10 09:39:23.5」

    という1行が含まれています。
    Timestamp.scl

    このタスクは、SortCLプログラムを使用して、現在の時刻のソースデータベースを照会します。そのタイムスタンプは、 LastTimeTemp.txtというファイルに保存されます 。一時ファイルに保存される理由は、エラーチェックが発生するまで現在と最後の両方のタイムスタンプを保持できるようにするためです。

    タイムスタンプは、ローカルマシンではなく、データベースから取得することが重要です。これにより、データベースと実行環境が同期されていない問題を回避できます。

    このジョブのマッピング図とシリアル化されたスクリプトは次のとおりです。

    Changes.scl

    このジョブは、主要な抽出、変換、ロードを実行します。入力はOracleのソーステーブルであり、出力はMySQLの同様の形式のテーブルです:

    入力セクション CREATED_DATE を持つすべてのレコードについて、クエリがソーステーブルに送信されます またはUPDATED_DATE 環境変数LASTTIMEより大きい 。クエリは「SELECT*FROM SCOTT.CLIENT WHERE CREATED> TO_TIMESTAMP(\'$ LASTTIME \'、\'YYYY-MM-DD HH24:MI:SS.FF1 \')OR(UPDATED> TO_TIMESTAMP(\'$ LASTTIME \ '、\' YYYY-MM-DD HH24:MI:SS.FF1 \'))」。

    さらに、 EMAILをチェックするための条件が追加されます 「edu」で終わるデータの列。これは、出力の条件付きデータマスキング関数で使用されます。出力では、 If-Then-Else ステートメントがEMAILに追加されます 桁。以前に作成された条件を使用してデータをテストします。データが「edu」で終わる場合、メールアドレスは編集されます。そうでない場合は、メールアドレスが入力からコピーされます。

    2番目の編集機能はSSNで使用されます 桁。最初の3文字を編集し、ダッシュを残し、次の2文字を編集し、ダッシュを残し、最後の4文字を残します。例:***-**-6789。

    以下は、上記のシリアル化されたSortCLジョブスクリプトであり、インクリメンタルデルタに含まれるクエリと条件付き構文を調べることができます。

    エラーCoSort

    決定ブロックは変数ERRORLEVELをチェックします 上記のSortCLジョブを実行した後、0(成功の場合)が返されることを確認します。そうでない場合、ジョブは ENDに進みます ジョブが終了するブロック。 trueが返された場合、ジョブは次のブロックに進みます。

    LastTimeTempの名前を変更

    このコマンドブロックは、 LastTimeTemp.txtの内容をコピーします LastTime.txtへ 。これにより、以前にキャプチャされた現在のタイムスタンプがファイルに記録され、次のジョブの実行に使用されます。

    バッチファイル

    バッチファイルと変換スクリプトは、フロー図(上に表示)がエクスポートされるときに作成されます。バッチファイルのコピーは以下のとおりです。各ブロックは、実行可能行をバッチファイルに追加します。

    タスクスケジューラ

    Windowsタスクスケジューラを使用すると、このバッチファイルを繰り返し実行して、ソースデータベースの変更をキャプチャできます。

    結論

    少し計画を立て、コマンドブロックを使用することで、データベーステーブルへの変更をバッチファイルを使用して自動的に検出し、選択した間隔で実行するようにスケジュールできるため、変更されたデータを移動、マッピング、マスク、その他の方法で操作できます。増分ベース。

    詳細やユースケースのサポートについては、[email protected]またはIRI担当者にお問い合わせください。


    1. PHPPDOと通常のmysql_connect

    2. SQL ServerのSYSDATETIME()とGETDATE():違いは何ですか?

    3. ORA-29280の解決方法:無効なディレクトリパス

    4. 言語の作成plpython3u– PostgreSQL 9.6