※ 本記事は、Julien TESTUTによる”Measuring the end-to-end lag using the Snowflake Handler“を翻訳したものです。
2023年8月8日
定期的な顧客要件は、トランザクションがソースでコミットされた時点からターゲットでコミットされた時点までの遅延時間を測定することです。最近、Snowflakeをターゲットとして使用している顧客は、SnowflakeのCURRENT_TIMESTAMP()関数を使用してこのような要件を実装したいと考えていました。
GoldenGateで実行される操作タイプ、証跡からのソース・コミット・タイムスタンプ、およびCURRENT_TIMESTAMP()関数をデフォルト値として使用するターゲット・コミット・タイムスタンプを格納するために、ターゲットに追加の列を使用するアプローチが導入されました。CONVERT_TIMEZONE()を使用して、デフォルトのSnowflakeタイムスタンプ・タイムゾーンを’アメリカ/ロサンゼルス’から協定世界時(UTC)に変換し、GoldenGateコミット・タイムスタンプに一致させました。
次の3つの追加フィールド(GG_OP_TYPE、GG_SRC_COMMIT、GG_TRG_COMMIT)を含むターゲット表の例を次に示します。:
CREATE OR REPLACE TABLE SRCMIRROR_OCIGGLL.SRC_CITY (
CITY_ID NUMBER(10,0) NOT NULL,
CITY VARCHAR(50),
REGION_ID NUMBER(10,0),
POPULATION NUMBER(10,0),
GG_OP_TYPE VARCHAR(10),
GG_SRC_COMMIT TIMESTAMP_NTZ,
GG_TRG_COMMIT TIMESTAMP_NTZ DEFAULT CONVERT_TIMEZONE('America/Los_Angeles','UTC', CURRENT_TIMESTAMP(3)),
PRIMARY KEY (CITY_ID)
);
@GETENV関数を使用して、Oracle GoldenGateの証跡レコードのヘッダー部分(GGHEADER)から追加のメタデータ情報を取得します。:
- OPTYPE: 実行された操作のタイプ(INSERT、UPDATE、DELETE、SQL COMPUPDATE、PK UPDATE、TRUNCATE)を返します。
- COMMITTIMESTAMP: トランザクションがコミットされたときのトランザクション・タイムスタンプをYYYY-MM-DD HH:MI:SS.FFFFFFの形式で返します。
@GETENVは、COLMAPセクションのReplicatパラメータ・ファイルで使用されます。:
REPLICAT RSNOW
MAP SRC_OCIGGLL_JT.SRC_CITY, TARGET SRCMIRROR_OCIGGLL.SRC_CITY,
COLMAP (USEDEFAULTS, GG_OP_TYPE = @GETENV ('GGHEADER', 'OPTYPE'), GG_SRC_COMMIT = @GETENV ('GGHEADER', 'COMMITTIMESTAMP'));
Snowflake列GG_TRG_COMMITはマップしないことに注意してください。GoldenGateはロードされず、SnowflakeはCURRENT_TIMESTAMP関数を使用して現在のタイムスタンプを移入します。
Replicatを実行すると、3つの追加フィールドが正しく移入されていることがわかります。GoldenGate for Big Dataのネイティブ・スノーフレーク・ハンドラでは、30秒ごとにデータをロードするステージ&マージ・アプローチが使用されるため、ラグはデフォルトでこの値に近い値である必要があります。この時間間隔は、flush.intervalパラメータを使用して変更できます。
GG_SRC_COMMITおよびGG_TRG_COMMITに格納されたタイムスタンプを使用して、ソースとターゲット間のエンドツーエンド・ラグを計算できます。@GETENVなどのGoldenGate関数と、SnowflakeのCURRENT_TIMESTAMP()などのデータベース関数を使用して、この要件を簡単に実装できることがわかりました。GoldenGateでサポートされている他のテクノロジと同様のアプローチを使用できます。
