Condividi tramite


Query federate (Lakehouse Federation)

Si applica a:contrassegnato con sì SQL di Databricks contrassegnato con sì Databricks Runtime 13.3 LTS e versioni successive contrassegnato con sì solo Unity Catalog

La federazione di query consente ad Azure Databricks di eseguire query sui dati gestiti da altri metastores di Azure Databricks e di molti sistemi di gestione di database di terze parti, ad esempio PostgreSQL, mySQLe Snowflake.

Per eseguire query sui dati da un altro sistema, è necessario:

  1. Creare una connessione esterna. Questo registra il server federato specifico con Unity Catalog e stabilisce i mezzi per comunicare con esso, ad esempio l'URL, la porta e credentials usati.
  2. Registrare catalogs esterne dal server federato con Unity Catalog
  3. Gli utenti Grant accedono al catalogsesterno. Questa operazione può essere eseguita a livello catalog, schemao table, come si farebbe con i normali elementi di sicurezza.

È ora possibile eseguire query tra le varie relazioni locali ed esterne.

Connessione esterna

Una connessione esterna è un oggetto sicurizzabile di Unity Catalog che identifica un server esterno. Come parte di CREATE CONNECTION, si specifica l'URL where a cui è possibile accedere al server.

È anche necessario specificare opzioni come il nome utente e la password o un'altra autenticazione accettata, che Azure Databricks userà per comunicare.

Stranieri catalog

Data una connessione esterna che supporta namespace a tre livelli (catalog/database.schema.table), è possibile registrare l'intera catalogs con Unity Catalog usando il comando CREATE FOREIGN CATALOG. Azure Databricks conserva la definizione degli schemi del cataloge delle loro relazioni in sync con la fonte esterna.

Esempi

-- 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;
  ...