Aracılığıyla paylaş


Python ve pyodbc'yi Azure Databricks'e bağlama

Yerel Python kodunuzdan ODBC aracılığıyla Azure Databricks kümesindeki veya SQL ambarında bulunan verilere bağlanabilirsiniz. Bunu yapmak için açık kaynak Python kod modülünü pyodbckullanabilirsiniz.

yüklemek, yapılandırmak ve kullanmak pyodbciçin bu yönergeleri izleyin.

hakkında pyodbcdaha fazla bilgi için pyodbc Wiki'sine bakın.

Not

Databricks, Alternatif olarak Python için Databricks SQL Bağlayıcısı'nı pyodbcsunar. Python için Databricks SQL Bağlayıcısı'nın kurulumu ve kullanımı daha kolaydır ve daha pyodbcsağlam bir kodlama yapısı kümesine sahiptir. Ancak pyodbc sorgu sonuçları 10 MB'ın üzerinde getirilirken daha iyi performansa sahip olabilir.

Bu yönergeler Databricks ODBC sürücüsü 2.7.5, pyodbc 5.0.1 ve unixODBC 2.3.12 ile test edilmiştir.

Gereksinimler

  • Aşağıdakilerden birini çalıştıran bir yerel geliştirme makinesi:
    • macOS
    • Windows
    • Veya dosyalarını destekleyen .rpm bir Unix veya .deb Linux dağıtımı
  • pip.
  • Unix, Linux veya macOS için Homebrew.
  • Azure Databricks kümesi, Databricks SQL ambarı veya her ikisi. Daha fazla bilgi için bkz . İşlem yapılandırma başvurusu ve SQL ambara bağlanma.

1. Adım: Yazılımı indirme, yükleme ve yapılandırma

Bu adımda Databricks ODBC sürücüsünü, unixodbc paketini ve modülünü pyodbc indirip yüklersiniz. (Modül pyodbc Unix, Linux ve macOS üzerinde paketini gerektirir unixodbc .) Ayrıca, kümenizle veya SQL ambarınızla kimlik doğrulaması yapmak ve bunlara bağlanmak için bir ODBC Veri Kaynağı Adı (DSN) yapılandırabilirsiniz.

  1. Databricks ODBC sürücüsünü indirip yükleyin ve işletim sisteminiz için bir ODBC DSN yapılandırın.
  2. Unix, Linux ve macOS için paketini yükleyin unixodbc : terminalden Homebrew kullanarak komutunu brew install unixodbcçalıştırın. Daha fazla bilgi için Homebrew web sitesindeki unixodbc bölümüne bakın.
  3. pyodbc Modülü yükleyin: terminalden veya komut isteminden komutunu pip install pyodbcçalıştırmak için kullanınpip. Daha fazla bilgi için bkz . PyPI web sitesindeki pyodbc ve pyodbc Wiki'de yükleme .

2. Adım: Yapılandırmanızı test edin

Bu adımda, Azure Databricks kümenizi veya Databricks SQL ambarınızı kullanarak kataloğun nyctrips şemasındaki samples tabloyu sorgulamak trips ve sonuçları görüntülemek için Python kodu yazıp çalıştıracaksınız.

  1. Aşağıdaki içeriğe sahip adlı pyodbc-demo.py bir dosya oluşturun. değerini daha önce oluşturduğunuz ODBC DSN adıyla değiştirin <dsn-name> , dosyayı kaydedin ve python yorumlayıcınızla çalıştırın.

    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. Kodu çalıştırmayı hızlandırmak için DSN'nizdeki ayara karşılık gelen kümeyi HTTPPath başlatın.

  3. pyodbc-demo.py Dosyayı Python yorumlayıcınızla çalıştırın. Tablonun satırları hakkındaki bilgiler görüntülenir.

Sonraki adımlar

  • Python test kodunu farklı bir kümede veya SQL ambarı üzerinde çalıştırmak için farklı bir DSN oluşturun ve DSN'nin adına geçin <dsn-name> .
  • Python test kodunu farklı bir SQL sorgusuyla çalıştırmak için komut dizesini execute değiştirin.

DSN'siz bağlantı kullanma

DSN adı kullanmaya alternatif olarak, bağlantı ayarlarını satır içinde belirtebilirsiniz. Aşağıdaki örnekte, Azure Databricks kişisel erişim belirteci kimlik doğrulaması için DSN'siz bağlantı dizesi nasıl kullanılacağı gösterilmektedir. Bu örnekte aşağıdaki ortam değişkenlerine sahip olduğunuz varsayılır:

  • Çalışma alanı örneği adına ayarlayınDATABRICKS_SERVER_HOSTNAME, örneğinadb-1234567890123456.7.azuredatabricks.net.
  • Çalışma alanında hedef küme veya SQL ambarı için HTTP Yolu değerine ayarlayınDATABRICKS_HTTP_PATH. HTTP Yolu değerini almak için bkz. Azure Databricks işlem kaynağının bağlantı ayrıntılarını alma.
  • Hedef kullanıcı için Azure Databricks kişisel erişim belirtecine ayarlayın DATABRICKS_TOKEN . Kişisel erişim belirteci oluşturmak için bkz . Çalışma alanı kullanıcıları için Azure Databricks kişisel erişim belirteçleri.

Ortam değişkenlerini ayarlamak için işletim sisteminizin belgelerine bakın.

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)

Aşağıdaki örnekte Azure Databricks kişisel erişim belirteci yerine OAuth kullanıcıdan makineye (U2M) veya OAuth 2.0 tarayıcı tabanlı kimlik doğrulaması kullanılmaktadır. Bu örnekte, önceki DATABRICKS_SERVER_HOSTNAME ve DATABRICKS_HTTP_PATH ortam değişkenlerini önceden ayarladığınız varsayılır.

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)

Aşağıdaki örnekte OAuth makineden makineye (M2M) veya OAuth 2.0 istemci kimlik bilgileri kimlik doğrulaması kullanılmaktadır. Bu örnekte, önceki DATABRICKS_SERVER_HOSTNAME ve DATABRICKS_HTTP_PATH ortam değişkenlerinin yanı sıra aşağıdaki ortam değişkenlerini ayarladığınız varsayılır:

  • Hizmet sorumlusunun Uygulama (istemci) kimliği değerine ayarlayınARM_CLIENT_ID.
  • Hizmet sorumlusunun OAuth Gizli Anahtarı değerine ayarlayınDATABRICKS_OAUTH_SECRET. (Microsoft Entra ID gizli dizileri, Databricks ODBC Sürücüsü ile OAuth M2M veya OAuth 2.0 istemci kimlik bilgileri kimlik doğrulaması için desteklenmez.)

Daha fazla bilgi için bkz . OAuth makineden makineye (M2M) kimlik doğrulaması.

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)

Sorun giderme

Bu bölümde Databricks ile kullanırken pyodbc karşılaşılan yaygın sorunlar ele alınıyor.

Unicode kod çözme hatası

Sorun: Aşağıdakine benzer bir hata iletisi alıyorsunuz:

<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

Neden: Sürüm 4.0.31 veya altında uzun adlara veya uzun bir hata iletisine sahip sütunlar döndüren sorgular çalıştırılırken bu belirtilerle ortaya çıkan bir sorun var pyodbc . Sorun daha yeni bir sürümüyle pyodbcdüzeltildi.

Çözüm: Yüklemenizi pyodbc 4.0.32 veya üzeri bir sürüme yükseltin.

Genel sorun giderme

Bkz. GitHub'daki mkleehammer/pyodbc deposundaki sorunlar.