9.2.18 Databricks
概要
Databricksは、エンタープライズグレードのデータ、分析、AIソリューションを大規模に構築、導入、共有および保守するための、統合されたオープン・アナリティクス・プラットフォームです。
親トピック: ターゲット
9.2.18.1 詳細な機能
Databricksへのレプリケーションでは、ステージングおよびマージのデータ・フローが使用されます。
Oracle GoldenGateの証跡からの変更データは、一時的なステージングの場所(通常はクラウド・オブジェクト・ストア)にマイクロバッチでステージングされます。
ステージングされたレコードは、次にマージSQL文を使用してDatabricksのターゲット表にマージされます。
親トピック: Databricks
9.2.18.1.1 ステージングの場所
GoldenGate証跡ファイルからの変更データ・レコードは、Avro OCF (オブジェクト・コンテナ・フォーマット)にフォーマットされ、ステージングの場所にアップロードされます。変更データは、Databricks構成に基づいて、次のいずれかのオブジェクト・ストアにステージングできます。
- Azure Data Lake Storage (ADLS) Gen2
- AWS Simple Storage Service (S3)
- Google Cloud Storage (GCS)
親トピック: 詳細な機能
9.2.18.1.2 データベース・ユーザー権限
Databricksへのレプリケーションに使用されるデータベース・ユーザーには、次の権限が付与されている必要があります:
- ターゲット表に対するCREATE、INSERT、UPDATE、DELETEおよびTRUNCATE。
- 外部表のCREATE、ALTERおよびDROP。
親トピック: 詳細な機能
9.2.18.1.3 前提条件
- Azure、Amazon Web ServicesまたはGoogle Cloud Platformのクラウド・アカウントがDatabricks用に設定されている必要があります。
- Azureストレージ・アカウントは、Azure上のDatabricksへのレプリケーションのために階層型名前空間が有効になっている必要があります。
- Databricks JDBCドライバ。推奨されるJDBCドライバ・バージョンの詳細は、Databricksのドキュメントを参照してください。
親トピック: 詳細な機能
9.2.18.2 構成
Databricksレプリケーション・プロパティの構成は、Replicatプロパティ・ファイルに格納されます。
- 自動構成
- Databricksへの認証
- Unity Catalog
- 外部の場所の作成
- Unity Catalogのないコンピュート・クラスタ
- クラスパス構成
- プロキシ構成
- INSERTALLRECORDSのサポート
- 操作集計
- 圧縮更新の処理
- エンドツーエンドの構成
- 表マッピング
親トピック: Databricks
9.2.18.2.1 自動構成
Databricksレプリケーションは、複数のコンポーネント(ファイル・ライター・ハンドラ、ABSまたはS3またはGCSイベント・ハンドラ、およびターゲットDatabricksイベント・ハンドラなど)の構成を伴います。
自動構成機能を使用すると、手動構成が最小限になるように、これらのコンポーネントを自動構成できます。
自動構成によって変更されたプロパティも、ハンドラのログ・ファイルに記録されます。
自動構成でDatabricksターゲットに複製できるようにするには、パラメータgg.target=databricksを設定します。 
                        
パラメータgg.stageにより、ステージングの場所が決まります。
                        
gg.stageが設定されていない場合は、ADLS Gen2がステージングの場所として使用されます。 
                        
gg.stateがabs、s3またはgcsに設定されている場合は、それぞれADLS Gen2、AWS S3またはGCSがステージングの場所として使用されます。
また、JDBCメタデータ・プロバイダは、Databricksからターゲット表メタデータを取得するように自動的に有効化されます。
ターゲット表がない場合は、自動的に作成されます。
9.2.18.2.1.1 ファイル・ライター・ハンドラの構成
databricksという値に事前設定されており、そのプロパティはDatabricksに必要な値に自動的に設定されます。
                        親トピック: 自動構成
9.2.18.2.1.2 ABSイベント・ハンドラ構成
ABSイベント・ハンドラ名は、値absに事前設定されており、ADLS Gen2構成と一致するように構成する必要があります。
                           
次に、S3イベント・ハンドラのプロパティの編集例を示します: gg.eventhandler.abs.bucketMappingTemplate=container1
ADLS Gen2との統合の詳細は、Azure Blob Storageの構成を参照してください。
親トピック: 自動構成
9.2.18.2.1.3 s3イベント・ハンドラ構成
s3に事前設定されており、s3構成と一致するように構成する必要があります。s3イベント・ハンドラのプロパティの編集例を次に示します: gg.eventhandler.s3.bucketMappingTemplate=bucket1。
                           s3との統合の詳細は、「S3イベント・ハンドラの構成」を参照してください。
親トピック: 自動構成
9.2.18.2.1.4 GCSイベント・ハンドラ構成
GCSイベント・ハンドラ名は、値gcsに事前設定されており、GCS構成と一致するように構成する必要があります。GCSイベント・ハンドラのプロパティの編集例を次に示します: gg.eventhandler.gcs.bucketMappingTemplate=bucket1
次に、S3イベント・ハンドラのプロパティの編集例を示します: gg.eventhandler.abs.bucketMappingTemplate=container1
GCSとの統合の詳細は、「GCSイベント・ハンドラ構成」を参照してください。
親トピック: 自動構成
9.2.18.2.1.5 Databricksイベント・ハンドラ構成
Databricksイベント・ハンドラ名は、値databricksに事前設定されています。
                           
Databricksイベント・ハンドラで使用可能な構成プロパティを次に示します。必須プロパティは、使用しているDatabricks構成に一致するように変更する必要があります。
表9-13
| プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 | 
|---|---|---|---|---|
| gg.eventhandler.databricks.connectionURL | 必須 |  jdbc:databricks://<server-hostname>:443;httpPath=<http-path>[;<setting1>=<value1>;<setting2>=<value2>;<settingN>=<valueN>]  | なし | Databricksに接続するためのJDBC URL。「Databricksの認証方式」を参照してください。 | 
| gg.eventhandler.databricks.UserName | オプション | サポートされているデータベース・ユーザー名文字列。 | なし | Databricksデータベース・ユーザーまたは token。 | 
| gg.eventhandler.databricks.Password | オプション | サポートされているパスワード文字列。 | なし | Databricksデータベース・パスワードまたはトークン値。 | 
| gg.eventhandler.databricks.credential | オプション | ストレージ資格証明の名前。 | なし | ADLS Gen2、S3、GCSなどのオブジェクト・ストレージにあるファイルにアクセスするための、外部ストレージ資格証明の名前。詳細は、「ストレージ資格証明の作成」を参照してください。 | 
| gg.eventhandler.databricks.createTable | オプション | trueまたはfalse | true | この値が trueに設定されている場合は、ターゲット表がなければそれが自動的に作成されます。 | 
| gg.eventhandler.databricks.maxConnections | オプション | 整数値 | 10 | このパラメータは、ターゲット・データベースへの同時JDBCデータベース接続の数を制御するために使用します。 | 
| gg.eventhandler.databricks.connectionRetries | オプション | 整数値 | 3 | ターゲット・データ・ウェアハウスへの接続が再試行される回数を指定します。 | 
| gg.eventhandler.databricks.connectionRetryIntervalSeconds | オプション | 整数値 | 30 | 接続再試行間の遅延(秒単位)を指定します。 | 
| gg.eventhandler.databricks.deleteInsert | オプション | trueまたはfalse | false | trueに設定した場合は、Replicatで、SQL MERGE文ではなくSQLのDELETE+INSERT文を使用してレコードがマージされます。ノート: gg.compressed.updateがfalseに設定されている場合のみ適用されます。 | 
| gg.eventhandler.databricks.detectMissingBaseRow | オプション | trueまたはfalse | false | ベース行のない UPDATE操作を見つけるための診断パラメータ。trueに設定すると、ベース行のないUPDATE操作がある場合にReplicatが異常終了(ABEND)します。これらの行は、調査可能な別の表に収集されます。 | 
| gg.eventhandler.databricks.dropStagingTablesOnShutdown | オプション | trueまたはfalse | false | trueに設定すると、Oracle GoldenGateによって作成された一時ステージング表が、Replicatの正常な停止時に削除されます。 | 
| gg.handler.databricks.fileRollInterval | オプション | デフォルトの測定単位はミリ秒です。ms、s、m、hを、それぞれミリ秒、秒、分または時間を表すように指定できます。有効な値は、10000、10000ms、10s、10m、1.5hなどです。0以下の値を指定すると、ファイルのローリング・オン時間がオフになります。 | 3m (3分) | このパラメータにより、データがDatabricksにマージされる頻度を決めます。この値が大きいほど、Replicatプロセスのメモリーに格納する必要があるデータが多くなるため、注意して使用してください。 ノート:このパラメータは慎重に使用してください。そのデフォルト値(3m)を増やすと、Replicatの内部メモリーに格納されるデータの量が増えます。これにより、メモリー不足エラーが発生し、メモリー不足になるとReplicatが停止する可能性があります。 ノート: | 
| gg.validate.keyupdate | オプション | trueまたはfalse | false | trueに設定した場合は、Replicatによってキー更新操作(optype 115)が検証され、キー値が変更されていない場合は通常の更新に訂正されます。圧縮キー更新操作はマージ対象ではありません。 | 
| gg.compressed.update | オプション | trueまたはfalse | true | trueを設定すると、ソース証跡ファイルに圧縮更新操作が含まれていることを示します。falseに設定すると、ソース証跡ファイルには、非圧縮更新操作が含まれることが想定されます。 | 
| gg.eventhandler.databricks.deltaUniversalFormat  | オプション | icebergまたは''(空)。 | ''(空) | icebergに設定すると、Replicatは、Delta Lake Universal Formatをicebergに設定してターゲット表を自動的に作成します。これにより、Icebergリーダー・クライアントでデルタ表を読み取ることができます。ユニバーサル・フォーマットは、Unity Catalogによって管理されるDatabricks表でのみ有効にできます。この機能には、Databricks Runtime 14.3 LTS以降が必要です。https://docs.databricks.com/en/delta/uniform.htmlを参照してください。 | 
親トピック: 自動構成
9.2.18.2.2 Databricksへの認証
Databricks JDBC接続URLでは、次の形式が使用されます: jdbc:databricks://<Host>:<Port>;httpPath=<http-path>[;<setting1>=<value1>;<setting2>=<value2>;<settingN>=<valueN>]
親トピック: 構成
9.2.18.2.2.1 Databricks JDBCドライバのコンピュート設定
このドライバには、次のコンピュート・リソース構成設定が必要です:
表9-14 Databricks JDBCドライバのコンピュート設定
| 設定 | 説明 | 
|---|---|
| ホスト | Databricksコンピュート・リソースのサーバー・ホスト名の値。 | 
| ポート | 443 | 
| HTTPパス | Databricksコンピュート・リソースのHTTPパスの値。 | 
| SSL | 1 | 
- コンピュート・クラスタの接続詳細
- Databricks SQL Warehouseの接続詳細
- Databricksの認証方式
- Databricks個人アクセス・トークン
- Databricksのユーザー名とパスワード
- サービス・プリンシパルを使用したDatabricksでの認証(OAuth M2M)
親トピック: Databricksへの認証
9.2.18.2.2.1.1 コンピュート・クラスタの接続詳細
Databricksコンピュート・クラスタの接続詳細を取得するには:
- Databricksワークスペースにログインします。
- サイドバーで「コンピュート」をクリックします。
- 使用可能なウェアハウスのリストで、ターゲット・クラスタの名前をクリックします。
- 「構成」タブで、「拡張オプション」を展開します。
- JDBC/ODBCタブに、サーバー・ホスト名、「ポート」および「HTTPパス」があります。
親トピック: Databricks JDBCドライバのコンピュート設定
9.2.18.2.2.1.2 Databricks SQL Warehouseの接続詳細
Databricks SQL Warehouseの接続詳細を取得するには:
- Databricksワークスペースにログインします。
- サイドバーでSQL Warehousesをクリックします。
- 使用可能なウェアハウスのリストで、ターゲット・ウェアハウスの名前をクリックします。
- 「接続詳細」タブに、サーバー・ホスト名、「ポート」および「HTTPパス」があります。
親トピック: Databricks JDBCドライバのコンピュート設定
9.2.18.2.2.1.3 Databricksの認証方式
Databricks JDBCドライバでは、次の認証方式がサポートされています:
- Databricks個人アクセス・トークン
- Databricksのユーザー名とパスワード
- OAuth 2.0トークン 
                                    - OAuth user-to-machine (U2M)認証
                                          ノート: OAuth U2MまたはOAuth 2.0ブラウザベース認証は、ローカルで実行されるアプリケーションでのみ機能します。サーバーベースまたはクラウドベースのアプリケーションでは機能しません。
- OAuth machine-to-machine (M2M)認証
 ノート: Oracle GoldenGateでは、OAuthユーザー・ツー・マシン(U2M)を使用した認証をサポートしていません。
- OAuth user-to-machine (U2M)認証
                                          
親トピック: Databricks JDBCドライバのコンピュート設定
9.2.18.2.2.1.4 Databricks個人アクセス・トークン
Databricks個人アクセス・トークンを作成するには:
- Databricksワークスペースで、上部のバーにあるDatabricksユーザー名をクリックし、ドロップダウンから「ユーザー設定」を選択します。
- 「開発者」をクリックします。
- 「アクセス・トークン」の横にある「管理」をクリックします。
- 「新規トークンの生成」をクリックします。
- (オプション)将来このトークンを特定するために役立つようなコメントを入力し、トークンの存続期間のデフォルトである90日を変更します。
                                    存続期間なし(非推奨)のトークンを作成するには、存続期間(日)ボックスを空(空白)のままにします。 
- 「生成」をクリックします。
- 表示されたトークンを安全な場所にコピーしてから、「完了」をクリックします。
親トピック: Databricks JDBCドライバのコンピュート設定
9.2.18.2.2.1.5 Databricksのユーザー名とパスワード
Databricksのユーザー名とパスワードによる認証は、Databricks基本認証とも呼ばれます。ユーザー名とパスワードによる認証は、シングル・サインオンが無効になっている場合のみ可能です。
gg.eventhandler.databricks.UserNameおよびgg.eventhandler.databricks.Passwordプロパティをそれぞれの値に設定します。 
                                 ノート:
23aiリリースでは、OAuth 2.0トークン、OAuthユーザー・ツー・マシン(U2M)およびOAuthマシン・ツー・マシン(M2M)を使用した認証がまだ動作保証されていません。親トピック: Databricks JDBCドライバのコンピュート設定
9.2.18.2.2.1.6 サービス・プリンシパルを使用したDatabricksでの認証(OAuth M2M)
ワークスペース・レベルでサービス・プリンシパルを作成するには、次のステップに従います:
- Databricksワークスペースにワークスペース管理者としてログインします。
- Databricksワークスペースの上部バーでユーザー名をクリックし、「Settings」を選択します。
- 「Identity and Access」をクリックします。
- 「Service Principals」の横にある「Manage」をクリックします。
- 「Add service principal」をクリックします。
- 検索ボックスのドロップダウン矢印をクリックし、「Add New」をクリックします。
- サービス・プリンシパルの名前を入力します。
- 「Add」をクリックします。
親トピック: Databricks JDBCドライバのコンピュート設定
9.2.18.2.3 Unity Catalog
Unity Catalogでは、すべてのDatabricksワークスペースにわたる一元化されたアクセス制御、監査、系統およびデータ検出機能が提供されます。
Unity Catalogでは、プライマリ・データ・オブジェクトの階層は、メタストアから表またはボリュームという順序になっています。
- メタストア: メタデータの最上位コンテナ。各メタストアでは、データを編成する、3段階のネームスペース(catalog.schema.table)が公開されます。ノート: ワークスペースにレガシーHiveメタストアが含まれている場合、そのメタストア内のデータは、hive_metastoreというカタログ内で、Unity Catalogで定義されているデータとともに引き続き使用できます。
- カタログ: データ・アセットの編成に使用される、オブジェクト階層の最初のレイヤー。
- スキーマ: データベースとも呼ばれます。スキーマは、オブジェクト階層の2番目のレイヤーであり、表とビューを含んでいます。
- 表、ビューおよびボリューム: データ・オブジェクト階層での最下位には、表、ビューおよびボリュームがあります。ボリュームでは、表形式以外のデータについてガバナンスが提供されます。
親トピック: 構成
9.2.18.2.3.1 管理対象表
Oracle GoldenGateでは、データはDatabricksの管理対象表にレプリケートされます。管理対象表ではDELTA表形式が使用されています。
                           
9.2.18.2.3.1.1 hive_metastoreカタログ内の表
既存のDatabricksワークスペースでUnity Catalogが有効になっている場合、既存の表はhive_metastoreカタログ内にあります。 
                              
hive_metastoreの下の表では、主キーはサポートされていません。 
                              
Oracle GoldenGateのReplicat MAP文では、KEYCOLSを使用して、ステージング/マージ・レプリケーションに必要なキー列を定義する必要があります。
                              
親トピック: 管理対象表
9.2.18.2.3.2 外部表
外部表は、外部の場所に格納されているデータを参照する、ファイルバックアップ表です。
外部の場所とは、オブジェクト・ストレージ(ADLS Gen2、AWS S3、GCSなど)です。
- ストレージ資格証明: ストレージ資格証明を使用すると、Databricksでクラウド・ストレージ内のデータにアクセスできます。
- 外部の場所には、ストレージ資格証明およびクラウド・ストレージ・パスへの参照が含まれています。
親トピック: Unity Catalog
9.2.18.2.3.3 ストレージ資格証明の作成
ストレージ資格証明は、クラウド・テナントに格納されているデータにアクセスするための認証および認可のメカニズムに相当します。
9.2.18.2.3.3.1 Azureストレージ・アカウントにアクセスするためのストレージ資格証明
Azureストレージ・アカウントにアクセスするためのストレージ資格証明を作成するには:
- "Access Connector for Azure Databricks"というAzureリソースを作成する
                                    - Azureポータルで、Access Connector for Azure Databricksを検索し、Access Connector for Azure Databricksサービスを選択します。
- 次のステップに従って、コネクタ・リソースを作成します。
- Azureポータルで"ストレージ・アカウント"を検索し、GoldenGateのステージングの場所として使用するストレージ・アカウントを選択します。
- サイドバーで、「Access Control (IAM)」をクリックします。
- 「Role assignments」で、「+Add」をクリックし、ドロップダウン・メニューから「Add role assigment」を選択します。
- 検索バーにStorage Blob Data Contributorと入力し、リストからロールを選択し、「Next」をクリックします。
- 「Members: +Select members」をクリックし、検索バーで、Azure Databricksコネクタ・リソースの名前を入力し、「Select」をクリックします。
- Azureポータルに戻り、Azure Databricksコネクタ・リソースを検索し、そのリソースIDを書き留めます。
 
- Databricksでストレージ資格証明を作成する:
                                    - Databricksワークスペースにログインします。
- サイドバーで「Catalog」をクリックします。
- 「External Data」、「Storage Credentials」の順にクリックします。
- 「Create Storage Credential」をクリックします。
- 「Create Storage Credential」ダイアログで、次の詳細情報を入力します: 
                                          - Credential Type: ドロップダウン・メニューから「Azure Managed Identity」を選択します。
- Storage credential name: ストレージ資格証明の名前を入力します。
- Access connector ID: Azure Databricksコネクタ・リソースのリソースIDを入力します。
- 「Advanced Options」をクリックし、「Limit to read-only use」ボックスを選択します。
- 「Create」をクリックします。
 
 
ノート:
様々なストレージ・アカウント用に複数のストレージ資格証明を作成できます。親トピック: ストレージ資格証明の作成
9.2.18.2.3.3.2 Googleストレージ・アカウントにアクセスするためのストレージ資格証明
Googleストレージ・アカウントにアクセスするためのストレージ資格証明を作成するには:
- Google Cloud Storageにアクセスするためのストレージ資格証明を作成する:
                                    - Databricksワークスペースにログインします。
- サイドバーで「Catalog」をクリックします。
- 「External Data」、「Storage Credentials」の順にクリックします。
- 「Create Storage Credential」をクリックします。
- 「Create Storage Credential」ダイアログで、次の詳細情報を入力します: 
                                          - 資格証明タイプ: ドロップダウン・メニューからGoogleサービス・アカウントを選択します。
- Storage credential name: ストレージ資格証明の名前を入力します。
 
- 「Advanced Options」をクリックし、「Limit to read-only use」ボックスを選択します。
- 「Create」をクリックします。
- ストレージ資格証明が作成されましたダイアログで、サービス・アカウントID (電子メール・アドレスの形式になっている)を書き留め、「完了」をクリックします。
 
- そのサービス・アカウントの権限を構成する:
                                    - Google Cloudコンソールに移動し、Databricksワークスペースからアクセスする必要があるGCSバケットを開きます。
                                          このバケットは、Databricksワークスペースと同じリージョンにある必要があります。 
- 「Permission」タブで、「+ Grant access」をクリックし、そのサービス・アカウントに次のロールを割り当てます: 
                                          - Storage Legacy Bucket Reader
- Storage Object Admin
                                                このサービス・アカウントの電子メール・アドレスをプリンシパル識別子として使用します。 
 
 
- Google Cloudコンソールに移動し、Databricksワークスペースからアクセスする必要があるGCSバケットを開きます。
                                          
ノート:
様々なストレージ・アカウント用に複数のストレージ資格証明を作成できます。親トピック: ストレージ資格証明の作成
9.2.18.2.4 外部の場所の作成
外部の場所により、Unity Catalogのストレージ資格証明がクラウド・オブジェクト・ストレージ・コンテナに関連付けられます。
外部の場所は、カタログとスキーマのための管理対象ストレージの場所を定義するためと、外部表と外部ボリュームのための場所を定義するために使用されます。
Oracle GoldenGateでは、構成の簡略化のために外部の場所を作成することをお薦めしていますが、この手順を省略することもできます。
9.2.18.2.4.1 Azureストレージ・アカウントにアクセスするための外部の場所
外部の場所を作成するには:
- Databricksワークスペースにログインします。
- サイドバーで「Catalog」をクリックします。
- 外部データをクリックしてから、「外部の場所」をクリックします。
- 場所の作成をクリックします。
- 外部の場所の新規作成フォームで、次の詳細を入力します: 
                                 - 外部の場所の名前: 外部の場所の名前を入力します。
- ストレージ資格証明: ドロップダウン・メニューから、以前に作成したストレージ資格証明を選択します。
- URL: 外部の場所として使用する必要があるバケットのパスを入力します。たとえば:
              abfss://[email protected]/
- 「Advanced Options」をクリックし、「Limit to read-only use」ボックスを選択します。
- 「Create」をクリックします。
 
ノート:
外部の場所が作成されており、ストレージ資格証明に関連付けられている場合は、イベント・ハンドラ・プロパティgg.eventhandler.databricks.credentialを設定する必要はありません。
                              
親トピック: 外部の場所の作成
9.2.18.2.4.2 Googleストレージ・アカウントにアクセスするための外部の場所
外部の場所を作成するには:
- Databricksワークスペースにログインします。
- サイドバーで「Catalog」をクリックします。
- 外部データをクリックしてから、「外部の場所」をクリックします。
- 場所の作成をクリックします。
- 外部の場所の新規作成フォームで、次の詳細を入力します: 
                                 - 外部の場所の名前: 外部の場所の名前を入力します。
- ストレージ資格証明: ドロップダウン・メニューから、以前に作成したストレージ資格証明を選択します。
- URL: 外部の場所として使用する必要があるバケットのパスを入力します。たとえば:
              gs://gcs-bucket/ogg
- 「Advanced Options」をクリックし、「Limit to read-only use」ボックスを選択します。
- 「Create」をクリックします。
 
親トピック: 外部の場所の作成
9.2.18.2.5 Unity Catalogのないコンピュート・クラスタ
レガシーDatabricksコンピュート・クラスタでUnity Catalogがサポートされていない場合や、一部のコンピュート・クラスタでUnity Catalogが有効になっていない場合があります。
これらのコンピュート・クラスタでは、ストレージ資格証明や外部の場所を使用できません。
- Databricksワークスペースにログインします。
- サイドバーで「コンピュート」をクリックします。
- 使用可能なクラスタのリストで、ターゲット・クラスタの名前をクリックします。
- 「構成」タブで、「拡張オプション」を展開します。
- 「Spark」タブで、クラスタのspark構成を指定できます。
- Azureストレージ・アカウントにアクセスするためのSpark構成
- Google Cloud StorageにアクセスするためのSpark構成
- AWS S3にアクセスするためのSpark構成
- Databricksシークレットの作成
親トピック: 構成
9.2.18.2.5.1 Azureストレージ・アカウントにアクセスするためのSpark構成
ADLS Gen2へのアクセスは、ストレージ・アカウントの名前およびキーを使用して構成できます。
ストレージ・アカウント・キーは、Databricksシークレットに安全に格納できます。
fs.azure.account.key.storageaccountname.dfs.core.windows.net {{secrets/gg/azureAccountKey-for-storageaccountname}}この例では、storageaccountnameはAzureストレージ・アカウント名であり、{{secrets/gg/azureAccountKey-for-storageaccountname}}は、ストレージ・アカウント・キーを含むDatabricksシークレットです。
                           
親トピック: Unity Catalogのないコンピュート・クラスタ
9.2.18.2.5.2 Google Cloud StorageにアクセスするためのSpark構成
Google Cloud Storageへのアクセスは、ストレージ・バケットにアクセスする権限があるGoogleサービス・アカウントを使用して構成できます。
- サービス・アカウント電子メール
- GoogleプロジェクトID。
- サービス・アカウントの秘密キー。
- サービス・アカウントの秘密キーのID。
                                    サービス・アカウントの秘密キーとサービス・アカウント・キーIDは、Databricksシークレットに安全に格納できます。 
                                    AzureでのDatabricks用spark構成の設定例を次に示します:google.cloud.auth.service.account.enable true fs.gs.auth.service.account.email <client-email> fs.gs.project.id <project-id> fs.gs.auth.service.account.private.key {{secrets/scope/gsa_private_key}} fs.gs.auth.service.account.private.key.id {{secrets/scope/gsa_private_key_id}}
親トピック: Unity Catalogのないコンピュート・クラスタ
9.2.18.2.5.3 AWS S3にアクセスするためのSpark構成
AWS S3へのアクセスは、複数の方法で構成できます。S3にアクセスするためにSpark構成において次の環境変数を設定できます:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
AWS_SECRET_ACCESS_KEY={{secrets/gg/aws_secret_access_key}}
AWS_ACCESS_KEY_ID={{secrets/gg/aws_access_key_id}}親トピック: Unity Catalogのないコンピュート・クラスタ
9.2.18.2.5.4 Databricksシークレットの作成
Databricksシークレットを作成するには:
- Databricksワークスペースにログインします。
- サイドバーで「コンピュート」をクリックします。
- 使用可能なクラスタのリストで、ターゲット・クラスタの名前をクリックします。
- 「アプリケーション」タブで、Webターミナルをクリックします。これにより、Webブラウザでターミナル・セッション・タブが開きます。
- databricks secrets create-scope <scope-name>を使用してDatabricksシークレットのスコープを作成します。たとえば、- databricks secrets create-scope ggのようにします。
- 次のようにシークレットを作成します
                    
 たとえば:databricks secrets put-secret --json '{ "scope": "<scope-name>", "key": "<key-name>", "string_value": "<secret>" }'databricks secrets put-secret --json '{ "scope": "gg", "key": "storageaccountname", "string_value": "---------storage-account-key-----------------" }'ノート: これらのコマンドは、Databricks Runtime (DBR) 15.0を使用して実行されました。
ノート:
Unity Catalogが有効になっているワークスペースでは、hive_metastoreカタログ内の表には、外部の場所または外部ストレージ資格証明を使用できません。 
                              hive_metastoreカタログ内の表には、この項で示されているSparkクラスタ構成も必要です。  
                              
親トピック: Unity Catalogのないコンピュート・クラスタ
9.2.18.2.6 クラスパス構成
9.2.18.2.6.1 依存性
<OGGDIR>/DependencyDownloader/databricks.sh。
                           このスクリプトを入力パラメータなしで実行すると、JDBCドライバ・バージョン2.6.36がダウンロードされます。このスクリプトを単一の引数を指定して実行すると、特定のバージョンのJDBCドライバをダウンロードすることもできます。 
                           依存関係ダウンロードの詳細は、依存関係ダウンロードを参照してください。
                           または、次の座標を使用して、Maven CentralからJDBCドライバをダウンロードすることもできます。
                                  <dependency>
            <groupId>com.databricks</groupId>
            <artifactId>databricks-jdbc</artifactId>
            <version>2.6.36</version>
        </dependency>- ステージングの場所がADLS Gen2に設定されている場合、クラスパスにはABSイベント・ハンドラ依存性が含まれている必要があります。ABSイベント・ハンドラの依存性を参照してください。
- ステージングの場所がS3に設定されている場合、クラスパスにはS3イベント・ハンドラ依存性が含まれている必要があります。「S3イベント・ハンドラ」を参照してください。
- ステージングの場所がGCSに設定されている場合、クラスパスにはGCSイベント・ハンドラ依存性が含まれている必要があります。「GCSイベント・ハンドラ」を参照してください。
gg.classpath構成パラメータを編集して、オブジェクト・ストア・イベント・ハンドラ依存性(外部ステージが使用中の場合)およびDatabricks JDBCドライバへのパスを含めます。
                        親トピック: クラスパス構成
9.2.18.2.7 プロキシ構成
Replicatプロセスがプロキシ・サーバーより後ろで実行される場合は、JDBC接続URLに次のプロパティ値を追加する必要があります:
- UseProxy
- ProxyHost
- ProxyPort
jdbc:databricks://<server-hostname>:443;httpPath=<http-path>[;<setting1>=<value1>;<setting2>=<value2>;<settingN>=<valueN>]
      ;EnableArrow=0;UseProxy=1;ProxyHost=<proxy_host>;ProxyPort=<proxy_port>親トピック: 構成
9.2.18.2.8 INSERTALLRECORDSのサポート
ステージングおよびマージ・ターゲットでは、INSERTALLRECORDSパラメータがサポートされます。
                        
『Oracle GoldenGateリファレンス』のINSERTALLRECORDSを参照してください。Replicatパラメータ・ファイル(.prm)でINSERTALLRECORDSパラメータを設定します。Replicatパラメータ・ファイル(.prm)でINSERTALLRECORDSパラメータを設定します
                        
このプロパティを設定すると、Replicatプロセスに、操作データをターゲット表にロードするための一括挿入操作を使用するように指示されます。一括挿入のバッチ・サイズは、ファイル・ライター・プロパティgg.handler.databricks.maxFileSizeを使用してチューニングできます。デフォルト値は1GBに設定されています。一括挿入の頻度は、ファイル・ライター・プロパティgg.handler.databricks.fileRollIntervalを使用してチューニングでき、デフォルト値は3m (3分)に設定されています。
                        
親トピック: 構成
9.2.18.2.9 操作集計
集計操作は、同じ行に対する複数の操作をしきい値に基づいて単一の出力操作に集計(マージ/圧縮)するプロセスです。
親トピック: 構成
9.2.18.2.9.1 インメモリー操作の集計
- 操作レコードはインメモリーで集計できます。これがデフォルト構成です。
- 
                                 
                                 ユーザーは、ファイル・ライター gg.handler.databricks.fileRollIntervalプロパティを使用してマージ間隔の頻度をチューニングできます。このデフォルト値は3m (3分)に設定されています。
- インメモリー操作集計には、追加のJVMメモリー構成が必要です。
親トピック: 操作集計
9.2.18.2.9.2 SQLを使用した操作集計
- SQL集計を使用するには、証跡ファイルに非圧縮UPDATE操作レコードが含まれている必要があります。つまり、UPDATE操作には、更新する行の完全なイメージが含まれていることを意味します。
- SQLを使用した操作集計では、証跡ファイルに非圧縮更新レコードが含まれている場合、スループットが向上します。
- Replicatは、gg.aggregate.operations.using.sql=trueを設定することで、SQL文を使用して操作を集計できます。
- ユーザーは、ファイル・ライターgg.handler.databricks.fileRollIntervalプロパティを使用してマージ間隔の頻度をチューニングできます。このデフォルト値は3m (3分)に設定されています。
- SQLを使用した操作集計では、追加のJVMメモリー構成は必要ありません。
親トピック: 操作集計
9.2.18.2.10 圧縮更新の処理
gg.compressed.updateをtrueまたはfalseに設定して、圧縮更新レコードまたは非圧縮更新レコードを指定できます。
                     親トピック: 構成
9.2.18.2.10.1 非圧縮更新を含むMERGE文
場合によっては、証跡に非圧縮更新レコードが含まれている場合、gg.compressed.update=falseを設定することで、パフォーマンスを向上させるためにMERGE SQL文を最適化できます
 MERGE SQL文のかわりにDELETE+INSERT SQL文を使用する場合は、gg.eventhandler.databricks.deleteInsert=trueを設定します。
                           
親トピック: 圧縮更新の処理
9.2.18.2.11 エンドツーエンドの構成
自動構成を使用するエンド-エンド構成の例を次に示します。
このサンプル・プロパティ・ファイルは、ディレクトリ<OGGDIR>/AdapterExamples/big-data/databricks/にもあります。
                        
- dbx-az.props: Azure上のDatabricks用のADLS Gen2ステージを使用した構成。
- dbx-s3.props: AWS上のDatabricks用のS3ステージを使用した構成。
- dbx-gcs.props: GCP上のDatabricks用のGCSステージを使用した構成。
9.2.18.2.11.1 Azure上のDatabricks
# Configuration to load GoldenGate trail operation records into Databricks using ADLS Gen2 stage. # Note: Recommended to only edit the configuration marked as TODO gg.target=databricks # 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> # Databricks Event Handler. #TODO: Edit JDBC ConnectionUrl gg.eventhandler.databricks.connectionURL=jdbc:databricks://<server-hostname>:443;httpPath=<http-path>[;<setting1>=<value1>;<setting2>=<value2>;<settingN>=<valueN>];EnableArrow=0 #TODO: Edit JDBC username or 'token' gg.eventhandler.databricks.UserName=token #TODO: Edit JDBC password gg.eventhandler.databricks.Password=<password> #TODO: Edit the classpath to include Azure Blob Event Handler dependencies and Databricks JDBC driver. gg.classpath=$THIRD_PARTY_DIR/abs/*:$THIRD_PARTY_DIR/databricks/* #TODO: Provide sufficient memory (at least 8GB). jvm.bootoptions=-Xmx8g -Xms1g
親トピック: エンドツーエンド構成
9.2.18.2.11.2 AWS上のDatabricks
# Configuration to load GoldenGate trail operation records into Databricks using S3 stage. # Note: Recommended to only edit the configuration marked as TODO gg.target=databricks 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> # Databricks Event Handler. #TODO: Edit JDBC ConnectionUrl gg.eventhandler.databricks.connectionURL=jdbc:databricks://<server-hostname>:443;httpPath=<http-path>[;<setting1>=<value1>;<setting2>=<value2>;<settingN>=<valueN>];EnableArrow=0 #TODO: Edit JDBC username or 'token' gg.eventhandler.databricks.UserName=token #TODO: Edit JDBC password gg.eventhandler.databricks.Password=<password> #TODO: Edit the classpath to include GCS Event Handler dependencies and Databricks JDBC driver. gg.classpath=$THIRD_PARTY_DIR/s3/*:$THIRD_PARTY_DIR/databricks/* #TODO: Provide sufficient memory (at least 8GB). jvm.bootoptions=-Xmx8g -Xms1g
親トピック: エンドツーエンド構成
9.2.18.2.11.3 GCP上のDatabricks
# Configuration to load GoldenGate trail operation records into Databricks using GCS stage. # Note: Recommended to only edit the configuration marked as TODO gg.target=databricks 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> # Databricks Event Handler. #TODO: Edit JDBC ConnectionUrl gg.eventhandler.databricks.connectionURL=jdbc:databricks://<server-hostname>:443;httpPath=<http-path>[;<setting1>=<value1>;<setting2>=<value2>;<settingN>=<valueN>];EnableArrow=0 #TODO: Edit JDBC username or 'token' gg.eventhandler.databricks.UserName=token #TODO: Edit JDBC password gg.eventhandler.databricks.Password=<password> #TODO: Edit the classpath to include GCS Event Handler dependencies and Databricks JDBC driver. gg.classpath=$THIRD_PARTY_DIR/gcs/*:$THIRD_PARTY_DIR/databricks/* #TODO: Provide sufficient memory (at least 8GB). jvm.bootoptions=-Xmx8g -Xms1g
親トピック: エンドツーエンド構成
9.2.18.2.12 表マッピング
MAP文でターゲット・カタログが指定されていない場合は、Databricksワークスペースのデフォルト・カタログが使用されます。ハンドラにより、初期化中にデフォルト・カタログがログ記録されます。ログ・メッセージの例: 接続カタログは[dbx-catalog]に設定されています。
                        
9.2.18.2.12.1 マッピング表
表9-15
| Replicatパラメータ・ファイルのMAP文 | Databricksのカタログ | Databricksのスキーマ | Databricksの表 | 
|---|---|---|---|
| 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.18.3 トラブルシューティングと診断
- サポートされていないDatabricksデータ型: 
                           - ARRAY
- MAP
- STRUCT
- INTERVAL
- VOID
 
- 
                           
                           Databricks JDBCドライバの例外:java.lang.ClassCastException: class org.apache.logging.log4j.core.lookup.ResourceBundleLookupDatabricks JDBCドライバ 2.6.36の使用中に、この例外が発生しました。プロパティEnableArrow=0を設定することが回避策です。オラクルはDatabricksと連携してこれに対処しています。 
- 
                           
                           org.apache.hive.service.cli.HiveSQLException: 問合せの実行中にエラーが発生しました: org.apache.spark.sql.AnalysisException: 'void'型の列'<column name>'は追加できません。voidでない型を明示的に指定してください。 Databricksの表でデータ型が VOIDの列が定義されている場合は、VOIDの列がOracle GoldenGateによってマップされていない場合でも、すべてのDML操作が失敗します。レプリケーションを続行するには、ターゲット表から VOIDの列を削除する必要があります。
- DatabricksのINTERVALデータ型:
                           ターゲット表に INTERVAL型が含まれている場合、Databricks JDBCドライバでは、そのような列の存在が無視されます。ソース列を INTERVAL型にマップすることはできません。また、ターゲット表でINTERVAL型をデフォルト値なしでNOT NULL制約を使用して定義しないでください。
- Databricksへの接続の問題: 
                           - JDBC接続URL、ユーザー名およびパスワードを検証してください。
- プロキシより後ろでReplicatプロセスを実行している場合は、プロキシ構成を確認してください。
 
- DDLがターゲット表に適用されない: GoldenGate for Distributed Applications and AnalyticsではDDLレプリケーションはサポートされていません。
- SQLエラー: SQLの実行中にエラーが発生した場合、そのSQL文がバインド・パラメータ値とともにGoldenGate for Distributed Applications and Analyticsハンドラのログ・ファイルに記録されます。
- コンポーネントの共存: 外部ステージの場所(ADLS Gen 2、S3またはGCS)を使用する場合、Replicatプロセスが実行されているマシンの場所/リージョン、およびオブジェクト・ストアのリージョンは、適用プロセスの全体的なスループットに影響します。
                           最大限のスループットを得るには、理想的にはコンポーネントを同じリージョンまたはできるかぎり近くに配置する必要があります。 
- 証跡ファイル内の部分的なLOBレコードによるReplicatの異常終了(ABEND): Oracle GoldenGate for Distributed Applications and Analyticsでは、部分LOBデータのレプリケーションはサポートされていません。
                           Extractパラメータ・ファイルで TRANLOGOPTIONS FETCHPARTIALLOBオプションを使用して、Oracle統合取得によって証跡ファイルを再生成する必要があります。
- 10個を超えるターゲット表に複製する場合は、パラメータmaxConnectionsをより大きい値に増やしてスループットを改善できます。
- ターゲット表内のアイデンティティ列: 
                           - ターゲット表にアイデンティティ列が含まれている場合は、アイデンティティを更新できないため、MERGE文は失敗します。エラー・メッセージの例:
 続行するには、次の点を確認してください:`Query: MERGE INTO***, Error message from Server: org.apache.hive.service.cli.HiveSQLException: Error running query: org.apache.spark.sql.AnalysisException: UPDATE on IDENTITY column "col9" is not supported.`
-  アイデンティティ列がGENERATED ALWAYS AS IDENTITYを使用して定義されている場合は、Replicatで次のエラーが発生します: サーバーからのエラー・メッセージ:org.apache.hive.service.cli.HiveSQLException: 問合せの実行中にエラーが発生しました: org.apache.spark.sql.AnalysisException: GENERATED ALWAYS AS IDENTITY列col9に対する値の指定はサポートされていません。続行するには、アイデンティティ列を、COLSEXCEPTを使用してソース・データベース上のマッピングから除外するか、ターゲット表から削除する必要があります。
-  アイデンティティ列がGENERATED BY DEFAULT AS IDENTITYを使用して定義されている場合は、DELETE-INSERTを有効にするための前提条件が満たされていれば、gg.eventhandler.databricks.deleteInsert=trueを設定することで、MERGEのかわりにDELETE-INSERTを使用するようにReplicatを構成できます。
 
- ターゲット表にアイデンティティ列が含まれている場合は、アイデンティティを更新できないため、
親トピック: Databricks