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. Oracle インスタンスの次の接続プロパティを入力します。

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

    • ポート: たとえば、 1521

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

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

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

  8. 作成 をクリックします。

ノートブックまたは 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 \ でエスケープして文字列を切り捨てないようにしてください。 たとえば、 \$のようになります。

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

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

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

フォーリンカタログを作成するには、カタログ エクスプローラー、または Databricks ノートブックまたは SQL クエリ エディターのCREATE FOREIGN CATALOG 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 にマップされます。