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 データベース・ユーザーの権限
スノーフレークへのレプリケーションに使用されるデータベース・ユーザーには、次の権限が付与されている必要があります。
- ターゲット表に対する
INSERT
、UPDATE
、DELETE
およびTRUNCATE
。 - スノーフレーク指定ステージおよび外部ステージの
CREATE
およびDROP
。 - 外部ステージ(S3、ADLS、GCS)を使用する場合、外部表の
CREATE
、ALTER
およびDROP
。
親トピック: 詳細な機能
8.2.30.2.3 前提条件
- ターゲット表がスノーフレーク・データベースに存在することを確認します。
- S3、ADLS Gen2またはGCSなどの外部ステージの場所を使用する場合は、Amazon Web Services、Google Cloud PlatformまたはAzureクラウド・アカウントを設定する必要があります。
- スノーフレークJDBCドライバ
親トピック: 詳細な機能
8.2.30.3 構成
ノート:
調整Replicatを使用する場合のみ、パラメータ・ファイル内のプロパティ・ファイルへのパスを指定してください。次の行をパラメータ・ファイルに追加します。TARGETDB LIBFILE libggjava.so SET property=<parameter file directory>/<properties file name>
- 自動構成
- スノーフレーク・ストレージ統合
- クラスパス構成
- プロキシ構成
- INSERTALLRECORDSのサポート
- スノーフレーク・キー・ペア認証
- ソースJSON/XMLからSnowflake VARIANTへのマッピング
- 操作集計
- 圧縮更新の処理
- エンドツーエンドの構成
- 圧縮更新の処理
親トピック: スノーフレーク
8.2.30.3.1 自動構成
スノーフレーク・レプリケーションには、ファイル・ライター・ハンドラ、S3またはHDFSまたはGCSイベント・ハンドラ、ターゲット・スノーフレーク・イベント・ハンドラなどの複数のコンポーネントの構成が含まれます。
自動構成機能を使用すると、手動構成が最小限になるようにこれらのコンポーネントを自動構成できます。
自動構成によって変更されたプロパティもハンドラのログ・ファイルに記録されます。
自動構成でスノーフレーク・ターゲットに複製できるようにするには、パラメータgg.target=snowflake
を設定します。
パラメータgg.stage
により、ステージングの場所が決まります。gg.stage
が設定されていない場合は、スノーフレーク内部ステージが使用されます。
gg.stage
がs3
、abs
または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.putSQLAutoCompress
をtrue
に設定してステージング・ファイルを圧縮できます。
親トピック: 構成
8.2.30.3.6 スノーフレーク・キー・ペア認証
スノーフレークは、ユーザー名とパスワードを使用した基本認証の代替としてキー・ペア認証をサポートしています。
秘密キー・ファイルへのパスは、プロパティprivate_key_file
を使用してJDBC接続URLに設定する必要があります。
秘密キー・ファイルが暗号化されている場合、接続URLにはプロパティprivate_key_file_pwd
も含める必要があります。
さらに、接続URLには、プロパティuser
を設定して各公開キーが割り当てられているSnowflakeユーザーも含める必要があります。
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>
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へのマッピング
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
およびCOL2
はJSON
列、COL3
はXML
列です。
また、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.update
をtrue
または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.update
をtrue
または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
で設定できます。このプロパティを編集する例を次に示します:
詳細は、https://docs.snowflake.com/en/user-guide/jdbc-parameters.html#tracingを参照してください。jdbc:snowflake://<account_name>.snowflakecomputing.com/?warehouse=<warehouse-name>&db=<database-name>&tracing=SEVERE
- 例外: 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
LOBデータを含む証跡ファイルを確認し、[<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 configurationgg.maxInlineLobSize
.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
パラメータに追加することです。
親トピック: スノーフレーク