変更フィードログフィルター

TiCDC は、テーブルとイベントによるデータのフィルタリングをサポートしています。このドキュメントでは、2 種類のフィルターの使用方法を紹介します。

テーブルフィルター

テーブル フィルターは、次の構成を指定することで、特定のデータベースとテーブルを保持またはフィルターで除外できる機能です。

[filter] # Filter rules rules = ['*.*', '!test.*']

一般的なフィルター ルール:

  • rules = ['*.*']
    • すべてのテーブルをレプリケートします (システム テーブルは含まれません)。
  • rules = ['test1.*']
    • test1データベース内のすべてのテーブルをレプリケートする
  • rules = ['*.*', '!scm1.tbl2']
    • scm1.tbl2のテーブルを除くすべてのテーブルをレプリケートする
  • rules = ['scm1.tbl2', 'scm1.tbl3']
    • テーブルscm1.tbl2scm1.tbl3のみを複製する
  • rules = ['scm1.tidb_*']
    • scm1データベース内の名前がtidb_で始まるすべてのテーブルをレプリケートします。

詳細については、 テーブルフィルターの構文を参照してください。

イベントフィルタールール

v6.2.0 以降、TiCDC はイベント フィルターをサポートします。イベント フィルター ルールを構成して、指定した条件を満たす DML イベントおよび DDL イベントをフィルターで除外できます。

以下はイベント フィルター ルールの例です。

[filter] # The event filter rules must be under the `[filter]` configuration. You can configure multiple event filters at the same time. [[filter.event-filters]] matcher = ["test.worker"] # matcher is an allow list, which means this rule only applies to the worker table in the test database. ignore-event = ["insert"] # Ignore insert events. ignore-sql = ["^drop", "add column"] # Ignore DDLs that start with "drop" or contain "add column". ignore-delete-value-expr = "name = 'john'" # Ignore delete DMLs that contain the condition "name = 'john'". ignore-insert-value-expr = "id >= 100" # Ignore insert DMLs that contain the condition "id >= 100". ignore-update-old-value-expr = "age < 18 or name = 'lili'" # Ignore update DMLs whose old value contains "age < 18" or "name = 'lili'". ignore-update-new-value-expr = "gender = 'male' and age > 18" # Ignore update DMLs whose new value contains "gender = 'male'" and "age > 18".

設定パラメータの説明:

  • matcher : このイベント フィルター ルールが適用されるデータベースとテーブル。構文はテーブルフィルターと同じです。
  • ignore-event : 無視するイベントの種類。このパラメータは文字列の配列を受け入れます。複数のイベント タイプを設定できます。現在、次のイベント タイプがサポートされています。
イベントタイプエイリアス説明
すべてのDMLすべての DML イベントに一致します
すべての ddlすべての DDL イベントに一致します
入れるDMLinsert DML イベントに一致します
アップデートDMLupdate DML イベントに一致します
消去DMLdelete DML イベントに一致します
スキーマを作成するDDLデータベースを作成するcreate database件のイベントに一致
スキーマを削除するDDLデータベースを削除するdrop database件のイベントに一致
テーブルを作成するDDLcreate table件のイベントに一致
ドロップテーブルDDLdrop table件のイベントに一致
テーブルの名前を変更するDDLrename table件のイベントに一致
テーブルを切り捨てるDDLtruncate table件のイベントに一致
他の机DDLalter tablecreate indexdrop indexのすべての句を含むalter tableイベントに一致します
テーブルパーティションを追加するDDLadd table partition件のイベントに一致
テーブルパーティションを削除するDDLdrop table partition件のイベントに一致
テーブルパーティションを切り詰めるDDLtruncate table partition件のイベントに一致
ビューの作成DDLcreate view件のイベントに一致
ドロップビューDDLdrop view件のイベントに一致
  • ignore-sql : DDL ステートメントは無視されます。このパラメーターは文字列の配列を受け入れ、複数の正規表現を構成できます。このルールは DDL イベントにのみ適用されます。
  • ignore-delete-value-expr : このパラメータは SQL 式を受け入れます。このルールは、指定された値を持つ DML イベントの削除にのみ適用されます。
  • ignore-insert-value-expr : このパラメータは SQL 式を受け入れます。このルールは、指定された値を持つ DML イベントの挿入にのみ適用されます。
  • ignore-update-old-value-expr : このパラメータは SQL 式を受け入れます。このルールは、古い値に指定された値が含まれる更新 DML イベントにのみ適用されます。
  • ignore-update-new-value-expr : このパラメータは SQL 式を受け入れます。このルールは、新しい値に指定された値が含まれる更新 DML イベントにのみ適用されます。

注記:

  • TiDB がクラスター化インデックスの列の値を更新すると、TiDB はUPDATEイベントをDELETEイベントとINSERTイベントに分割します。 TiCDC はそのようなイベントをUPDATEイベントとして識別しないため、そのようなイベントを正しく除外できません。
  • SQL 式を構成するときは、 matcherに一致するすべてのテーブルに、SQL 式で指定されたすべての列が含まれていることを確認してください。そうしないと、レプリケーション タスクを作成できません。さらに、レプリケーション中にテーブル スキーマが変更され、テーブルに必要な列が含まれなくなると、レプリケーション タスクは失敗し、自動的に再開できなくなります。このような状況では、構成を手動で変更し、タスクを再開する必要があります。

このページは役に立ちましたか?