8.2.30 スノーフレーク

トピック:

8.2.30.1 概要

スノーフレークは、Amazon Web Services (AWS)、Google Cloud Platform (GCP)またはMicrosoft Azureのクラウド・プロバイダのいずれかで動作するサーバーレス・データ・ウェアハウスです。

スノーフレーク・イベント・ハンドラは、スノーフレークにデータを複製するために使用されます。

8.2.30.2 詳細な機能

スノーフレークへのレプリケーションでは、ステージを使用し、データ・フローをマージします。
  • Oracle GoldenGateの証跡からの変更データは、一時的なステージング場所(内部または外部ステージ)でマイクロバッチにステージングされます。
  • ステージングされたレコードは、次にマージSQL文を使用してスノーフレーク・ターゲット表にマージされます。

この項の内容は次のとおりです。

8.2.30.2.1 ステージングの場所

Oracle GoldenGate証跡ファイルからの変更データ・レコードは、Avro OCF (オブジェクト・コンテナ・フォーマット)にフォーマットされ、ステージングの場所にアップロードされます。

変更データは、次のいずれかのオブジェクト・ストアにステージングできます。

  • スノーフレーク内部ステージ
  • スノーフレーク外部ステージ
    • AWS Simple Storage Service (S3)
    • Azure Data Lake Storage (ADLS) Gen2
    • Google Cloud Storage (GCS)

8.2.30.2.2 データベース・ユーザーの権限

スノーフレークへのレプリケーションに使用されるデータベース・ユーザーには、次の権限が付与されている必要があります。

  • ターゲット表に対するINSERTUPDATEDELETEおよびTRUNCATE
  • スノーフレーク指定ステージおよび外部ステージのCREATEおよびDROP
  • 外部ステージ(S3、ADLS、GCS)を使用する場合、外部表のCREATEALTERおよびDROP

8.2.30.2.3 前提条件

  • ターゲット表がスノーフレーク・データベースに存在することを確認します。
  • S3、ADLS Gen2またはGCSなどの外部ステージの場所を使用する場合は、Amazon Web Services、Google Cloud PlatformまたはAzureクラウド・アカウントを設定する必要があります。
  • スノーフレークJDBCドライバ

8.2.30.3 構成

スノーフレーク・レプリケーション・プロパティの構成は、Replicatプロパティ・ファイルに格納されます。

ノート:

調整Replicatを使用する場合のみ、パラメータ・ファイル内のプロパティ・ファイルへのパスを指定してください。次の行をパラメータ・ファイルに追加します。
TARGETDB LIBFILE libggjava.so SET property=<parameter file directory>/<properties file name>

8.2.30.3.1 自動構成

スノーフレーク・レプリケーションには、ファイル・ライター・ハンドラ、S3またはHDFSまたはGCSイベント・ハンドラ、ターゲット・スノーフレーク・イベント・ハンドラなどの複数のコンポーネントの構成が含まれます。

自動構成機能を使用すると、手動構成が最小限になるようにこれらのコンポーネントを自動構成できます。

自動構成によって変更されたプロパティもハンドラのログ・ファイルに記録されます。

自動構成でスノーフレーク・ターゲットに複製できるようにするには、パラメータgg.target=snowflakeを設定します。

パラメータgg.stageにより、ステージングの場所が決まります。gg.stageが設定されていない場合は、スノーフレーク内部ステージが使用されます。

gg.stages3absまたはgcsに設定されている場合は、それぞれAWS S3、ADLS Gen2またはGCSがステージングの場所として使用されます。

また、JDBCメタデータ・プロバイダは、スノーフレークからターゲット表メタデータを取得するように自動的に有効化されています。

8.2.30.3.1.1 ファイル・ライター・ハンドラの構成

ファイル・ライター・ハンドラ名はsnowflakeという値に事前設定されており、そのプロパティはスノーフレークに必要な値に自動的に設定されます。

ファイル・ライター・ハンドラのプロパティを追加または編集できます。たとえば:

gg.handler.snowflake.pathMappingTemplate=./dirout
8.2.30.3.1.2 S3ハンドラ構成

S3イベント・ハンドラ名は値s3に事前設定されており、S3構成と一致するように構成する必要があります。

次に、S3イベント・ハンドラのプロパティを編集する例を示します。

gg.eventhandler.s3.bucketMappingTemplate=bucket1
詳細は、「Amazon S3」を参照してください。
8.2.30.3.1.3 HDFSイベント・ハンドラ構成

Hadoop Distributed File System (HDFS)イベント・ハンドラ名は値hdfsに事前設定されており、HDFSに書き込むように自動構成されています。

Hadoop構成ファイルcore-site.xmlが、Azure Data Lake Storage (ADLS) Gen2ストレージ・アカウントのそれぞれのコンテナにデータ・ファイルを書き込むように構成されていることを確認します。詳細は、「HadoopクライアントおよびABFSを使用したAzure Data Lake Gen2」を参照してください。

次に、HDFSイベント・ハンドラのプロパティを編集する例を示します。

gg.eventhandler.hdfs.finalizeAction=delete
8.2.30.3.1.4 Google Cloud Storageイベント・ハンドラ構成

Google Cloud Storage (GCS)イベント・ハンドラ名は値gcsに事前設定されており、GCS構成と一致するように構成する必要があります。

次に、GCSイベント・ハンドラ・プロパティの編集例を示します。

gg.eventhandler.gcs.bucketMappingTemplate=bucket1
8.2.30.3.1.5 スノーフレーク・イベント・ハンドラ構成

スノーフレーク・イベント・ハンドラ名は、値snowflakeに事前設定されています。

スノーフレーク・イベント・ハンドラで使用可能な構成プロパティを次に示します。必要なプロパティは、スノーフレーク構成に一致するように変更する必要があります。

表8-35 スノーフレーク・イベント・ハンドラ構成

プロパティ 必須/オプション 有効な値 デフォルト 説明
gg.eventhandler.snowflake.connectionURL 必須 jdbc:snowflake://<account_name>.snowflakecomputing.com/?warehouse=<warehouse-name>&db=<database-name> なし スノーフレークに接続するためのJDBC URL。スノーフレーク・アカウント名、ウェアハウスおよびデータベースは、JDBC URLで設定する必要があります。
gg.eventhandler.snowflake.connectionURL 必須 サポートされている接続URL。 なし スノーフレークに接続するためのJDBC URL。スノーフレーク・アカウント名、ウェアハウスおよびデータベースは、JDBC URLで設定する必要があります。ウェアハウスは`warehouse=<warehouse name>`を使用して設定でき、データベースは`db=<db name>`を使用して設定できます。認可の場合、ロールは`role=<rolename>`を使用して設定する必要があります。
gg.eventhandler.snowflake.UserName 必須 サポートされているデータベース・ユーザー名文字列。 なし スノーフレーク・データベース・ユーザー。
gg.eventhandler.snowflake.Password 必須 サポートされているパスワード文字列。 なし スノーフレーク・データベース・パスワード。
gg.eventhandler.snowflake.storageIntegration オプション ストレージ統合名。 なし このパラメータは、ADLS Gen2、GCS、S3などの外部ステージを使用する場合は必須です。これは、スノーフレーク・データ・ウェアハウスがそれぞれのオブジェクト・ストア・ファイルにアクセスするための資格証明です。詳細は、スノーフレーク・ストレージ統合を参照してください。
gg.eventhandler.snowflake.maxConnections オプション 整数値 10 このパラメータは、ターゲット・スノーフレーク・データベースへの同時JDBCデータベース接続の数を制御するために使用します。
gg.eventhandler.snowflake.dropStagingTablesOnShutdown オプション true | false false trueに設定すると、Oracle GoldenGateによって作成された一時ステージング表は、Replicatの正常な停止時に削除されます。
gg.aggregate.operations.flush.interval オプション 整数 30000 flush intervalパラメータは、データがSnowflakeにマージされる頻度を決定します。値はミリ秒単位で設定されます。この値が大きいほど、Replicatプロセスのメモリーに格納する必要があるデータが多くなるため、注意して使用してください。

ノート:

flush intervalパラメータは慎重に使用してください。デフォルト値を増やすと、Replicatの内部メモリーに格納されるデータの量が増えます。これにより、メモリー不足エラーが発生し、メモリー不足になるとReplicatが停止する可能性があります。
gg.eventhandler.snowflake.putSQLThreads オプション 整数値 4 PUT SQLを使用してファイルをアップロードするために使用するスレッド数(`PARALLEL`句)を指定します。これは、スノーフレーク内部ステージ(名前付きステージ)が使用されている場合にのみ関係します。
gg.eventhandler.snowflake.putSQLAutoCompress オプション true | false false PUT SQLを使用したアップロード中にスノーフレークがgzipを使用してファイルを圧縮するかどうか(AUTO_COMPRESS句)を指定します。

true: ファイルは圧縮されます(まだ圧縮されていない場合)。

false: ファイルは圧縮されません(つまり、ファイルはそのままアップロードされます)。これは、スノーフレーク内部ステージ(名前付きステージ)が使用されている場合にのみ関係します。
gg.eventhandler.snowflake.useCopyForInitialLoad オプション trueまたはfalse true trueに設定すると、初期ロード時にCOPY SQL文が使用されます。falseに設定すると、初期ロード時にINSERT SQL文が使用されます。
gg.compressed.update オプション trueまたはfalse true trueを設定すると、ソース証跡ファイルに圧縮更新操作が含まれていることを示します。falseに設定すると、ソース証跡ファイルには、非圧縮更新操作が含まれることが想定されます。
gg.eventhandler.snowflake.connectionRetries オプション 整数値 3 ターゲット・データ・ウェアハウスへの接続が再試行される回数を指定します。
gg.eventhandler.snowflake.connectionRetryIntervalSeconds オプション 整数値 30 接続再試行間の遅延(分単位)を指定します。

8.2.30.3.2 スノーフレーク・ストレージ統合

外部ステージングの場所を使用する場合は、スノーフレーク・ストレージ統合を設定して、クラウド・オブジェクト・ストアにあるファイルにスノーフレーク・データベース読取り権限を付与してください。

構成プロパティgg.stageが設定されていない場合、ストレージ統合は不要であり、Oracle GoldenGateではデフォルトで内部ステージになります。

  • Azure Data Lake Storage (ADLS) Gen2のストレージ統合: Azureのストレージ統合の作成の詳細は、Azureのストレージ統合を作成するためのスノーフレークのドキュメントを参照してください。

    :
    -- AS ACCOUNTADMIN
    create storage integration azure_int
    type = external_stage
    storage_provider = azure
    enabled = true
    azure_tenant_id = '<azure tenant id>'
    storage_allowed_locations = ('azure://<azure-account-name>.blob.core.windows.net/<azure-container>/');
    
    desc storage integration azure_int;
    -- Read AZURE_CONSENT_URL and accept the terms and conditions specified in the link.
    -- Read AZURE_MULTI_TENANT_APP_NAME to get the Snowflake app name to be granted Blob Read permission.
    
    grant create stage on schema <schema name> to role <role name>;
    grant usage on integration azure_int to role <role name>;
  • Google Cloud Storage (GCS)のストレージ統合: GCSのストレージ統合の作成の詳細は、スノーフレークのドキュメントを参照してください。
    :
    create storage integration gcs_int
    type = external_stage
    storage_provider = gcs
    enabled = true
    storage_allowed_locations = ('gcs://<gcs-bucket-name>/');
    
    desc storage integration gcs_int;
    -- Read the column STORAGE_GCP_SERVICE_ACCOUNT to get the GCP Service Account email for Snowflake.
    -- Create a GCP role with storage read permission and assign the role to the Snowflake Service account.
    
    grant create stage on schema <schema name> to role <role name>;
    grant usage on integration gcs_int to role <role name>;
    
  • AWS S3のストレージ統合: S3のストレージ統合の作成の詳細は、スノーフレークのドキュメントを参照してください。

    ノート:

    S3を外部ステージとして使用する際、次のAWS資格証明へのアクセス権がすでにある場合、ストレージ統合を作成する必要はありません: AWSアクセス・キーIDおよび秘密キー。AWS資格証明は、jvm.bootoptionsプロパティで設定できます。
  • ストレージ統合名はアルファベット文字で始まる必要があり、識別子文字列全体がMy objectのように二重引用符で囲まれていないかぎり、スペースや特殊文字を含めることはできません。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

8.2.30.3.3 クラスパス構成

スノーフレーク・イベント・ハンドラは、スノーフレークJDBCドライバを使用します。クラスパスにJDBCドライバへのパスが含まれていることを確認します。外部ステージを使用する場合は、それぞれのオブジェクト・ストア・イベント・ハンドラの依存性をクラスパスに含める必要があります。

8.2.30.3.3.1 依存性

スノーフレークJDBCドライバ: 依存性ダウンローダ・ツールを使用して、次のスクリプトを実行することによってJDBCドライバをダウンロードできます: <OGGDIR>/DependencyDownloader/snowflake.sh

詳細は、「依存性ダウンローダ」を参照してください。

または、次の依存性ダウンローダ座標を使用してJDBCドライバをMaven Centralからダウンロードすることもできます。

<dependency>
   <groupId>net.snowflake</groupId>
   <artifactId>snowflake-jdbc</artifactId>
   <version>3.13.19</version>
</dependency>
  • ステージングの場所がS3に設定されている場合、クラスパスにはS3イベント・ハンドラ依存性が含まれている必要があります。S3ハンドラ構成を参照してください。
  • ステージングの場所がHDFSに設定されている場合、クラスパスにはHDFSイベント・ハンドラ依存性が含まれている必要があります。HDFSイベント・ハンドラ構成を参照してください。
  • ステージングの場所がGoogle Cloud Storage (GCS)に設定されている場合、クラスパスにはGCSイベント・ハンドラ依存性が含まれている必要があります。Google Cloud Storageイベント・ハンドラ構成を参照してください。

gg.classpath構成パラメータを編集して、オブジェクト・ストア・イベント・ハンドラ依存性(外部ステージが使用中の場合)およびスノーフレークJDBCドライバへのパスを含めます。

8.2.30.3.4 プロキシ構成

Replicatプロセスがプロキシ・サーバーの背後で実行される場合、jvm.bootoptionsプロパティ・プロキシ・サーバー構成を使用できます。

例:

jvm.bootoptions=-Dhttp.useProxy=true -Dhttps.proxyHost=<some-proxy-address.com>
-Dhttps.proxyPort=80 -Dhttp.proxyHost=<some-proxy-address.com> -Dhttp.proxyPort=80

8.2.30.3.5 INSERTALLRECORDSのサポート

ステージングおよびマージ・ターゲットでは、INSERTALLRECORDSパラメータがサポートされます。

『Oracle GoldenGateリファレンス』INSERTALLRECORDSを参照してください。Replicatパラメータ・ファイル(.prm)でINSERTALLRECORDSパラメータを設定します。Replicatパラメータ・ファイル(.prm)でINSERTALLRECORDSパラメータを設定します

このプロパティを設定すると、Replicatプロセスに、操作データをターゲット表にロードするための一括挿入操作を使用するように指示されます。一括挿入のバッチ・サイズは、ファイル・ライター・プロパティgg.handler.snowflake.maxFileSizeを使用してチューニングできます。デフォルト値は1GBに設定されています。一括挿入の頻度は、ファイル・ライター・プロパティgg.handler.snowflake.fileRollIntervalを使用してチューニングでき、デフォルト値は3m (3分)に設定されています。

ノート:

  • スノーフレーク内部ステージを使用する場合、gg.eventhandler.snowflake.putSQLAutoCompresstrueに設定してステージング・ファイルを圧縮できます。

8.2.30.3.6 スノーフレーク・キー・ペア認証

スノーフレークは、ユーザー名とパスワードを使用した基本認証の代替としてキー・ペア認証をサポートしています。

秘密キー・ファイルへのパスは、プロパティprivate_key_fileを使用してJDBC接続URLに設定する必要があります。

秘密キー・ファイルが暗号化されている場合、接続URLにはプロパティprivate_key_file_pwdも含める必要があります。

さらに、接続URLには、プロパティuserを設定して各公開キーが割り当てられているSnowflakeユーザーも含める必要があります。

JDBC接続URLの例:
jdbc:snowflake://<account_name>.snowflakecomputing.com/?warehouse=<warehouse-name>
 &db=<database-name>&private_key_file=/path/to/private/key/rsa_key.p8
 &private_key_file_pwd=<private-key-password>&user=<db-user>
キー・ペア認証を使用する場合は、Snowflakeイベント・ハンドラのパラメータUsernameおよびPasswordが設定されていないことを確認します。

ノート:

Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)をバージョン21.10.0.0.0にアップグレードすることをお薦めします。21.10.0.0.0にアップグレードできない場合は、JDBC URLを変更して'\'文字を'/'に置き換えます。

8.2.30.3.7 ソースJSON/XMLからSnowflake VARIANTへのマッピング

Oracle GoldenGate証跡のJSONおよびXMLソース列タイプは、自動的に検出され、Snowflake VARIANTにマップされます。

logdumpを使用して、Oracle GoldenGate証跡ファイルでJSONおよびXMLタイプのメタデータを検査できます。

例: JSONおよびXMLタイプを示すlogdump出力:
022/01/06 01:38:54.717.464 Metadata             Len 679 RBA 6032
Table Name: CDB1_PDB1.TKGGU1.JSON_TAB1
*
 1)Name          2)Data Type        3)External Length  4)Fetch Offset      5)Scale         6)Level
 7)Null          8)Bump if Odd      9)Internal Length 10)Binary Length    11)Table Length 12)Most Sig DT
13)Least Sig DT 14)High Precision  15)Low Precision   16)Elementary Item  17)Occurs       18)Key Column
19)Sub DataType 20)Native DataType 21)Character Set   22)Character Length 23)LOB Type     24)Partial Type
25)Remarks
*
TDR version: 11
Definition for table CDB1_PDB1.TKGGU1.JSON_TAB1
Record Length: 81624
Columns: 7
ID                                              64     50        0  0  0 0 0     50     50     50 0 0 0 0 1    0 1   2    2       -1      0 0 0
COL                                             64   4000       56  0  0 1 0   4000   8200      0 0 0 0 0 1    0 0   0  119        0      0 1 1  JSON
COL2                                            64   4000     4062  0  0 1 0   4000   8200      0 0 0 0 0 1    0 0   0  119        0      0 1 1  JSON
COL3                                            64   4000     8068  0  0 1 0   4000   4000      0 0 0 0 0 1    0 0  10  112       -1      0 1 1  XML
SYS_NC00005$                                    64   8000    12074  0  0 1 0   4000   4000      0 0 0 0 0 1    0 0   4  113       -1      0 1 1  Hidden
SYS_IME_OSON_CF27CFDF1CEB4FA2BF85A3D6239A433C   64  65534    16080  0  0 1 0  32767  32767      0 0 0 0 0 1    0 0   4   23       -1      0 0 0  Hidden
SYS_IME_OSON_CEE1B31BB4494F6ABF31AC002BEBE941   64  65534    48852  0  0 1 0  32767  32767      0 0 0 0 0 1    0 0   4   23       -1      0 0 0  Hidden
End of definition

この例では、COLおよびCOL2JSON列、COL3XML列です。

また、Snowflake VARIANTへのマッピングは、ソース列がテキストとして格納されている場合にのみサポートされます。

8.2.30.3.8 操作集計

集計操作は、同じ行に対する複数の操作をしきい値に基づいて単一の出力操作に集計(マージ/圧縮)するプロセスです。

8.2.30.3.8.1 インメモリー操作の集計
  • 操作レコードは、gg.aggregate.operations=true.を設定してインメモリーに集計できます。

    これはデフォルトの構成です。

  • gg.aggregate.operations.flush.intervalプロパティを使用して、マージ間隔の頻度をチューニングできます。デフォルト値は30000ミリ秒(30秒)に設定されます。
  • インメモリー操作集計には、追加のJVMメモリー構成が必要です。
8.2.30.3.8.2 SQLを使用した操作集計
  • SQL集計を使用するには、証跡ファイルに非圧縮UPDATE操作レコードが含まれている必要があります。つまり、UPDATE操作には、更新する行の完全なイメージが含まれていることを意味します。
  • SQLを使用した操作集計では、証跡ファイルに非圧縮更新レコードが含まれている場合、スループットが向上します。
  • Replicatは、gg.aggregate.operations.using.sql=trueを設定することで、SQL文を使用して操作を集計できます。
  • SQLを使用した操作集計では、追加のJVMメモリー構成は必要ありません。

8.2.30.3.9 圧縮更新の処理

圧縮更新レコードには、キー列および変更された列の値が含まれています。

非圧縮更新レコードには、すべての列の値が含まれています。

Oracle GoldenGate証跡には、圧縮更新レコードまたは非圧縮更新レコードを含めることができます。デフォルトの抽出構成では、圧縮更新が証跡に書き込まれます。パラメータgg.compressed.updatetrueまたはfalseに設定して、圧縮更新レコードまたは非圧縮更新レコードを指定できます。

8.2.30.3.9.1 非圧縮更新を含むMERGE文

場合によっては、証跡に非圧縮更新レコードが含まれている場合、gg.compressed.update=falseを設定することで、パフォーマンスを向上させるためにMERGE SQL文を最適化できます。MERGE SQL文のかわりにDELETE+INSERT SQL文を使用する場合は、gg.eventhandler.snowflake.deleteInsert=trueを設定します。

8.2.30.3.10 エンドツーエンド構成

自動構成を使用するエンド-エンド構成の例を次に示します。

サンプル・プロパティ・ファイルの場所: <OGGDIR>/AdapterExamples/big-data/snowflake/
  • sf.props: 内部ステージを使用した構成
  • sf-s3.props: S3ステージを使用した構成。
  • sf-az.props: ADLS Gen2ステージを使用した構成。
  • sf-gcs.props: GCSステージを使用した構成。
# Note: Recommended to only edit the configuration marked as  TODO

gg.target=snowflake

#The Snowflake Event Handler
#TODO: Edit JDBC ConnectionUrl
gg.eventhandler.snowflake.connectionURL=jdbc:snowflake://<account_name>.snowflakecomputing.com/?warehouse=<warehouse-name>&db=<database-name>
#TODO: Edit JDBC user name
gg.eventhandler.snowflake.UserName=<db user name>
#TODO: Edit JDBC password
gg.eventhandler.snowflake.Password=<db password>

# Using Snowflake internal stage.
# Configuration to load GoldenGate trail operation records 
# into Snowflake Data warehouse by chaining
# File writer handler -> Snowflake Event handler.
#TODO:Set the classpath to include Snowflake JDBC driver.
gg.classpath=./snowflake-jdbc-3.13.7.jar
#TODO:Provide sufficient memory (at least 8GB).
jvm.bootoptions=-Xmx8g -Xms8g

# Using Snowflake S3 External Stage. 
# Configuration to load GoldenGate trail operation records 
# into Snowflake Data warehouse by chaining
# File writer handler -> S3 Event handler -> Snowflake Event handler.

#The S3 Event Handler
#TODO: Edit the AWS region
#gg.eventhandler.s3.region=<aws region>
#TODO: Edit the AWS S3 bucket
#gg.eventhandler.s3.bucketMappingTemplate=<s3 bucket>
#TODO:Set the classpath to include AWS Java SDK and Snowflake JDBC driver.
#gg.classpath=aws-java-sdk-1.11.356/lib/*:aws-java-sdk-1.11.356/third-party/lib/*:./snowflake-jdbc-3.13.7.jar
#TODO:Set the AWS access key and secret key. Provide sufficient memory (at least 8GB).
#jvm.bootoptions=-Daws.accessKeyId=<AWS access key> -Daws.secretKey=<AWS secret key> -DSF_STAGE=s3 -Xmx8g -Xms8g

# Using Snowflake ADLS Gen2 External Stage.
# Configuration to load GoldenGate trail operation records 
# into Snowflake Data warehouse by chaining
# File writer handler -> HDFS Event handler -> Snowflake Event handler.

#The HDFS Event Handler
# No properties are required for the HDFS Event handler.
# If there is a need to edit properties, check example in the following line.
#gg.eventhandler.hdfs.finalizeAction=delete
#TODO: Edit snowflake storage integration to access Azure Blob Storage.
#gg.eventhandler.snowflake.storageIntegration=<azure_int>
#TODO: Edit the classpath to include HDFS Event Handler dependencies and Snowflake JDBC driver.                                                                             
#gg.classpath=./snowflake-jdbc-3.13.7.jar:hadoop-3.2.1/share/hadoop/common/*:hadoop-3.2.1/share/hadoop/common/lib/*:hadoop-3.2.1/share/hadoop/hdfs/*:hadoop-3.2.1/share/hadoop/hdfs/lib/*:hadoop-3.2.1/etc/hadoop/:hadoop-3.2.1/share/hadoop/tools/lib/* 
#TODO: Set property SF_STAGE=hdfs.  Provide sufficient memory (at least 8GB).
#jvm.bootoptions=-DSF_STAGE=hdfs -Xmx8g -Xms8g

# Using Snowflake GCS External Stage.
# Configuration to load GoldenGate trail operation records 
# into Snowflake Data warehouse by chaining
# File writer handler -> GCS Event handler -> Snowflake Event handler.

## The GCS Event handler
#TODO: Edit the GCS bucket name
#gg.eventhandler.gcs.bucketMappingTemplate=<gcs bucket>
#TODO: Edit the GCS credentialsFile
#gg.eventhandler.gcs.credentialsFile=<oggbd-project-credentials.json>
#TODO: Edit snowflake storage integration to access GCS.
#gg.eventhandler.snowflake.storageIntegration=<gcs_int>
#TODO: Edit the classpath to include GCS Java SDK and Snowflake JDBC driver.
#gg.classpath=gcs-deps/*:./snowflake-jdbc-3.13.7.jar
#TODO: Set property SF_STAGE=gcs.  Provide sufficient memory (at least 8GB).
#jvm.bootoptions=-DSF_STAGE=gcs -Xmx8g -Xms8g     

8.2.30.3.11 圧縮更新の処理

圧縮更新レコードには、キー列および変更された列の値が含まれています。

非圧縮更新レコードには、すべての列の値が含まれています。

Oracle GoldenGate証跡には、圧縮更新レコードまたは非圧縮更新レコードを含めることができます。デフォルトの抽出構成では、圧縮更新が証跡に書き込まれます。

パラメータgg.compressed.updatetrueまたはfalseに設定して、圧縮/非圧縮更新レコードを指定できます。

8.2.30.3.11.1 非圧縮更新を含むMERGE文

場合によっては、証跡に非圧縮更新レコードが含まれている場合、gg.compressed.update=falseを設定することで、パフォーマンスを向上させるためにMERGE SQL文を最適化できます。

ノート:

MERGE SQL文のかわりにDELETE+INSERT SQL文を使用する場合は、gg.eventhandler.snowflake.deleteInsert=trueを設定します。

8.2.30.4 トラブルシューティングと診断

  • スノーフレークへの接続の問題:
    • JDBC接続URL、ユーザー名およびパスワードを検証してください。
    • プロキシの背後でReplicatプロセスを実行している場合は、HTTP(S)プロキシ構成を確認します。
  • DDLがターゲット表に適用されない: Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)ではDDLレプリケーションはサポートされていません。
  • SQLエラー: SQLの実行中にエラーが発生した場合は、そのSQL文がバインド・パラメータ値とともにGG for DAAハンドラのログ・ファイルに記録されます。
  • コンポーネントの共存: 外部ステージの場所(S3、ADLS Gen 2またはGCS)を使用する場合、Replicatプロセスが実行されているマシンの場所/リージョンおよびオブジェクト・ストアのリージョンは、適用プロセスの全体的なスループットに影響します。

    最大限のスループットを得るには、理想的にはコンポーネントを同じリージョンまたはできるかぎり近くに配置する必要があります。

  • 証跡ファイルの部分的なLOBレコードによるReplicatの異常終了(ABEND): GG for DAAでは、部分LOBデータのレプリケーションはサポートされていません。Extractパラメータ・ファイルでTRANLOGOPTIONS FETCHPARTIALLOBオプションを使用して、Oracle統合取得によって証跡ファイルを再生成する必要があります。
  • 10個を超えるターゲット表に複製する場合、パラメータmaxConnnectionsをより高い値に増やしてスループットを改善できます。

    ノート:

    これを調整する場合、パラメータ値を増やすと、スノーフレーク・データ・ウェアハウス上により多くのJDBC接続が作成されます。スノーフレーク・データベース管理者に相談してデータウェアハウスの状態が損なわれないようにできます。
  • スノーフレークJDBCドライバは、標準のJavaログ・ユーティリティを使用します。JDBCドライバのログ・レベルは、JDBC接続パラメータ・トレースを使用して設定できます。トレース・レベルは、スノーフレーク・イベント・ハンドラ・プロパティgg.eventhandler.snowflake.connectionURLで設定できます。
    このプロパティを編集する例を次に示します:
    jdbc:snowflake://<account_name>.snowflakecomputing.com/?warehouse=<warehouse-name>&db=<database-name>&tracing=SEVERE
    詳細は、https://docs.snowflake.com/en/user-guide/jdbc-parameters.html#tracingを参照してください。
  • 例外: net.snowflake.client.jdbc.SnowflakeReauthenticationRequest: 認証トークンが期限切れです。ユーザーは再度認証する必要があります

    このエラーは、長期間非アクティブの場合に発生します。これを解決するには、JDBCパラメータCLIENT_SESSION_KEEP_ALIVEを設定して、セッションで非アクティブ状態が終わった後にデータベース・ユーザーにログインを強制できます。たとえば、jdbc:snowflake://<account_name>.snowflakecomputing.com/?warehouse=<warehouse-name>&db=<database-name>&CLIENT_SESSION_KEEP_ALIVE=trueです

  • メモリー不足エラーでReplicatが停止: デフォルト値(30000)を使用していない場合は、gg.aggregate.operations.flush.interval値を減らします。
  • ラージ・オブジェクト(LOB)列値の複製中のパフォーマンスの問題: LOB処理が遅くなる可能性があります。インラインLOBしきい値を超えるLOB列ごとに、UPDATE SQLが実行されます。LOB処理中にスループットをチューニングするには、次のメッセージを探します: The current operation at position [<seqno>/<rba>] for table [<tablename>] contains a LOB column [<column name>] of length [<N>] bytes that exceeds the threshold of maximum inline LOB size [<N>]. Operation Aggregator will flush merged operations, which can degrade performance. The maximum inline LOB size in bytes can be tuned using the configuration gg.maxInlineLobSize.LOBデータを含む証跡ファイルを確認し、BLOB/CLOB列の最大サイズを取得します。または、ソース表定義をチェックして、LOBデータの最大サイズを確認します。デフォルトのインラインLOBサイズは16000バイトに設定され、すべてのLOB列の更新がバッチで処理されるように、大きい値に増やすことができます。構成プロパティはgg.maxInlineLobSize`です。たとえば、gg.maxInlineLobSize=24000000 -->では、24MBまでのすべてのLOBがインラインで処理されます。より大きなステージング・ファイルが生成されるように、Replicatを再配置し、状態ファイル、データ・ディレクトリをパージしてやりなおす必要があります。
  • エラー・メッセージ: 現在のセッションにデータベースが設定されていません。オプション'db=<database name>'を使用して、JDBC接続URL [gg.eventhandler.snowflake.connectionURL]にデータベースを設定してください。`

    解決策: 構成プロパティgg.eventhandler.snowflake.connectionURLにデータベース名を設定します。

  • 警告メッセージ: 現在のセッションでロールが設定されていません。ウェアハウス[{}]がアクセスするためにカスタム・ロールを必要とする場合は、オプション'role=<role name>'を使用してJDBC接続URL [gg.eventhandler.snowflake.connectionURL]にカスタム・ロール名を設定してください

    解決策: スノーフレーク・ウェアハウスにアクセスするためにカスタム・ロールが必要な場合には、構成プロパティgg.eventhandler.snowflake.connectionURLでロールを設定します。

  • エラー・メッセージ: 現在のセッションでアクティブなウェアハウスが選択されていません。オプション'warehouse=<warehouse name>'および'role=<role name>'を使用して、JDBC接続URL [gg.eventhandler.snowflake.connectionURL]でウェアハウス名(および各ウェアハウスにアクセスする必要がある場合はカスタム・ロール名)を設定してください

    解決策: 構成プロパティgg.eventhandler.snowflake.connectionURLにウェアハウスおよびロールを設定します。

  • エラー・メッセージ: `エラー2024-06-07 05:52:23.000344 [main] - JDBCMDP-00034現在の接続試行は次のエラーで失敗しました: [指定された秘密キーが無効であるかサポートされていません: ./rsa_key_sanav2.p8: PBEパラメータ解析エラー: AES暗号のオブジェクト識別子が必要です]`

    解決策: これは、スノーフレークJDBCドライバにおける最近の問題です。回避策は、スノーフレークJDBCドライバ・バージョン3.16.1にアップグレードし、Javaシステム・プロパティ-Dnet.snowflake.jdbc.enableBouncyCastle=trueをReplicatプロパティ・ファイル内のjvm.bootoptionsパラメータに追加することです。