Oracle でフェデレーション クエリを実行する
このページでは、 Databricksによって管理されていないOracleデータに対してフェデレーションクエリを実行するようにレイクハウスフェデレーションを設定する方法について説明します。 レイクハウスフェデレーションの詳細については、「 レイクハウスフェデレーションとは」を参照してください。
レイクハウスフェデレーションを使用してOracleデータベースに接続するには、 Databricks Unity Catalog メタストアに次のものを作成する必要があります。
- Oracle データベースへの接続。
 - OracleUnity Catalog Unity Catalogデータベースを にミラーリングする フォーリンカタログDatabricks 。これにより、 クエリ構文とデータガバナンスツールを使用してデータベースへの ユーザーアクセスを管理できます。
 
制限
- 
レイクハウスフェデレーションは、Oracle Cloudへのトランスポート層セキュリティ(TLS)接続のみをサポートします。 他のOracleデータベースへの接続では、ネイティブ・ネットワーク暗号化(NNE)が使用されます。
 - 
タイムゾーン値が
Etc/UTCのインスタンス 11.2.0.3.0 以降に接続すると、既知の問題があります (エラー:ORA-01882: timezone region not found)。- 回避策: 
oracle.jdbc.timezoneAsRegionJDBC ドライバプロパティに直接マップされるspark.databricks.connector.oracle.timezoneAsRegion構成を使用します。 - 警告 : この回避策により、夏時間 (DST) の誤った動作が発生する可能性があります。サポートが必要な場合は、Oracleサポートにお問い合わせください。
 
 - 回避策: 
 
ライセンス
Oracle ドライバおよびその他の必要な Oracle jar は、クリックスルーなしの FDHUT ライセンスによって管理されます。
始める前に
開始する前に、このセクションの要件を満たしていることを確認してください。
Databricks の要件
ワークスペースの要件:
- Unity Catalogのワークスペースが有効になっています。
 
コンピュートの要件:
- コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 「レイクハウスフェデレーションのネットワーキングに関する推奨事項」を参照してください。
 - Databricks コンピュートは、 Databricks Runtime 16.1 以降と Standard または Dedicated アクセス モードを使用する必要があります。
 - SQLウェアハウスは PRO または サーバレスで、2024.50 以上を使用する必要があります。
 
必要な権限:
- 接続を作成するには、メタストア管理者か、ワークスペースに接続されているUnity Catalogメタストアの 
CREATE CONNECTION権限を持つユーザーである必要があります。 - フォーリンカタログを作成するには、メタストアに対する 
CREATE CATALOG権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG権限を持っている必要があります。 
追加の権限要件は、以下の各タスクベースのセクションに記載しています。
Oracleの要件
ネイティブネットワーク暗号化を使用する接続の場合は、サーバー側の NNE (少なくともACCEPTED レベル) を有効にする必要があります。Oracleドキュメントの ネットワーク・データ暗号化の構成 を参照してください。これは、かわりにTLSを使用するOracle Cloud接続には適用されません。
Databricks 接続を作成する
接続では、外部データベースシステムにアクセスするためのパスと認証情報を指定します。接続を作成するには、カタログエクスプローラーを使用するか、Databricksノートブックまたは Databricks SQLクエリーエディタで CREATE CONNECTION SQLコマンドを使用できます。
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections を参照してください。 および Unity Catalog コマンド。
必要な権限: メタストア管理者またはCREATE CONNECTION権限を持つユーザー。
- Catalog Explorer
 - SQL
 
- 
Databricks ワークスペースで、[
カタログ] をクリックします。
 - 
左側のペインで、 [外部データ] メニューを展開し、 [接続] を選択します。
 - 
接続の作成 をクリックします。
 - 
接続のセットアップ ウィザードの 接続の基本 ページで、わかりやすい 接続名 を入力します。
 - 
[ 接続の種類 ] で [Oracle ] を選択します。
 - 
(オプション)コメントを追加します。
 - 
次へ をクリックします。
 - 
「 認証 」ページで、Oracle インスタンスについて次のように入力します。
- ホスト : たとえば、 
oracle-demo.123456.rds.amazonaws.com - ポート : たとえば、 
1521 - ユーザー : たとえば、 
oracle_user - パスワード : たとえば、 
password123 - 暗号化プロトコル : 
Native Network Encryption(デフォルト) またはTransport Layer Security 
 - ホスト : たとえば、 
 - 
接続の作成 をクリックします。
 - 
[カタログの基本 ] ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。
 - 
(オプション)[ 接続をテスト ]をクリックして、動作することを確認します。
 - 
[ カタログを作成 ] をクリックします。
 - 
[ アクセス ] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。[ すべてのワークスペースにアクセス権がある ] を選択するか、[ ワークスペースに割り当て ] をクリックし、ワークスペースを選択して [ 割り当て] をクリックします。
 - 
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
 - 
カタログに対する 権限を付与 します。[ 許可 ] をクリックします。
- 
カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
 - 
各プリンシパルに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに
BROWSEが付与されます。- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する 
read権限を付与します。 - ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する 
read権限とmodify権限を付与します。 - 付与する権限を手動で選択します。
 
 - ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する 
 - 
付与 をクリックします。
 
 - 
 - 
次へ をクリックします。
 - 
[メタデータ] ページで、タグのキーと値のペアを指定します。詳細については、「Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。
 - 
(オプション)コメントを追加します。
 - 
保存 をクリックします。
 
ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。
CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>',
  encryption_protocol '<protocol>' -- optional
);
Databricks では、資格情報などの機密性の高い値には、プレーンテキスト文字列の代わりに Databricks シークレット を使用することをお勧めします。例えば:
CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>'),
  encryption_protocol '<protocol>' -- optional
)
ノートブック SQL コマンドでプレーンテキスト文字列を使用する必要がある場合は、 $ を \でエスケープして文字列を切り捨てないようにしてください。 たとえば、 \$のようになります。
シークレットの設定に関する情報については、「 シークレット管理」を参照してください。
フォーリンカタログの作成
UI を使用してデータソースへの接続を作成する場合は、フォーリンカタログの作成が含まれているため、この手順をスキップできます。
フォーリンカタログは、外部データシステム内のデータベースをミラーリングするため、DatabricksとUnity Catalogを使用して、そのデータベース内のデータへのアクセスを管理できます。フォーリンカタログを作成するには、すでに定義されているデータソースへの接続を使用します。
フォーリンカタログを作成するには、カタログエクスプローラCREATE FOREIGN CATALOGSQL を使用するか、Databricks ノートブックまたは クエリSQL エディターの コマンドを使用します。Databricks REST API または Databricks CLI を使用してカタログを作成することもできます。 POST /api/2.1/unity-catalog/catalogs を参照してください。 および Unity Catalog コマンド。
必要な権限: メタストアの CREATE CATALOG 権限、接続の所有権または接続の CREATE FOREIGN CATALOG 権限。
- Catalog Explorer
 - SQL
 
- 
Databricks ワークスペースで、[
カタログ] をクリックして [カタログ エクスプローラー] を開きます。
 - 
カタログ ペインの上部で、
追加 アイコンをクリックし、メニューから[ カタログを追加 ]を選択します。
または、 クイックアクセス ページから[ カタログ ]ボタンをクリックし、[ カタログを作成 ]ボタンをクリックします。
 - 
「カタログの作成」のフォーリンカタログの作成手順に従います。
 
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。括弧内の項目はオプションです。プレースホルダーの値を置き換えます。
<catalog-name>:Databricksのカタログの名前。<connection-name>: データソース、パス、およびアクセス認証情報を指定する 接続オブジェクト 。<service-name>: Databricks のカタログとしてミラーリングするサービス名。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (service_name '<service-name>');
サポートされているプッシュダウン
次のプッシュダウンがサポートされています。
- フィルター
 - 予測
 - 上限
 - 集計
 - offset
 - キャスト
 - 含む、開始、終了
 
データ型マッピング
Oracle から Spark に読み取る場合、データ型は次のようにマップされます。
オラクルタイプ  | Spark タイプ  | 
|---|---|
タイムゾーンのタイムスタンプ、ローカルタイムゾーンのタイムスタンプ  | TimestampType  | 
日付、タイムスタンプ  | TimestampType/TimestampNTZType*  | 
数値、浮動小数点数  | 10 進数型**  | 
バイナリ浮動小数点数  | FloatType  | 
バイナリダブル  | DoubleType  | 
CHAR、NCHAR、VARCHAR2、NVARCHAR2  | StringType  | 
* DATE と TIMESTAMP は、 spark.sql.timestampType = TIMESTAMP_LTZ の場合 (デフォルト) Spark TimestampType にマップされます。spark.sql.timestampType = TIMESTAMP_NTZの場合は TimestampNTZType にマップされます。
** 精度を指定しないNUMBERは、Sparkで純粋な浮動小数点Decimalをサポートしていないため、DecimalType(38, 10)にマップされます。