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. Python için Databricks SQL Bağlayıcısı'nı ayarlamak ve kullanmak daha kolaydır ve pyodbc'den daha sağ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çalıştırmak için kullanınpip install pyodbc. 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, samples kataloğunun nyctrips şemasındaki trips tablosunu sorgulamak ve sonuçları görüntülemek için Azure Databricks kümenizi veya Databricks SQL ambarınızı kullanmak üzere 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ümeyiHTTPPath 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:

  • DATABRICKS_SERVER_HOSTNAME çalışma alanı örneği adı olarakayarlayın, örneğin adb-1234567890123456.7.azuredatabricks.net.
  • DATABRICKS_HTTP_PATH'ı çalışma alanındaki hedef küme veya SQL ambarı için 'in HTTP Yolu değerine ayarlayın. HTTP Yolu değerini almak için bkz. Azure Databricks işlem kaynağıiçin bağlantı ayrıntılarını alma .
  • DATABRICKS_TOKEN hedef kullanıcı için Azure Databricks kişisel erişim belirtecine ayarlayın. 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:

  • ARM_CLIENT_ID'ı hizmet sorumlusunun uygulama (istemci) kimliği 'in değerine ayarlayın.
  • DATABRICKS_OAUTH_SECRET hizmet sorumlusunun OAuth Gizli değerine ayarlayın. (Microsoft Entra ID gizli anahtarları, 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: pyodbc sürüm 4.0.31 veya altındaki bir sorunun, uzun adlara veya uzun bir hata iletisine sahip sütunlar döndüren sorgular çalıştırıldığında bu tür belirtilerle kendini gösterebileceği bir durum var. 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.