在 Azure Synapse Microsoft執行同盟查詢
本文說明如何設定 Lakehouse 同盟,以在 Azure Databricks 未管理的 Azure Synapse (SQL 數據倉儲) 數據上執行同盟查詢。 若要深入了解 Lakehouse 同盟,請參閱什麼是 Lakehouse 同盟?。
若要透過 Lakehouse Federation 連線到 Azure Synapse(SQL 數據倉儲)資料庫,您必須在 Azure Databricks Unity 資料目錄中建立以下項目:
- Azure Synapse (SQL 數據倉儲) 資料庫的連線。
- 外部目錄,鏡像 Unity 目錄中的 Azure Synapse (SQL 數據倉儲) 資料庫,讓您可以使用 Unity 目錄查詢語法和數據控管工具來管理 Azure Databricks 使用者對資料庫的存取權。
開始之前
工作區需求:
- 已啟用 Unity 目錄的工作區。
計算需求:
- 從計算設備至目標資料庫系統的網路連線性。 請參閱 Lakehouse 同盟的網路建議。
- Azure Databricks 計算必須使用 Databricks Runtime 13.3 LTS 或更新版本,共用 或 單一使用者 存取模式。
- SQL 倉儲必須是專業或無伺服器,且必須使用 2023.40 或更新版本。
所需的權限:
- 若要建立連線,您必須是中繼存放區系統管理員,或是具有附加至工作區之 Unity 目錄中繼存放區
CREATE CONNECTION
許可權的使用者。 - 若要建立外部目錄,您必須具有中繼存放區的
CREATE CATALOG
許可權,而且必須是連線的擁有者,或具有連線CREATE FOREIGN CATALOG
許可權。
後續每個基於工作的章節中會指定其他權限需求。
建立連線
連接會指定用來存取外部資料庫系統的路徑和認證。 若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用目錄總管或 CREATE CONNECTION
SQL 命令。
注意
您也可使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connections 以及 Unity Catalog 指令。
需要的權限:具有 CREATE CONNECTION
權限的中繼存放區系統管理員或使用者。
目錄探索
在 Azure Databricks 工作區中,按一下
目錄。
在 [
目錄 ] 窗格頂端,單擊[新增] 或 [加號] 圖示 [新增 ] 圖標,然後從功能表選取 [新增連線]。 或者,從 [快速存取] 頁面,按兩下 [外部數據 >] 按鈕,移至 [連線] 索引卷標,然後按兩下 [建立連線]。
在 [連線基本概念 頁面] 的 [設定連線 精靈] 中,輸入使用者友好的 [連線名稱]。
選取 連線類型 的 SQLDW。
(選擇性) 新增註解。
點選 [下一步] 。
在 [驗證] 頁面上,輸入 Azure Synapse 實例的下列連線屬性:
-
主機:例如
sqldws-demo.database.windows.net
。 -
埠:例如
1433
- 使用者
- 密碼
- 信任伺服器證書:預設不會選取此選項。 選取時,傳輸層會使用SSL來加密通道,並略過憑證鏈結來驗證信任。 除非您有特定需要略過信任驗證,否則請將此設定保留為預設值。
-
主機:例如
點選 「建立連線」
。 在 目錄基本概念 頁面上,輸入外部目錄的名稱。 外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。
(選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。
點選 建立目錄。
在 [Access] 頁面上,選擇工作區以讓使用者能存取您建立的目錄。 您可以選取 所有工作區都有存取權,或按一下 指派給工作區,選取工作區,然後按一下 指派。
變更 擁有者,使其能夠管理目錄中全部物件的存取權限。 開始在文字框中輸入主體,然後在返回的結果中點擊主體。
在目錄中,授予 許可權。 按兩下 [授與 ]:
- 指定 主體 誰可以存取目錄中的物件。 開始在文字框中輸入主體,然後在返回的結果中點擊主體。
- 選取 許可權預設 並分配給每個主體。 根據預設,所有帳戶用戶都會被授與
BROWSE
。- 從下拉功能表中選取 [數據讀取器],以授予目錄中物件的
read
權限。 - 從下拉功能表中選取 [數據編輯器],以授與目錄中物件的
read
和modify
許可權。 - 手動選取要授與的許可權。
- 從下拉功能表中選取 [數據讀取器],以授予目錄中物件的
- 按一下 [授與]。
點選 [下一步] 。
在 [元數據 頁面上,指定標籤索引鍵/值組。 如需詳細資訊,請參閱 將標籤套用至 Unity Catalog 可以設置安全性的物件。
(選擇性) 新增註解。
點選 儲存。
SQL
在筆記本或 Databricks SQL 查詢編輯器中執行下列命令。
CREATE CONNECTION <connection-name> TYPE sqldw
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
建議您使用 Azure Databricks 秘密,而不是針對認證等敏感性值使用純文本字串。 例如:
CREATE CONNECTION <connection-name> TYPE sqldw
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
如需設定祕密的相關資訊,請參閱祕密管理。
建立外國目錄
注意
如果您使用使用者介面來建立資料來源的連線,這會包含外部目錄的建立,因此您可以略過此步驟。
外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。 若要建立外部目錄,您可以使用已定義的數據源連線。
若要建立外部目錄,您可以在 Azure Databricks 筆記本或 SQL 查詢編輯器中使用目錄總管或 CREATE FOREIGN CATALOG
SQL 命令。
您也可以使用 Databricks REST API 或 Databricks CLI 來建立目錄。 請參閱 POST /api/2.1/unity-catalog/catalogs 和 Unity Catalog 命令。
必要權限:中繼存放區的 CREATE CATALOG
權限,以及連線的所有權或連線的 CREATE FOREIGN CATALOG
權限。
目錄探索
在 Azure Databricks 工作區中,按兩下
目錄,以開啟 [目錄總管]。
在 [
目錄 ] 窗格頂端,按兩下[新增] 或 [加號] 圖示 [新增 ] 圖示,然後從功能表中選取 [新增目錄]。 或者,從 [快速存取] 頁面,按一下 [目錄] 按鈕,然後按一下 [建立目錄] 按鈕。
請遵循在 建立目錄中建立外國目錄的指示。
SQL
在筆記本或 SQL 查詢編輯器中,執行下列 SQL 命令。 括弧中的項目是選擇性的。 替換佔位符值:
-
<catalog-name>
:Azure Databricks 中目錄的名稱。 -
<connection-name>
:指定數據源、路徑和存取認證的 連接物件。 -
<database-name>
:您想要在 Azure Databricks 中作為目錄的鏡像資料庫名稱。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
支援的下推
支援下列下推:
- 篩選
- 投影
- 限制
- 匯總(Average、Count、Max、Min、StddevPop、StddevSamp、Sum、VarianceSamp)
- 函式(算術和其他其他函式,例如 Alias、Cast、SortOrder)
- 排序
不支援下列下推:
- 聯結
- 視窗函式
資料類型對應
當您從 Synapse / SQL 數據倉儲讀取至 Spark 時,數據類型會對應如下:
Synapse 類型 | Spark 類型 |
---|---|
decimal、money、numeric、smallmoney | DecimalType |
smallint | ShortType |
tinyint | ByteType |
int | IntegerType |
bigint | LongType |
real | FloatType |
float | DoubleType |
char, nchar, ntext, nvarchar, text, uniqueidentifier, varchar, xml | StringType |
binary, geography, geometry, image, timestamp, udt, varbinary | BinaryType |
bit | BooleanType |
date | DateType |
datetime、datetime、smalldatetime、time | TimestampType/TimestampNTZType* |
*當您從 Synapse / SQL 數據倉儲 (SQLDW) 讀取時,SQLDW datetimes
會對應至 Spark TimestampType
if preferTimestampNTZ = false
(預設值)。 如果,SQLDW datetimes
會對應至 TimestampNTZType
。preferTimestampNTZ = true