Udostępnij za pośrednictwem


Łączenie języka Python i rozwiązania pyodbc z usługą Azure Databricks

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 .rpm pliki 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.

  1. Pobierz i zainstaluj sterownik ODBC usługi Databricks oraz skonfiguruj nazwę DSN ODBC dla systemu operacyjnego.
  2. W przypadku systemów Unix, Linux i macOS zainstaluj unixodbc pakiet: z poziomu terminalu użyj oprogramowania Homebrew, aby uruchomić polecenie brew install unixodbc. Aby uzyskać więcej informacji, zobacz unixodbc w witrynie internetowej Oprogramowania Homebrew.
  3. Zainstaluj moduł: z poziomu terminalu pyodbc lub wiersza polecenia użyj pip polecenia , aby uruchomić polecenie pip 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.

  1. Utwórz plik o nazwie z pyodbc-demo.py nastę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)
    
  2. Aby przyspieszyć uruchamianie kodu, uruchom klaster odpowiadający HTTPPath ustawieniu w nazwie DSN.

  3. Uruchom plik za pyodbc-demo.py pomocą 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 usługi SQL Warehouse, utwórz inną nazwę DSN i zmień <dsn-name> nazwę na nazwę DSN.
  • Aby uruchomić kod testowy języka Python z innym zapytaniem SQL, zmień execute cią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:

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 masz już ustawione poprzednie DATABRICKS_SERVER_HOSTNAME zmienne środowiskowe i DATABRICKS_HTTP_PATH .

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 powyższe DATABRICKS_SERVER_HOSTNAME zmienne środowiskowe i DATABRICKS_HTTP_PATH oraz następujące zmienne środowiskowe:

  • Ustaw ARM_CLIENT_ID wartość identyfikatora aplikacji (klienta) jednostki usługi.
  • Ustaw DATABRICKS_OAUTH_SECRET wartość wpisu tajnego OAuth jednostki usługi. (Wpisy tajne identyfikatora Entra firmy Microsoft nie są obsługiwane w przypadku uwierzytelniania OAuth M2M lub OAuth 2.0 przy użyciu sterownika ODBC usługi 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 wersji 4.0.31 lub nowszej, który 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.