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ü pyodbc
kullanabilirsiniz.
yüklemek, yapılandırmak ve kullanmak pyodbc
için bu yönergeleri izleyin.
hakkında pyodbc
daha fazla bilgi için pyodbc Wiki'sine bakın.
Not
Databricks, Alternatif olarak Python için Databricks SQL Bağlayıcısı'nı pyodbc
sunar. Python için Databricks SQL Bağlayıcısı'nın kurulumu ve kullanımı daha kolaydır ve daha pyodbc
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.
- Databricks ODBC sürücüsünü indirip yükleyin ve işletim sisteminiz için bir ODBC DSN yapılandırın.
- Unix, Linux ve macOS için paketini yükleyin
unixodbc
: terminalden Homebrew kullanarak komutunubrew install unixodbc
çalıştırın. Daha fazla bilgi için Homebrew web sitesindeki unixodbc bölümüne bakın. pyodbc
Modülü yükleyin: terminalden veya komut isteminden komutunupip 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.
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)
Kodu çalıştırmayı hızlandırmak için DSN'nizdeki ayara karşılık gelen kümeyi
HTTPPath
başlatın.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ın
DATABRICKS_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ın
DATABRICKS_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ın
ARM_CLIENT_ID
. - Hizmet sorumlusunun OAuth Gizli Anahtarı değerine ayarlayın
DATABRICKS_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 pyodbc
dü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.