Condividi tramite


Query federate (Lakehouse Federation)

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

La federazione di query consente ad Azure Databricks di eseguire query sui dati gestiti da altri metastore 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. In questo modo viene registrato il server federato specifico con Il catalogo Unity e viene stabilito il modo per comunicare con esso, ad esempio l'URL, la porta e le credenziali usate.
  2. Registrare cataloghi stranieri dal server federato con Unity Catalog
  3. Concedere agli utenti di l'accesso ai cataloghi esterni. Puoi eseguire questa operazione a livello di catalogo, schema o tabella proprio come faresti con le normali sicurezze.

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

Connessione esterna

Una connessione esterna è un oggetto proteggibile di Unity Catalog che identifica un server straniero. Nell'ambito di CREATE CONNECTION, specificare l'URL in cui si può 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.

Catalogo straniero

Data una connessione esterna che supporta spazi dei nomi a tre livelli (catalog/database.schema.table), è possibile registrare interi cataloghi con Unity Catalog usando il comando CREATE FOREIGN CATALOG. Azure Databricks mantiene sincronizzata la definizione degli schemi del catalogo e le relative relazioni con l'origine 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;
  ...