Changefeed ログ フィルタ

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_*']
    • 名前がtidb_で始まるscm1データベース内のすべてのテーブルをレプリケートします。

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

イベント フィルター規則

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 index 、およびdrop 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 式で指定されたすべての列が含まれていることを確認してください。そうしないと、レプリケーション タスクを作成できません。さらに、レプリケーション中にテーブル スキーマが変更され、テーブルに必要な列が含まれなくなった場合、レプリケーション タスクは失敗し、自動的に再開できません。このような状況では、構成を手動で変更し、タスクを再開する必要があります。

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