Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Możesz nawiązać połączenie z lokalnego kodu w języku Python za pośrednictwem funkcji ODBC z danymi w klastrze usługi Azure Databricks lub usłudze SQL Warehouse. W tym celu możesz użyć modułu pyodbckodu języka Python typu open source.
Postępuj zgodnie z tymi instrukcjami, aby zainstalować, skonfigurować i użyć polecenia pyodbc.
Aby uzyskać więcej informacji na temat pyodbcwitryny , zobacz witrynę typu wiki pyodbc.
Uwaga
Usługa Databricks oferuje łącznik SQL usługi Databricks dla języka Python jako alternatywę dla pyodbcjęzyka . Łącznik SQL usługi Databricks dla języka Python jest łatwiejszy do skonfigurowania i użycia oraz ma bardziej niezawodny zestaw konstrukcji kodowania niż pyodbc. Jednak pyodbc może mieć lepszą wydajność podczas pobierania wyników zapytań powyżej 10 MB.
Te instrukcje zostały przetestowane za pomocą sterownika OdBC usługi Databricks 2.7.5, pyodbc 5.0.1 i unixODBC 2.3.12.
Wymagania
- Lokalna maszyna deweloperna z uruchomioną jedną z następujących czynności:
- macOS
- Windows
- Dystrybucja systemu Unix lub Linux, która obsługuje
.rpmpliki lub.deb
- .
- W przypadku systemów Unix, Linux lub macOS homebrew.
- Klaster usługi Azure Databricks, magazyn SQL usługi Databricks lub oba te elementy. Aby uzyskać więcej informacji, zobacz Informacje o konfiguracji obliczeniowej i Nawiązywanie połączenia z usługą SQL Warehouse.
Krok 1. Pobieranie, instalowanie i konfigurowanie oprogramowania
W tym kroku pobierzesz i zainstalujesz sterownik ODBC usługi Databricks, unixodbc pakiet i pyodbc moduł. (Moduł pyodbc wymaga unixodbc pakietu w systemach Unix, Linux i macOS). Należy również skonfigurować nazwę źródła danych ODBC (DSN) w celu uwierzytelniania za pomocą polecenia i nawiązania połączenia z klastrem lub usługą SQL Warehouse.
- Pobierz i zainstaluj sterownik ODBC usługi Databricks oraz skonfiguruj nazwę DSN ODBC dla systemu operacyjnego.
- W przypadku systemów Unix, Linux i macOS zainstaluj
unixodbcpakiet: z poziomu terminalu użyj oprogramowania Homebrew, aby uruchomić poleceniebrew install unixodbc. Aby uzyskać więcej informacji, zobacz unixodbc w witrynie internetowej Oprogramowania Homebrew. - Zainstaluj moduł: z poziomu terminalu
pyodbclub wiersza polecenia użyjpippolecenia , aby uruchomić poleceniepip install pyodbc. Aby uzyskać więcej informacji, zobacz pyodbc w witrynie internetowej PyPI i Zainstaluj w witrynie typu wiki pyodbc.
Krok 2. Testowanie konfiguracji
W tym kroku napiszesz i uruchomisz kod języka Python, aby użyć klastra usługi Azure Databricks lub usługi Databricks SQL Warehouse do wykonywania zapytań dotyczących trips tabeli w samples schemacie katalogu nyctrips i wyświetlania wyników.
Utwórz plik o nazwie z
pyodbc-demo.pynastępującą zawartością. Zastąp<dsn-name>ciąg nazwą utworzonej wcześniej nazwy DSN ODBC, zapisz plik, a następnie uruchom plik za pomocą interpretera języka 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)Aby przyspieszyć uruchamianie kodu, uruchom klaster odpowiadający
HTTPPathustawieniu w nazwie DSN.Uruchom plik za
pyodbc-demo.pypomocą interpretera języka Python. Zostaną wyświetlone informacje o wierszach tabeli.
Następne kroki
- Aby uruchomić kod testowy języka Python dla innego klastra lub magazynu SQL, utwórz inny DSN i zmień
<dsn-name>na nazwę DSN. - Aby uruchomić kod testowy języka Python z innym zapytaniem SQL, zmień
executeciąg polecenia.
Korzystanie z połączenia bez nazwy DSN
Alternatywą dla używania nazwy DSN jest określenie wbudowanych ustawień połączenia. W poniższym przykładzie pokazano, jak używać parametry połączenia bez dsN na potrzeby uwierzytelniania osobistego tokenu dostępu w usłudze Azure Databricks. W tym przykładzie przyjęto założenie, że masz następujące zmienne środowiskowe:
- Ustaw
DATABRICKS_SERVER_HOSTNAMEjako nazwę instancji obszaru roboczego na, na przykładadb-1234567890123456.7.azuredatabricks.net. - Ustaw
DATABRICKS_HTTP_PATHna wartość ścieżki HTTP dla klastra docelowego lub magazynu SQL w obszarze roboczym. Aby uzyskać wartość ścieżki HTTP, zobacz Uzyskiwanie szczegółów połączenia dla zasobu obliczeniowego usługi Azure Databricks . - Ustaw
DATABRICKS_TOKENna osobisty token dostępu usługi Azure Databricks dla użytkownika docelowego. Aby utworzyć osobisty token dostępu, zobacz Tworzenie osobistych tokenów dostępu dla użytkowników obszaru roboczego.
Aby ustawić zmienne środowiskowe, zapoznaj się z dokumentacją systemu operacyjnego.
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)
W poniższym przykładzie użyto uwierzytelniania OAuth user-to-machine (U2M) lub uwierzytelniania opartego na przeglądarce OAuth 2.0 zamiast osobistego tokenu dostępu usługi Azure Databricks. W tym przykładzie przyjęto założenie, że zmienne środowiskowe DATABRICKS_SERVER_HOSTNAME i DATABRICKS_HTTP_PATH zostały już ustawione.
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)
W poniższym przykładzie użyto uwierzytelniania OAuth machine-to-machine (M2M) lub uwierzytelniania poświadczeń klienta OAuth 2.0. W tym przykładzie przyjęto założenie, że zostały już ustawione poprzednie DATABRICKS_SERVER_HOSTNAME i DATABRICKS_HTTP_PATH zmiennych środowiskowych, a także następujące zmienne środowiskowe:
- Ustaw
ARM_CLIENT_IDwartość identyfikatora aplikacji (klienta) jednostki usługi. - Ustaw
DATABRICKS_OAUTH_SECRETna wartość OAuth Sekret jednostki usługowej. (Tajne dane identyfikatora Microsoft Entra nie są obsługiwane dla uwierzytelniania za pomocą OAuth M2M lub OAuth 2.0 przy użyciu sterownika ODBC Databricks).
Aby uzyskać więcej informacji, zobacz Uwierzytelnianie maszyny do maszyny 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)
Rozwiązywanie problemów
W tej sekcji opisano typowe problemy występujące podczas korzystania z usługi pyodbc Databricks.
Błąd dekodowania Unicode
Problem: Zostanie wyświetlony komunikat o błędzie podobny do następującego:
<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
Przyczyna: Występuje problem w pyodbc w wersji 4.0.31 lub starszej, która może przejawiać się takimi objawami podczas uruchamiania zapytań, które zwracają kolumny z długimi nazwami lub długim komunikatem o błędzie. Problem został rozwiązany przez nowszą wersję programu pyodbc.
Rozwiązanie: uaktualnij instalację programu pyodbc do wersji 4.0.32 lub nowszej.
Ogólne wskazówki dotyczące rozwiązywania problemów
Zobacz Problemy w repozytorium mkleehammer/pyodbc w witrynie GitHub.