Oracle でフェデレーション クエリを実行する

プレビュー

この機能はパブリックプレビュー段階です。

この記事では、 Databricksによって管理されていないOracleデータに対してフェデレーションクエリを実行するようにレイクハウスフェデレーションを設定する方法について説明します。 レイクハウスフェデレーションの詳細については、「 レイクハウスフェデレーションとは」を参照してください。

レイクハウスフェデレーションを使用してOracleデータベースに接続するには、 Databricks Unity Catalog メタストアに次のものを作成する必要があります。

  • Oracle データベースへの接続。

  • OracleUnity Catalog Unity Catalogデータベースを にミラーリングする フォーリンカタログDatabricks 。これにより、 クエリ構文とデータガバナンスツールを使用してデータベースへの ユーザーアクセスを管理できます。

始める前に

開始する前に、このセクションの要件を満たしていることを確認してください。

Databricks の要件

ワークスペースの要件:

  • Unity Catalogのワークスペースが有効になっています。

コンピュートの要件:

  • コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 「レイクハウスフェデレーションのネットワーキングに関する推奨事項」を参照してください。

  • Databricksコンピュートは、Databricks Runtime 16.1 以降と、共有またはシングル ユーザー アクセス モードを使用する必要があります。

  • SQLウェアハウスは PRO または サーバレスで、2024.50 以上を使用する必要があります。

必要な権限:

  • 接続を作成するには、メタストア管理者か、ワークスペースに接続されているUnity Catalogメタストアの CREATE CONNECTION 権限を持つユーザーである必要があります。

  • フォーリンカタログを作成するには、メタストアに対する CREATE CATALOG 権限を持ち、接続の所有者であるか、接続に対する CREATE FOREIGN CATALOG 権限を持っている必要があります。

追加の権限要件は、以下の各タスクベースのセクションに記載しています。

Oracleの要件

Databricks 接続を作成する

接続では、外部データベースシステムにアクセスするためのパスと認証情報を指定します。接続を作成するには、カタログエクスプローラーを使用するか、Databricksノートブックまたは Databricks SQLクエリーエディタで CREATE CONNECTION SQLコマンドを使用できます。

注:

Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections および Unity Catalog コマンドを参照してください。

必要な権限:メタストア管理者またはCREATE CONNECTION権限を持つユーザー。

  1. Databricks ワークスペースで、[カタログアイコン カタログ] をクリックします。

  2. 左側のペインで、[外部データ]メニューを展開し、[接続]を選択します。

  3. [接続の作成]をクリックします。

  4. 接続のセットアップ ウィザードの 接続の基本 ページで、わかりやすい接続名を入力します。

  5. [ 接続の種類 ] で [Oracle] を選択します。

  6. (オプション)コメントを追加します。

  7. 次へ」をクリックします。

  8. 認証 」ページで、Oracle インスタンスについて次のように入力します。

    • ホスト: たとえば、 oracle-demo.123456.rds.amazonaws.com

    • ポート: たとえば、 1521

    • ユーザー: たとえば、 oracle_user

    • パスワード: たとえば、 password123

  9. [接続の作成]をクリックします。

  10. [カタログの基本] ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。

  11. (オプション)[接続をテスト]をクリックして、動作することを確認します。

  12. [ カタログを作成] をクリックします。

  13. [ アクセス ] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 [ すべてのワークスペースにアクセス権がある] を選択するか、[ ワークスペースに割り当て] をクリックし、ワークスペースを選択して [ 割り当て] をクリックします。

  14. カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。 テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。

  15. カタログに対する 権限を付与 します。 [ 許可] をクリックします。

    1. カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。 テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。

    2. 各プリンシパルに付与する 権限プリセット を選択します。 デフォルトでは、すべてのアカウントユーザーに BROWSE が付与されます。

      • ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する read 権限を付与します。

      • ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する read 権限と modify 権限を付与します。

      • 付与する権限を手動で選択します。

    3. 付与 をクリックします。

  16. 次へ」をクリックします。

  17. [メタデータ] ページで、タグのキーと値のペアを指定します。詳細については、「 セキュリティ保護可能なオブジェクト Unity Catalog タグを適用する」を参照してください。

  18. (オプション)コメントを追加します。

  19. 保存をクリックします。

ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。

CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

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>')
)

ノートブック SQL コマンドでプレーンテキスト文字列を使用する必要がある場合は、$ などの特殊文字を with \ でエスケープして文字列を切り捨てないようにしてください。 たとえば、 \$のようになります。

シークレットの設定については、「シークレット管理」を参照してください。

フォーリンカタログの作成

注:

UI を使用してデータソースへの接続を作成する場合は、フォーリンカタログの作成が含まれているため、この手順をスキップできます。

フォーリンカタログは、外部データシステム内のデータベースをミラーリングするため、DatabricksとUnity Catalogを使用して、そのデータベース内のデータへのアクセスを管理できます。フォーリンカタログを作成するには、すでに定義されているデータソースへの接続を使用します。

フォーリンカタログを作成するには、Catalog ExplorerCREATE FOREIGN CATALOGSQL を使用するか、Databricks ノートブックまたは クエリSQL エディターの コマンドを使用します。Databricks REST API または Databricks CLI を使用してカタログを作成することもできます。 POST /api/2.1/unity-catalog/catalogs を参照してください。 および Unity Catalog コマンド

必要な権限:メタストアの CREATE CATALOG 権限、接続の所有権または接続の CREATE FOREIGN CATALOG 権限。

  1. Databricks ワークスペースで、[カタログアイコン カタログ] をクリックして [カタログ エクスプローラー] を開きます。

  2. カタログペインの上部で、追加またはプラスアイコン 追加アイコンをクリックし、メニューから[カタログを追加]を選択します。

    または、クイックアクセスページから[カタログ]ボタンをクリックし、[カタログを作成]ボタンをクリックします。

  3. 「カタログの作成」のフォーリンカタログの作成手順に従ってください。

ノートブックまたは 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*

数値、浮動小数点数

DecimalType

バイナリ浮動小数点数

FloatType

バイナリダブル

DoubleType

CHAR、NCHAR、VARCHAR2、NVARCHAR2

StringType

* DATE と TIMESTAMP は、 spark.sql.timestampType = TIMESTAMP_LTZ (デフォルト) の場合、Spark TimestampType にマップされます。 これらは、 spark.sql.timestampType = TIMESTAMP_NTZの場合、TimestampNTZType にマップされます。