在 Snowflake 上執行同盟查詢
本文說明如何 set up Lakehouse 同盟,對 Azure Databricks 未管理的 Snowflake 數據執行同盟查詢。 若要深入了解 Lakehouse 同盟,請參閱什麼是 Lakehouse 同盟?。
若要使用 Lakehouse 聯盟連接到 Snowflake 資料庫,您必須在 Azure Databricks Unity Catalog 中繼存放區中建立以下項目:
- 與 Snowflake 資料庫的連線。
- 在 Unity Catalog 中,建立一個 內部 catalog,鏡像您的 Snowflake 資料庫,這樣您就可以使用 Unity Catalog 的查詢語法和數據治理工具來管理 Azure Databricks 使用者對資料庫的存取權。
開始之前
工作區需求:
- 針對 Unity Catalog啟用工作區。
計算需求:
- 從您的計算資源到目標資料庫系統的網路連線狀況。 請參閱 Lakehouse 同盟的網路建議。
- Azure Databricks 計算必須使用 Databricks Runtime 13.3 LTS 或更新版本,共用 或 單一使用者 存取模式。
- SQL 倉儲必須是專業或無伺服器,且必須使用 2023.40 或更新版本。
所需的權限:
- 若要建立連線,您必須是中繼存放區系統管理員或具有附加至工作區之 Unity Catalog 中繼存放區
CREATE CONNECTION
許可權的使用者。 - 若要建立外部 catalog,您必須擁有中繼存放區的
CREATE CATALOG
許可權,並且必須是連線的擁有者,或者在連線上擁有CREATE FOREIGN CATALOG
許可權。
後續每個基於工作的章節中會指定其他權限需求。
- 如果您打算使用 OAuth 進行驗證,請在 Snowflake 控制台中建立安全性整合。
- 如果您打算使用 OAuth 存取令牌進行驗證,您也必須要求存取令牌。
(選擇性)在 Snowflake 控制台中建立安全性整合
如果您想要使用 OAuth 進行驗證,請先遵循此步驟,再建立 Snowflake 連線。 若要改用使用者名稱和密碼進行驗證,請略過本節。
注意
僅支援 Snowflake 的內建 OAuth 整合。 不支援Okta或 Microsoft Entra識別碼之類的外部 OAuth 整合。
在 Snowflake 控制台中,執行 CREATE SECURITY INTEGRATION
。 取代下列 values:
<integration-name>
:OAuth 整合的唯一名稱。<workspace-url>
:Azure Databricks 工作區 URL。 您必須 setOAUTH_REDIRECT_URI
至https://<workspace-url>/login/oauth/snowflake.html
,where<workspace-url>
是 Azure Databricks 工作區 where 中您將建立 Snowflake 連線的唯一 URL。<duration-in-seconds>
:refresh 令牌的時間長度。重要
OAUTH_REFRESH_TOKEN_VALIDITY
是一個自定義欄位,預設為 set,預設期限為 90 天。 refresh 令牌過期之後,您必須重新驗證連線。 將Set 欄位設置為合理的時間長度。
CREATE SECURITY INTEGRATION <integration-name>
TYPE = oauth
ENABLED = true
OAUTH_CLIENT = custom
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://<workspace-url>/login/oauth/snowflake.html'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = <duration-in-seconds>
OAUTH_ENFORCE_PKCE = TRUE;
(選擇性)要求 OAuth 存取令牌
請遵循 如何:使用 Snowflake OAuth 對 Snowflake 知識庫中的自定義用戶端 使用 Snowflake OAuth Generate 並使用 OAuth 令牌。
建立連線
連線會指定存取外部資料庫系統的路徑以及 credentials。 若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用 Catalog Explorer 或 CREATE CONNECTION
SQL 命令。
注意
您也可使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connections 和 Unity Catalog 命令。
需要的權限:具有 CREATE CONNECTION
權限的中繼存放區系統管理員或使用者。
Catalog 探索者
在 Azure Databricks 工作區中,按兩下 Catalog。
在 [Catalog] 窗格頂端,按兩下 [新增] 圖示,然後 select從功能表新增連線。
或者,從 [快速存取] 頁面,按兩下 [外部數據 >] 按鈕,移至 [Connections] 索引標籤,然後按兩下 [建立連線。
在 [連線基本概 念] 頁面的 [Set 連線 精靈] 頁面上,輸入使用者易記 連線名稱。
Select 連線類型Snowflake。
針對 驗證類型(例如:基本身份驗證)、select、
Username and password
、OAuth access token
、PEM Private Key
或OAuth
,請在下拉式選單中選擇。(選擇性) 新增註解。
點選 [下一步] 。
輸入雪花倉儲的下列驗證和聯機詳細數據。 您選取之驗證方法的特定屬性前面會加上括弧中的
Auth type
。主機:例如
snowflake-demo.east-us-2.azure.snowflakecomputing.com
埠:例如
443
使用者:例如
snowflake-user
(基本身份驗證) 密碼:例如,
password123
(OAuth 存取令牌)存取令牌:從 存取令牌(可選)要求 OAuth 存取令牌。
(OAuth 存取令牌)以秒為單位到期:存取令牌的到期時間(以秒為單位)(選擇性)要求 OAuth 存取令牌(
expires_in
)。(OAuth) 用戶端標識碼:在 Snowflake 控制台中,執行
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>')
以擷取安全性整合的用戶端識別碼。(OAuth) 客戶端密碼:在 Snowflake 控制台中,執行
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>')
以擷取安全性整合的客戶端密碼。(OAuth) OAuth 範圍:
refresh_token session:role:<role-name>
。 指定要在 中使用的<role-name>
Snowflake 角色。(OAuth) 使用 Snowflake登入:按兩下並使用您的 OAuth credentials登入 Snowflake。
(PEM 私鑰) PEM 私鑰:來自 RSA 金鑰對的私鑰,格式為 HEX64。
(PEM 私鑰)以秒為單位到期:使用私鑰建立之連線的到期時間(以秒為單位)。
成功登入時,系統會將您導回 Set 連接 設定精靈。
點選 「建立連線」。
(基本身份驗證)在 [連線詳細數據] 頁面上,指定下列項目:
-
雪花倉儲:例如
my-snowflake-warehouse
- (選擇性)代理主機:用來連線到 Snowflake 的代理主機。 您必須 select使用代理,並指定 代理連接埠。
- (選擇性)使用代理:是否要使用代理伺服器連線到 Snowflake。
- (選擇性) Proxy 埠:用來連線到 Snowflake 的 Proxy 埠。 您必須 select使用代理,並指定 代理主機。
- (選擇性) Snowflake 角色:連線後要用於會話的預設安全性角色。
-
雪花倉儲:例如
點選 [下一步]。
在 [Catalog 基本] 頁中,輸入外來 catalog的名稱。 外部 catalog 會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity Catalog查詢和管理該資料庫中數據的存取權。
(選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。
按一下建立 catalog。
在 [Access] 頁面上,select 使用者可以存取您所建立 catalog 的工作區。 您可以 select所有工作區都具有存取權,或點擊 指派至工作區,select 工作區,然後點擊 指派。
變更能管理 catalog中所有物件存取權的 擁有者。 開始在文字框中輸入對象,然後點擊從結果中返回的對象。
Grant 在 catalog上的許可權。 點擊 Grant:
- 指定可以存取 catalog中物件的 主體。 在文字框中開始輸入一個主體,然後點選傳回結果中的主體。
-
Select 將 權限預設 應用到每個主體 grant上。 根據預設,所有帳戶用戶都會被授與
BROWSE
。- 從下拉功能表中選擇 Select數據讀取器,以賦予 catalog中物件的 grant
read
許可權。 - 從下拉選單中選擇 Select數據編輯器,然後對 catalog中的對象設置 grant
read
和modify
權限。 - 手動 selectgrant的許可權。
- 從下拉功能表中選擇 Select數據讀取器,以賦予 catalog中物件的 grant
- 按一下 [Grant]。
點選 [下一步]。
在 [元數據] 頁面上,指定受控標記索引鍵/值組。
(選擇性) 新增註解。
點選 [儲存]。
SQL
在筆記本或 Databricks SQL 查詢編輯器中執行下列命令。
CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
host '<hostname>',
port '<port>',
sfWarehouse '<warehouse-name>',
user '<user>',
password '<password>'
);
建議您使用 Azure Databricks 機密資訊,而非以純文本字串存儲,例如 credentials這類敏感資訊 values。 例如:
CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
host '<hostname>',
port '<port>',
sfWarehouse '<warehouse-name>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
如需設定祕密的相關資訊,請參閱祕密管理。
建立外部 catalog
注意
如果您使用UI來建立數據源的連線,則會包含外部 catalog 建立,而且您可以略過此步驟。
外部 catalog 會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity Catalog查詢和管理該資料庫中數據的存取權。 若要建立外部 catalog,您可以使用已定義的數據源連線。
若要建立外部 catalog,您可以在 Azure Databricks 筆記本或 SQL 查詢編輯器中使用 Catalog Explorer 或 CREATE FOREIGN CATALOG
SQL 命令。
您也可以使用 Databricks REST API 或 Databricks CLI 來建立 catalog。 請參閱 POST /api/2.1/unity-catalog/catalogs 和 Unity Catalog 命令。
必要權限:中繼存放區的 CREATE CATALOG
權限,以及連線的所有權或連線的 CREATE FOREIGN CATALOG
權限。
Catalog 瀏覽器
在 Azure Databricks 工作區中,按兩下 [Catalog 以開啟 Catalog Explorer。
在 [Catalog] 窗格頂端,單擊 [新增] 圖示,然後從功能表中 [select新增 catalog]。
或者,從【快速存取】頁面中,按一下【Catalogs】按鈕,然後按一下【建立 catalog】按鈕。
請遵循在 Create catalogs中建立外部 catalogs 的指示。
SQL
在筆記本或 SQL 查詢編輯器中,執行下列 SQL 命令。 括弧中的項目是選擇性的。 替換佔位符 values:
-
<catalog-name>
:Azure Databricks 中 catalog 的名稱。 -
<connection-name>
:指定數據源、路徑和存取 credentials的 連接物件。 -
<database-name>
:您想要在 Azure Databricks 中作為 catalog 的鏡像或副本的資料庫名稱。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
區分大小寫的資料庫識別碼
外部 catalog 的 database
字段會對應至 Snowflake 資料庫 identifier。 如果 Snowflake 資料庫 identifier 不區分大小寫,則會保留您在外部 catalog<database-name>
中使用的大小寫。 不過,如果 Snowflake 資料庫 identifier 區分大小寫,您必須將外部的 catalog<database-name>
以雙引號引起來,才能保留大小寫。
例如:
database
已轉換成DATABASE
"database"
已轉換成database
"database"""
已轉換成database"
若要逸出雙引號,請使用另一個雙引號。
"database""
會導致錯誤,因為雙引號未正確逸出。
如需詳細資訊,請參閱 Snowflake 檔中 Identifier 需求。
支援的下推
支援下列下推:
- 篩選
- 投影
- Limit
- 聯結
- 匯總(Average、Corr、CovPopulation、CovSample、Count、Max、Min、StddevPop、StddevSamp、Sum、VariancePop、VarianceSamp)
- 函式(字串函式、數學函式、數據、時間和時間戳函式,以及其他函式,例如 Alias、Cast、SortOrder)
- Windows 函式 (DenseRank、Rank、RowNumber)
- 排序
資料類型對應
當您從 Snowflake 讀取至 Spark 時,資料類型會對應如下:
雪花類型 | Spark 類型 |
---|---|
decimal、number、numeric | DecimalType |
bigint、byteint、int、integer、smallint、tinyint | IntegerType |
float、float4、float8 | FloatType |
double、double precision、real | DoubleType |
char, character, string, text, time, varchar | StringType |
binary | BinaryType |
boolean | BooleanType |
date | DateType |
datetime、timestamp、timestamp_ltz、timestamp_ntz、timestamp_tz | TimestampType |
OAuth 限制
以下是 OAuth 支援限制:
- Snowflake OAuth 端點必須可從 Databricks 控制平面 IP 存取。 請參閱 從 Azure Databricks 控制平面輸出。 Snowflake 支援在安全性整合層級設定網路原則,以允許個別的網路原則,以便從 Databricks 控制平面直接連線到 OAuth 端點進行授權。
- 不支援使用 Proxy、 Proxy 主機、 Proxy 埠和 Snowflake 角色設定選項。 指定 Snowflake 角色 作為 OAuth 範圍的一部分。
PEM 私密鑰限制
以下是 PEM 私密鑰支援限制:
Snowflake JDBC 驅動程式不支援使用加密私鑰進行驗證。 若要避免錯誤,請新增附有
-nocrypt
選項的 generate 鍵,操作如下所示:openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
其他資源
請參閱 Snowflake 檔中的下列文章: