Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile connettersi dal codice Python locale tramite ODBC ai dati in un cluster Azure Databricks o sql warehouse. A tale scopo, è possibile usare il modulo pyodbcdi codice Python open source .
Seguire queste istruzioni per installare, configurare e usare pyodbc.
Per altre informazioni su pyodbc, vedere il wiki pyodbc.
Nota
Databricks offre il connettore SQL di Databricks per Python come alternativa a pyodbc. Il connettore SQL di Databricks per Python è più semplice da configurare e usare e include un set più affidabile di costrutti di codifica, rispetto pyodbca . Tuttavia pyodbc , può avere prestazioni migliori quando si recuperano i risultati delle query superiori a 10 MB.
Queste istruzioni sono state testate con il driver ODBC di Databricks 2.7.5, pyodbc 5.0.1 e unixODBC 2.3.12.
Requisiti
- Un computer di sviluppo locale che esegue uno dei seguenti elementi:
- macOS
- Finestre
- Una distribuzione Unix o Linux che supporta
.rpmo.debfile
- pip.
- Per Unix, Linux o macOS, Homebrew.
- Un cluster Azure Databricks, un databricks SQL warehouse o entrambi. Per altre informazioni, vedere Informazioni di riferimento sulla configurazione di calcolo e Connettersi a un'istanza di SQL Warehouse.
Passaggio 1: Scaricare, installare e configurare il software
In questo passaggio si scarica e si installa il driver ODBC di Databricks, il unixodbc pacchetto e il pyodbc modulo. Il pyodbc modulo richiede il unixodbc pacchetto in Unix, Linux e macOS. È anche possibile configurare un nome origine dati ODBC (DSN) per l'autenticazione con e la connessione al cluster o al data warehouse SQL.
- Scaricare e installare il driver ODBC di Databricks e configurare un DSN ODBC per il sistema operativo.
- Per Unix, Linux e macOS, installare il
unixodbcpacchetto: dal terminale usare Homebrew per eseguire il comandobrew install unixodbc. Per altre informazioni, vedere unixodbc nel sito Web Homebrew. - Installare il
pyodbcmodulo: dal terminale o dal prompt dei comandi, usarepipper eseguire il comandopip install pyodbc. Per altre informazioni, vedere pyodbc nel sito Web PyPI e Installare nel wiki pyodbc.
Passaggio 2: Testare la configurazione
In questo passaggio si scrive ed esegue codice Python per usare il cluster Azure Databricks o Databricks SQL Warehouse per eseguire query sulla trips tabella nello samples schema del nyctrips catalogo e visualizzare i risultati.
Creare un file denominato
pyodbc-demo.pycon il contenuto seguente. Sostituire<dsn-name>con il nome del DSN ODBC creato in precedenza, salvare il file e quindi eseguire il file con l'interprete Python.import pyodbc # Connect to the Databricks cluster by using the # Data Source Name (DSN) that you created earlier. conn = pyodbc.connect("DSN=<dsn-name>", autocommit=True) # Run a SQL query by using the preceding connection. cursor = conn.cursor() cursor.execute(f"SELECT * FROM samples.nyctaxi.trips") # Print the rows retrieved from the query. for row in cursor.fetchall(): print(row)Per velocizzare l'esecuzione del codice, avviare il cluster che corrisponde all'impostazione
HTTPPathnel DSN.Eseguire il file con l'interprete
pyodbc-demo.pyPython. Vengono visualizzate informazioni sulle righe della tabella.
Passaggi successivi
- Per eseguire il codice di test python in un cluster o in un data warehouse SQL diverso, creare un DSN diverso e passare
<dsn-name>al nome del DSN. - Per eseguire il codice di test python con una query SQL diversa, modificare la stringa di
executecomando.
Uso di una connessione senza DSN
In alternativa all'uso di un nome DSN, è possibile specificare le impostazioni di connessione inline. L'esempio seguente illustra come usare un stringa di connessione senza DSN per l'autenticazione del token di accesso personale di Azure Databricks. In questo esempio si presuppone che siano presenti le variabili di ambiente seguenti:
- Impostare
DATABRICKS_SERVER_HOSTNAMEsul nome dell'istanza dell'area di lavoro, ad esempioadb-1234567890123456.7.azuredatabricks.net. - Impostare
DATABRICKS_HTTP_PATHsul valore percorso HTTP per il cluster di destinazione o sql warehouse nell'area di lavoro. Per ottenere il valore del percorso HTTP, vedere Ottenere i dettagli della connessione per una risorsa di calcolo di Azure Databricks. - Impostare
DATABRICKS_TOKENsul token di accesso personale di Azure Databricks per l'utente di destinazione. Per creare un token di accesso personale, vedere Creare token di accesso personale per gli utenti dell'area di lavoro.
Per impostare le variabili di ambiente, vedere la documentazione del sistema operativo.
import pyodbc
import os
conn = pyodbc.connect(
"Driver=/Library/simba/spark/lib/libsparkodbc_sb64-universal.dylib;" +
f"Host={os.getenv('DATABRICKS_HOST')};" +
"Port=443;" +
f"HTTPPath={os.getenv('DATABRICKS_HTTP_PATH')};" +
"SSL=1;" +
"ThriftTransport=2;" +
"AuthMech=3;" +
"UID=token;" +
f"PWD={os.getenv('DATABRICKS_TOKEN')}",
autocommit = True
)
# Run a SQL query by using the preceding connection.
cursor = conn.cursor()
cursor.execute("SELECT * FROM samples.nyctaxi.trips")
# Print the rows retrieved from the query.
for row in cursor.fetchall():
print(row)
L'esempio seguente usa l'autenticazione basata su browser OAuth da utente a computer (U2M) o OAuth 2.0 anziché un token di accesso personale di Azure Databricks. In questo esempio si presuppone che siano già state impostate le variabili di ambiente e DATABRICKS_SERVER_HOSTNAME precedentiDATABRICKS_HTTP_PATH.
import pyodbc
import os
conn = pyodbc.connect(
"Driver=/Library/simba/spark/lib/libsparkodbc_sb64-universal.dylib;" +
f"Host={os.getenv('DATABRICKS_HOST')};" +
"Port=443;" +
f"HTTPPath={os.getenv('DATABRICKS_HTTP_PATH')};" +
"SSL=1;" +
"ThriftTransport=2;" +
"AuthMech=11;" +
"Auth_Flow=2;" +
"PWD=1234567",
autocommit = True
)
# Run a SQL query by using the preceding connection.
cursor = conn.cursor()
cursor.execute("SELECT * FROM samples.nyctaxi.trips")
# Print the rows retrieved from the query.
for row in cursor.fetchall():
print(row)
Nell'esempio seguente viene usata l'autenticazione delle credenziali client OAuth da computer a computer (M2M) o OAuth 2.0. In questo esempio si presuppone che siano già state impostate le variabili di ambiente e DATABRICKS_SERVER_HOSTNAME precedentiDATABRICKS_HTTP_PATH, nonché le variabili di ambiente seguenti:
- Impostare
ARM_CLIENT_IDsul valore dell'ID dell'applicazione (client) del principale del servizio. - Impostare
DATABRICKS_OAUTH_SECRETsul valore del segreto OAuth dell'entità servizio. I segreti microsoft Entra ID non sono supportati per l'autenticazione delle credenziali client OAuth M2M o OAuth 2.0 con il driver ODBC di Databricks.
Per altre informazioni, vedere Autenticazione da computer a computer OAuth (M2M).
import pyodbc
import os
conn = pyodbc.connect(
"Driver=/Library/simba/spark/lib/libsparkodbc_sb64-universal.dylib;" +
f"Host={os.getenv('DATABRICKS_HOST')};" +
"Port=443;" +
f"HTTPPath={os.getenv('DATABRICKS_HTTP_PATH')};" +
"SSL=1;" +
"ThriftTransport=2;" +
"AuthMech=11;" +
"Auth_Flow=1;" +
f"Auth_Client_ID={os.getenv('ARM_CLIENT_ID')};" +
f"Auth_Client_Secret={os.getenv('DATABRICKS_OAUTH_SECRET')}",
autocommit = True
)
# Run a SQL query by using the preceding connection.
cursor = conn.cursor()
cursor.execute("SELECT * FROM samples.nyctaxi.trips")
# Print the rows retrieved from the query.
for row in cursor.fetchall():
print(row)
Risoluzione dei problemi
Questa sezione risolve i problemi comuni relativi all'uso pyodbc con Databricks.
Errore di decodifica Unicode
Problema: viene visualizzato un messaggio di errore simile al seguente:
<class 'pyodbc.Error'> returned a result with an error set
Traceback (most recent call last):
File "/Users/user/.pyenv/versions/3.7.5/lib/python3.7/encodings/utf_16_le.py", line 16, in decode
return codecs.utf_16_le_decode(input, errors, True)
UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 2112-2113: illegal UTF-16 surrogate
Causa: esiste un problema nella pyodbc versione 4.0.31 o successiva che potrebbe manifestarsi con tali sintomi durante l'esecuzione di query che restituiscono colonne con nomi lunghi o un messaggio di errore lungo. Il problema è stato risolto da una versione più recente di pyodbc.
Soluzione: aggiornare l'installazione di pyodbc alla versione 4.0.32 o successiva.
Risoluzione dei problemi generali
Vedere Problemi nel repository mkleehammer/pyodbc su GitHub.