Condividi tramite


Eseguire query federate in MySQL

Questo articolo descrive come set up Lakehouse Federation per eseguire query federate sui dati MySQL non gestiti da Azure Databricks. Per altre informazioni sulla federazione di lakehouse, si veda Che cos'è Lakehouse Federation?.

Per connettersi al database MySQL tramite Lakehouse Federation, è necessario creare quanto segue nel metastore di Azure Databricks Unity Catalog:

  • Connessione al database MySQL.
  • Un catalog esterno che rispecchia il database MySQL in Unity Catalog in modo da poter usare la sintassi di query di Unity Catalog e strumenti di governance dei dati per gestire l'accesso degli utenti al database di Azure Databricks.

Operazioni preliminari

Requisiti dell'area di lavoro:

  • Area di lavoro abilitata per Unity Catalog.

Requisiti dell’ambiente di calcolo:

  • Connettività di rete dalla risorsa di calcolo ai sistemi di database di destinazione. Si veda Raccomandazioni di rete per Lakehouse Federation.
  • Il calcolo di Azure Databricks deve usare Databricks Runtime 13.3 LTS o versione successiva e accesso in modalità condivisa o modalità utente singolo .
  • I warehouse SQL devono essere pro o serverless e devono usare la versione 2023.40 o successiva.

Autorizzazioni necessarie:

  • Per creare una connessione, è necessario essere un amministratore del metastore o un utente con il privilegio CREATE CONNECTION sul metastore Unity Catalog collegato all'area di lavoro.
  • Per creare un catalogesterno, è necessario disporre dell'autorizzazione CREATE CATALOG sul metastore e essere il proprietario della connessione o avere il privilegio CREATE FOREIGN CATALOG sulla connessione.

In ogni sezione basata su attività che segue vengono specificati requisiti di autorizzazione aggiuntivi.

Crea una connessione

Una connessione specifica un percorso e credentials per l'accesso a un sistema di database esterno. Per creare una connessione, è possibile usare Catalog Explorer o il comando SQL CREATE CONNECTION in un notebook di Azure Databricks o nell'editor di query SQL di Databricks.

Nota

È anche possibile usare l'API REST di Databricks o l'interfaccia della riga di comando di Databricks per creare una connessione. Vedere post /api/2.1/unity-catalog/connections e comandi Catalog Unity.

Autorizzazioni necessarie: amministratore o utente metastore con il privilegio CREATE CONNECTION.

Catalog Explorer

  1. Nell'area di lavoro di Azure Databricks fare clic sull'icona CatalogCatalog.

  2. Nella parte superiore del riquadro Catalog fare clic sull'icona Aggiungi o più Icona Aggiungi e selectAggiungi una connessione dal menu.

    In alternativa, dalla pagina accesso rapido, fare clic sul pulsante >, passare alla scheda Connections e fare clic su Crea connessione.

  3. Nella pagina informazioni di base sulla connessione della connessione guidata immettere un nome di connessione descrittivo.

  4. Select un tipo di connessione di MySQL.

  5. (Facoltativo) Aggiungere un commento.

  6. Fare clic su Avanti.

  7. Nella pagina autenticazione inserire le seguenti proprietà di connessione per l'istanza di MySQL:

    • Host: ad esempio, mysql-demo.lb123.us-west-2.rds.amazonaws.com
    • Porta: ad esempio 3306
    • Utente: ad esempio mysql_user
    • Password: ad esempio, password123
  8. (Facoltativo): Selectcertificato di fiducia del server. Questa opzione è deselezionata per impostazione predefinita. Se selezionata, il livello di trasporto usa SSL per crittografare il canale e ignora la catena di certificati per convalidare l'attendibilità. Lasciare set impostato su predefinito, a meno che non sia necessario ignorare una convalida dell'attendibilità.

  9. Fare clic su Crea connessione.

  10. Nella pagina delle informazioni di base Catalog, immettere un nome per il catalogesterno. Un catalog esterno esegue il mirroring di un database in un sistema dati esterno in modo da poter eseguire query e gestire l'accesso ai dati in tale database usando Azure Databricks e Unity Catalog.

  11. (Facoltativo) Fare clic su Test connessione per verificare che funzioni.

  12. Fare clic su Crea catalog.

  13. Nella pagina Accessselect le aree di lavoro in cui gli utenti possono accedere alle catalog create. È possibile selectTutte le aree di lavoro hanno accessooppure fare clic su Assegna alle aree di lavoro, select le aree di lavoro e quindi fare clic su Assegna.

  14. Modificare il Proprietario che potrà gestire l'accesso a tutti gli oggetti nel catalog. Iniziare a digitare un principale nella casella di testo e quindi fare clic sul principale nei risultati restituiti.

  15. Grant privilegi nel catalog. Fare clic su Grant:

    1. Specificare i Principals che avranno accesso agli oggetti nel . Iniziare a digitare un principale nella casella di testo e quindi fare clic sul principale nei risultati restituiti.
    2. Select i set di impostazioni dei privilegi per grant a ogni entità. Agli utenti dell'account viene concesso BROWSE per impostazione predefinita.
      • Select lettore dati dal menu a discesa per grantread privilegi per gli oggetti nel catalog.
      • Select Editor di dati dal menu a discesa per grantread e modify privilegi sugli oggetti nel catalog.
      • select manualmente i privilegi per grant.
    3. Fare clic su Grant.
  16. Fare clic su Avanti.

  17. Nella pagina metadati, specificare le coppie chiave-valore dei tag. Per altre informazioni, vedere Applicare tag a Unity Catalog oggetti proteggibili.

  18. (Facoltativo) Aggiungere un commento.

  19. Fare clic su Salva.

SQL

Eseguire il seguente comando in un notebook o nell'editor di query SQL di Databricks.

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

È consigliabile usare i segreti di Azure Databricks anziché le stringhe di testo non crittografato per values sensibili, ad esempio credentials. Ad esempio:

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

Se è necessario usare stringhe di testo non crittografato nei comandi SQL del notebook, evitare di troncare la stringa eliminando caratteri speciali come $ con \. Ad esempio: \$.

Per informazioni sulla configurazione dei segreti, vedere Gestione dei segreti.

Creare un catalog straniero

Nota

Se si usa l'interfaccia utente per creare una connessione all'origine dati, la creazione di catalog esterna è inclusa ed è possibile ignorare questo passaggio.

Un catalog esterno esegue il mirroring di un database in un sistema dati esterno in modo da poter eseguire query e gestire l'accesso ai dati in tale database usando Azure Databricks e Unity Catalog. Per creare un catalogesterno, si deve usare una connessione all'origine dati già definita.

Per creare un catalogesterno, è possibile usare Catalog Explorer o il comando SQL CREATE FOREIGN CATALOG in un notebook di Azure Databricks o nell'editor di query SQL di Databricks. È anche possibile usare l'API REST di Databricks o l'interfaccia a riga di comando (CLI) di Databricks per creare un catalog. Vedere post /api/2.1/unity-catalog/catalogs e comandi Catalog Unity.

Autorizzazioni necessarie: autorizzazione CREATE CATALOG per il metastore e la proprietà della connessione o il privilegio CREATE FOREIGN CATALOG per la connessione.

Catalog Explorer

  1. Nell'area di lavoro di Azure Databricks fare clic sull'icona CatalogCatalog per aprire Esplora Catalog.

  2. Nella parte superiore del riquadro Catalog, fare clic sull'icona 'Aggiungi' o sul segno '+' icona 'Aggiungi' e selectAggiungi una catalog dal menu.

    In alternativa, dalla pagina Accesso Rapido, clicca sul pulsante Catalogs e poi sul pulsante Crea catalog.

  3. Seguire le istruzioni per la creazione di catalogs esterne in Creare catalogs.

SQL

Eseguire il comando SQL seguente in un notebook o in un editor SQL di Databricks. Gli elementi tra parentesi sono facoltativi. Sostituire il segnaposto values:

  • <catalog-name>: Nome del catalog in Azure Databricks.
  • <connection-name>: l'oggetto di connessione che specifica l'origine dati, il percorso e l'accesso credentials.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;

Pushdown supportati

I pushdown seguenti sono supportati in tutte le risorse di calcolo:

  • Filtri
  • Proiezioni
  • Limit
  • Funzioni: parziale, solo per le espressioni di filtro. (Funzioni stringa, Funzioni matematiche, Funzioni matematiche, Data, Ora e Timestamp e altre funzioni varie, ad esempio Alias, Cast, SortOrder)

I pushdown seguenti sono supportati in Databricks Runtime 13.3 LTS e versioni successive e in SQL Warehouse:

  • Aggregazioni
  • Operatori booleani
  • Le funzioni matematiche seguenti (non supportate se ANSI è disabilitato): +, -, *, %, /
  • Ordinamento, quando utilizzato con limit

Non sono supportati i seguenti pushdown:

  • Join
  • Funzioni finestra

Mapping di tipi di dati

Quando si legge da MySQL a Spark, i tipi di dati vengono mappati nel modo seguente:

Tipo MySQL Tipo Spark
bigint (se non firmato), decimale DecimalType
tinyint*, int, integer, mediumint, smallint IntegerType
bigint (se firmato) LongType
float FloatType
double DoubleType
char, enum, set CharType
varchar VarcharType
json, longtext, mediumtext, text, tinytext StringType
binary, blob, varbinary, varchar binary BinaryType
bit, booleano BooleanType
date, year DateType
datetime, time, timestamp** TimestampType/TimestampNTZType

* tinyint(1) signed e tinyint(1) unsigned vengono considerati booleani e convertiti in BooleanType. Vedere Le informazioni di riferimento sul connettore/J sono disponibili nella documentazione di MySQL.

** Quando si legge da MySQL, MySQL Timestamp viene mappato a Spark TimestampType se preferTimestampNTZ = false (impostazione predefinita). Viene eseguito il mapping di MySQL Timestamp a TimestampNTZType se preferTimestampNTZ = true.