開始
用戶指南
管理指南
參考指南
資源
2022年10月6日更新
給我們反饋
您可以通過ODBC從本地Python代碼連接到Databricks集群或SQL倉庫中的數據。為此,您可以使用開放源碼的Python代碼模塊pyodbc.
pyodbc
按照這些說明進行安裝、配置和使用pyodbc.
有關pyodbc,請參閱pyodbc維基.
請注意
磚了Databricks SQL Connector for Python作為替代方案pyodbc.Databricks SQL Connector for Python更容易設置和使用,並且擁有一組更健壯的編碼結構pyodbc.然而pyodbc在獲取10 MB以上的查詢結果時可能會有更好的性能。
本地開發機器運行以下任何一種:
macOS
窗戶
支持的Unix或Linux發行版rpm程序或. deb文件
rpm程序
. deb
皮普.
對於Unix、Linux或macOS,家釀.
Databricks集群、Databricks SQL倉庫或兩者都有。有關更多信息,請參見_而且創建SQL倉庫.
按照以下說明Unix、Linux或macOS或窗戶.
如果您的本地Python代碼運行在Unix、Linux或macOS機器上,請遵循以下說明。
在此步驟中,下載並安裝Databricks ODBC驅動程序unixodbc包,pyodbc模塊。(pyodbc模塊需要unixodbcUnix、Linux和macOS上的軟件包。)
unixodbc
下載磚ODBC驅動程序.
安裝Databricks ODBC驅動程序時,請打開SimbaSparkODBC.zip下載的文件。
SimbaSparkODBC.zip
做以下任何一件事:
macOS:雙擊解壓後的辛巴Spark.dmg文件。然後雙擊SimbaSparkODBC.pkg文件顯示,並遵循屏幕上的任何指示。
辛巴Spark.dmg
SimbaSparkODBC.pkg
Linux:使用發行版的包管理器實用程序來安裝解壓的simbaspark.rpm或simbaspark.deb存檔,並遵循屏幕上的任何指示。
simbaspark.rpm
simbaspark.deb
安裝unixodbc包:從終端運行釀造安裝unixodbc.有關更多信息,請參見unixodbc在家釀網站上
釀造安裝unixodbc
安裝pyodbc模塊:從終端運行皮普安裝pyodbc.有關更多信息,請參見pyodbc在PyPI網站上安裝在pyodbc Wiki中。
皮普安裝pyodbc
指定Databricks集群和SQL倉庫的連接詳細信息pyodbc使用。
作為安全最佳實踐,在使用自動化工具、係統、腳本和應用程序進行身份驗證時,Databricks建議您使用屬於服務主體的訪問令牌,而不是工作區用戶。有關更多信息,請參見管理服務主體.
將以下內容添加到/etc/odbc.ini在您的機器上存檔:
/etc/odbc.ini
提示
如果您不想或不能使用/etc/odbc.ini文件,您可以直接在Python代碼中指定連接細節。要做到這一點,請跳過此步驟的其餘部分並繼續執行步驟3:測試您的配置.
(ODBC數據源)Databricks_Cluster=Simba Spark ODBC驅動程序(Databricks_Cluster)司機=<驅動器路徑>描述=Simba Spark ODBC Driver DSN宿主=<服務器主機>港口=443模式=默認的SparkServerType=3.AuthMech=3.UID=令牌鬆材線蟲病=< personal-access-token >ThriftTransport=2SSL=1HTTPPath=< http-path >
在上述配置文件中,需要替換以下占位符,然後保存文件:
取代<驅動器路徑>符合下列任何一項要求:
<驅動器路徑>
macOS:/圖書館/辛巴/ / lib / libsparkodbc_sbu.dylib火花
/圖書館/辛巴/ / lib / libsparkodbc_sbu.dylib火花
Linux 64位:/ opt /辛巴/ / lib / 64 / libsparkodbc_sb64.so火花
/ opt /辛巴/ / lib / 64 / libsparkodbc_sb64.so火花
Linux 32位:/ opt /辛巴/ / lib / 32 / libsparkodbc_sb32.so火花
/ opt /辛巴/ / lib / 32 / libsparkodbc_sb32.so火花
取代<服務器主機>與服務器主機名價值的高級選項> JDBC/ODBC選項卡。
<服務器主機>
取代< personal-access-token >用你的價值個人訪問令牌為您的Databricks工作空間。
< personal-access-token >
取代< http-path >與HTTP路徑價值的高級選項> JDBC/ODBC選項卡。
< http-path >
允許pyodbc要將連接切換到不同的集群,請在(ODBC數據來源)節和下麵的匹配條目(Databricks_Cluster)與特定的連接細節。每個條目在這個文件中必須有唯一的名稱。
(ODBC數據來源)
(Databricks_Cluster)
(ODBC數據源)SQL_Warehouse=Simba Spark ODBC驅動程序(SQL_Warehouse)司機=<驅動器路徑>宿主=<服務器主機>港口=443模式=默認的SparkServerType=3.AuthMech=3.UID=令牌鬆材線蟲病=< personal-access-token >ThriftTransport=2SSL=1HTTPPath=< http-path >
取代<服務器主機>與服務器主機名價值的連接細節選項卡。
取代< personal-access-token >用你的價值個人訪問令牌您的SQL倉庫。
取代< http-path >與HTTP路徑價值的連接細節選項卡。
允許pyodbc將連接切換到不同的SQL倉庫,請向(ODBC數據來源)節和下麵的匹配條目(SQL_Warehouse)與特定的連接細節。每個條目在這個文件中必須有唯一的名稱。
(SQL_Warehouse)
將上述信息添加到/etc/odbc.ini文件到相應的/usr/local/etc/odbc.ini也要在您的機器上存檔。
/usr/local/etc/odbc.ini
將以下內容添加到/etc/odbcinst.ini在您的機器上存檔:
/etc/odbcinst.ini
(ODBC驅動程序)Simba SQL Server ODBC Driver=安裝[Simba Spark ODBC Driver]司機=<驅動器路徑>
以上內容替換<驅動器路徑>使用以下值之一,然後保存文件:
將您剛剛添加的信息添加到/etc/odbcinst.ini文件到相應的/usr/local/etc/odbcinst.ini也要在您的機器上存檔。
/usr/local/etc/odbcinst.ini
的末尾添加以下信息simba.sparkodbc.ini文件,然後保存該文件。對於macOS,這個文件在/圖書館/辛巴/火花/ lib.
simba.sparkodbc.ini
/圖書館/辛巴/火花/ lib
DriverManagerEncoding=UTF-16ODBCInstLib= /usr/當地的/地窖/unixodbc/2.3.9/自由/libodbcinst.dylib
在這一步中,您編寫並運行Python代碼來使用Databricks集群或Databricks SQL倉庫查詢數據庫表並顯示查詢結果的前兩行。
使用集群方式查詢。
創建一個名為pyodbc-test-cluster.py有以下內容。取代<表名稱>與數據庫表的名稱一起查詢,保存文件,然後用Python解釋器運行該文件。
pyodbc-test-cluster.py
<表名稱>
進口pyodbc#將替換為要查詢的數據庫表的名稱table_name=“<表名稱>”#連接到Databricks集群#您之前創建的數據源名稱(DSN)。康涅狄格州=pyodbc.連接(“DSN = Databricks_Cluster”,自動提交=真正的)使用前麵的連接運行一個SQL查詢。光標=康涅狄格州.光標()光標.執行(f“SELECT *{table_name}限製2”)#打印從查詢中檢索的行。打印(f查詢輸出:SELECT * FROM{table_name}限製2\ n")為行在光標.fetchall():打印(行)
如果你跳過步驟2:配置軟件並且沒有使用an/etc/odbc.ini文件,然後在調用中指定連接細節pyodbc.connect,例如:
pyodbc.connect
康涅狄格州=pyodbc.連接(“司機= <驅動器路徑>;“+“主機= <服務器主機>;“+“端口= 443;”+“模式=違約;”+“SparkServerType = 3;”+“AuthMech = 3;”+“UID =令牌;”+" PWD = < personal-access-token >;“+“ThriftTransport = 2;+“SSL = 1;”+“HTTPPath = < http-path >”,自動提交=真正的)
用中描述的值替換占位符步驟2:配置軟件.
為了加速代碼的運行,啟動集群這對應於HTTPPath設置在你的odbc.ini文件。
HTTPPath
odbc.ini
運行pyodbc-test-cluster.py使用你的Python解釋器。顯示數據庫表的前兩行。
使用SQL倉庫進行查詢:
創建一個名為pyodbc-test-cluster.py.取代<表名稱>用數據庫表的名稱進行查詢,然後保存文件。
進口pyodbc#將替換為要查詢的數據庫表的名稱table_name=“<表名稱>”方法連接到SQL倉庫#您之前創建的數據源名稱(DSN)。康涅狄格州=pyodbc.連接(“DSN = SQL_Warehouse”,自動提交=真正的)使用前麵的連接運行一個SQL查詢。光標=康涅狄格州.光標()光標.執行(f“SELECT *{table_name}限製2”)#打印從查詢中檢索的行。打印(f查詢輸出:SELECT * FROM{table_name}限製2\ n")為行在光標.fetchall():打印(行)
為了加速代碼的運行,啟動SQL倉庫這對應於HTTPPath設置在你的odbc.ini文件。
運行pyodbc-test-warehouse.py使用你的Python解釋器。顯示數據庫表的前兩行。
pyodbc-test-warehouse.py
要在不同的集群或SQL倉庫上運行Python測試代碼,請更改前麵兩個中的設置odbc.ini文件。或向(ODBC數據來源)部分,以及匹配的連接細節,連接到兩者odbc.ini文件。然後更改測試代碼中的DSN名稱,以匹配中的相關名稱(ODBC數據來源).
要在不同的數據庫表上運行Python測試代碼,請更改table_name價值。
table_name
若要使用不同的SQL查詢運行Python測試代碼,請更改執行命令字符串。
執行
如果您的本地Python代碼在Windows機器上運行,請遵循以下指示。
雙擊提取辛巴Spark.msi存檔,並遵循屏幕上的任何指示。
辛巴Spark.msi
安裝pyodbc模塊:從管理命令提示符運行皮普安裝pyodbc.有關更多信息,請參見pyodbc在PyPI網站上安裝在pyodbc Wiki中。
指定Databricks集群或Databricks SQL倉庫的連接詳細信息pyodbc使用。
指定集群的連接詳細信息。
添加包含關於集群的信息的數據源名稱(DSN)ODBC數據源應用程序:開始菜單,開始打字ODBC,然後按ODBC數據源.
ODBC
在用戶DSN選項卡上,單擊添加.在創建新數據源對話框中,單擊Simba Spark ODBC驅動程序,然後按完成.
在Simba Spark ODBC驅動程序DSN設置對話框中,修改以下值:
數據源名稱:Databricks_Cluster
Databricks_Cluster
描述:我的集群
我的集群
火花服務器類型:SparkThriftServer(火花1.1而且後)
SparkThriftServer(火花1.1而且後)
主機(年代):服務器主機名價值的高級選項,JDBC / ODBC選項卡。
港口:443
443
數據庫:默認的
默認的
機製:用戶的名字而且密碼
用戶的名字而且密碼
用戶名:令牌
令牌
密碼:你的價值個人訪問令牌為您的Databricks工作空間。
節約運輸:HTTP
HTTP
點擊HTTP選項.在HTTP屬性對話框,HTTP路徑,輸入HTTP路徑價值的高級選項,JDBC / ODBC選項卡,然後單擊好吧.
點擊SSL選項.在SSL選項對話框,選中啟用SSL框,然後單擊好吧.
點擊測試.如果測試成功,單擊好吧.
允許pyodbc要將連接切換到不同的集群,請使用特定的連接詳細信息重複此過程。每個DSN必須有唯一的名稱。
指定SQL倉庫的連接細節:
在ODBC數據源應用程序,用戶DSN選項卡上,單擊添加.在創建新數據源對話框中,單擊Simba Spark ODBC驅動程序,然後按完成.
在Simba Spark ODBC驅動程序對話框中,輸入以下值:
數據源名稱:SQL_Warehouse
SQL_Warehouse
描述:我的倉庫
我的倉庫
主機(年代):服務器主機名價值的連接細節標簽你的SQL倉庫。
密碼:你的價值個人訪問令牌您的SQL倉庫。
點擊HTTP選項.在HTTP屬性對話框,HTTP路徑,輸入HTTP路徑價值的連接細節選項卡,然後單擊好吧.
允許pyodbc要連接到交換機連接到不同的SQL倉庫,請使用特定的連接詳細信息重複此過程。每個DSN必須有唯一的名稱。
創建一個名為pyodbc-test-cluster.py有以下內容。取代<表名稱>用數據庫表的名稱進行查詢,然後保存文件。
為了加速代碼的運行,啟動集群這對應於主機(年代)的價值Simba Spark ODBC驅動程序DSN設置對話框。
為了加速代碼的運行,啟動SQL倉庫這對應於主機(年代)的價值Simba Spark ODBC驅動程序DSN設置對話框。
若要在不同的集群或SQL倉庫上運行Python測試代碼,請更改主機(年代)的價值Simba Spark ODBC驅動程序DSN設置對話框中的Databricks集群或Databricks SQL倉庫。或者創建一個新的DSN。然後修改測試代碼中的DSN名稱以匹配相關的數據源名稱.
本節討論使用時常見的問題pyodbc磚。
問題:您將收到類似如下內容的錯誤信息:
<類的pyodbc。在decode返回編解碼器中,第16行“/Users/user/.pyenv/versions/3.7.5/lib/python3.7/encoding /utf_16_le.py”文件返回了一個帶有錯誤集的結果Traceback(最近一次調用最後一次)。utf_16_le_decode(input, errors, True) UnicodeDecodeError: ' UTF-16 -le' codec無法解碼位置2112-2113中的字節:非法的UTF-16代理
導致:存在問題pyodbc版本4.0.31或以下,在運行返回長名稱列或長錯誤消息的查詢時,可能出現此類症狀。的更新版本已經解決了這個問題pyodbc.
解決方案:升級您的安裝pyodbc升級到4.0.32或以上版本。
看到問題在mkleehammer / pyodbc在GitHub庫。