Tip
Microsoft Fabric Data Warehouse 是一個企業規模的關聯式倉庫,建立在資料湖基礎上,具備未來準備架構、內建 AI 及新功能。 如果你是資料倉儲新手,建議先從Fabric Data Warehouse開始。 現有的 專用 SQL 工作負載可升級至 Fabric,以取得資料科學、即時分析與報告等多項新功能。
本文說明使用者如何從 Azure 儲存體 中儲存在無伺服器 SQL 池中的檔案中讀取資料。 使用者有以下選項來存取儲存空間:
- OPENROWSET 函式,能對 Azure 儲存體 中的檔案進行臨時查詢。
- 外部資料表 ,是建立在一組外部檔案之上的預先定義資料結構。
使用者可以使用不同的認證方法,例如Microsoft Entra直通認證(Microsoft Entra主體預設)和 SAS 認證(SQL 主體預設)。
使用 OPENROWSET 查詢檔案
OPENROWSET 允許使用者查詢 Azure 儲存裝置上的外部檔案,前提是他們有存取權限。 連接無伺服器 SQL 池的使用者應使用以下查詢來讀取 Azure 儲存中檔案的內容:
SELECT * FROM
OPENROWSET(BULK 'https://<storage_account>.dfs.core.windows.net/<container>/<path>/*.parquet', format= 'parquet') as rows
使用者可透過以下存取規則存取儲存空間:
- Microsoft Entra 使用者 -
OPENROWSET會使用來電者的Microsoft Entra身份來存取Azure 儲存體或以匿名方式存取儲存空間。 - SQL 使用者——
OPENROWSET可匿名存取儲存空間,或可使用 SAS 令牌或工作空間管理身份冒充。
SQL 主體也可以使用 OPENROWSET 直接查詢受 SAS 標記保護的檔案,或工作區的管理身份。 若 SQL 使用者執行此函式,擁有 ALTER ANY CREDENTIAL 權限的進階使用者必須建立一個伺服器範圍的憑證,該憑證與函式中的 URL 相符(使用儲存名稱與容器),並授予 OPENROWSET 函式呼叫者該憑證的 REFERENCES 權限:
EXECUTE AS somepoweruser
CREATE CREDENTIAL [https://<storage_account>.dfs.core.windows.net/<container>]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'sas token';
GRANT REFERENCES ON CREDENTIAL::[https://<storage_account>.dfs.core.windows.net/<container>] TO sqluser
如果沒有伺服器層級的憑證與該 URL 相符,或 SQL 使用者沒有該憑證的參考權限,錯誤就會被回傳。 SQL 主體無法使用某些 Microsoft Entra 身份來冒充。
Note
此版本的 OPENROWSET 設計用於使用預設認證快速且簡便的資料探索。 要利用模擬或受管理身份,請使用 OPENROWSET 並DATA_SOURCE下節所述。
使用 OPENROWSET 查詢資料來源
OPENROWSET 允許使用者查詢放置在某個外部資料來源上的檔案:
SELECT * FROM
OPENROWSET(BULK 'file/path/*.parquet',
DATA_SOURCE = MyAzureInvoices,
FORMAT= 'parquet') as rows
執行此查詢的使用者必須能夠存取這些檔案。 若使用者無法直接使用其 Microsoft Entra 身份 或 匿名存取 來存取檔案時,必須使用 SAS token 或 workspace 的受管理身份 進行模擬。
DATABASE SCOPED CREDENTIAL 指定如何存取參考資料來源上的檔案(目前為 SAS 與 Managed Identity)。 擁有 CONTROL DATABASE 權限的進階使用者需要建立 DATABASE SCOPED CREDENTIAL 一個用於存取儲存的檔案,並 EXTERNAL DATA SOURCE 指定資料來源網址及應使用的憑證:
EXECUTE AS somepoweruser;
-- Create MASTER KEY if it doesn't exists in database
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'some very strong password';
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=201********' ;
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>/' ,
CREDENTIAL = AccessAzureInvoices) ;
呼叫者必須擁有以下其中一項權限才能執行 OPENROWSET 函式:
- 執行 OPENROWSET 的其中一個權限:
-
ADMINISTER BULK OPERATIONS可讓登入執行 OPENROWSET 函式。 -
ADMINISTER DATABASE BULK OPERATIONS可讓資料庫範圍的使用者執行 OPENROWSET 函式。
-
-
REFERENCES DATABASE SCOPED CREDENTIAL在EXTERNAL DATA SOURCE中所引用的憑證。
外部資料表
擁有讀取表權限的使用者,可以使用建立在 Azure 儲存體 資料夾和檔案上方的外部資料表存取外部檔案。
擁有 權限建立外部資料表(例如:建立資料表並更改任何憑證或資料庫範圍驗證的參考資料)的使用者,可以使用以下腳本在Azure 儲存體資料來源上方建立資料表:
CREATE EXTERNAL TABLE [dbo].[DimProductexternal]
( ProductKey int, ProductLabel nvarchar, ProductName nvarchar )
WITH
(
LOCATION='/DimProduct/year=*/month=*' ,
DATA_SOURCE = AzureDataLakeStore ,
FILE_FORMAT = TextFileFormat
) ;
讀取資料表資料的使用者必須能夠存取這些檔案。 若使用者無法直接使用Microsoft Entra身份或匿名存取/c3,則必須使用 SAS 令牌或 Managed Identity of workspace 來冒充。
DATABASE SCOPED CREDENTIAL 規定如何存取參考資料來源上的檔案。 擁有 CONTROL DATABASE 權限的使用者需建立 DATABASE SCOPED CREDENTIAL 以存取儲存空間,以及 EXTERNAL DATA SOURCE,指定資料來源 URL 與應使用憑證:
EXECUTE AS somepoweruser;
-- Create MASTER KEY if it doesn't exists in database
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'some very strong password';
CREATE DATABASE SCOPED CREDENTIAL cred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=201********' ;
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>' ,
CREDENTIAL = cred
) ;
使用 EXTERNAL TABLE 讀取外部檔案
外部資料表可讓您使用標準的 SQL SELECT 陳述式從透過資料來源引用的檔案中讀取資料。
SELECT *
FROM dbo.DimProductsExternal
呼叫者必須具備以下讀取資料的權限:
-
SELECT外部資料表上的權限 -
REFERENCES DATABASE SCOPED CREDENTIAL如果有DATA SOURCE的權限CREDENTIAL
許可
下表列出上述操作所需的權限。
| Query | 所需的權限 |
|---|---|
| OPENROWSET(BULK) 無資料來源 |
ADMINISTER BULK OPERATIONS、ADMINISTER DATABASE BULK OPERATIONS 或 SQL 登入必須有 REFERENCES CREDENTIAL::<URL> 以供 SAS 保護儲存 |
| OPENROWSET(BULK) 與無憑證資料來源 |
ADMINISTER BULK OPERATIONS或,ADMINISTER DATABASE BULK OPERATIONS |
| OPENROWSET(BULK)使用具有憑證的資料來源 |
REFERENCES DATABASE SCOPED CREDENTIAL及ADMINISTER BULK OPERATIONS或ADMINISTER DATABASE BULK OPERATIONS中的一個 |
| 建立外部資料來源 |
ALTER ANY EXTERNAL DATA SOURCE 與 REFERENCES DATABASE SCOPED CREDENTIAL |
| 建立外部資料表 |
CREATE TABLE、ALTER ANY SCHEMA、ALTER ANY EXTERNAL FILE FORMAT 和 ALTER ANY EXTERNAL DATA SOURCE |
| 從外部表格選擇 |
SELECT TABLE 與 REFERENCES DATABASE SCOPED CREDENTIAL |
| CETAS | 建立表 - CREATE TABLE,ALTER ANY SCHEMA,ALTER ANY DATA SOURCE,ALTER ANY EXTERNAL FILE FORMAT。 讀取資料:ADMINISTER BULK OPERATIONS 或 REFERENCES CREDENTIAL 或 SELECT TABLE 依每個查詢中的表格/視圖/函式 + 儲存空間上的 R/W 權限 |
下一步
你現在準備好繼續閱讀以下的操作指南文章了: