フェデレーション クエリ (Lakehouse フェデレーション)

適用対象:check marked yes Databricks SQL Databricks Runtime 13.3 LTS 以降 Unity Catalog のみ

クエリ フェデレーションを使用すると、Azure Databricks は、他の Azure Databricks メタストアだけでなく、PostgreSQLmySQLSnowflake などの多くのサードパーティ データベース管理システム (DBMS) によって提供されるデータに対してクエリを実行できます。

別のシステムのデータに対してクエリを実行するには、次の手順を実行する必要があります。

  1. 外部接続を作成する。 これにより、特定のフェデレーション サーバーが Unity Catalog に登録され、使用される URL、ポート、資格情報などの通信手段が確立されます。
  2. フェデレーション サーバーから外部カタログを Unity Catalog に登録する
  3. 外部カタログへのアクセス権をユーザーに付与します。 これは、通常のセキュリティ保護可能なリソースと同様に、カタログ、スキーマ、またはテーブル レベルで行うことができます。

さまざまなローカルおよび外部の関係にわたってクエリを発行できるようになりました。

外部接続

外部接続は、外部サーバーを識別する Unity Catalog のセキュリティ保護可能なオブジェクトです。 CREATE CONNECTION の一部として、サーバーにアクセスできる URL を指定します。

また、Azure Databricks が通信に使用するユーザー名とパスワードなどのオプションやその他の承認済み認証も指定する必要があります。

外部カタログ

3 レベルの名前空間 (catalog/database.schema.table) をサポートする外部接続がある場合は、CREATE FOREIGN CATALOG コマンドを使用して、カタログ全体を Unity Catalog に登録できます。 Azure Databricks により、カタログのスキーマとその関係の定義が外部ソースと同期されたままになります。

-- Create a postgresql connection
> CREATE CONNECTION postgresql_connection
    TYPE POSTGRESQL
    OPTIONS (
       host 'qf-postgresql-demo.xxxxxx.us-west-2.rds.amazonaws.com',
       port '5432',
       user 'postgresql_user',
       password 'password123');

-- Alternatively create a postgresql connection with secret scope
> CREATE CONNECTION postgresql_connection
    TYPE POSTGRESQL
    OPTIONS (
       host 'qf-postgresql-demo.xxxxxx.us-west-2.rds.amazonaws.com',
       port '5432',
       user secret('secrets.r.us', 'postgresUser'),
       password secret('secrets.r.us', 'postgresPassword'));

-- Expose the "postgresdb" database with schemas and tables postgresql_user can access.
> CREATE FOREIGN CATALOG postgresql_catalog
    USING CONNECTION postgresql_connection
    OPTIONS (database 'postgresdb');

-- Execute a query across tables in the above catalog, schema, and table.
> SELECT * FROM postgresql_catalog.a_schema.table1
  UNION ALL
  SELECT * FROM default.postgresql_schema.table2
  UNION ALL
  SELECT * FROM default.postgresql.mytable
  UNION ALL
  SELECT local_table;
  ...