在 Azure Synapse Analytics 中使用 serverless SQL pool 存取外部儲存

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 tokenworkspace 的受管理身份 進行模擬。

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&amp;sp=rwac&amp;se=2017-02-01T00:55:34Z&amp;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 CREDENTIALEXTERNAL 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 OPERATIONSADMINISTER DATABASE BULK OPERATIONS 或 SQL 登入必須有 REFERENCES CREDENTIAL::<URL> 以供 SAS 保護儲存
OPENROWSET(BULK) 與無憑證資料來源 ADMINISTER BULK OPERATIONS或,ADMINISTER DATABASE BULK OPERATIONS
OPENROWSET(BULK)使用具有憑證的資料來源 REFERENCES DATABASE SCOPED CREDENTIALADMINISTER BULK OPERATIONSADMINISTER DATABASE BULK OPERATIONS中的一個
建立外部資料來源 ALTER ANY EXTERNAL DATA SOURCEREFERENCES DATABASE SCOPED CREDENTIAL
建立外部資料表 CREATE TABLEALTER ANY SCHEMAALTER ANY EXTERNAL FILE FORMATALTER ANY EXTERNAL DATA SOURCE
從外部表格選擇 SELECT TABLEREFERENCES DATABASE SCOPED CREDENTIAL
CETAS 建立表 - CREATE TABLEALTER ANY SCHEMAALTER ANY DATA SOURCEALTER ANY EXTERNAL FILE FORMAT。 讀取資料:ADMINISTER BULK OPERATIONSREFERENCES CREDENTIALSELECT TABLE 依每個查詢中的表格/視圖/函式 + 儲存空間上的 R/W 權限

下一步

你現在準備好繼續閱讀以下的操作指南文章了: