Query federate (Lakehouse Federation)

Si applica a:segno di spunta sì Solo databricks SQL segno di spunta sì Databricks Runtime 13.3 LTS e versioni successive segno di spunta sì al catalogo Unity

La federazione di query consente ad Azure Databricks di eseguire query sui dati gestiti da altri metastore di Azure Databricks, nonché su molti sistemi di gestione di database di terze parti (DBMS), ad esempio PostgreSQL, mySQL e 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 l'accesso ai cataloghi esterni. Questa operazione può essere eseguita a livello di catalogo, schema o tabella come si farebbe con le normali entità a protezione diretta.

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

Connessione esterna

Una connessione esterna è un oggetto a protezione diretta di Unity Catalog che identifica un server esterno. Come parte di CREATE CONNECTION, specificare l'URL a cui è possibile accedere il server.

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

Catalogo esterno

Data una connessione esterna che supporta spazi dei nomi a tre livelli (catalog/database.schema.table) è possibile registrare interi cataloghi con il catalogo Unity 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;
  ...