9.2.17 Databricks

概要

Databricksは、エンタープライズグレードのデータ、分析、AIソリューションを大規模に構築、導入、共有および保守するための、統合されたオープン・アナリティクス・プラットフォームです。

9.2.17.1 詳細な機能

Databricksへのレプリケーションでは、ステージングおよびマージのデータ・フローが使用されます。

Oracle GoldenGateの証跡からの変更データは、一時的なステージングの場所(通常はクラウド・オブジェクト・ストア)にマイクロバッチでステージングされます。

ステージングされたレコードは、次にマージSQL文を使用してDatabricksのターゲット表にマージされます。

9.2.17.1.1 ステージングの場所

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

  • Azure Data Lake Storage (ADLS) Gen2
  • AWS Simple Storage Service (S3)
  • Google Cloud Storage (GCS)

9.2.17.1.2 データベース・ユーザー権限

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

  • ターゲット表に対するCREATEINSERTUPDATEDELETEおよびTRUNCATE
  • 外部表のCREATEALTERおよびDROP

9.2.17.1.3 前提条件

  • Azure、Amazon Web ServicesまたはGoogle Cloud Platformのクラウド・アカウントがDatabricks用に設定されている必要があります。
  • Azureストレージ・アカウントは、Azure上のDatabricksへのレプリケーションのために階層型名前空間が有効になっている必要があります。
  • Databricks JDBCドライバ。

9.2.17.2 構成

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

9.2.17.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.17.2.1.1 ファイル・ライター・ハンドラの構成
ファイル・ライター・ハンドラ名はdatabricksという値に事前設定されており、そのプロパティはDatabricksに必要な値に自動的に設定されます。
9.2.17.2.1.2 ABSイベント・ハンドラ構成

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

次に、S3イベント・ハンドラのプロパティの編集例を示します: gg.eventhandler.abs.bucketMappingTemplate=container1

ADLS Gen2との統合の詳細は、Azure Blob Storageの構成を参照してください。

9.2.17.2.1.3 s3イベント・ハンドラ構成
s3イベント・ハンドラ名は値s3に事前設定されており、s3構成と一致するように構成する必要があります。s3イベント・ハンドラのプロパティの編集例を次に示します: gg.eventhandler.s3.bucketMappingTemplate=bucket1

s3との統合の詳細は、「S3イベント・ハンドラの構成」を参照してください。

9.2.17.2.1.4 GCSイベント・ハンドラ構成

GCSイベント・ハンドラ名は、値gcsに事前設定されており、GCS構成と一致するように構成する必要があります。GCSイベント・ハンドラのプロパティの編集例を次に示します: gg.eventhandler.gcs.bucketMappingTemplate=bucket1

次に、S3イベント・ハンドラのプロパティの編集例を示します: gg.eventhandler.abs.bucketMappingTemplate=container1

GCSとの統合の詳細は、「GCSイベント・ハンドラ構成」を参照してください。

9.2.17.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.updatefalseに設定されている場合のみ適用されます。
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分) このパラメータにより、データがスノーフレークにマージされる頻度を決めます。この値が大きいほど、Replicatプロセスのメモリーに格納する必要があるデータが多くなるため、注意して使用してください。

ノート:

このパラメータは慎重に使用してください。そのデフォルト値(3m)を増やすと、Replicatの内部メモリーに格納されるデータの量が増えます。これにより、メモリー不足エラーが発生し、メモリー不足になるとReplicatが停止する可能性があります。

ノート:

gg.validate.keyupdate オプション trueまたはfalse false trueに設定した場合は、Replicatによってキー更新操作(optype 115)が検証され、キー値が変更されていない場合は通常の更新に訂正されます。圧縮キー更新操作はマージ対象ではありません。
gg.compressed.update オプション trueまたはfalse true trueを設定すると、ソース証跡ファイルに圧縮更新操作が含まれていることを示します。falseに設定すると、ソース証跡ファイルには、非圧縮更新操作が含まれることが想定されます。

9.2.17.2.2 Databricksへの認証

Databricks JDBC接続URLでは、次の形式が使用されます: jdbc:databricks://<Host>:<Port>;httpPath=<http-path>[;<setting1>=<value1>;<setting2>=<value2>;<settingN>=<valueN>]

9.2.17.2.2.1 Databricks JDBCドライバのコンピュート設定

このドライバには、次のコンピュート・リソース構成設定が必要です:

表9-14 Databricks JDBCドライバのコンピュート設定

設定 説明
ホスト Databricksコンピュート・リソースのサーバー・ホスト名の値。
ポート 443
HTTPパス Databricksコンピュート・リソースのHTTPパスの値。
SSL 1
9.2.17.2.2.1.1 コンピュート・クラスタの接続詳細

Databricksコンピュート・クラスタの接続詳細を取得するには:

  • Databricksワークスペースにログインします。
  • サイドバーで「コンピュート」をクリックします。
  • 使用可能なウェアハウスのリストで、ターゲット・クラスタの名前をクリックします。
  • 「構成」タブで、「拡張オプション」を展開します。
  • JDBC/ODBCタブに、サーバー・ホスト名「ポート」および「HTTPパス」があります。
9.2.17.2.2.1.2 Databricks SQL Warehouseの接続詳細

Databricks SQL Warehouseの接続詳細を取得するには:

  • Databricksワークスペースにログインします。
  • サイドバーでSQL Warehousesをクリックします。
  • 使用可能なウェアハウスのリストで、ターゲット・ウェアハウスの名前をクリックします。
  • 「接続詳細」タブに、サーバー・ホスト名「ポート」および「HTTPパス」があります。
9.2.17.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)認証
9.2.17.2.2.1.4 Databricks個人アクセス・トークン

Databricks個人アクセス・トークンを作成するには:

  • Databricksワークスペースで、上部のバーにあるDatabricksユーザー名をクリックし、ドロップダウンから「ユーザー設定」を選択します。
  • 「開発者」をクリックします。
  • 「アクセス・トークン」の横にある「管理」をクリックします。
  • 「新規トークンの生成」をクリックします。
  • (オプション)将来このトークンを特定するために役立つようなコメントを入力し、トークンの存続期間のデフォルトである90日を変更します。

    存続期間なし(非推奨)のトークンを作成するには、存続期間(日)ボックスを空(空白)のままにします。

  • 「生成」をクリックします。
  • 表示されたトークンを安全な場所にコピーしてから、「完了」をクリックします。
9.2.17.2.2.1.5 Databricksのユーザー名とパスワード

Databricksのユーザー名とパスワードによる認証は、Databricks基本認証とも呼ばれます。ユーザー名とパスワードによる認証は、シングル・サインオンが無効になっている場合のみ可能です。

認証にDatabricksのユーザー名とパスワードを使用するには、gg.eventhandler.databricks.UserNameおよびgg.eventhandler.databricks.Passwordプロパティをそれぞれの値に設定します。

ノート:

23aiリリースでは、オラクルは、OAuth 2.0トークン、OAuthユーザー・マシン(U2M)およびOAuthマシン間(M2M)を使用した認証をまだ動作保証していません。

https://docs.databricks.com/en/integrations/jdbc/authentication.html#oauth-20-tokensに従ってJDBC URLを構成することもできます。Databricksでサポートされているすべての認証メカニズムの詳細は、https://docs.databricks.com/en/integrations/jdbc/authentication.htmlを参照してください。

9.2.17.2.3 Unity Catalog

Unity Catalogでは、すべてのDatabricksワークスペースにわたる一元化されたアクセス制御、監査、系統およびデータ検出機能が提供されます。

Unity Catalogでは、プライマリ・データ・オブジェクトの階層は、メタストアから表またはボリュームという順序になっています。

  • メタストア: メタデータの最上位コンテナ。各メタストアでは、データを編成する、3段階のネームスペース(catalog.schema.table)が公開されます。

    ノート:

    ワークスペースにレガシーHiveメタストアが含まれている場合、そのメタストア内のデータは、hive_metastoreというカタログ内で、Unity Catalogで定義されているデータとともに引き続き使用できます。
  • カタログ: データ・アセットの編成に使用される、オブジェクト階層の最初のレイヤー。
  • スキーマ: データベースとも呼ばれます。スキーマは、オブジェクト階層の2番目のレイヤーであり、表とビューを含んでいます。
  • ビューおよびボリューム: データ・オブジェクト階層での最下位には、表、ビューおよびボリュームがあります。ボリュームでは、表形式以外のデータについてガバナンスが提供されます。
9.2.17.2.3.1 管理対象表

Oracle GoldenGateでは、データはDatabricksの管理対象表にレプリケートされます。管理対象表ではDELTA表形式が使用されています。

9.2.17.2.3.1.1 hive_metastoreカタログ内の表

既存のDatabricksワークスペースでUnity Catalogが有効になっている場合、既存の表はhive_metastoreカタログ内にあります。

hive_metastoreの下の表では、主キーはサポートされていません。

Oracle GoldenGateのReplicat MAP文では、KEYCOLSを使用して、ステージング/マージ・レプリケーションに必要なキー列を定義する必要があります。

9.2.17.2.3.2 外部表

外部表は、外部の場所に格納されているデータを参照する、ファイルバックアップ表です。

外部の場所とは、オブジェクト・ストレージ(ADLS Gen2、AWS S3、GCSなど)です。

外部表用のクラウド・ストレージを管理するために、Unity Catalogでは次のものが使用されます:
  • ストレージ資格証明: ストレージ資格証明を使用すると、Databricksでクラウド・ストレージ内のデータにアクセスできます。
  • 外部の場所には、ストレージ資格証明およびクラウド・ストレージ・パスへの参照が含まれています。
9.2.17.2.3.3 ストレージ資格証明の作成

ストレージ資格証明は、クラウド・テナントに格納されているデータにアクセスするための認証および認可のメカニズムに相当します。

9.2.17.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.17.2.3.3.2 Googleストレージ・アカウントにアクセスするためのストレージ資格証明

Googleストレージ・アカウントにアクセスするためのストレージ資格証明を作成するには:

  • Google Cloud Storageにアクセスするためのストレージ資格証明を作成する:
    1. Databricksワークスペースにログインします。
    2. サイドバーで「Catalog」をクリックします。
    3. 「External Data」「Storage Credentials」の順にクリックします。
    4. 「Create Storage Credential」をクリックします。
    5. 「Create Storage Credential」ダイアログで、次の詳細情報を入力します:
      • 資格証明タイプ: ドロップダウン・メニューからGoogleサービス・アカウントを選択します。
      • Storage credential name: ストレージ資格証明の名前を入力します。
    6. 「Advanced Options」をクリックし、「Limit to read-only use」ボックスを選択します。
    7. 「Create」をクリックします。
    8. ストレージ資格証明が作成されましたダイアログで、サービス・アカウントID (電子メール・アドレスの形式になっている)を書き留め、「完了」をクリックします。
  • そのサービス・アカウントの権限を構成する:
    1. Google Cloudコンソールに移動し、Databricksワークスペースからアクセスする必要があるGCSバケットを開きます。

      このバケットは、Databricksワークスペースと同じリージョンにある必要があります。

    2. 「Permission」タブで、「+ Grant access」をクリックし、そのサービス・アカウントに次のロールを割り当てます:
      • Storage Legacy Bucket Reader
      • Storage Object Admin

        このサービス・アカウントの電子メール・アドレスをプリンシパル識別子として使用します。

ノート:

様々なストレージ・アカウント用に複数のストレージ資格証明を作成できます。

9.2.17.2.4 外部の場所の作成

外部の場所により、Unity Catalogのストレージ資格証明がクラウド・オブジェクト・ストレージ・コンテナに関連付けられます。

外部の場所は、カタログとスキーマのための管理対象ストレージの場所を定義するためと、外部表と外部ボリュームのための場所を定義するために使用されます。

Oracle GoldenGateでは、構成の簡略化のために外部の場所を作成することをお薦めしていますが、この手順を省略することもできます。

9.2.17.2.4.1 Azureストレージ・アカウントにアクセスするための外部の場所

外部の場所を作成するには:

  • Databricksワークスペースにログインします。
  • サイドバーで「Catalog」をクリックします。
  • 外部データをクリックしてから、「外部の場所」をクリックします。
  • 場所の作成をクリックします。
  • 外部の場所の新規作成フォームで、次の詳細を入力します:
    • 外部の場所の名前: 外部の場所の名前を入力します。
    • ストレージ資格証明: ドロップダウン・メニューから、以前に作成したストレージ資格証明を選択します。
    • URL: 外部の場所として使用する必要があるバケットのパスを入力します。たとえば:
      abfss://[email protected]/
    • 「Advanced Options」をクリックし、「Limit to read-only use」ボックスを選択します。
    • 「Create」をクリックします。

ノート:

外部の場所が作成されており、ストレージ資格証明に関連付けられている場合は、イベント・ハンドラ・プロパティgg.eventhandler.databricks.credentialを設定する必要はありません。

9.2.17.2.4.2 Googleストレージ・アカウントにアクセスするための外部の場所

外部の場所を作成するには:

  • Databricksワークスペースにログインします。
  • サイドバーで「Catalog」をクリックします。
  • 外部データをクリックしてから、「外部の場所」をクリックします。
  • 場所の作成をクリックします。
  • 外部の場所の新規作成フォームで、次の詳細を入力します:
    • 外部の場所の名前: 外部の場所の名前を入力します。
    • ストレージ資格証明: ドロップダウン・メニューから、以前に作成したストレージ資格証明を選択します。
    • URL: 外部の場所として使用する必要があるバケットのパスを入力します。たとえば:
      gs://gcs-bucket/ogg
    • 「Advanced Options」をクリックし、「Limit to read-only use」ボックスを選択します。
    • 「Create」をクリックします。

9.2.17.2.5 Unity Catalogのないコンピュート・クラスタ

レガシーDatabricksコンピュート・クラスタでUnity Catalogがサポートされていない場合や、一部のコンピュート・クラスタでUnity Catalogが有効になっていない場合があります。

これらのコンピュート・クラスタでは、ストレージ資格証明や外部の場所を使用できません。

外部オブジェクト・ストレージへのアクセスを構成するには、次のようにspark構成を設定します:
  • Databricksワークスペースにログインします。
  • サイドバーで「コンピュート」をクリックします。
  • 使用可能なクラスタのリストで、ターゲット・クラスタの名前をクリックします。
  • 「構成」タブで、「拡張オプション」を展開します。
  • 「Spark」タブで、クラスタのspark構成を指定できます。
9.2.17.2.5.1 Azureストレージ・アカウントにアクセスするためのSpark構成

ADLS Gen2へのアクセスは、ストレージ・アカウントの名前およびキーを使用して構成できます。

ストレージ・アカウント・キーは、Databricksシークレットに安全に格納できます。

AzureでのDatabricks用spark構成の設定例を次に示します:
fs.azure.account.key.storageaccountname.dfs.core.windows.net {{secrets/gg/azureAccountKey-for-storageaccountname}}

この例では、storageaccountnameはAzureストレージ・アカウント名であり、{{secrets/gg/azureAccountKey-for-storageaccountname}}は、ストレージ・アカウント・キーを含むDatabricksシークレットです。

9.2.17.2.5.2 Google Cloud StorageにアクセスするためのSpark構成

Google Cloud Storageへのアクセスは、ストレージ・バケットにアクセスする権限があるGoogleサービス・アカウントを使用して構成できます。

GCSへのアクセスを構成するには、次の情報が必要です:
  • サービス・アカウント電子メール
  • 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}}
9.2.17.2.5.3 AWS S3にアクセスするためのSpark構成

AWS S3へのアクセスは、複数の方法で構成できます。S3にアクセスするためにSpark構成において次の環境変数を設定できます:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
Sparkの環境変数を編集して次のように設定します:
AWS_SECRET_ACCESS_KEY={{secrets/gg/aws_secret_access_key}}
AWS_ACCESS_KEY_ID={{secrets/gg/aws_access_key_id}}
9.2.17.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クラスタ構成も必要です。

9.2.17.2.6 クラスパス構成

Databricksイベント・ハンドラでは、Databricks JDBCドライバが使用されます。クラスパスにJDBCドライバへのパスが含まれていることを確認します。また、それぞれのオブジェクト・ストア・イベント・ハンドラ依存性をクラスパスに含める必要があります。
9.2.17.2.6.1 依存性
Databricks JDBCドライバ: 次のスクリプトを実行することで、依存性ダウンローダ・ツールをダウンロードしてこのJDBCドライバをダウンロードできます:<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.17.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.17.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.17.2.9 操作集計

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

9.2.17.2.9.1 インメモリー操作の集計
  • 操作レコードはインメモリーで集計できます。これがデフォルト構成です。
  • ユーザーは、ファイル・ライターgg.handler.databricks.fileRollIntervalプロパティを使用してマージ間隔の頻度をチューニングできます。このデフォルト値は3m (3分)に設定されています。

  • インメモリー操作集計には、追加のJVMメモリー構成が必要です。
9.2.17.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.17.2.10 圧縮更新の処理

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

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

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

パラメータgg.compressed.updateをtrueまたはfalseに設定して、圧縮更新レコードまたは非圧縮更新レコードを指定できます。
9.2.17.2.10.1 非圧縮更新を含むMERGE文

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

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

9.2.17.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.17.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.17.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.17.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.17.2.12 表マッピング

MAP文でターゲット・カタログが指定されていない場合は、Databricksワークスペースのデフォルト・カタログが使用されます。ハンドラにより、初期化中にデフォルト・カタログがログ記録されます。ログ・メッセージの例: 接続カタログは[dbx-catalog]に設定されています

9.2.17.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.17.3 トラブルシューティングと診断

  • サポートされていないDatabricksデータ型:
    • ARRAY
    • MAP
    • STRUCT
    • INTERVAL
    • VOID
  • Databricks JDBCドライバの例外:
    java.lang.ClassCastException: class
              org.apache.logging.log4j.core.lookup.ResourceBundleLookup

    Databricks 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を構成できます。