使用 Unity Catalog 的 Connections 代理端點 ,搭配外部服務的客戶端 SDK 直接從代理程式碼呼叫 REST API。 將 SDK 的基礎 URL 指向代理端點,並使用 Azure Databricks 令牌作為 API 金鑰。 Azure Databricks 會驗證請求,並自動從 Unity 目錄連線注入外部服務的憑證。 你的程式碼不會直接處理外部服務的標記。
要求
- 用於外部服務的 Unity Catalog HTTP 連線。 代理端點利用此連線進行認證並注入服務憑證。
-
USE CONNECTION在連接物件上。
OpenAI
用 DatabricksOpenAI 來透過 Unity Catalog 連線代理將呼叫路由到外部 OpenAI。 首先,使用你儲存在 Databricks 秘密中的 OpenAI API 金鑰建立一個 Unity Catalog HTTP 連線:
CREATE CONNECTION openai_connection TYPE HTTP
OPTIONS (
host 'https://api.openai.com',
base_path '/v1',
bearer_token secret ('<secret-scope>', '<secret-key>')
);
接著安裝套件 databricks-openai ,並在代理程式碼中使用代理 URL 和工作空間客戶端:
pip install databricks-openai
from databricks_openai import DatabricksOpenAI
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
client = DatabricksOpenAI(
workspace_client=w,
base_url=f"{w.config.host}/api/2.0/unity-catalog/connections/openai_connection/proxy/",
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)
Slack
設定 Slack SDK 讓它透過 Unity Catalog 連線代理路由。 建立一個 Unity Catalog HTTP 連線,包含主機 https://slack.com 和基礎路徑 /api,然後使用代理 URL 作為 SDK 的基礎 URL:
from slack_sdk import WebClient
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
client = WebClient(
token=w.config.authenticate()["Authorization"].split(" ")[1],
base_url=f"{w.config.host}/api/2.0/unity-catalog/connections/slack_connection/proxy/",
)
result = client.chat_postMessage(channel="C123456", text="Hello from Databricks!")
print(result["message"]["text"])
泛型 ODBC
對於沒有專用 SDK 的服務,請直接使用帶有代理網址的 requests 函式庫:
import requests
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
response = requests.post(
f"{w.config.host}/api/2.0/unity-catalog/connections/my_connection/proxy/api/v1/resource",
headers={
**w.config.authenticate(),
"Content-Type": "application/json",
},
json={"key": "value"},
)
關於代理端點、支援的認證方法及連線設定的詳細資訊,請參閱 透過 HTTP 連線代理轉發請求。
將 http_request() 包裝成 Unity Catalog 函式
Note
Azure Databricks 建議使用上述的連線代理或 MCP Services,將代理連接到外部服務。 封裝 http_request 的 Unity Catalog 函式工具仍受支援,但已不再是建議採用的做法。
你也可以建立一個 Unity 目錄函式,包裝 http_request() 以呼叫外部服務,這對於基於 SQL 的工具定義很有用。 該函式使用與代理方式相同的 Unity Catalog HTTP 連線,並在參數中以名稱 conn 作為參考。
以下範例建立一個 Unity 目錄函式工具,將訊息發佈到 Slack:
CREATE OR REPLACE FUNCTION main.default.slack_post_message(
text STRING COMMENT 'message content'
)
RETURNS STRING
COMMENT 'Sends a Slack message by passing in the message and returns the response received from the external service.'
RETURN (http_request(
conn => 'test_sql_slack',
method => 'POST',
path => '/api/chat.postMessage',
json => to_json(named_struct(
'channel', "C032G2DAH3",
'text', text
))
)).text
參見CREATE FUNCTION(SQL、Python、Scala 和 Java)。
Note
使用者對機器每使用者及動態客戶端註冊這兩種連線類型的 SQL 存取 http_request 已被封鎖。 改用 Python Azure Databricks SDK 吧。