9.2.33 スノーフレーク
- スノーフレークにおけるステージングおよびマージ
- スノーフレーク・ストリーミング・ハンドラ
表9-38 ステージングおよびマージ・ハンドラとストリーミング・ハンドラの違い
詳細 | ステージングおよびマージ | ストリーミング・ハンドラ |
---|---|---|
ワークロード | 任意 | 挿入のみ |
レイテンシ | マイクロバッチ | リアルタイム |
リソース | 顧客管理の仮想ウェアハウス | スノーフレーク管理のサーバーレス・コンピュート |
API | JDBC+SQLコマンド(PUT /COPY INTO /MERGE )
|
Snowpipe Streaming |
データ・ロード | 内部/外部ステージからの仲介ロード・ステップが必要です。 | スノーフレークへの直接ロード |
トピック:
9.2.33.1 スノーフレーク・ステージングおよびマージ・ハンドラ
トピック:
親トピック: スノーフレーク
9.2.33.1.1 概要
スノーフレークは、Amazon Web Services (AWS)、Google Cloud Platform (GCP)またはMicrosoft Azureのクラウド・プロバイダのいずれかで動作するサーバーレス・データ・ウェアハウスです。
スノーフレーク・イベント・ハンドラは、スノーフレークにデータを複製するために使用されます。
親トピック: スノーフレーク・ステージングおよびマージ・ハンドラ
9.2.33.1.2 詳細な機能
- Oracle GoldenGateの証跡からの変更データは、一時的なステージング場所(内部または外部ステージ)でマイクロバッチにステージングされます。
- ステージングされたレコードは、次にマージSQL文を使用してスノーフレーク・ターゲット表にマージされます。
この項の内容は次のとおりです。
9.2.33.1.2.1 ステージングの場所
Oracle GoldenGate証跡ファイルからの変更データ・レコードは、Avro OCF (オブジェクト・コンテナ・フォーマット)にフォーマットされ、ステージングの場所にアップロードされます。
変更データは、次のいずれかのオブジェクト・ストアにステージングできます。
- スノーフレーク内部ステージ
- スノーフレーク外部ステージ
- AWS Simple Storage Service (S3)
- Azure Data Lake Storage (ADLS) Gen2
- Google Cloud Storage (GCS)
親トピック: 詳細な機能
9.2.33.1.2.2 データベース・ユーザー権限
スノーフレークへのレプリケーションに使用されるデータベース・ユーザーには、次の権限が付与されている必要があります。
- ターゲット表に対する
INSERT
、UPDATE
、DELETE
およびTRUNCATE
。 - スノーフレーク指定ステージおよび外部ステージの
CREATE
およびDROP
。 - 外部ステージ(S3、ADLS、GCS)を使用する場合、外部表の
CREATE
、ALTER
およびDROP
。
親トピック: 詳細な機能
9.2.33.1.2.3 前提条件
- S3、ADLS Gen2またはGCSなどの外部ステージの場所を使用する場合は、Amazon Web Services、Google Cloud PlatformまたはAzureクラウド・アカウントを設定する必要があります。
- スノーフレークJDBCドライバ
親トピック: 詳細な機能
9.2.33.1.3 構成
ノート:
調整Replicatを使用する場合のみ、パラメータ・ファイル内のプロパティ・ファイルへのパスを指定してください。次の行をパラメータ・ファイルに追加します。TARGETDB LIBFILE libggjava.so SET property=<parameter file directory>/<properties file name>
- 自動構成
- スノーフレーク・ストレージ統合
- クラスパス構成
- プロキシ構成
- INSERTALLRECORDSのサポート
- スノーフレーク・キー・ペア認証
- ソースJSON/XMLからSnowflake VARIANTへのマッピング
- 操作集計
- 圧縮更新の処理
- エンドツーエンドの構成
- 表マッピング
親トピック: スノーフレーク・ステージングおよびマージ・ハンドラ
9.2.33.1.3.1 自動構成
スノーフレーク・レプリケーションには、ファイル・ライター・ハンドラ、S3またはHDFSまたはGCSイベント・ハンドラ、ターゲット・スノーフレーク・イベント・ハンドラなどの複数のコンポーネントの構成が含まれます。
自動構成機能を使用すると、手動構成が最小限になるようにこれらのコンポーネントを自動構成できます。
自動構成によって変更されたプロパティもハンドラのログ・ファイルに記録されます。
自動構成でスノーフレーク・ターゲットに複製できるようにするには、パラメータgg.target=snowflake
を設定します。
パラメータgg.stage
により、ステージングの場所が決まります。gg.stage
が設定されていない場合は、スノーフレーク内部ステージが使用されます。
gg.stage
がs3
、abs
またはgcs
に設定されている場合は、それぞれAWS S3、ADLS Gen2またはGCSがステージングの場所として使用されます。
また、JDBCメタデータ・プロバイダは、スノーフレークからターゲット表メタデータを取得するように自動的に有効化されています。
親トピック: 構成
9.2.33.1.3.1.1 ファイル・ライター・ハンドラの構成
ファイル・ライター・ハンドラ名はsnowflake
という値に事前設定されており、そのプロパティはスノーフレークに必要な値に自動的に設定されます。
ファイル・ライター・ハンドラのプロパティを追加または編集できます。たとえば:
gg.handler.snowflake.pathMappingTemplate=./dirout
親トピック: 自動構成
9.2.33.1.3.1.2 S3ハンドラ構成
S3イベント・ハンドラ名は値s3
に事前設定されており、S3構成と一致するように構成する必要があります。
次に、S3イベント・ハンドラのプロパティを編集する例を示します。
gg.eventhandler.s3.bucketMappingTemplate=bucket1
詳細は、「Amazon S3」を参照してください。
親トピック: 自動構成
9.2.33.1.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
親トピック: 自動構成
9.2.33.1.3.1.4 Google Cloud Storageイベント・ハンドラ構成
Google Cloud Storage (GCS)イベント・ハンドラ名は値gcs
に事前設定されており、GCS構成と一致するように構成する必要があります。
次に、GCSイベント・ハンドラ・プロパティの編集例を示します。
gg.eventhandler.gcs.bucketMappingTemplate=bucket1
親トピック: 自動構成
9.2.33.1.3.1.5 スノーフレーク・イベント・ハンドラ構成
スノーフレーク・イベント・ハンドラ名は、値snowflake
に事前設定されています。
スノーフレーク・イベント・ハンドラで使用可能な構成プロパティを次に示します。必要なプロパティは、スノーフレーク構成に一致するように変更する必要があります。
表9-39 スノーフレーク・イベント・ハンドラ構成
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
gg.eventhandler.snowflake.connectionURL |
必須 | サポートされている接続URL。たとえば、jdbc:snowflake://<account_name>.snowflakecomputing.com/?warehouse=<warehouse-name>&db=<database-name> です |
なし | スノーフレークに接続するための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.maxConnnections |
オプション | 整数値 | 10 | このパラメータは、ターゲット・スノーフレーク・データベースへの同時JDBCデータベース接続の数を制御するために使用します。 |
gg.eventhandler.snowflake.dropStagingTablesOnShutdown |
オプション | true | false |
false |
true に設定すると、Oracle GoldenGateによって作成された一時ステージング表は、Replicatの正常な停止時に削除されます。
|
gg.handler.snowflake.fileRollInterval |
オプション | デフォルトの測定単位はミリ秒です。ms、s、m、hを、それぞれミリ秒、秒、分または時間を表すように指定できます。有効な値は、10000、10000ms、10s、10m、1.5hなどです。0以下の値を指定すると、ファイルのローリング・オン時間がオフになります。 | 3m (3分) | このパラメータにより、データがスノーフレークにマージされる頻度を決めます。この値が大きいほど、Replicatプロセスのメモリーに格納する必要があるデータが多くなるため、注意して使用してください。
ノート: このパラメータは慎重に使用してください。そのデフォルト値(3m)を増やすと、Replicatの内部メモリーに格納されるデータの量が増えます。これにより、メモリー不足エラーが発生し、メモリー不足になるとReplicatが停止する可能性があります。ノート: 23aiリリース以降では、gg.aggregate.operations.flush.interval プロパティは非推奨となり、サポートされなくなりました。詳細は、「インメモリー操作の集計」を参照してください |
gg.eventhandler.snowflake.putSQLThreads |
オプション | 整数値 | 4 | PUT SQL を使用してファイルをアップロードするために使用するスレッド数(`PARALLEL `句)を指定します。これは、スノーフレーク内部ステージ(名前付きステージ)が使用されている場合にのみ関係します。
|
gg.eventhandler.snowflake.putSQLAutoCompress |
オプション | true | false |
false |
PUT SQL を使用したアップロード中にスノーフレークがgzip を使用してファイルを圧縮するかどうか(AUTO_COMPRESS 句)を指定します。
true : ファイルは圧縮されます(まだ圧縮されていない場合)。
false : ファイルは圧縮されません(つまり、ファイルはそのままアップロードされます)。これは、スノーフレーク内部ステージ(名前付きステージ)が使用されている場合にのみ関係します。
|
gg.validate.keyupdate |
オプション | true またはfalse |
false |
true に設定した場合は、Replicatによってキー更新操作(optype 115)が検証され、キー値が変更されていない場合は通常の更新に訂正されます。圧縮キー更新操作はマージ対象ではありません。
|
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 | 接続再試行間の遅延(分単位)を指定します。 |
gg.eventhandler.snowflake.deleteInsert |
オプション | true またはfalse |
false |
true に設定した場合は、Replicatで、SQL MERGE 文ではなくSQLのDELETE+INSERT 文を使用してレコードがマージされます。
ノート: gg.compressed.update がfalse に設定されている場合のみ適用されます。
|
gg.eventhandler.snowflake.detectMissingBaseRow |
オプション | true またはfalse |
false |
ベース行のないUPDATE 操作を見つけるための診断パラメータ。true に設定すると、ベース行のないUPDATE 操作がある場合にReplicatが異常終了(ABEND )します。これらの行は、調査可能な別の表に収集されます。
|
gg.eventhandler.snowflake.createTable |
オプション | true またはfalse |
true |
この値がtrue に設定されている場合は、ターゲット表がなければそれが自動的に作成されます。
|
親トピック: 自動構成
9.2.33.1.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
のように二重引用符で囲まれていないかぎり、スペースや特殊文字を含めることはできません。二重引用符で囲まれた識別子も大文字と小文字が区別されます。
親トピック: 構成
9.2.33.1.3.3 クラスパス構成
スノーフレーク・イベント・ハンドラは、スノーフレークJDBCドライバを使用します。クラスパスにJDBCドライバへのパスが含まれていることを確認します。外部ステージを使用する場合は、それぞれのオブジェクト・ストア・イベント・ハンドラの依存性をクラスパスに含める必要があります。
9.2.33.1.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ドライバへのパスを含めます。
親トピック: クラスパス構成
9.2.33.1.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
親トピック: 構成
9.2.33.1.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
に設定してステージング・ファイルを圧縮できます。 - INSERTのみのワークロードの場合はスノーフレーク・ストリーミング・ハンドラを使用することを検討してください。「スノーフレーク・ストリーミング・ハンドラ」を参照してください。
親トピック: 構成
9.2.33.1.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を変更して'\'文字を'/'に置き換えます。親トピック: 構成
9.2.33.1.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
へのマッピングは、ソース列がテキストとして格納されている場合にのみサポートされます。
親トピック: 構成
9.2.33.1.3.8 操作集計
集計操作は、同じ行に対する複数の操作をしきい値に基づいて単一の出力操作に集計(マージ/圧縮)するプロセスです。
親トピック: 構成
9.2.33.1.3.8.1 インメモリー操作の集計
- 操作レコードは、デフォルトではインメモリーで集計されます。
gg.aggregate.operations.flush.interval
プロパティは非推奨となり、サポートされなくなりました。GG for DAA 23aiでgg.aggregate.operations.flush.interval
が使用されている場合、Replicatは実行されますが、非推奨でありサポートされていないプロパティに関する警告がログ・ファイルに追加されます。 集計の時間枠を制御するには、gg.handler.snowflake.fileRollInterval
プロパティを使用します。デフォルトでは、これは3分に設定されています。間隔が長いほど、待機時間が長くなります。また、メモリー使用量が増える場合があります。間隔が短いほど、Oracle GoldenGateおよびターゲット・データベースでのオーバーヘッドが増えます。- インメモリー操作集計には、追加のJVMメモリー構成が必要です。
親トピック: 操作集計
9.2.33.1.3.8.2 SQLを使用した操作集計
- SQL集計を使用するには、証跡ファイルに非圧縮
UPDATE
操作レコードが含まれている必要があります。つまり、UPDATE
操作には、更新する行の完全なイメージが含まれていることを意味します。 - SQLを使用した操作集計では、証跡ファイルに非圧縮更新レコードが含まれている場合、スループットが向上します。
- Replicatは、
gg.aggregate.operations.using.sql=true
を設定することで、SQL文を使用して操作を集計できます。 - ファイル・ライター
gg.handler.snowflake.fileRollInterval
プロパティを使用して、マージ間隔の頻度をチューニングでき、デフォルト値は3m (3分)に設定されます。 - SQLを使用した操作集計では、追加のJVMメモリー構成は必要ありません。
親トピック: 操作集計
9.2.33.1.3.9 圧縮更新の処理
圧縮更新レコードには、キー列および変更された列の値が含まれています。
非圧縮更新レコードには、すべての列の値が含まれています。
Oracle GoldenGate証跡には、圧縮更新レコードまたは非圧縮更新レコードを含めることができます。デフォルトの抽出構成では、圧縮更新が証跡に書き込まれます。パラメータgg.compressed.update
をtrue
またはfalse
に設定して、圧縮更新レコードまたは非圧縮更新レコードを指定できます。
親トピック: 構成
9.2.33.1.3.9.1 非圧縮更新を含むMERGE文
場合によっては、証跡に非圧縮更新レコードが含まれている場合、gg.compressed.update=false
を設定することで、パフォーマンスを向上させるためにMERGE SQL
文を最適化できます。MERGE SQL
文のかわりにDELETE+INSERT SQL
文を使用する場合は、gg.eventhandler.snowflake.deleteInsert=true
を設定します。
親トピック: 圧縮更新の処理
9.2.33.1.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> # Configuration to load GoldenGate trail operation records into Snowflake using Snowflake internal stage. #TODO:Set the classpath to include Snowflake JDBC driver. gg.classpath=$THIRD_PARTY_DIR/snowflake/* #TODO:Provide sufficient memory. jvm.bootoptions=-Xmx8g -Xms8g # Configuration to load GoldenGate trail operation records into Snowflake using S3 stage. #gg.stage=s3 #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=$THIRD_PARTY_DIR/s3/*:$THIRD_PARTY_DIR/snowflake/* #TODO:Set the AWS access key and secret key. Provide sufficient memory. #jvm.bootoptions=-Daws.accessKeyId=<AWS access key> -Daws.secretKey=<AWS secret key> -Xmx8g -Xms8g # Configuration to load GoldenGate trail operation records into Snowflake using ADLS Gen2 stage. #gg.stage=abs # Azure Blob Event handler. #gg.eventhandler.abs.bucketMappingTemplate=<azure_adls_gen2_container_name> #gg.eventhandler.abs.accountName=<azure_storage_account_name> #gg.eventhandler.abs.accountKey=<azure_storage_account_key> #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=$THIRD_PARTY_DIR/abs/*:$THIRD_PARTY_DIR/snowflake/* #TODO: Provide sufficient memory. #jvm.bootoptions=-Xmx8g -Xms8g # Configuration to load GoldenGate trail operation records into Snowflake using GCS stage. #gg.stage=gcs ## 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=$THIRD_PARTY_DIR/gcs/*:$THIRD_PARTY_DIR/snowflake/* #TODO: Provide sufficient memory. #jvm.bootoptions=-Xmx8g -Xms8g
親トピック: 構成
9.2.33.1.3.11 表マッピング
MAP
文でターゲット・データベースが指定されていない場合は、JDBC接続URLにおいて設定されているデータベースが使用されます。ハンドラにより、初期化中にデフォルト・データベースがログ記録されます。
Connection catalog is set to [DB_1].
9.2.33.1.3.11.1 マッピング表
表9-40 スノーフレークのマッピング表
Replicatパラメータ・ファイルのMAP文 | スノーフレーク・データベース | スノーフレーク・スキーマ | スノーフレーク表 |
---|---|---|---|
MAP SCHEMA_1.TABLE_1, TARGET "schema_1"."table_1"; |
デフォルト・データベース | schema_1 |
table_1 |
MAP DB_1.SCHEMA_1.TABLE_1, TARGET "db_1"."schema_1"."table_1" |
db_1 |
schema_1 |
table_1 |
親トピック: 表マッピング
9.2.33.1.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
パラメータに追加することです。
親トピック: スノーフレーク・ステージングおよびマージ・ハンドラ
9.2.33.2 スノーフレーク・ストリーミング・ハンドラ
9.2.33.2.1 概要
スノーフレーク・ストリーミング・ハンドラでは、Snowpipe Streaming APIを使用してデータがスノーフレークに複製されます。このハンドラでは、Snowpipe Streaming APIの使用によりINSERTのみのワークロードがサポートされています。それにより、スノーフレークへのデータ・ロードのコストが低くなりロード・レイテンシが低くなります。
ノート:
ワークロードに更新と削除が含まれている場合は、スノーフレーク・ステージングおよびマージ・ハンドラの使用を検討してください。詳細は、Snowpipe Streamingのドキュメントを参照してください。
親トピック: スノーフレーク・ストリーミング・ハンドラ
9.2.33.2.2 詳細な機能
ノート:
スノーフレーク・ストリーミング・ハンドラでは、INSERT
のみのワークロードがサポートされています。必要に応じて、INSERTALLRECORDS
を使用してupdate文とdelete文を変換できます。
9.2.33.2.2.1 データベース・ユーザー権限
スノーフレークへのレプリケーションに使用されるデータベース・ユーザーには、次の権限が付与されている必要があります。
- ターゲット表に対する
INSERT
。 - オプションで、
gg.handler.snow.createTable
をtrue
に設定する場合はCREATE TABLE
。
親トピック: 詳細な機能
9.2.33.2.2.2 前提条件
- Oracle GoldenGate証跡は、
INSERT
操作のみを生成するように構成する必要があります。更新操作と削除操作がINSERTUPDATE
、INSERTDELETE
、INSERTALLRECORDS
などのパラメータの使用によって挿入に変換される場合、そのような挿入もハンドラでサポートされます。
親トピック: 詳細な機能
9.2.33.2.2.3 Snowpipe Streaming APIを使用したステージング
Snowpipe Streaming APIにより、ターゲット表に低レイテンシで取り込めるようになります。
親トピック: 詳細な機能
9.2.33.2.3 構成
スノーフレーク・レプリケーション・プロパティの構成は、Replicatプロパティ・ファイルに格納されます。
ノート:
調整Replicatを使用する場合のみ、パラメータ・ファイル内のプロパティ・ファイルへのパスを指定してください。次の行をパラメータ・ファイルに追加します。TARGETDB LIBFILE libggjava.so SET property=<parameter file directory>/<properties file name>
スノーフレーク・ストリーミング・ハンドラで使用可能な構成プロパティを次に示します。必要なプロパティを、ご使用のスノーフレーク構成に一致するように変更する必要があります。
表9-41 スノーフレーク・ストリーミング・ハンドラ構成
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
gg.handlerlist |
必須 | 文字列値。たとえば、snow です。
|
なし | ハンドラの名前snow を選択します。
|
gg.handler.<name>.type |
必須 | snowflakestreaming |
なし | 使用するハンドラのタイプ。 |
gg.handler.<name>.account |
必須 | 文字列値。 | なし | スノーフレークのアカウント名。 |
gg.handler.<name>.user |
必須 | 文字列値。 | なし | スノーフレーク・データ・ウェアハウス・ユーザー。 |
gg.handler.<name>.role |
オプション | 文字列値。 | ACCOUNTADMIN |
スノーフレーク・データ・ウェアハウス・ロール。 |
gg.handler.<name>.warehouse |
必須 | 文字列値。 | なし | スノーフレーク・データ・ウェアハウス名。 |
gg.handler.<name>.database |
必須 | 文字列値。 | なし | 接続中に使用される、スノーフレークのデフォルト・データベース名。 |
gg.handler.<name>.privateKeyFile |
必須 | 文字列値。 | なし | ユーザーの秘密キー・ファイルへの完全修飾パスを指定します。これは、キーペア認証に使用されます。 |
gg.handler.<name>.privateKeyFilePassword |
オプション | 文字列値。 | なし | 秘密キー・ファイルが暗号化されている場合の、秘密キー・ファイルのパスワードを指定します。 |
gg.handler.<name>.createTable |
オプション | true またはfalse |
true | true に設定すると、ターゲット表が存在しない場合にはそれが自動的に作成されます。
|
gg.handler.<name>.flushTimeout |
オプション | 数値 | 30秒 | ターゲットにコミットするストリーミング操作のフラッシュ・タイムアウトを設定します。値は秒単位である必要があります。 |
親トピック: スノーフレーク・ストリーミング・ハンドラ
9.2.33.2.4 クラスパス構成
スノーフレーク・ストリーミング・ハンドラでは、スノーフレーク取込みJava SDKが使用されます。gg.classpath
構成パラメータにその取込みSDKへのパスが含まれていることを確認してください。
親トピック: スノーフレーク・ストリーミング・ハンドラ
9.2.33.2.4.1 依存性
次のスクリプトを実行することで依存性ダウンローダ・ツールをダウンロードして依存性をダウンロードできます:
<OGGDIR>/DependencyDownloader/snowflake_streaming.sh.
依存関係ダウンロードの詳細は、依存関係ダウンロードを参照してください。
親トピック: クラスパス構成
9.2.33.2.4.2 Maven座標
<dependency> <groupId>net.snowflake</groupId> <artifactId>snowflake-ingest-sdk</artifactId> <version>2.1.0</version> <scope>provided</scope> </dependency>
親トピック: クラスパス構成
9.2.33.2.5 プロキシ構成
Replicatプロセスがプロキシ・サーバーより後ろで実行される場合は、jvm.bootoptions
プロパティを使用してプロキシ・サーバー構成を設定できます。
例:
jvm.bootoptions= -Dhttp.useProxy=true -Dhttp.proxyHost=<some-proxy-address.com> -Dhttp.proxy.port=<some-port-number>
親トピック: スノーフレーク・ストリーミング・ハンドラ
9.2.33.2.6 スノーフレーク・ストリーミング・ハンドラのキー・ペア認証
スノーフレーク・ストリーミングAPIでは、キー・ペア認証を使用する必要があります。秘密キー・ファイルへのパスを、プロパティgg.handler.snow.privateKeyFile
を使用して設定する必要があります。
秘密キー・ファイルが暗号化されている場合は、プロパティgg.handler.snow.privateKeyFilePassword
を使用してそのパスワードを指定します
また、プロパティgg.handler.snow.user
を設定することで、スノーフレーク・ユーザーを含めてそれぞれの公開キーに割り当てられるようにします。
親トピック: スノーフレーク・ストリーミング・ハンドラ
9.2.33.2.7 サンプル構成
<OGGDIR>/AdapterExamples/big-data/snowflake_streaming/
にもあります。# Note: Recommended to only edit the configuration marked as TODO gg.handlerlist=snow gg.handler.snow.type=snowflakestreaming #TODO: Edit database user. gg.handler.snow.user=<db-user> #TODO: Edit account name. gg.handler.snow.account=<account-name> #TODO: Edit role name. gg.handler.snow.role=<role-name> #TODO: Edit warehouse name. gg.handler.snow.warehouse=<warehouse-name> #TODO: Edit default database name. gg.handler.snow.database=<default-db-name> #TODO: Edit path to the private key file. gg.handler.snow.privateKeyFile=/path/to/private/key/file/rsa_key.p8 #TODO: Edit password for the private key file. gg.handler.snow.privateKeyFilePassword=<some-password> #TODO:Set the classpath to include Snowflake ingest SDK and the Snowflake JDBC driver. gg.classpath=.snowflake-ingest-sdk-2.1.1.jar
親トピック: スノーフレーク・ストリーミング・ハンドラ
9.2.33.2.8 トラブルシューティングと診断
- スノーフレークへの接続の問題:
- 構成パラメータ(
account
、user
、role
、warehouse
、privateKeyFile
、privateKeyFilePassword
およびdatabase
)を検証します。 - プロキシの背後でReplicatプロセスを実行している場合は、HTTP(S)プロキシ構成を確認します。
- 構成パラメータ(
- DDLがターゲット表に適用されない: GG for DAAでは、DDLレプリケーションはサポートされていません。
- SQLエラー: SQLの実行中にエラーが発生した場合は、そのSQL文がバインド・パラメータ値とともにGG for DAAハンドラのログ・ファイルに記録されます。
親トピック: スノーフレーク・ストリーミング・ハンドラ