12.12. Debezium イベントレコードのタイムゾーン値の変換


Debezium がイベントレコードを発行する場合、レコード内のタイムスタンプフィールドのタイムゾーン値は、データソースのタイプと設定に応じて異なる場合があります。データ処理パイプラインおよびアプリケーション内でデータの整合性と精度を維持するには、Timezone Converter SMT を使用して、イベントレコードが一貫したタイムゾーンでタイムスタンプデータを表すようにします。

SMT は、converted.timezone 設定オプションを使用して、指定されたフィールドの値をターゲットタイムゾーンに変換します。ターゲットタイムゾーンは、America/New_York などの地理的タイムゾーンとして指定することも、+02:00 などの UTC オフセットとして指定することもできます。レコードのフィールドは UTC であることを前提としています。SMT は、指定されたタイムゾーンに加えて、include.list および exclude.list 設定オプションを使用して、特定のフィールドをタイムゾーン変換に含めたり除外したりする設定オプションも提供します。

SMT は、すべての Debezium および Kafka Connect の一時的および非一時的なタイプをサポートします。

詳細は以下のセクションを参照してください。

注記

夏時間に準拠するには、converted.timezone 設定オプションで地理的タイムゾーンを指定する必要があります。UTC オフセットを指定すると、変換により UTC からの固定オフセットが適用されますが、これは夏時間を採用している地域では不正確になります。固定の UTC オフセットの指定は、夏時間を採用していない特定のタイムゾーンにタイムスタンプフィールドを変換するときに便利です。

注記

include.listexclude.list の設定オプションは相互に排他的です。これらのオプションのいずれかのみを指定する必要があります。

12.12.1. 例: 基本的な Debezium タイムゾーンコンバーター SMT 設定

コネクターの Kafka Connect 設定で TimezoneConverter SMT を設定して、イベントレコード内の時間ベースのフィールドをターゲットタイムゾーンに変換します。

たとえば、イベントレコード内のすべてのタイムスタンプフィールドを UTC から Pacific/Easter タイムゾーンに変換するには、コネクター設定に次の行を追加します。

transforms=convertTimezone
transforms.convertTimezone.type=io.debezium.transforms.TimezoneConverter
transforms.convertTimezone.converted.timezone=Pacific/Easter

12.12.1.1. TimezoneConverter SMT を Debezium イベントレコードに適用した場合の効果

次の例は、TimezoneConverter 変換がイベントレコードのタイムスタンプフィールドを変更する方法を示しています。最初の例は、変換によって処理されない Debezium イベントレコードを示しています。レコードは元のタイムスタンプ値を保持します。次の例は、変換の適用後と同じイベントレコードを示しています。基本設定例で指定した設定 に従って、SMT はソースメッセージのタイムスタンプフィールドの元の UTC 値を Pacific/Easter タイムゾーン値に変換します。

例12.3 TimezoneConverter 変換による処理前のイベントレコード値

created_at フィールドの値は UTC 時間を示します。

{
        "before": null,
        "after": {
            "id": 1,
            "first_name": "Anne",
            "last_name": "Kretchmar",
            "email": "annek@noanswer.org",
            "created_at": "2011-01-11T16:40:30.123456789+00:00"
        },
        "source": {
            "version": "2.5.4.Final",
            "connector": "postgresql",
            "name": "PostgreSQL_server",
            "ts_ms": 1559033904863,
            "snapshot": true,
            "db": "postgres",
            "sequence": "[\"24023119\",\"24023128\"]",
            "schema": "public",
            "table": "customers",
            "txId": 555,
            "lsn": 24023128,
            "xmin": null
        },
        "op": "c",
        "ts_ms": 1559033904863
    }

例12.4 TimezoneConverter 変換による処理後のイベントレコード値

SMT は、created_at フィールドの元の UTC 値を、基本設定 の例で指定されたターゲットタイムゾーンである Pacific/Easter の時間に変換します。SMT は event_timestamp フィールドも追加します。

{
        "before": null,
        "after": {
            "id": 1,
            "first_name": "Anne",
            "last_name": "Kretchmar",
            "email": "annek@noanswer.org",
            "created_at": "2011-01-11T11:40:30.123456789-05:00"
        },
        "source": {
            "version": "2.5.4.Final",
            "connector": "postgresql",
            "name": "PostgreSQL_server",
            "ts_ms": 1559033904863,
            "snapshot": true,
            "db": "postgres",
            "sequence": "[\"24023119\",\"24023128\"]",
            "schema": "public",
            "table": "customers",
            "txId": 555,
            "lsn": 24023128,
            "xmin": null,
            "id": 100
        },
        "op": "c",
        "ts_ms": 1559033904863,
        "event_timestamp": 1626102708861
    }

12.12.2. 例: 高度な Debezium タイムゾーンコンバーター SMT 設定

イベントレコード内のすべてのタイムスタンプフィールドを変換するのではなく、特定のフィールドのみを変換するように SMT を設定できます。次の例は、SMT 設定の include.list オプションを使用して、イベントレコード内の created_at および updated_at タイムスタンプフィールドのみを変換する方法を示しています。次の設定では、地理的タイムゾーン指定子ではなく固定オフセットを使用して、時間を UTC から +05:30 に変換します。

transforms=convertTimezone
transforms.convertTimezone.type=io.debezium.transforms.TimezoneConverter
transforms.convertTimezone.converted.timezone=+05:30
transforms.convertTimezone.include.list=source:customers:created_at,customers:updated_at

場合によっては、特定のタイムスタンプフィールドをタイムゾーン変換から除外することが必要な場合があります。たとえば、イベントレコードの updated_at タイムスタンプフィールドをタイムゾーン変換から除外するには、次の例のように exclude.list 設定オプションを使用します。

transforms=convertTimezone
transforms.convertTimezone.type=io.debezium.transforms.TimezoneConverter
transforms.convertTimezone.converted.timezone=+05:30
transforms.convertTimezone.exclude.list=source:customers:updated_at

12.12.3. Debezium タイムゾーンコンバーター変換を設定するためのオプション

次の表に、TimezoneConverter SMT の設定オプションのリストを示します。

表12.14 TimezoneConverter SMT 設定オプション

プロパティー

説明

重要性

converted.timezone

タイムスタンプフィールドを変換するターゲットタイムゾーンを指定する文字列。ターゲットタイムゾーンは、America/New_York などの地理的タイムゾーンとして指定することも、+02:00 などの UTC オフセットとして指定することもできます。

string

include.list

SMT がタイムゾーン変換に含めるフィールドを指定するルールのコンマ区切りリスト。次のいずれかの形式を使用してルールを指定します。

source:<tablename>
指定されたテーブル名を持つソース情報ブロックと Debezium 変更イベントを照合します。SMT は、一致したテーブル内のすべての時間ベースのフィールドを変換します。
source:<tablename>:<fieldname>
指定されたテーブル名を持つソース情報ブロックと Debezium 変更イベントを照合します。SMT は、指定されたテーブル内の指定されたフィールド名を持つフィールドのみを変換します。
topic:<topicname>
指定されたトピック名のイベントを照合し、イベントレコード内の時間ベースのフィールドすべてを変換します。
topic:<topicname>:<fieldname>
指定されたトピック名のイベントを照合し、指定されたフィールドの値のみを変換します。
<matchname>:<fieldname>
存在する場合は、ソース情報ブロックのテーブル名と照合するヒューリスティック照合アルゴリズムを適用します。存在しない場合はトピック名と照合します。SMT は指定されたフィールド名の値のみを変換します。

list

medium

exclude.list

タイムゾーン変換から除外するフィールドを指定するルールのコンマ区切りリスト。次のいずれかの形式を使用してルールを指定します。

source:<tablename>
指定されたテーブル名を持つソース情報ブロックと Debezium 変更イベントを照合します。SMT は、一致したテーブル内の時間ベースのフィールドすべてを変換から除外します。
source:<tablename>:<fieldname>
指定されたテーブル名を持つソース情報ブロックと Debezium 変更イベントを照合します。SMT は、指定されたテーブル内の指定されたフィールド名に一致するフィールドを、変換から除外します。
topic:<topicname>
指定されたトピック名のイベントを照合し、トピック内の時間ベースのフィールドすべてを変換から除外します。
topic:<topicname>:<fieldname>
指定されたトピック名のイベントを照合し、トピック内の指定された名前のフィールドを変換から除外します。
<matchname>:<fieldname>
存在する場合は、ソース情報ブロックのテーブル名と照合するヒューリスティック照合アルゴリズムを適用します。存在しない場合はトピック名と照合します。SMT は、指定された名前を持つフィールドのみを変換から除外します。

list

medium

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.