本記事では、移行オブジェクトの一致ルールに関する背景情報、制限事項、設定方法、変更方法、データベース間シナリオの例、およびよくある質問について説明します。
背景情報
データ移行タスクを新規作成する際には、具体的な移行オブジェクトを指定する必要があります。データ移行では、オブジェクトの指定、インポートオブジェクト、マッチングルールの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つの集合で、最初の集合に存在し、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 をクリックします。カラムを表示 エリアで、移行オブジェクトの列情報を確認することもできます。
プロンプトに従って、後続のタスク設定を完了します。
シナリオ例
データベース内のテーブルのフラット移行
データ送信元のlgtestで始まる全データベース内の、cで始まる全テーブルをデータ送信先に移行します。データベース名とテーブル名は変更しません。マッチングルールの設定は以下のとおりです。

データベース内のテーブルの名前変更
データ送信元のlgtest2という名前のデータベース内の、booksで始まる全テーブルをデータ送信先に移行し、データベースlgtest2をlgtest2_newに名前変更します。テーブル名は変更しません。マッチングルールの設定は以下のとおりです。

データベース内のテーブルの集約
データ送信元のlgtestで始まる全データベース内の、cで始まる全テーブルをデータ送信先のデータベースlg_test1内のcoursesテーブルに集約します。マッチングルールの設定は以下のとおりです。

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

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

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

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

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