次の方法で共有


PostgreSQL でフェデレーテッド クエリを実行する

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

レイクハウス フェデレーションを使って PostgreSQL データベースに対する自分のクエリの実行に接続するには、Azure Databricks の Unity Catalog メタストアで以下を作成する必要があります。

  • PostgreSQL データベースでの自分のクエリの実行への接続
  • Unity Catalog クエリ構文とデータ ガバナンス ツールを使用して、データベースにアクセスできる Azure Databricks ユーザーを管理するために、Unity Catalog の PostgreSQL に対するクエリの実行データベースをミラーリングする外部カタログ

はじめに

Workspace requirements:

  • Unity Catalog ので有効化されたワークスペース。

Compute requirements:

  • コンピューティング リソースからターゲット データベース システムへのネットワーク接続。 「Lakehouse Federation 向けネットワーク推奨事項」を参照してください。
  • Azure Databricks コンピューティングでは、Databricks Runtime 13.3 LTS 以降を使用し、Standard または デディケート アクセス モードを使用する必要があります。
  • SQL ウェアハウスはプロまたはサーバーレスである必要があり、2023.40 以降を使用する必要があります。

Permissions required:

  • 接続を確立するには、メタストア管理者か、ワークスペースに接続されている Unity Catalog メタストアの CREATE CONNECTION 権限が付与されているユーザーである必要があります。
  • 外部カタログを作成するには、メタストアの CREATE CATALOG アクセス許可が具よされており、接続の所有者であるか、接続の CREATE FOREIGN CATALOG 権限が付与されている必要があります。

その他のアクセス許可要件は、以下の各タスクベースのセクションで指定されています。

接続を作成する

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

Note

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

必要なアクセス許可: メタストア管理者、または CREATE CONNECTION 権限が付与されたユーザー。

Catalog Explorer

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

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

    または、[クイック アクセス] ページで、[外部データ]> ボタンをクリックし、[接続] タブに移動し、[接続を作成] をクリックします。

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

  4. PostgreSQL[接続の種類] を選択します。

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

  6. Click Next.

  7. [ 認証 ] ページで、PostgreSQL インスタンスの次の接続プロパティを入力します。

    • ホスト: たとえば、postgres-demo.lb123.us-west-2.rds.amazonaws.com
    • ポート: たとえば、5432
    • ユーザー: たとえば、postgres_user
    • パスワード: たとえば、password123
  8. [接続の作成] をクリックします。

  9. カタログの基本 ページで、外部カタログの名前を入力します。 外部カタログは、カイブデータ システムのデータベースをミラリングします。これにより、クエリを実行でき、Azure Databricks と Unity Catalog を使用してそのデータベースのデータへのアクセスを管理できます。

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

  11. カタログを作成 をクリックします。

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

  13. カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。 テキストボックスに主要項目を入力し、表示された結果からその項目をクリックします。

  14. カタログに関する権限 を付与します。 Click Grant:

    1. カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。 テキストボックスに主要項目を入力し、表示された結果からその項目をクリックします。
    2. 各プリンシパルに付与する 特権プリセット を選択します。 既定では、すべてのアカウント ユーザーに BROWSE が付与されます。
      • ドロップダウン メニューから [データ 閲覧者 を選択して、カタログ内のオブジェクトに対する read 権限を付与します。
      • ドロップダウン メニュー データ エディター を選択して、カタログ内のオブジェクトに対する read 権限と modify 権限を付与します。
      • 付与する特権を手動で選択します。
    3. Click Grant.
  15. Click Next.

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

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

  18. Click Save.

SQL

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

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

資格情報などの機密値には、プレーンテキストの文字列ではなく Azure Databricks シークレットを使用することをお勧めします。 For example:

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

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

外部カタログを作成する

Note

UI を使用してデータ ソースへの接続を作成する場合は、外部カタログの作成が含まれるので、この手順は省略できます。

外部カタログは、カイブデータ システムのデータベースをミラリングします。これにより、クエリを実行でき、Azure Databricks と Unity Catalog を使用してそのデータベースのデータへのアクセスを管理できます。 外部カタログを作成するには、定義済みのデータ ソースへの接続を使用します。

外部カタログを作成するには、Catalog Explorer を使用するか、Azure 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 権限。

Catalog Explorer

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

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

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

  3. カタログを作成する」の外部カタログを作成する手順を実行します。

SQL

ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。 角かっこ内の項目は省略可能です。 次のプレースホルダー値を置き換えます。

  • <catalog-name>: Azure Databricks 内のカタログの名前。
  • <connection-name>: データ ソース、パス、アクセス資格情報を指定する接続オブジェクト
  • <database-name>: Azure Databricks でカタログとしてミラーリングするデータベースの名前。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Supported pushdowns

すべてのコンピューティングで以下のプッシュダウンがサポートされています:

  • Filters
  • Projections
  • Limit
  • 関数: 部分的。フィルター式の場合のみ。 (文字列関数や数学関数、Alias、Cast、SortOrder などのその他の関数)

Databricks Runtime 13.3 LTS 以上および SQL ウェアハウスでは、以下のプッシュダウンがサポートされています。

  • 次の集計関数: MIN、MAX、COUNT、SUM、AVG、VAR_POP、VAR_SAMP、STDDEV_POP、STDDEV_SAMP、GREATEST、 LEAST、COVAR_POP、COVAR_SAMP、CORR、REGR_INTERCEPT、REGR_R2、REGR_SLOPE、REGR_SXY
  • 次のブール関数: =、<、<、=>、>=、 <=>
  • 次の数学関数 (ANSI が無効な場合はサポートされません): +、-、*、%、/
  • その他の演算子 | および ~
  • 制限付きで使用した場合の並べ替え

次のプッシュダウンはサポートされていません。

  • Joins
  • Windows functions

データ型のマップ

PostgreSQL から Spark に読み取ると、データ型は次のようにマップされます。

PostgreSQL type Spark type
numeric DecimalType
int2 ShortType
int4 (署名されていない場合) IntegerType
int8、oid、xid、int4 (署名されている場合) LongType
float4 FloatType
倍精度、float8 DoubleType
char CharType
name、varchar、tid VarcharType
bpchar、character varying、json、money、point、super、text StringType
bytea、geometry、varbyte BinaryType
bit, bool BooleanType
date DateType
tabstime、time、time with time zone、timetz、time without time zone、timestamp with time zone、timestamp、timestamptz、timestamp without time zone* TimestampType/TimestampNTZType
Postgresql 配列型** ArrayType

*Postgresql から読み取ると、Timestamp (既定値) の場合、Postgresql TimestampType は Spark preferTimestampNTZ = false にマップされます。 Postgresql Timestamp は、TimestampNTZType の場合、preferTimestampNTZ = true にマップされます。

**サポートされる配列型は限られています。