IDMC Cloud Mass Ingestion Database を使ってみた

この記事は [インフォマティカ Advent Calender 2022](https://qiita.com/advent-calendar/2022/informatica) Day 15 の記事として書かれています。

## はじめに
Day 4 の記事でMass Ingestionについて書きましたが、今回はその中のうちの一つ、Mass Ingestion Database(以下 CMI Database)の使い方・設定方法などをご紹介致します。

## Cloud Mass Ingestion Database
CMI Database はリレーショナルデータベースから大規模なデータを取り込み、クラウドベースのデータベースやクラウドデータウェアハウス等にデータを転送することができます。対象のデータベース次第では常時更新を監視し自動転送するChange Data Captureも出来ます！(これがあまり知られていない気がするので紹介したかったのです)

CMI Databaseは対象のデータソース、ターゲットにより以下の3つのタイプの転送(ロード)が実行できます。
#### 初期ロード
ある時点で読み取られたソースデータをターゲットにロードします。データがロードされると、取り込みジョブは終了します。

#### 増分ロード
データの変更を継続的に、またはジョブが停止または終了するまでプロパゲートします。ジョブは、最後に実行されてから、または特定の開始点から発生した変更をプロパゲートします。

#### 初期ロード及び増分ロード
ターゲットへのポイントインタイムデータの初期ロードを実行してから、同じソーステーブルに対して継続的に行われた増分データ変更のプロパゲートに自動的に切り替わります。

#### 対応するソース・ターゲット
各ロードタイプでサポートされるソースとターゲットの詳細については以下の通りです(2022/12月現在)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/479b93e7-4120-88c1-97df-7fe2fc10f378.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/69384d19-1bed-14f1-ac68-ed96b482332b.png)

## 実際に使ってみる
本記事ではMicrosoft SQLServerからSnowflakeへの転送を設定、実行してみます。
#####  0. 新規作成
CMIのホーム画面の[新規]から[データベース取り込みタスク]を選択し、新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/dbcfb38f-2613-c94e-c388-ce2f1afae8e7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/477b903d-8fbf-d0d0-e489-0682857baa67.png)

#####  1. 定義
▼定義
[名前]を入力し、[ランタイム環境]から使用するSecure Agentを選択し、[ロードタイプ]を選択します。今回は初期ロードと増分ロードを選択してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/8b785002-8da4-00f3-43eb-0c0c1ef43c9d.png)

#####  2. ソース
▼ソース
[接続]からSQLServerの接続を選択、スキーマも選択します。
▼テーブルの選択
取得対象のソーステーブルを選択します。今回はテーブルを個別に指定するため[ルールベースの選択]から個別のテーブルを追加しました。
その他はデフォルトのままで良いでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/2af93be1-6cb5-d020-0859-a8cce5ae18e3.png)

#####  3. ターゲット
▼ターゲット
[接続]からSnowflakeの接続を選択、[ターゲット作成]から今回は「ターゲットテーブルの作成」を選択します。[スキーマ]には投入先のSnowflakeスキーマを選択、[ステージ]にはテーブルに書き込む前の内部ステージング領域の名称を指定しますが、自動作成されるので好きな名前でOK。[適用モード]はデフォルトの標準で。
▼テーブル名の変更ルール
ターゲットに作成するテーブルの名称を決めることが出来ます。今回はSnowflakeに作成するテーブルにPrefixを付けた名前とする為、「CMIDB_SQLSERVER_*」のようにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/bb04e1a0-2e6f-9c98-2734-32da4d50e90a.png)

#####  4. スケジュール及び実行時オプション
▼スキーマドリフトオプション
CMI DatabaseやCMI Applicationの特徴であるスキーマドリフト機能。この機能を利用するとソース側のテーブル定義変更を透過的にターゲット側に反映させることが出来ます。勝手に反映されるのが好ましくなければ無視、あるいはその時点でジョブを停止させる 等のオプションもあります。今回は以下の通りデフォルトの設定ですが少し説明致しますと、、
ソース側SQLServerの対象テーブルにカラムの追加・変更があった場合はターゲット側のテーブルに自動反映させるため「レプリケート」、SQLServer側でカラムが削除されたり、カラム名が変更された場合は既存のターゲット側に反映させずにそのまま実行する「無視」設定としています。これ便利ですよ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/f61043ed-1840-9f8e-e85e-31ee4c2ea133.png)

#####  5. デプロイ
保存し、設定した内容で[デプロイ]します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/dafed303-dd4c-7d82-61c1-8ec9a3199b19.png)

#####  6. 実行
デプロイした CMI Databaseジョブを実行します。
左側メニューから[マイジョブ]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/7bf49129-9f29-7427-f950-6c0cb5f5b712.png)
デプロイしたジョブが見えますね。右端のメニューから「実行」を選択し、ジョブ実行を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/2c9f273b-ea8e-1458-5384-5f3488d19fb1.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/619601a0-b35f-64d9-807a-83d683dd455b.png)
インスタンス名のリンクをクリックするとジョブ詳細画面に遷移します。読み取ったレコード数、書き込んだレコード数が増えていくことが確認出来ますね。右上にはレプリケーション実行中のテーブルが4と出ています。今回は初期＋増分ロード設定としていますので、ソース側の変更を常時監視してターゲットに投入するChange data captureを実行するため、ジョブは常時起動しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/a3ebccd4-8dd6-e23e-d9eb-b615799fa013.png)
停止する場合は[マイジョブ]のジョブ名右端のメニューから「停止」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/76408744-f930-ef37-fbc3-7c58ac072a77.png)

## おわりに
CMI Databaseはデータベースのデータをリアルタイムにコピー/レプリケーションするのに利用できます。設定もご覧の通り、ウィザード形式で簡単です。この機能はIDMCの標準機能で提供されています。是非ご利用ください！