本記事では、移行対象オブジェクトのマッチングルールに関する背景情報、制限事項、設定方法、変更方法、利用例、およびよくある質問について説明します。
背景情報
データ移行タスクを新規作成する際には、具体的な移行対象オブジェクトを指定する必要があります。データ移行では、オブジェクトの指定、オブジェクトのインポート、マッチングルールの3つの方法から選択できます。その中で、マッチングルール方式ではワイルドカードルールを記述することで移行対象を指定・変更でき、データ送信元およびデータ送信先のオブジェクトマッピングロジックを設定できます。文字列のマッチングを利用することで、移行対象が多い場合でも設定を簡略化できます。また、マッチングルールに一致する新規テーブルは、増分DDLによって自動的にデータ送信先に同期されます。増分DDLの詳細については、DDL同期のサポート範囲と制限事項を参照してください。
データベース間のワイルドカードルールの説明
データ移行でサポートされているデータベース間のワイルドカードルールとその要件は以下のとおりです。
説明
下表のアスタリスク(*)はワイルドカードルールを示します。
双方向同期タスクは、データベースとテーブルの集約シナリオをサポートしていません。
カテゴリ |
サポートされているワイルドカード規則 |
例 |
説明 |
|---|---|---|---|
| データベース名とテーブル名を変更しない移行 | *.* | kd_test*.person* | データ送信元のkd_testで始まる全データベース内のpersonで始まる全テーブルをデータ送信先に移行します。データベース名とテーブル名は変更しません。 |
| データベース名とテーブル名を変更しない移行 | *.<データ送信元のテーブル> | kd_test*.person | データ送信元のkd_testで始まる全データベース内のpersonテーブルをデータ送信先に移行します。データベース名とテーブル名は変更しません。 |
| データベース名とテーブル名を変更しない移行 | <データ送信元のデータベース>.* | kd_test.person* | データ送信元のkd_testという名前のデータベース内のpersonで始まる全テーブルをデータ送信先に移行します。データベース名とテーブル名は変更しません。 |
| データベース名とテーブル名を変更しない移行 | <データ送信元のデータベース>.<データ送信元のテーブル> | kd_test.person | データ送信元のkd_testという名前のデータベース内のpersonという名前のテーブルをデータ送信先に移行します。データベース名とテーブル名は変更しません。 |
| データベース名とテーブル名の変更 | <データ送信元のデータベース>.<データ送信元のテーブル>=<データ送信先のデータベース>.<データ送信先のテーブル> | kd_test.person=kd_test_new.person_new | データ送信元のkd_testという名前のデータベース内のpersonという名前のテーブルをデータ送信先に移行し、データベースkd_testをkd_test_newに、テーブルpersonをperson_newに名前変更します。 |
| データベース名とテーブル名の変更 | <データ送信元のデータベース>.*=<データ送信先のデータベース>.* | kd_test.person*=kd_test_new.person* | データ送信元のkd_testという名前のデータベース内のpersonで始まる全テーブルをデータ送信先に移行し、データベースkd_testをkd_test_newに名前変更します。テーブル名は変更しません。 |
| データベース名とテーブル名の変更 | *.<データ送信元のテーブル>=*.<データ送信先のテーブル> | kd_test*.person=kd_test*.person_new | データ送信元のkd_testで始まる全データベース内のpersonという名前のテーブルをデータ送信先に移行し、テーブルpersonをperson_newに名前変更します。データベース名は変更しません。 |
| データベースとテーブルの集約 | <データ送信元のデータベース>.*=<データ送信先のデータベース>.<データ送信先のテーブル> | kd_test.person*=kd_test.person_all | データ送信元のkd_testという名前のデータベース内のpersonで始まる全テーブルをデータ送信先のデータベースkd_testの下にあるテーブルperson_allに集約します。 |
| データベースとテーブルの集約 | *.<データ送信元のテーブル>=<データ送信先のデータベース>.<データ送信先のテーブル> | kd_test*.person=kd_test_all.person | データ送信元のkd_testで始まる全データベース内のpersonという名前のテーブルをデータ送信先のデータベースkd_test_allの下にあるテーブルpersonに集約します。 |
| データベースとテーブルの集約 | *.*=<データ送信先データベース>.<データ送信先テーブル> | kd_test*.person*=kd_test_all.person_all | データ送信元で kd_test で始まる全データベース内の、person で始まる全テーブルを、データ送信先のデータベース kd_test_all 内のテーブル person_all に集約します。 |
| データベースとテーブルの集約 | *.*=<データ送信先データベース>.* | kd_test*.person*=kd_test_all.person* | データ送信元で kd_test で始まる全データベース内の、person で始まる全テーブルを、データ送信先のデータベース kd_test_all 内に集約します。テーブル名は変更しません。 |
| データベースとテーブルの集約 | *.*=*.<データ送信先テーブル> | kd_test*.person*=kd_test*.person_all | データ送信元で kd_test で始まる全データベース内の、person で始まる全テーブルを、データ送信先で kd_test で始まるデータベース内のテーブル person_all に集約します。データベース名は変更しません。 |
ワイルドカードルールの要件は以下のとおりです:
データ送信先のデータベース名とテーブル名の両方にワイルドカードを含めることはできません。例:
kd_test*.person*=kd_test*.person*。データ送信元のデータベース名とデータ送信先のデータベース名の両方にワイルドカードを含める場合、データベースレベルの式は完全に一致している必要があり、データベース名を変更しない移行を意味します。
データ送信元のテーブル名とデータ送信先のテーブル名の両方にワイルドカードを含める場合、テーブルレベルの式は完全に一致している必要があり、テーブル名を変更しない移行を意味します。
データ送信先のデータベース名にワイルドカードを含める場合、データ送信元のデータベース名にもワイルドカードを含める必要があります。
データ送信先のテーブル名にワイルドカードを含める場合、データ送信元のテーブル名にもワイルドカードを含める必要があります。
データベースからメッセージキューへのワイルドカード規則の説明
データ移行でサポートされているデータベースからメッセージキューへのワイルドカード規則とその要件は以下のとおりです。
説明
下表のアスタリスク(*)はワイルドカード規則を示します。
サポート対象のワイルドカード規則 |
例 |
説明 |
|---|---|---|
| *.*=<トピック名> | *.*=topic | 複数のデータベースにまたがる複数のテーブルを1つのトピックにマッピングします |
| *.<データ送信元テーブル>=<トピック名> | *.b=topic | 複数のデータベースのテーブルbを1つのトピックにマッピングします |
| <データ送信元データベース>.*=<トピック名> | a.*=topic | データベースaの複数のテーブルを1つのトピックにマッピングします |
| <データ送信元データベース>.<データ送信元テーブル>=<トピック名> | a.b=topic | データベースaのテーブルbを1つのトピックにマッピングします |
使用制限
データ移行では複数のルールを入力できますが、各ルールは行をまたいで記述できず、前後にスペースを含めることもできません。
移行対象オブジェクトのルールは必須です。除外オブジェクトのルールは空欄にできます。
データ移行は、構造移行や全量移行中のDDL変更をサポートしていません。
マッチングルールによって移行対象オブジェクトを選択する場合、データ移行はテーブル名に特殊文字(改行、スペース、および
.|"'`()=;/&*?[][!])を含む場合をサポートしていません。データ移行は、複数のマッチングルールを使用して、データ送信元の同一データベース内の異なるテーブルをデータ送信先の異なるデータベースにマッピングすることをサポートしていません。例:
a.a* = b.a* & a.b* = c.b*。データ移行は現在、
CREATE DATABASEのDDLステートメントをサポートしていません。新規作成されたデータベース名がデータ移行のマッチングルール内に含まれる場合、データ送信先で手動でデータベースを作成する必要があります。これにより、新規データベースのデータ同期を続行できます。
注意事項
移行対象オブジェクトルールと除外オブジェクトルールの設定が完了した後、データ送信元のテーブル名が移行対象オブジェクトルールと除外オブジェクトルールの差集合に含まれる場合、該当するオブジェクトを選択可能です。
説明
差集合とは、2つの集合のうち、一方の集合に含まれ、もう一方の集合には含まれない要素からなる集合です。
DDL同期機能を有効にした後、データ送信元でDDLステートメントを使用して新しいテーブルを作成/テーブル構造を変更すると、そのテーブル名/スキーマ名が移行対象オブジェクトルールと除外オブジェクトルールの差集合に含まれる場合、そのDDLステートメントはデータ移行によってリアルタイムでデータ送信先に同期されます。
データベースやテーブルを集約する場合:
データ送信元とデータ送信先の関係をマッチングルールを使用してマッピングすることを推奨します。
データ送信先で直接テーブル構造を作成することを推奨します。データ移行を使用して作成する場合は、構造移行のステップで一部の失敗したオブジェクトをスキップしてください。
データベースまたはテーブルの統合シナリオで DDL同期 を選択した場合、誤って削除されるリスクがあります。例えば、データ送信元の複数のデータベースやテーブルをデータ送信先の1つのデータベースやテーブルに統合します。このとき、データ送信元の1つのデータベースやテーブルを削除すると、データ送信先の統合されたデータベースやテーブルも削除される可能性があります。
新しいデータ移行タスクを作成する際、データ送信先テーブルに既にレコードがある場合の処理ポリシー は 無視 を選択してください。
テーブルにリネームマッピングが存在する場合、リネームマッピングが優先されます。例えば、ルール
a.b[0-3]とa.b[3-5]=a.cの両方が存在する場合、テーブルa.b3はa.cにリネームされます。RENAME TABLEのDDLステートメントを実行する際、RENAME後のテーブルオブジェクトが元のマッチングルールや除外ルールに含まれない場合、予期しない同期問題が発生する可能性があるため、慎重に操作してください。
データベース間のマッチングルールの設定
新しいデータ移行タスクを作成し、移行対象を選択 の手順まで設定を進めます。
詳細については、データ移行モジュールの該当するタイプの新規データ移行タスクのドキュメントを参照してください。
移行対象の選択 エリアで、マッチングルール を選択します。
オブジェクトの指定 または マッチングルール を使用して、移行対象オブジェクトを選択できます。ここでは、マッチングルールの設定方法について説明します。
移行対象の選択 エリアで、マッチングルール を選択します。
移行範囲の選択 エリアに、移行オブジェクトルール と 除外オブジェクトルール (オプション)を入力します。サポートされているマッチングルールの詳細については、ワイルドカードルールの説明を参照してください。
マッチング結果を確認する必要がある場合は、検証が成功した後に プレビュー をクリックして確認してください。入力したワイルドカード移行対象オブジェクトルールと除外オブジェクトルールは、テーブルとビューに同時に適用されます。マッチング結果 には、最終オブジェクト、追加されたオブジェクト、除外されたオブジェクトが含まれます。
オブジェクト説明最終オブジェクト 設定されたマッチングルールで最終的にマッチした移行対象オブジェクト。 追加されたオブジェクト 最終マッチング結果と前回設定のマッチング結果を比較した際の、新規に追加された移行対象オブジェクト。 除外されたオブジェクト 最終マッチング結果と前回設定のマッチング結果を比較した際の、移行対象から除外されたオブジェクト。 マッチングルールによって移行対象オブジェクトを選択した後、フィルター条件を設定する操作が可能です。

マッチング結果 > 最終オブジェクト パネルで、設定するオブジェクトにマウスカーソルを合わせます。
表示された 設定 アイコンをクリックします。
設定 ダイアログボックスで、標準SQL文の
WHERE句を入力して行フィルタリングを設定します。設定完了後、構文チェック をクリックします。詳細については、SQL条件でデータをフィルタリングするを参照してください。構文検証に合格したら、OK をクリックします。カラムを表示 エリアで、移行対象オブジェクトの列情報を確認することもできます。
画面の案内に従って、後続のタスク設定を完了します。
シナリオ例
データベース名とテーブル名を変更しない移行
データ送信元のmcmで始まるすべてのデータベースから、testで始まるすべてのテーブルをデータ送信先に移行します。データベース名とテーブル名は変更しません。マッチングルールの設定は以下のとおりです。

データベース名とテーブル名の変更
データ送信元のmcm_test1データベースから、testで始まるすべてのテーブルをデータ送信先に移行し、データベース名をmcm_newに変更します。テーブル名は変更しません。マッチングルールの設定は以下のとおりです。

データベースとテーブルの集約
データ送信元のmcmで始まるすべてのデータベースから、testで始まるすべてのテーブルを、データ送信先のmcm_newデータベース内のtest_allテーブルに集約します。マッチングルールの設定は以下のとおりです。

除外オブジェクトルールの設定
データ送信元のmcm_test1という名前のデータベース内の、testで始まるか、9で終わるテーブルは同期しないように設定します。マッチングルールの設定は以下のとおりです。

データベースからKafkaへの移行におけるマッチングルールの設定
OceanBaseデータベースのデータをKafkaに移行する際、マッチングルールを設定することで、移行対象オブジェクトを選択できます。
データ移行タスクの設定を タイプとオブジェクトの選択 のステップまで進めます。
詳細については、データ移行モジュールの該当タイプの新規データ移行タスクドキュメントを参照してください。
移行オブジェクトの選択 エリアで、マッチングルール を選択します。
移行オブジェクトルール と 除外オブジェクトルール(オプション)を入力します。サポートされているマッチングルールの詳細については、ワイルドカードルールの説明を参照してください。
OceanBaseデータベースのデータをKafkaに移行する際、多対一または一対一のマッピングがサポートされていますが、スペースは使用できません。移行タイプの選択時に スキーマ移行 が選択されていた場合は、既存のトピック名を指定するか、新しいトピックを作成できます。移行タイプの選択時に スキーマ移行 が選択されていなかった場合は、既存のトピック名のみを指定できます。
検証 をクリックします。
マッチング結果を確認する必要がある場合は、検証成功後に オブジェクトのプレビュー をクリックして表示します。マッチング結果 には、最終オブジェクト、追加されたオブジェクト、除外されたオブジェクトが含まれます。
マッチングルールでデータベースから移行するオブジェクトを選択した後、フィルター条件やシャーディング列などの設定を行うことができます。

マッチング結果 > 最終オブジェクト パネルで、設定するオブジェクトにマウスカーソルを合わせます。
表示された 設定 アイコンをクリックします。
設定 ダイアログボックスで、以下の操作を実行できます。
OceanBaseデータベースのオブジェクトを移行する場合、行フィルタ条件 エリアのテキストボックスに、標準SQL文の
WHERE句を入力して行フィルタリングを設定します。設定完了後、構文チェック をクリックします。詳細については、SQL条件でデータをフィルタリングするを参照してください。シャード列 のドロップダウンリストで、データ送信先のシャーディング列を選択します。複数のフィールドをシャーディング列として選択できます。このパラメータはオプションです。
シャーディング列を選択する際、特別な状況がない限り、デフォルトでプライマリキーを選択することを推奨します。プライマリキーに負荷の偏りがある場合は、一意の識別子で負荷が比較的均等なフィールドをシャーディング列として選択し、潜在的なパフォーマンス上の問題を回避してください。シャーディング列の主な役割は以下のとおりです:
負荷分散:データ送信先で同時実行書き込みが可能な場合、シャーディング列によってメッセージ送信に使用する特定のスレッドを区別します。
順序性:並列書き込みではメッセージの順序が入れ替わる可能性があります。OMSは、シャーディング列の値が同じメッセージの順序を保証します。ここでの順序とは、変更の順序(ある列に対するDMLの実行順序)を指します。
列の選択 エリアで、移行する列を選択します。詳細については、列フィルタリングを参照してください。
OK をクリックします。
移行対象オブジェクトのマッチングルールを変更する
マッチングルールの変更について
次の表は、マッチングルールを変更できるシナリオを示しています。
| データ移行タスクのステップ | データ移行タスクのステータス | ステップのステータス |
| / | 未開始 | / |
| 全量移行 | 実行中 | 実行中 |
| 失敗 | 失敗 | |
| 一時停止 | 一時停止 | |
| 増分同期 | 実行中 | 実行中 |
| 実行中 | 監視中 | |
| 失敗 | 失敗 | |
| 一時停止 | 一時停止 |
マッチングルールの変更操作
**オブジェクトを表示**ダイアログに進みます。
OceanBase Cloudコンソールにログインします。
左側のナビゲーションバーで、データサービス > **データ移行**をクリックします。
**データ移行ページで、データ移行**タブをクリックします。
**データ移行**タブで、ターゲットタスクの名前をクリックして詳細ページに進みます。
ページの右上隅にある**オブジェクトを表示をクリックし、移行オブジェクトと変更履歴**を確認します。
**オブジェクトを表示ダイアログで、右下隅のルールの変更**をクリックします。
**ルールの変更**ダイアログで、移行対象オブジェクトのマッチングルールを変更し、対象を追加または除外します。
**検証をクリックします。マッチング結果を確認する必要がある場合は、検証に成功した後にオブジェクトのプレビュー**をクリックして確認します。
マウスカーソルを新規オブジェクトに合わせて、表示される**設定**アイコンをクリックすると、新規オブジェクトにフィルター条件を設定できます。

**送信**をクリックします。
新規ルールで移行対象オブジェクトが追加されている場合は、移行タイプを再設定して事前チェックを行います。
OceanBaseデータベースのデータをKafkaに移行する際は、多対一または一対一のマッピングがサポートされていますが、スペースは使用できません。移行タイプの選択時に**スキーマ移行が選択されている場合は、既存のTopic名を入力するか、新しいTopicを作成できます。移行タイプの選択時にスキーマ移行**が選択されていない場合は、既存のトピック名のみを指定できます。
新しいルールによって移行対象から除外されるオブジェクトがある場合、その一覧が表示されます。
事前チェックに合格した場合、または移行対象から除外するオブジェクトに誤りがないことを確認した後、**送信**をクリックします。

よくある質問
権限が不足しています
データ送信元ユーザーの権限設定にご注意ください。ユーザーに付与された権限が不十分な場合、一部のオブジェクトがデータ移行の画面に表示されず、マッチングルールを正しく設定できないことがあります。そのため、権限が付与されていないオブジェクトを 除外オブジェクトルール に追加し、オブジェクトが見つからないためにデータ移行タスクが中断するのを防いでください。
DMLのフィルタリングがサポートされていません
DDL同期が有効になっていない場合、データ移行ではマッチングルールを使用してオブジェクトを選択できます。増分同期中に新規テーブルがマッチングルールを満たす場合、関連するDDLステートメントは無視されますが、データ移行はDMLステートメントの同期を続けるため、データ送信先のオブジェクトに書き込めずにデータ移行タスクが中断する可能性があります。そのため、データ送信先で新規テーブルを作成するか、そのテーブルをコンポーネントのブラックリストに追加する必要があります。