変更フィードログフィルター
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_で始まるすべてのテーブルを複製します。
詳細についてはテーブルフィルタ構文参照してください。
イベントフィルタールール
TiCDC v6.2.0以降では、イベントフィルターがサポートされています。イベントフィルタールールを設定することで、指定した条件を満たす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: このイベントフィルタルールが適用されるデータベースとテーブル。構文はテーブルフィルターと同じです。注記:
matcherデータベース名と一致するため、設定時には特に注意が必要です。例えば、event-filters設定が以下の場合:[filter] [[filter.event-filters]] matcher = ["test.t1"] ignore-sql = ["^drop"]ignore-sql = ["^drop"]DROP TABLE test.t1除外するだけでなくDROP DATABASE testも除外します。これは、matcherデータベース名testが含まれているためです。データベース全体ではなく、指定されたテーブルのみをフィルター処理する場合は、
ignore-sql値を["drop table"]に変更します。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: このパラメータは、指定された値を持つDELETE種類の DML イベントをフィルタリングするために使用される、デフォルトの SQL モードに従う SQL 式を受け入れます。ignore-insert-value-expr: このパラメータは、指定された値を持つINSERT種類の DML イベントをフィルタリングするために使用される、デフォルトの SQL モードに従う SQL 式を受け入れます。ignore-update-old-value-expr: このパラメータは、デフォルトの SQL モードに従う SQL 式を受け入れ、指定された古い値を持つUPDATE種類の DML イベントを除外するために使用されます。ignore-update-new-value-expr: このパラメータは、デフォルトの SQL モードに従う SQL 式を受け入れ、指定された新しい値を持つUPDATEDML イベントを除外するために使用されます。
注記:
- TiDB がクラスター化インデックスの列の値を更新すると、イベント
UPDATEがイベントDELETEとイベントINSERTに分割されます。TiCDC はこれらのイベントをイベントUPDATEとして識別しないため、正しくフィルタリングできません。- SQL式を設定する際は、
matcher一致するすべてのテーブルに、SQL式で指定されたすべての列が含まれていることを確認してください。そうでない場合、レプリケーションタスクを作成できません。また、レプリケーション中にテーブルスキーマが変更され、必要な列がテーブルに含まれなくなった場合、レプリケーションタスクは失敗し、自動的に再開できません。このような場合は、手動で設定を変更してタスクを再開する必要があります。