Ansluta Python och pyodbc till Azure Databricks
Du kan ansluta från din lokala Python-kod via ODBC till data i ett Azure Databricks-kluster eller SQL-lager. Om du vill göra detta kan du använda öppen källkod Python-kodmodulen pyodbc
.
Följ de här anvisningarna för att installera, konfigurera och använda pyodbc
.
Mer information om pyodbc
finns i pyodbc Wiki.
Kommentar
Databricks erbjuder Databricks SQL Connector för Python som ett alternativ till pyodbc
. Databricks SQL Connector för Python är enklare att konfigurera och använda och har en mer robust uppsättning kodningskonstruktioner än pyodbc
. Men pyodbc
kan ha bättre prestanda när du hämtar frågor resultat över 10 MB.
Dessa instruktioner har testats med Databricks ODBC-drivrutinen 2.7.5, pyodbc 5.0.1 och unixODBC 2.3.12.
Krav
- En lokal utvecklingsdator som kör något av följande:
- macOS
- Windows
- En Unix- eller Linux-distribution som stöder
.rpm
eller.deb
filer
- pip.
- För Unix, Linux eller macOS, Homebrew.
- Ett Azure Databricks-kluster, ett Databricks SQL-lager eller båda. Mer information finns i Referens för beräkningskonfiguration och Anslut till ett SQL-lager.
Steg 1: Ladda ned, installera och konfigurera programvara
I det här steget laddar du ned och installerar Databricks ODBC-drivrutinen, unixodbc
paketet och modulen pyodbc
. (Modulen pyodbc
unixodbc
kräver paketet på Unix, Linux och macOS.) Du konfigurerar också ett ODBC-namn (DSN) för att autentisera med och ansluta till ditt kluster eller SQL-lager.
- Ladda ned och installera Databricks ODBC-drivrutinen och konfigurera ett ODBC DSN för operativsystemet.
- För Unix, Linux och macOS installerar du
unixodbc
paketet: från terminalen använder du Homebrew för att köra kommandotbrew install unixodbc
. Mer information finns i unixodbc på Homebrews webbplats. - Installera modulen
pyodbc
: från terminalen eller kommandotolken använder dupip
för att köra kommandotpip install pyodbc
. Mer information finns i pyodbc på PyPI-webbplatsen och Installera i pyodbc Wiki.
Steg 2: Testa konfigurationen
I det här steget skriver och kör du Python-kod för att använda ditt Azure Databricks-kluster eller Databricks SQL-lager för att fråga trips
tabellen i samples
katalogens nyctrips
schema och visa resultatet.
Skapa en fil med namnet
pyodbc-demo.py
med följande innehåll. Ersätt<dsn-name>
med namnet på ODBC DSN som du skapade tidigare, spara filen och kör sedan filen med Python-tolken.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)
Om du vill påskynda körningen av koden startar du klustret som motsvarar
HTTPPath
inställningen i ditt DSN.Kör filen med Python-tolken
pyodbc-demo.py
. Information om tabellens rader visas.
Nästa steg
- Om du vill köra Python-testkoden mot ett annat kluster eller SQL-lager skapar du ett annat DSN och ändrar
<dsn-name>
till DSN:s namn. - Om du vill köra Python-testkoden med en annan SQL-fråga ändrar du kommandosträngen
execute
.
Använda en DSN-mindre anslutning
Som ett alternativ till att använda ett DSN-namn kan du ange anslutningsinställningarna infogade. I följande exempel visas hur du använder en DSN-mindre anslutningssträng för personlig åtkomsttokenautentisering i Azure Databricks. Det här exemplet förutsätter att du har följande miljövariabler:
- Ange
DATABRICKS_SERVER_HOSTNAME
till arbetsytans instansnamn, till exempeladb-1234567890123456.7.azuredatabricks.net
. - Ange
DATABRICKS_HTTP_PATH
värdet för HTTP-sökvägen för målklustret eller SQL-lagret på arbetsytan. Information om hur du hämtar http-sökvägsvärdet finns i Hämta anslutningsinformation för en Azure Databricks-beräkningsresurs. - Ange
DATABRICKS_TOKEN
till Azure Databricks personliga åtkomsttoken för målanvändaren. Information om hur du skapar en personlig åtkomsttoken finns i Personliga åtkomsttoken för Azure Databricks för arbetsyteanvändare.
Information om hur du anger miljövariabler finns i dokumentationen till operativsystemet.
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)
I följande exempel används OAuth-användar-till-dator (U2M) eller OAuth 2.0 webbläsarbaserad autentisering i stället för en personlig åtkomsttoken för Azure Databricks. Det här exemplet förutsätter att du redan har angett föregående DATABRICKS_SERVER_HOSTNAME
variabler och DATABRICKS_HTTP_PATH
miljövariabler.
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)
I följande exempel används autentiseringsuppgifter för OAuth från dator till dator (M2M) eller OAuth 2.0-klientautentiseringsuppgifter. Det här exemplet förutsätter att du redan har angett föregående DATABRICKS_SERVER_HOSTNAME
variabler och DATABRICKS_HTTP_PATH
miljövariabler samt följande miljövariabler:
- Ange
ARM_CLIENT_ID
värdet för tjänstens huvudnamns program-ID (klient). - Ange
DATABRICKS_OAUTH_SECRET
till tjänstens huvudnamns OAuth Secret-värde . (Microsoft Entra-ID-hemligheter stöds inte för OAuth M2M- eller OAuth 2.0-klientautentiseringsuppgifter med Databricks ODBC-drivrutinen.)
Mer information finns i OAuth-autentisering från dator till dator (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)
Felsökning
Det här avsnittet tar upp vanliga problem när du använder pyodbc
med Databricks.
Unicode-avkodningsfel
Problem: Du får ett felmeddelande som liknar följande:
<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
Orsak: Det finns ett problem i pyodbc
version 4.0.31 eller senare som kan visas med sådana symtom när du kör frågor som returnerar kolumner med långa namn eller ett långt felmeddelande. Problemet har åtgärdats av en nyare version av pyodbc
.
Lösning: Uppgradera installationen av pyodbc
till version 4.0.32 eller senare.
Allmän felsökning
Se Problem på lagringsplatsen mkleehammer/pyodbc på GitHub.