📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

SQL 式を使用して DML イベントをフィルタリングする

このドキュメントでは、DMを使用して継続的な増分データレプリケーションを実行する際に、SQL式を使用してbinlogイベントをフィルタリングする方法を紹介します。レプリケーションの詳細な手順については、以下のドキュメントを参照してください。

増分データレプリケーションを実行する際に、 Binlogイベントフィルター使用して特定の種類のbinlogイベントをフィルタリングできます。例えば、アーカイブや監査などの目的で、 DELETEイベントを下流に複製しないように選択できます。ただし、 Binlogイベントフィルタは、より細かい粒度が求められる行のDELETEのイベントをフィルタリングするかどうかを判断できません。

この問題に対処するため、DM v2.0.5以降では、増分データレプリケーションにおいてbinlog value filter使用したデータのフィルタリングをサポートしています。DM対応のROW形式のbinlogでは、binlogイベントはすべての列の値を保持しており、これらの値に基づいてSQL式を設定できます。式で行の変更がTRUEと計算された場合、DMはこの行の変更を下流に複製しません。

Binlogイベントフィルターと同様に、タスク設定ファイルでbinlog value filter設定する必要があります。詳細については、以下の設定例を参照してください。詳細なタスク設定と説明については、 DM 高度なタスク構成ファイルを参照してください。

name: test task-mode: all mysql-instances: - source-id: "mysql-replica-01" expression-filters: ["even_c"] expression-filter: even_c: schema: "expr_filter" table: "tbl" insert-value-expr: "c % 2 = 0"

上記の設定例では、ルールeven_cが設定され、データソースmysql-replica-01によって参照されています。このルールによれば、スキーマexpr_filterのテーブルtb1において、列cc % 2 = 0 )に偶数が挿入された場合、この文insertは下流に複製されません。次の例は、このルールの効果を示しています。

次のデータをアップストリーム データ ソースに増分挿入します。

INSERT INTO tbl(id, c) VALUES (1, 1), (2, 2), (3, 3), (4, 4);

次に、下流のテーブルtb1に対してクエリを実行します。3 c奇数行のみがレプリケートされていることがわかります。

MySQL [test]> select * from tbl; +------+------+ | id | c | +------+------+ | 1 | 1 | | 3 | 3 | +------+------+ 2 rows in set (0.001 sec)

コンフィグレーションパラメータと説明

  • schema : 一致させる上流スキーマの名前。ワイルドカード一致や通常の一致はサポートされていません。
  • table : 照合するアップストリームテーブルの名前。ワイルドカードによる照合や通常の照合はサポートされていません。
  • insert-value-expr : INSERT種類のbinlogイベント (WRITE_ROWS_EVENT) によって伝達される値に適用される式を設定します。この式は、同じ設定項目内でupdate-old-value-exprupdate-new-value-expr 、またはdelete-value-exprと同時に使用することはできません。
  • update-old-value-expr : UPDATE種類のbinlogイベント(UPDATE_ROWS_EVENT)によって保持される古い値に適用される式を設定します。この式は、同じ設定項目内でinsert-value-exprまたはdelete-value-exprと同時に使用することはできません。
  • update-new-value-expr : UPDATE種類のbinlogイベント(UPDATE_ROWS_EVENT)によって送信される新しい値に適用される式を設定します。この式は、同じ設定項目内でinsert-value-exprまたはdelete-value-exprと同時に使用することはできません。
  • delete-value-expr : DELETE種類のbinlogイベント (DELETE_ROWS_EVENT) によって伝達される値に適用される式を設定します。この式はinsert-value-exprupdate-old-value-expr 、またはupdate-new-value-exprと同時に使用することはできません。

注記:

  • update-old-value-exprupdate-new-value-expr一緒に設定できます。
  • update-old-value-exprupdate-new-value-expr一緒に設定されている場合、「更新 + 古い値」がupdate-old-value-expr一致し 「更新 + 新しい値」がupdate-new-value-expr一致する行がフィルタリングされます。
  • update-old-value-exprupdate-new-value-exprのいずれかが設定されている場合、設定された式によって行の変更全体をフィルタリングするかどうかが決定されます。つまり、古い値の削除と新しい値の挿入が全体としてフィルタリングされます。

SQL式は1つの列でも複数の列でも使用できます。また、TiDBでサポートされているSQL関数( c % 2 = 0a*a + b*b = c*cts > NOW()など)も使用できます。

TIMESTAMPデフォルトタイムゾーンは、タスク設定ファイルで指定されたタイムゾーンです。デフォルト値はダウンストリームのタイムゾーンです。3 c_timestamp = '2021-01-01 12:34:56.5678+08:00'ように明示的にタイムゾーンを指定することもできます。

expression-filter設定項目で複数のフィルタリングルールを設定できます。上流データソースは、 expression-filtersの必要なルールを参照してルールを有効にします。複数のルールを使用する場合、いずれかのルールに一致すると、行の変更全体がフィルタリングされます。

注記:

式フィルタリング ルールを多く設定しすぎると、DM の計算オーバーヘッドが増加し、データ複製が遅くなります。

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