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

データベースの増分変更の検出(OracleからMongoDB ETLへ)

    データレプリケーション、ETL、PIIマスキング、およびその他の増分データ移動と操作アクティビティのためのデータベーステーブルへの追加と更新の検出は、IRI Workbench(WB)で設計および実行されるIRIVoracityワークフローで自動化できます。この記事では、Oracleソーステーブルの変更を定期的にチェックして、データをMongoDBターゲットに移動するタイミングを決定する方法について説明します。

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

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

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

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

    • ジョブは特定のディレクトリで実行されます
    • 環境変数は、最後に実行されたジョブのタイムスタンプを使用して設定されます
    • 現在のタイムスタンプが記録されます
    • 現在の変更がキャプチャされます
    • エラーレベルがチェックされ、成功したかどうかに応じて対処されます
    • 現在のタイムスタンプが最後に実行されたタイムスタンプを上書きします
    • 変更されたデータはCSVに変換されます
    • 最後のファイルが存在するのを待つためにストールが発生します
    • CSVファイルがMongoDBにインポートされます
    • エラーレベルがチェックされ、現在のファイルが切り捨てられます
    • 変更ファイルが削除されます


    ワークフローの各タスクブロックについて以下に説明します。パレットからVoracityワークフローを構築する方法については、この記事を参照してください。

    ディレクトリの変更

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

    LASTTIMEを設定

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

    Timestamp.scl

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

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

    Changes.scl

    この変換ブロックはいくつかのことを行います。以下に表示されているのは、このブロックの変換マッピング図です。入力はソーステーブルで、出力はファイル current.txtです。 。

    入力セクションオプション、 CREATION_DATE を持つすべてのレコードについて、クエリがソーステーブルに送信されます またはUPDATE_DATE 環境変数LASTTIMEより大きい 。

    出力には2つのターゲットがあるように見えますが、データは実際には2つの異なる条件を使用して同じファイルに追加されています。最初の出力セクションには、インクルードがあります CREATION_DATEを持つすべてのレコードを検索するステートメント LASTTIMEより大きい 。 CDC_TYPEと呼ばれる追加の出力フィールドもあります 。文字列「CREATE」がその新しいフィールドに記録されます。

    2番目の出力セクションでは、インクルード ステートメントは、 UPDATE_DATEを持つすべてのレコードを検索します LASTTIMEより大きい ここでCREATION_DATE UPDATE_DATEと等しくありません。 これにより、新しく作成されたファイルがこのパスに含まれないようになります。文字列「UPDATE」はCDC_TYPEに記録されます。

    エラーCoSort

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

    LastTimeTempの名前を変更

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

    Convert.scl

    この変換ブロックはcurrent.txtを取ります そしてそれをchanges.csvに変換します 。変換は、デフォルトの区切りファイルタイプからCSVになります。 CoSortでCSVプロセスタイプを使用すると、フィールド名を使用して出力ファイルの前にヘッダー行が追加されます。これは、必要に応じて他の操作(データマスキングなど)をデータに適用できるタスクブロックです。

    ファイルを待つ

    この待機ブロックは、バッチファイルを3秒間停止してから、 Changes.csvの存在を確認します。 続行する前にファイルします。

    MongoImport

    このコマンドブロックは、以下に示すように、プロパティビューで指定されたパラメータを使用してmongoimportコマンドを実行します。

    パラメータは、MongoDBデータベースが fnxと呼ばれることを示しています ファイルchanges.csvの内容が読み込まれます タイプはcsvです ヘッダーラインが含まれています フィールドを定義します。

    Voracityは、MongoDBデータを移動および操作する他の方法をサポートしていることに注意してください。組み込みの「FieldShield」関数を使用したデータマスキングにProgressODBCドライバーを使用するこの例を参照してください。 Voracityは、CoSortv10の/PROCESS=MongoDBサポートを介してAPIを介してBSONデータを直接処理することもできます。

    エラーの読み込み

    この決定ブロックは、変数 ERRORLEVELをチェックします MongoDBにインポートした後、0(または成功)を返したことを確認します。そうでない場合、ジョブは削除-変更に進みます およびEXIT ジョブが終了する場所をブロックします。 trueが返された場合、ジョブは次のブロックに進みます。

    現在の切り捨て

    このコマンドブロックは、ファイル current.txtを切り捨てます。 。これは、MongoDBにロードされたレコードをクリアするためです。インポートが失敗し、上記のブロックがジョブを終了した場合、これらの変更されたレコードは次のパスで追加されます。次に、ジョブが繰り返されると、変更されたレコードの次のグループとともにMongoDBにロードされます。

    変更を削除

    このコマンドブロックはchanges.csvを削除します 次のパスは、パス用に新しく作成されたファイルで開始されます。

    バッチファイル

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

    タスクスケジューラ

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

    結論

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

    ユースケースの詳細またはヘルプについては、[email protected]またはIRI担当者にお問い合わせください

    1. このアプローチは、ログベースの変更データキャプチャソリューションとは異なります。ログベースの変更データキャプチャソリューションは、通常、パフォーマンスのボトルネックがあり、特定のデータベースに限定されており、同時データ変換、PIIデータマスキング、クレンジングを有効にしません。 、およびレポート。

    1. PostgreSql INSERT FROM SELECT RETURNING ID

    2. OracleのテーブルからN番目の行を選択します

    3. psql \ copyを使用してタイムスタンプ列(dd.mm.yyyy hh.mm.ss)を含む.csvをインポートする

    4. Oracleを使用してDjangoで自動テストを作成する際のORA-65096エラーの修正