Python és pyodbc csatlakoztatása az Azure Databrickshez
A helyi Python-kódból az ODBC-n keresztül kapcsolódhat egy Azure Databricks-fürt vagy SQL Warehouse adataihoz. Ehhez használhatja a nyílt forráskód Python-kódmodultpyodbc
.
A telepítéshez, konfiguráláshoz és használathoz pyodbc
kövesse az alábbi utasításokat.
További információkért pyodbc
lásd a pyodbc wikit.
Feljegyzés
A Databricks a Pythonhoz készült Databricks SQL-összekötőt kínálja alternatívaként pyodbc
. A Databricks SQL Connector for Python egyszerűbben beállítható és használható, és robusztusabb kódolási szerkezetekkel rendelkezik, mint pyodbc
a . 10 MB-nál nagyobb lekérdezési eredmények lekérése esetén azonban pyodbc
jobb teljesítményre lehet szükség.
Ezeket az utasításokat a Databricks ODBC 2.7.5-ös, pyodbc 5.0.1-s és unixODBC 2.3.12-s illesztőprogramjával teszteltük.
Követelmények
- Egy helyi fejlesztőgép, amely az alábbiak egyikét futtatja:
- macOS
- Windows
- Unix- vagy Linux-disztribúció, amely támogatja
.rpm
vagy.deb
fájlokat
- pip.
- Unix, Linux vagy macOS esetén a Homebrew.
- Egy Azure Databricks-fürt, egy Databricks SQL Warehouse vagy mindkettő. További információ: Számítási konfigurációs referencia és Csatlakozás SQL-raktárhoz.
1. lépés: Szoftver letöltése, telepítése és konfigurálása
Ebben a lépésben letölti és telepíti a Databricks ODBC-illesztőprogramot, a unixodbc
csomagot és a modult pyodbc
. (A pyodbc
modulhoz Unix, Linux és macOS rendszeren szükséges a unixodbc
csomag.) Emellett konfigurálhat egy ODBC-adatforrásnevet (DSN) is a fürt vagy az SQL Warehouse hitelesítéséhez és az ahhoz való csatlakozáshoz.
- Töltse le és telepítse a Databricks ODBC-illesztőprogramot , és konfiguráljon egy ODBC DSN-t az operációs rendszerhez.
- Unix, Linux és macOS esetén telepítse a
unixodbc
csomagot: a terminálról a Homebrew használatával futtassa a parancsotbrew install unixodbc
. További információ: unixodbc a Homebrew webhelyén. - Telepítse a modult
pyodbc
: a terminálról vagy a parancssorbólpip
futtassa a parancsotpip install pyodbc
. További információ: pyodbc a PyPI webhelyén, és telepítés a pyodbc wikiben.
2. lépés: A konfiguráció tesztelése
Ebben a lépésben Python-kódot kell írnia és futtatnia az Azure Databricks-fürt vagy a Databricks SQL Warehouse használatával a trips
samples
katalógus sémájában lévő tábla lekérdezéséhez nyctrips
és az eredmények megjelenítéséhez.
Hozzon létre egy fájlt
pyodbc-demo.py
az alábbi tartalommal. Cserélje le<dsn-name>
a korábban létrehozott ODBC DSN nevére, mentse a fájlt, majd futtassa a fájlt a Python-értelmezővel.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)
A kód futtatásának felgyorsításához indítsa el a DSN-ben megadott beállításnak
HTTPPath
megfelelő fürtöt.Futtassa a fájlt a
pyodbc-demo.py
Python-értelmezővel. Megjelennek a táblázat sorairól szóló információk.
Következő lépések
- Ha a Python-tesztkódot egy másik fürtre vagy SQL Warehouse-ra szeretné futtatni, hozzon létre egy másik DSN-t, és módosítsa
<dsn-name>
a DSN nevét. - Ha a Python-tesztkódot egy másik SQL-lekérdezéssel szeretné futtatni, módosítsa a
execute
parancssztringet.
DSN nélküli kapcsolat használata
A DSN-név használata helyett megadhatja a kapcsolati beállításokat a beágyazottban. Az alábbi példa bemutatja, hogyan használható DSN-nélküli kapcsolati sztring az Azure Databricks személyes hozzáférési jogkivonat-hitelesítéséhez. Ez a példa a következő környezeti változókat feltételezi:
- Állítsa be
DATABRICKS_SERVER_HOSTNAME
például a munkaterület példányának nevétadb-1234567890123456.7.azuredatabricks.net
. - Állítsa be
DATABRICKS_HTTP_PATH
a munkaterület célfürtjének vagy SQL-raktárának HTTP-elérési út értékét. A HTTP-elérési út értékének lekéréséhez tekintse meg az Azure Databricks számítási erőforrás kapcsolati adatainak lekérése című témakört. - Állítsa be
DATABRICKS_TOKEN
az Azure Databricks személyes hozzáférési jogkivonatát a célfelhasználó számára. Személyes hozzáférési jogkivonat létrehozásához tekintse meg az Azure Databricks személyes hozzáférési jogkivonatait a munkaterület felhasználói számára.
A környezeti változók beállításához tekintse meg az operációs rendszer dokumentációját.
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)
Az alábbi példa OAuth-felhasználó–gép (U2M) vagy OAuth 2.0 böngészőalapú hitelesítést használ az Azure Databricks személyes hozzáférési jogkivonata helyett. Ez a példa feltételezi, hogy már beállította az előző DATABRICKS_SERVER_HOSTNAME
és DATABRICKS_HTTP_PATH
a környezeti változókat.
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)
Az alábbi példa OAuth-gépről gépre (M2M) vagy OAuth 2.0-s ügyfél-hitelesítő adatokat használ. Ez a példa feltételezi, hogy már beállította az előző DATABRICKS_SERVER_HOSTNAME
és DATABRICKS_HTTP_PATH
a környezeti változókat, valamint a következő környezeti változókat:
- Állítsa be
ARM_CLIENT_ID
a szolgáltatásnév alkalmazás- (ügyfél-) azonosítójának értékét. - Állítsa be
DATABRICKS_OAUTH_SECRET
a szolgáltatásnév OAuth Secret-értékét . (A Microsoft Entra-azonosító titkos kódjai nem támogatottak az OAuth M2M vagy az OAuth 2.0 ügyfél hitelesítő adatainak a Databricks ODBC-illesztőprogrammal történő hitelesítéséhez.)
További információ: OAuth machine-to-machine (M2M) hitelesítés.
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)
Hibaelhárítás
Ez a szakasz a Databricks használatakor pyodbc
felmerülő gyakori problémákat ismerteti.
Unicode-kódolási hiba
Probléma: A következőhöz hasonló hibaüzenet jelenik meg:
<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
Ok: A 4.0.31-es vagy újabb verzióban pyodbc
olyan probléma áll fenn, amely ilyen tünetekkel jelentkezhet a hosszú neveket vagy hosszú hibaüzenetet tartalmazó oszlopokat visszaadó lekérdezések futtatásakor. A hibát a újabb verziója javította pyodbc
.
Megoldás: Frissítse a telepítést pyodbc
a 4.0.32-es vagy újabb verzióra.
Általános hibaelhárítás
Lásd a GitHub mkleehammer/pyodbc adattárának problémáit.