Připojení Pythonu a pyodbc k Azure Databricks
Z místního kódu Pythonu se můžete připojit přes ODBC k datům v clusteru Azure Databricks nebo SQL Warehouse. K tomu můžete použít opensourcový modul pyodbc
kódu Pythonu .
Podle těchto pokynů nainstalujte, nakonfigurujte a použijte pyodbc
.
Další informace o pyodbc
tomto tématu najdete na wikiwebu pyodbc.
Poznámka:
Databricks nabízí konektor SQL Databricks pro Python jako alternativu k pyodbc
. Konektor SQL Databricks pro Python je jednodušší nastavit a používat a má robustnější sadu konstruktorů kódování než pyodbc
. Při načítání dotazů nad 10 MB ale pyodbc
může být výkon vyšší.
Tyto pokyny byly testovány s ovladačem ODBC Databricks 2.7.5, pyodbc 5.0.1 a unixODBC 2.3.12.
Požadavky
- Místní vývojový počítač, na kterém běží jedna z následujících možností:
- macOS
- Windows
- Distribuce systému Unix nebo Linux, která podporuje
.rpm
nebo.deb
soubory
- pip.
- V systémech Unix, Linux nebo macOS homebrew.
- Cluster Azure Databricks, Databricks SQL Warehouse nebo obojí. Další informace najdete v referenčních informacích ke konfiguraci výpočetních prostředků a připojení ke službě SQL Warehouse.
Krok 1: Stažení, instalace a konfigurace softwaru
V tomto kroku stáhnete a nainstalujete ovladač ODBC Databricks, unixodbc
balíček a pyodbc
modul. (Modul pyodbc
vyžaduje unixodbc
balíček v systémech Unix, Linux a macOS.) Nakonfigurujete také název zdroje dat ODBC (DSN) pro ověření a připojení ke clusteru nebo SQL Warehouse.
- Stáhněte a nainstalujte ovladač ODBC Databricks a nakonfigurujte název DSN ODBC pro váš operační systém.
- V systémech Unix, Linux a macOS nainstalujte
unixodbc
balíček: z terminálu pomocí Homebrew spusťte příkazbrew install unixodbc
. Další informace naleznete v unixodbc na webu Homebrew. pyodbc
Nainstalujte modul: z terminálu nebo příkazového řádku použijtepip
ke spuštění příkazupip install pyodbc
. Další informace najdete v tématu pyodbc na webu PyPI a instalace na wikiwebu pyodbc.
Krok 2: Otestování konfigurace
V tomto kroku napíšete a spustíte kód Pythonu pro použití clusteru Azure Databricks nebo služby Databricks SQL Warehouse k dotazování trips
tabulky ve schématu samples
katalogu nyctrips
a zobrazení výsledků.
Vytvořte soubor s názvem
pyodbc-demo.py
s následujícím obsahem. Nahraďte<dsn-name>
názvem zdroje dat ODBC, který jste vytvořili dříve, uložte soubor a spusťte ho s interpretem Pythonu.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)
Pokud chcete zrychlit spuštění kódu, spusťte cluster , který odpovídá
HTTPPath
nastavení ve vašem DSN.pyodbc-demo.py
Spusťte soubor s interpretem Pythonu. Zobrazí se informace o řádcích tabulky.
Další kroky
- Pokud chcete spustit testovací kód Pythonu pro jiný cluster nebo SQL Warehouse, vytvořte jiný název DSN a změňte
<dsn-name>
název DSN. - Pokud chcete spustit testovací kód Pythonu s jiným dotazem SQL, změňte
execute
řetězec příkazu.
Použití připojení bez dsN
Jako alternativu k použití názvu DSN můžete zadat nastavení připojení vložené. Následující příklad ukazuje, jak použít připojovací řetězec bez DSN pro ověřování tokenů pat Azure Databricks. Tento příklad předpokládá, že máte následující proměnné prostředí:
- Nastavte
DATABRICKS_SERVER_HOSTNAME
název instance pracovního prostoru, napříkladadb-1234567890123456.7.azuredatabricks.net
. - Nastavte
DATABRICKS_HTTP_PATH
hodnotu cesty HTTP pro cílový cluster nebo SQL Warehouse v pracovním prostoru. Pokud chcete získat hodnotu cesty HTTP, přečtěte si téma Získání podrobností o připojení pro výpočetní prostředek Azure Databricks. - Nastavte
DATABRICKS_TOKEN
osobní přístupový token Azure Databricks pro cílového uživatele. Pokud chcete vytvořit osobní přístupový token, podívejte se na osobní přístupové tokeny Azure Databricks pro uživatele pracovního prostoru.
Pokud chcete nastavit proměnné prostředí, přečtěte si dokumentaci k vašemu operačnímu systému.
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)
Následující příklad používá ověřování založené na prohlížeči OAuth uživatele na počítač (U2M) nebo OAuth 2.0 místo tokenu pat přístupu Azure Databricks. Tento příklad předpokládá, že jste už nastavili předchozí DATABRICKS_SERVER_HOSTNAME
proměnné prostředí a DATABRICKS_HTTP_PATH
proměnné prostředí.
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)
Následující příklad používá ověřování přihlašovacích údajů klienta OAuth typu machine-to-machine (M2M) nebo OAuth 2.0. Tento příklad předpokládá, že jste už nastavili předchozí DATABRICKS_SERVER_HOSTNAME
proměnné prostředí a DATABRICKS_HTTP_PATH
také následující proměnné prostředí:
- Nastavte
ARM_CLIENT_ID
hodnotu ID aplikace (klienta) instančního objektu. - Nastavte
DATABRICKS_OAUTH_SECRET
na hodnotu tajného klíče OAuth instančního objektu. (Tajné kódy Microsoft Entra ID nejsou podporovány pro ověřování přihlašovacích údajů klienta OAuth M2M nebo OAuth 2.0 pomocí ovladače ODBC Databricks.)
Další informace najdete v tématu OAuth ověřování typu počítač-počítač (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)
Řešení problému
Tato část řeší běžné problémy při používání pyodbc
s Databricks.
Chyba dekódování unicode
Problém: Zobrazí se chybová zpráva podobná této:
<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
Příčina: Problém existuje ve pyodbc
verzi 4.0.31 nebo nižší, která by se mohla projevit s těmito příznaky při spouštění dotazů, které vracejí sloupce s dlouhými názvy nebo dlouhou chybovou zprávou. Tento problém je opraven novější verzí aplikace pyodbc
.
Řešení: Upgradujte instalaci pyodbc
na verzi 4.0.32 nebo vyšší.
Obecné řešení potíží
Podívejte se na problémy v úložišti mkleehammer/pyodbc na GitHubu.