チェンジフィードログフィルター
TiCDC は、テーブルとイベントによるデータのフィルタリングをサポートしています。このドキュメントでは、2 種類のフィルターの使用方法を紹介します。
テーブルフィルター
テーブル フィルターは、次の構成を指定して、特定のデータベースとテーブルを保持または除外できる機能です。
[filter]
# Filter rules
rules = ['*.*', '!test.*']
一般的なフィルタールール:
rules = ['*.*']- すべてのテーブルを複製する(システムテーブルは含まない)
rules = ['test1.*']test1データベース内のすべてのテーブルを複製する
rules = ['*.*', '!scm1.tbl2']scm1.tbl2のテーブルを除くすべてのテーブルを複製する
rules = ['scm1.tbl2', 'scm1.tbl3']- テーブル
scm1.tbl2とscm1.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: 無視するイベント タイプ。このパラメータは文字列の配列を受け入れます。複数のイベント タイプを設定できます。現在、次のイベント タイプがサポートされています。注記:
TiDB の DDL ステートメントは、
ALTER TABLE t MODIFY COLUMN a INT, ADD COLUMN b INT, DROP COLUMN c;のように、単一テーブルの複数の属性を同時に変更することをサポートしています。この操作は MultiSchemaChange として定義されています。このタイプの DDL を除外する場合は、ignore-eventで"multi schema change"を構成する必要があります。ignore-sql: フィルター処理する DDL ステートメントの正規表現。このパラメータは文字列の配列を受け入れ、複数の正規表現を構成できます。この構成は DDL イベントにのみ適用されます。ignore-delete-value-expr: このパラメータは、デフォルトの SQL モードに従う SQL 式を受け入れ、指定された値を持つDELETE種類の DML イベントをフィルタリングするために使用されます。ignore-insert-value-expr: このパラメータは、デフォルトの SQL モードに従う SQL 式を受け入れ、指定された値を持つINSERT種類の DML イベントをフィルタリングするために使用されます。ignore-update-old-value-expr: このパラメータは、デフォルトの SQL モードに従う SQL 式を受け入れ、指定された古い値を持つUPDATE種類の DML イベントを除外するために使用されます。ignore-update-new-value-expr: このパラメータは、デフォルトの SQL モードに従う SQL 式を受け入れ、指定された新しい値を持つUPDATEDML イベントを除外するために使用されます。
注記:
- TiDB がクラスター化インデックスの列の値を更新すると、TiDB は
UPDATEイベントをDELETEイベントとINSERTイベントに分割します。TiCDC はこのようなイベントをUPDATEイベントとして識別しないため、このようなイベントを正しくフィルター処理できません。- SQL 式を構成するときは、
matcherに一致するすべてのテーブルに、SQL 式で指定されたすべての列が含まれていることを確認してください。そうでない場合、レプリケーション タスクを作成できません。また、レプリケーション中にテーブル スキーマが変更され、テーブルに必要な列が含まれなくなると、レプリケーション タスクは失敗し、自動的に再開できなくなります。このような状況では、手動で構成を変更してタスクを再開する必要があります。