Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 pyodbckövesse az alábbi utasításokat.
További információkért pyodbclá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 Pythonhoz készült Databricks SQL Connector egyszerűbben beállítható és használható, és robusztusabb kódolási szerkezetekkel rendelkezik, mint pyodbc. 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
.rpmvagy.debfá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
unixodbccsomagot: 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ólpipfuttassa 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 ír és futtat az Azure Databricks-fürt vagy a Databricks SQL warehouse használatával, hogy lekérdezze a trips katalógus samples sémájában található nyctrips táblát, és megjelenítse az eredményeket.
Hozzon létre egy fájlt
pyodbc-demo.pyaz 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)Futtassa a fájlt a
pyodbc-demo.pyPython-é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ürtön vagy SQL adattárházon szeretné futtatni, hozzon létre egy másik DSN-t, és módosítsa a
<dsn-name>értékét a DSN nevére. - Ha a Python-tesztkódot egy másik SQL-lekérdezéssel szeretné futtatni, módosítsa a
executeparancssztringet.
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
DATABRICKS_SERVER_HOSTNAMEa munkaterület-példány nevére, példáuladb-1234567890123456.7.azuredatabricks.net. - Állítsa
DATABRICKS_HTTP_PATHa munkaterület célfürtjének vagy SQL-raktárának HTTP-elérési út értékére. A HTTP-elérési út értékének lekéréséhez lásd: Azure Databricks számítási erőforrás kapcsolati adatainak lekérése. - Állítsa be a
DATABRICKS_TOKENaz Azure Databricks személyes hozzáférési tokenjére a célfelhasználó számára. Személyes hozzáférési jogkivonat létrehozásához lásd: Személyes hozzáférési jogkivonatok létrehozása munkaterület-felhasználók 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 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 környezeti változókat, valamint a következő környezeti változókat:
- Állítsa be
ARM_CLIENT_IDa szolgáltatásnév alkalmazás- (ügyfél-) azonosítójának értékét. - Állítsa be
DATABRICKS_OAUTH_SECRETa szolgáltatásfőszereplő OAuth titkos kód é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: Olyan probléma áll fenn pyodbc 4.0.31-es vagy újabb verziójában, 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.