8.2.13 Azure Synapse Analytics Data Warehouse
Microsoft Azure Synapse Analyticsは、データ統合、エンタープライズ・データ・ウェアハウジングおよびOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)の分析を組み合せた、制限のない分析サービスです。
親トピック: ターゲット
8.2.13.1 詳細な機能
Synapseへのレプリケーションでは、ステージとマージのデータ・フローが使用されます。
変更データはマイクロバッチの一時的な場所にステージングされ、最終的にターゲット表にマージされます。
Azure Data Lake Storage (ADLS) Gen 2は、変更データのステージング領域として使用されます。
Synapseイベント・ハンドラは、Parquetイベント・ハンドラの出力に接続されたダウンストリーム イベント ハンドラとして使用されます。
Parquetイベント・ハンドラは、ファイル・ライター・ハンドラによって生成されたファイルをADLS Gen2にロードします。
Synapseイベント・ハンドラは、SQL文を実行して、ADLS Gen2にステージングされた操作レコードをマージします。
SQL操作は、スループットを改善するためにバッチで実行されます。
Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)では、MERGE SQL
文、またはDELETE
とINSERT
SQL文の組合せを使用してマージ操作が実行されます。
8.2.13.1.1 データベース・ユーザー権限
レプリケーションに使用するデータベース・ユーザーには、次の権限が付与されている必要があります。
- ターゲット表に対する
INSERT
、UPDATE
、DELETE
およびTRUNCATE
。 CREATE
およびDROP
シナプス外部ファイル形式。CREATE
およびDROP
シナプス外部データ・ソース。CREATE
およびDROP
Synapse外部表。
親トピック: 詳細な機能
8.2.13.1.2 マージSQL文
Azure Synapse AnalyticsのマージSQL文は2022年後半に一般に使用可能になったため、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)では、デフォルトでマージ文が使用されます。マージSQLを無効にするには、jvm.bootoptions
パラメータでJavaシステム・プロパティが設定されていることを確認します。
jvm.bootoptions=-Dsynapse.use.merge.sql=false
親トピック: 詳細な機能
8.2.13.1.3 前提条件
前提条件は次のとおりです。
- 非圧縮
UPDATE
レコード: Oracle GoldenGateがマージ文を使用しないように構成されている場合(マージSQL文を参照)、Synapseに適用するために使用される証跡ファイルに非圧縮のUPDATE
操作レコードが含まれている必要があります。これは、UPDATE
操作には更新される行の完全なイメージが含まれることを意味します。UPDATE
レコードに列がない場合は、圧縮されたUPDATE
証跡レコードの検出時にReplicatがABEND
します。 - Oracle GoldenGateがマージ文を使用するように構成されている場合(マージSQL文を参照)、ターゲット表はハッシュ分散表である必要があります。
- ターゲット表の存在: ターゲット表はSynapseデータベースに存在する必要があります。
- Azureストレージ・アカウント: Azureストレージ・アカウントおよびコンテナが存在する必要があります。
Azure SynapseワークスペースおよびAzureストレージ・アカウントは、同じAzureリージョンに配置することをお薦めします。
- Oracle GoldenGateがマージ文を使用するように構成されている場合、Synapseマージ文では
IDENTITY
列へのデータの挿入がサポートされていないため、ターゲット表はIDENTITY
列を定義できません。SQL文のマージの詳細は、SQL文のマージを参照してください。
親トピック: 詳細な機能
8.2.13.2 構成
8.2.13.2.1 自動構成
Synapseレプリケーションには、ファイル・ライター・ハンドラ、Parquetイベント・ハンドラ、Synapseイベント・ハンドラなどの複数のコンポーネントの構成が含まれます。
自動構成機能は、ユーザー構成が最小限になるようにこれらのコンポーネントを自動構成するのに役立ちます。
自動構成によって変更されたプロパティもハンドラのログ・ファイルに記録されます。
自動構成をSynapseターゲットに複製できるようにするには、次のようにパラメータを設定する必要があります: gg.target=synapse
。
Synapseターゲットに複製する場合、Parquetイベント・ハンドラ名およびSynapseイベント・ハンドラ名のカスタマイズは許されません。
8.2.13.2.1.1 ファイル・ライター・ハンドラの構成
synapse
に事前設定されています。次に、ファイル・ライター・ハンドラのプロパティを編集する例を示します。
gg.handler.synapse.pathMappingTemplate=./dirout
親トピック: 自動構成
8.2.13.2.1.2 Synapseイベント・ハンドラ構成
Synapseイベント・ハンドラ名は、値synapse
に事前設定されています。
表8-12 Synapseイベント・ハンドラ構成
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
gg.eventhandler.synapse.connectionURL |
必須 |
jdbc:sqlserver://<synapse- workspace>.sql.azuresynapse.net:1433;database= <db-name>;encrypt=true; trustServerCertificate=false; hostNameInCertificate=*.sql.azuresynapse.net; loginTimeout=300; |
なし | Synapseに接続するためのJDBC URL。 |
gg.eventhandler.synapse.UserName |
必須 | データベース・ユーザー名。 | なし | SynapseワークスペースのSynapseデータベース・ユーザー。ユーザー名はSynapseワークスペース名で修飾する必要があります。たとえば、sqladminuser@synapseworkspace です。
|
gg.eventhandler.synapse.Password |
必須 | サポートされているデータベース文字列。 | なし | Synapseデータベース・パスワード。 |
gg.eventhandler.synapse.credential |
必須 | 資格証明名。 | なし | Azure Data Lake Gen2ファイルにアクセスするためのSynapseのデータベース資格証明名。資格証明を作成するステップは、Synapseデータベース資格証明を参照してください。 |
gg.eventhandler.synapse.maxConnnections |
オプション | 整数値 | 10 | このパラメータは、ターゲットSynapseデータベースへの同時JDBCデータベース接続の数を制御するために使用します。 |
gg.eventhandler.synapse.dropStagingTablesOnShutdown |
オプション | true またはfalse |
false |
true に設定すると、GoldenGateによって作成された一時ステージング表は、Replicatの正常な停止時に削除されます。
|
gg.maxInlineLobSize |
オプション | 整数値 | 16000 | このパラメータを使用して、ラージ・オブジェクト(LOB)列の最大インライン・サイズをバイト単位で設定できます。詳細は、ラージ・オブジェクト(LOB)のパフォーマンスを参照してください。 |
gg.aggregate.operations.flush.interval |
オプション | 整数 | 30000 | flush intervalパラメータは、データがSynapseにマージされる頻度を決定します。値はミリ秒単位で設定されます。慎重に使用してください。値が大きいほど、大きいデータはReplicatプロセスのメモリーに格納される必要があります。
flush intervalパラメータは慎重に使用してください。デフォルト値を増やすと、Replicatの内部メモリーに格納されるデータの量が増えます。これにより、メモリー不足エラーが発生し、メモリー不足になるとReplicatが停止する可能性があります。 |
gg.operation.aggregator.validate.keyupdate |
オプション | true またはfalse |
false |
true に設定すると、操作アグリゲータはキー更新操作(optype 115)を検証し、キー値が変更されていない場合は通常の更新に訂正します。圧縮キー更新操作はマージ対象ではありません。
|
親トピック: 自動構成
8.2.13.2.2 Synapseデータベース資格証明
- Azure Web SQLコンソール(
https://web.azuresynapse.net/en-us/
)を使用して、それぞれのSynapse SQL専用プールに接続します。 - DBマスター・キーがまだ存在しない場合は、自分のパスワードを使用して作成します。
- データベース・スコープの資格証明を作成します。この資格証明により、Oracle GoldenGateのReplicatプロセスがAzureストレージ・アカウントにアクセスできます。
この資格証明の作成時に、Azureストレージ・アカウント名およびアクセス・キーを指定します。
ストレージ・アカウントのアクセス・キーは、Azureクラウド・コンソールから取得できます。
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Your own password' ; CREATE DATABASE SCOPED CREDENTIAL OGGBD_ADLS_credential WITH -- IDENTITY = '<storage_account_name>' , IDENTITY = 'sanavaccountuseast' , -- SECRET = '<storage_account_key>' SECRET = 'c8C0yR-this-is-a-fake-access-key-Gc9c5mENOJ1mLyxlO1vSRDlRG0/Ke+tbAvi6xe73HAAhLtdMFZRA==' ;
親トピック: 構成
8.2.13.2.3 クラスパス構成
Synapseイベント・ハンドラは、アップストリームのファイル・ライター・ハンドラとParquetイベント・ハンドラに依存します。
8.2.13.2.3.1 依存性
- Microsoft SQLServer JDBCドライバ: JDBCドライバは、次の座標を使用してMaven Centralからダウンロードできます。
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>8.4.1.jre8</version> <scope>provided</scope> </dependency>
<OGGDIR>/DependencyDownloader/synapse.sh
を使用してダウンロードすることもできます。
-
Parquetイベント・ハンドラ依存性: unresolvable-reference.html#GUID-E62904D1-EBFD-4C84-B112-97D1F5D4BE6Fを参照して、Parquet依存性を含めるようにクラスパスを構成します。
- Hadoop依存性: Hadoop依存性は、依存性ダウンローダ
<OGGDIR>/DependencyDownloader/hadoop.sh
を使用してダウンロードできます - Azure Storage依存性: Azure Storage依存性は、次の座標を使用してMavenからダウンロードできます。
<dependencies> <dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-blob</artifactId> <version>12.13.0</version> </dependency> <dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.3.3</version> </dependency> </dependencies>
親トピック: クラスパス構成
8.2.13.2.3.2 クラスパス
gg.classpath configuration
パラメータを編集して、Parquetイベント・ハンドラ、Synapse JDBC、Azure Storageおよびhadoopの依存性へのパスを含めます。
gg.classpath=/path/to/parquet-deps/*:/path/to/abs-deps/*:path/to/synapse-deps/mssql-jdbc-8.4.1.jre8.jar:/path/to/hadoop-deps/*
親トピック: クラスパス構成
8.2.13.2.4 INSERTALLRECORDSのサポート
ステージングおよびマージ・ターゲットでは、INSERTALLRECORDS
パラメータがサポートされます。
『Oracle GoldenGateリファレンス』のINSERTALLRECORDSを参照してください。Replicatパラメータ・ファイル(.prm
)でINSERTALLRECORDS
パラメータを設定します。Replicatパラメータ・ファイル(.prm
)でINSERTALLRECORDS
パラメータを設定します
このプロパティを設定すると、Replicatプロセスに、操作データをターゲット表にロードするための一括挿入操作を使用するように指示されます。一括挿入のバッチ・サイズは、ファイル・ライター・プロパティgg.handler.synapse.maxFileSize
を使用してチューニングできます。デフォルト値は1GBに設定されています。一括挿入の頻度は、ファイル・ライター・プロパティgg.handler.synapse.fileRollInterval
を使用してチューニングでき、デフォルト値は3m (3分)に設定されています。
ノート:
- Synapse内部ステージを使用する場合、
gg.handler.synapse.putSQLAutoCompress
をtrue
に設定してステージング・ファイルを圧縮できます。
親トピック: 構成
8.2.13.2.5 ラージ・オブジェクト(LOB)のパフォーマンス
gg.maxInlineLobSize
を超えるLOB列の変更はバッチ処理に適さず、そのような操作は遅くなります。
コンピュート・マシンに十分なRAMがある場合は、このパラメータを増やして処理を高速化できます。
親トピック: 構成
8.2.13.2.6 エンドツーエンドの構成
FWハンドラ、ParquetおよびSynapseイベント・ハンドラの自動構成を使用するエンド-エンド構成の例を次に示します。
このサンプル・プロパティ・ファイルは、ディレクトリAdapterExamples/big-data/synapse/synapse.props
にもあります。
# Azure Synapse Analytics Data Warehouse Template # Configuration to load GoldenGate trail operation records into Azure Synapse Analytics by chaining # File writer handler -> Parquet Event handler -> Synapse Event handler. # Note: Recommended to only edit the configuration marked as TODO gg.target=synapse #The Parquet Event Handler No properties are required for the Parquet Event handler. #gg.eventhandler.parquet.finalizeAction=delete ADLS Gen 2 stage (Using Azure Blob SDK). #Azure Blob Event handler #TODO: Edit the Azure Blob Storage container name gg.eventhandler.abs.bucketMappingTemplate=<abs-container-name> #TODO: Edit the Azure storage.account name. gg.eventhandler.abs.accountName=<storage-account-name> #TODO: Edit the Azure storage account key. gg.eventhandler.abs.accountKey=<storage-account-key> #The Synapse Event Handler #TODO: Edit JDBC ConnectionUrl gg.eventhandler.synapse.connectionURL=jdbc:sqlserver://<synapse-workspace>.sql.azuresynapse.net:1433;database=<db-name>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.sql.azuresynapse.net;loginTimeout=300; #TODO: Edit JDBC user name gg.eventhandler.synapse.UserName=<db user name>@<synapse-workspace> #TODO: Edit JDBC password gg.eventhandler.synapse.Password=<db password> #TODO: Edit Credential to access Azure storage. gg.eventhandler.synapse.credential=OGGBD_ADLS_credential #TODO: Edit the classpath to include dependencies for Parquet Event Handler, ABS Event handler and the Synapse JDBC driver. gg.classpath=/path/to/parquet-deps/:/path/to/abs-deps/:path/to/synapse-deps/mssql-jdbc-8.4.1.jre8.jar:/path/to/hadoop-deps/* #TODO: Provide sufficient memory (at least 8GB). jvm.bootoptions=-Xmx8g -Xms8g -DSYNAPSE_STAGE=parquet,abs
親トピック: 構成
8.2.13.2.7 圧縮更新の処理
圧縮更新レコードには、キー列および変更された列の値が含まれています。
非圧縮更新レコードには、すべての列の値が含まれています。
Oracle GoldenGate証跡には、圧縮更新レコードまたは非圧縮更新レコードを含めることができます。デフォルトの抽出構成では、圧縮更新が証跡に書き込まれます。
パラメータgg.compressed.update
をtrue
またはfalse
に設定して、圧縮/非圧縮更新レコードを指定できます。
親トピック: 構成
8.2.13.2.7.1 非圧縮更新を含むMERGE文
場合によっては、証跡に非圧縮更新レコードが含まれている場合、gg.compressed.update=false
を設定することで、パフォーマンスを向上させるためにMERGE SQL
文を最適化できます。
ノート:
MERGE SQL
文のかわりにDELETE+INSERT SQL
文を使用する場合は、gg.eventhandler.snowflake.deleteInsert=true
を設定します。
親トピック: 圧縮更新の処理
8.2.13.3 トラブルシューティングと診断
- Synapseへの接続の問題:
- JDBC接続URL、ユーザー名およびパスワードを検証してください。
- http/httpsプロキシが有効かどうか確認します。Synapseはhttp(s)プロキシ経由の接続をサポートしていません。
- DDLがターゲット表に適用されない: Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)ではDDLレプリケーションはサポートされていません。
- ターゲット表の存在: Replicatプロセスを開始する前に、Synapseターゲット表が存在している必要があります。ターゲット表がない場合、Replicatプロセスは異常終了(ABEND)します。
- SQLエラー: SQLの実行中にエラーが発生した場合、そのSQL文全体がバインド・パラメータ値とともにGG for DAAハンドラのログ・ファイルに記録されます。
- コンポーネントの共存: Replicatプロセスが実行されているマシンの場所/リージョン、Azure Data Lake Storageコンテナ・リージョン、およびSynapseリージョンは、適用プロセスの全体的なスループットに影響を与えます。データ・フローは次のとおりです: Oracle GoldenGate -> Azure Data Lake Gen 2 -> Synapse。最高のスループットを得るには、コンポーネントをできるだけ近くに配置する必要があります。
- 証跡ファイルの部分的なLOBレコードによるReplicatの異常終了(ABEND): GG for DAAのSynapse適用では、部分LOBのレプリケーションはサポートされていません。Extractパラメータ・ファイルで
TRANLOGOPTIONS FETCHPARTIALLOB
オプションを使用して、Oracle統合取得によって証跡ファイルを再生成する必要があります。 - エラー:
com.microsoft.sqlserver.jdbc.SQLServerException: Conversion failed when converting date and/or time from character string
:これは、ソースの日時列とターゲットの日時列に互換性がない場合に発生します。
たとえば、ソース列がタイムスタンプ・タイプで、ターゲット列がSynapse時間の場合です。
- Synapseの表名または列名に二重引用符が含まれている場合、GG for DAAのReplicatが異常終了(ABEND)します。
- エラー:
com.microsoft.sqlserver.jdbc.SQLServerException: HdfsBridge::recordReaderFillBuffer
。これは、Azure Data Lakeファイルによりバックアップされた外部表のデータが読取り不可であることを示します。Oracleサポートに連絡してください。 - ターゲット表のIDENTITY列: Synapse
MERGE
文は、IDENTITY
列へのデータの挿入をサポートしていません。したがって、jvm.bootoptions=-Dsynapse.use.merge.sql=true
を使用してMERGE
文が有効になっている場合、Replicatは次のエラー・メッセージでABENDします。例外:com.microsoft.sqlserver.jdbc.SQLServerException: Cannot update identity column 'ORDER_ID'
- エラー:
com.microsoft.sqlserver.jdbc.SQLServerException: Merge statements with a
:WHEN NOT MATCHED [BY TARGET]
clause must target a hash distributed tableこれは、マージSQL文がオンであり、Synapseターゲット表がハッシュ分散表ではないことを示します。ハッシュ分散を使用してターゲット表を作成する必要があります。