📣
TiDB Cloud Essential はパブリックプレビュー中です。このページは自動翻訳されたものです。原文はこちらからご覧ください。

変更フィードログフィルター

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_で始まるすべてのテーブルを複製します。

詳細についてはテーブルフィルタ構文参照してください。

イベントフィルタールール

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イベントに一致します
    入れるDMLinsert DML イベントに一致
    アップデートDMLupdate DML イベントに一致
    消去DMLdelete DML イベントに一致
    スキーマを作成するDDLデータベースを作成するcreate databaseイベントに一致
    ドロップスキーマDDLデータベースを削除drop databaseイベントに一致
    テーブルを作成するDDLcreate tableイベントに一致
    ドロップテーブルDDLdrop tableイベントに一致
    テーブルの名前を変更するDDLrename tableイベントに一致
    テーブルを切り捨てるDDLtruncate tableイベントに一致
    テーブルを変更するDDLalter table drop indexすべての条項をcreate index alter tableイベントに一致します
    テーブルパーティションを追加する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 : このパラメータは、指定された値を持つ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 式を受け入れ、指定された新しい値を持つUPDATE DML イベントを除外するために使用されます。

注記:

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

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