変更フィードログフィルター
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: 無視するイベントの種類。このパラメータは文字列の配列を受け入れます。複数のイベントの種類を設定できます。現在、以下のイベントの種類がサポートされています。イベント タイプ エイリアス 説明 すべてのDML すべてのDMLイベントに一致します すべてのDDL すべてのDDLイベントに一致します 入れる DML insertDML イベントに一致アップデート DML updateDML イベントに一致消去 DML deleteDML イベントに一致スキーマを作成する DDL データベースを作成する create databaseイベントに一致ドロップスキーマ DDL データベースを削除 drop databaseイベントに一致テーブルを作成する DDL create tableイベントに一致ドロップテーブル DDL drop tableイベントに一致テーブルの名前を変更する DDL rename tableイベントに一致テーブルを切り捨てる DDL truncate tableイベントに一致テーブルを変更する DDL alter tabledrop indexすべての条項をcreate indexalter tableイベントに一致しますテーブルパーティションを追加する DDL add table partitionイベントに一致テーブルパーティションの削除 DDL drop table partitionイベントに一致テーブルパーティションを切り捨てる DDL truncate table partitionイベントに一致ビューを作成 DDL create viewイベントに一致ドロップビュー DDL drop viewイベントに一致スキーマの文字セットを変更して照合する DDL modify schema charset and collateイベントに一致テーブルを回復する DDL recover tableイベントに一致自動IDをリベースする DDL rebase auto idイベントに一致テーブルコメントの変更 DDL modify table commentイベントに一致テーブルの文字セットと照合を変更する DDL modify table charset and collateイベントに一致交換テーブルパーティション DDL exchange table partitionイベントに一致テーブルパーティションの再編成 DDL reorganize table partitionイベントに一致テーブルパーティションの変更 DDL alter table partitioningイベントに一致テーブルパーティションを削除する DDL remove table partitioningイベントに一致列を追加 DDL add columnイベントに一致ドロップ列 DDL drop columnイベントに一致列を変更する DDL modify columnイベントに一致デフォルト値を設定する DDL set default valueイベントに一致主キーを追加する DDL add primary keyイベントに一致主キーを削除する DDL drop primary keyイベントに一致インデックスの名前を変更する DDL rename indexイベントに一致インデックスの可視性を変更する DDL alter index visibilityイベントに一致TTL情報を変更する DDL alter ttl infoイベントに一致TTLの変更と削除 DDL テーブルのすべてのTTL属性を削除するDDLイベントに一致します 複数のスキーマの変更 DDL 同じDDL文内でテーブルの複数の属性を変更するDDLイベントに一致します。 注記:
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式で指定されたすべての列が含まれていることを確認してください。そうでない場合、レプリケーションタスクを作成できません。また、レプリケーション中にテーブルスキーマが変更され、必要な列がテーブルに含まれなくなった場合、レプリケーションタスクは失敗し、自動的に再開できません。このような場合は、手動で設定を変更してタスクを再開する必要があります。