チェンジフィードログフィルター

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_*']
    • 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 のinsert DMLイベントに一致
    アップデートDMML のupdate DMLイベントに一致
    消去DMML のdelete DMLイベントに一致
    スキーマを作成するDDLデータベースを作成するcreate databaseイベントに一致
    スキーマを削除するDDLデータベースを削除drop databaseイベントに一致
    テーブルを作成するDDLcreate tableイベントに一致
    ドロップテーブルDDLdrop tableイベントに一致
    テーブル名の変更DDLrename tableイベントに一致
    テーブルを切り捨てるDDLtruncate tableイベントに一致
    テーブルを変更するDDLalter tableのすべての条項を含むalter table create index drop index一致します
    テーブルパーティションを追加DDLadd table partitionイベントに一致
    テーブルパーティションを削除するDDLdrop table partitionイベントに一致
    テーブルパーティションを切り捨てるDDLtruncate table partitionイベントに一致
    ビューを作成DDLcreate viewイベントに一致
    ドロップビューDDLdrop viewイベントに一致
    スキーマの文字セットと照合を変更するDDLmodify schema charset and collateイベントに一致
    テーブルを回復するDDLrecover tableイベントに一致
    自動 ID をリベースするDDLrebase auto idイベントに一致
    テーブルコメントの変更DDLmodify table commentイベントに一致
    テーブルの文字セットと照合を変更するDDLmodify table charset and collateイベントに一致
    交換テーブルパーティションDDLexchange table partitionイベントに一致
    テーブルパーティションを再編成するDDLreorganize table partitionイベントに一致
    テーブルパーティションの変更DDLalter table partitioningイベントに一致
    テーブルパーティションを削除するDDLremove table partitioningイベントに一致
    列を追加DDLadd columnイベントに一致
    ドロップ列DDLdrop columnイベントに一致
    列を変更するDDLmodify columnイベントに一致
    デフォルト値を設定するDDLset default valueイベントに一致
    主キーを追加するDDLadd primary keyイベントに一致
    主キーを削除するDDLdrop primary keyイベントに一致
    インデックス名の変更DDLrename indexイベントに一致
    インデックスの可視性を変更するDDLalter index visibilityイベントに一致
    TTL情報を変更するDDLalter 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 式を受け入れ、指定された新しい値を持つUPDATE DML イベントを除外するために使用されます。

注記:

  • TiDB がクラスター化インデックスの列の値を更新すると、TiDB はUPDATEイベントをDELETEイベントとINSERTイベントに分割します。TiCDC はこのようなイベントをUPDATEイベントとして識別しないため、このようなイベントを正しくフィルター処理できません。
  • SQL 式を構成するときは、 matcherに一致するすべてのテーブルに、SQL 式で指定されたすべての列が含まれていることを確認してください。そうでない場合、レプリケーション タスクを作成できません。また、レプリケーション中にテーブル スキーマが変更され、テーブルに必要な列が含まれなくなると、レプリケーション タスクは失敗し、自動的に再開できなくなります。このような状況では、手動で構成を変更してタスクを再開する必要があります。

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