チェンジフィードログフィルター
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: 無視するイベント タイプ。このパラメータは文字列の配列を受け入れます。複数のイベント タイプを設定できます。現在、次のイベント タイプがサポートされています。イベント タイプ エイリアス 説明 すべてのDML すべてのDMLイベントに一致します すべてのDDL すべてのDDLイベントに一致 入れる DMML の insertDMLイベントに一致アップデート DMML の updateDMLイベントに一致消去 DMML の deleteDMLイベントに一致スキーマを作成する DDL データベースを作成する create databaseイベントに一致スキーマを削除する DDL データベースを削除 drop databaseイベントに一致テーブルを作成する DDL create tableイベントに一致ドロップテーブル DDL drop tableイベントに一致テーブル名の変更 DDL rename tableイベントに一致テーブルを切り捨てる DDL truncate tableイベントに一致テーブルを変更する DDL alter tableのすべての条項drop index含むalter tablecreate indexに一致しますテーブルパーティションを追加 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: このパラメータは、デフォルトの 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 式で指定されたすべての列が含まれていることを確認してください。そうでない場合、レプリケーション タスクを作成できません。また、レプリケーション中にテーブル スキーマが変更され、テーブルに必要な列が含まれなくなると、レプリケーション タスクは失敗し、自動的に再開できなくなります。このような状況では、手動で構成を変更してタスクを再開する必要があります。