在本節中,您將了解如何建立和使用檢視來包裝無伺服器 SQL 集區查詢。 檢視可讓您重複使用這些查詢。 如果您想要使用工具 (例如 Power BI) 來搭配無伺服器 SQL 集區,也是需要檢視。
先決條件
您的第一個步驟是建立資料庫以便在其中建立檢視,並藉由在該資料庫上執行安裝指令碼,而初始化要在 Azure 儲存體上進行驗證所需的物件。 本文中的所有查詢將會在您的範例資料庫上執行。
外部資料檢視
您可以用建立一般 SQL Server 檢視的相同方式來建立檢視。 下列查詢會建立可讀取 population.csv 檔案的檢視。
附註
變更查詢中的第一行,也就是 [mydbname],以使用您所建立的資料庫。
USE [mydbname];
GO
DROP VIEW IF EXISTS populationView;
GO
CREATE VIEW populationView AS
SELECT *
FROM OPENROWSET(
BULK 'csv/population/population.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIELDTERMINATOR =',',
ROWTERMINATOR = '\n'
)
WITH (
[country_code] VARCHAR (5) COLLATE Latin1_General_BIN2,
[country_name] VARCHAR (100) COLLATE Latin1_General_BIN2,
[year] smallint,
[population] bigint
) AS [r];
檢視使用包含儲存體根 URL的 EXTERNAL DATA SOURCE,作為 DATA_SOURCE 並在檔案加入相對檔案路徑。
Delta Lake 檢視
若要在 Delta Lake 資料夾上建立檢視,請在 BULK 選項取代指定檔案路徑後,指定根目錄的位置。

讀取 Delta Lake 資料夾資料的 OPENROWSET 函式會檢查資料夾結構,並自動識別檔案位置。
create or alter view CovidDeltaLake
as
select *
from openrowset(
bulk 'covid',
data_source = 'DeltaLakeStorage',
format = 'delta'
) with (
date_rep date,
cases int,
geo_id varchar(6)
) as rows
如需詳細資訊,請檢閱 Synapse 無伺服器 SQL 集區自助頁面和 Azure Synapse Analytics 已知問題。
分割的檢視
如果階層式資料夾結構中有一組分割的檔案,您可使用檔案路徑的萬用字元描述分割模式。 您可使用 FILEPATH 函式,公開部分的資料夾路徑,作為分割資料行。
CREATE VIEW TaxiView
AS SELECT *, nyc.filepath(1) AS [year], nyc.filepath(2) AS [month]
FROM
OPENROWSET(
BULK 'parquet/taxi/year=*/month=*/*.parquet',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT='PARQUET'
) AS nyc
在分割資料行上使用篩選來查詢時,分割的檢視可以透過執行分割刪除來改善查詢的效能。 不過,並非所有查詢都支援分割刪除,因此請務必遵循一些最佳做法。
若要確保分割刪除,請避免在篩選中使用子查詢,因為它們可能會干擾刪除分割的能力。 相反地,將子查詢的結果當做變數傳遞至篩選。
在 SQL 查詢中使用 JOIN 時,將篩選述詞宣告為 NVARCHAR,以減少查詢計劃的複雜性,並增加正確分割刪除的可能性。 分割資料行通常會推斷為 NVARCHAR (1024),因此針對述詞使用相同的類型可避免隱含轉換的需求,其會增加查詢計劃的複雜性。
Delta Lake 分割的檢視
若要在 Data Lake Storage 上建立分割的檢視,您可以直接指定根 Delta Lake 資料夾,而不必使用 FILEPATH 函式明確公開分割資料行:
CREATE OR ALTER VIEW YellowTaxiView
AS SELECT *
FROM
OPENROWSET(
BULK 'yellow',
DATA_SOURCE = 'DeltaLakeStorage',
FORMAT='DELTA'
) nyc
OPENROWSET 函式會檢查基礎 Delta Lake 資料夾的結構,並自動識別和公開分割資料行。 如果您在查詢的 WHERE 子句放入分割資料行,即會自動完成分割刪除。
與 DeltaLakeStorage 資料來源中定義的 LOCATION URI 串連的 OPENROWSET 函式的資料夾名稱 (此範例中的 yellow),必須參考包含名為 _delta_log 的子資料夾的根 Delta Lake 資料夾。

如需詳細資訊,請檢閱 Synapse 無伺服器 SQL 集區自助頁面和 Azure Synapse Analytics 已知問題。
JSON 檢視
在檔案擷取結果集後,如果您要在結果集上執行額外的處理,檢視是不錯的選擇。 以剖析 JSON 檔案為例,我們必須套用 JSON 函式,擷取 JSON 文件中的值:
CREATE OR ALTER VIEW CovidCases
AS
select
*
from openrowset(
bulk 'latest/ecdc_cases.jsonl',
data_source = 'covid',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b'
) with (doc nvarchar(max)) as rows
cross apply openjson (doc)
with ( date_rep datetime2,
cases int,
fatal int '$.deaths',
country varchar(100) '$.countries_and_territories')
OPENJSON 函式會剖析 JSONL 檔案的每一行,包含 JSON 文件 (文字格式)。
容器上的 Azure Cosmos DB 檢視
如果容器上已啟用 Azure Cosmos DB 分析儲存體,即可在 Azure Cosmos DB 容器上建立檢視。 應新增 Azure Cosmos DB 帳戶名稱、資料庫名稱和容器名稱作為檢視的一部分,而唯讀存取金鑰應放置於檢視參考的資料庫範圍認證中。
此範例指令碼會使用資料庫和容器,您可以遵循這些指示來設定。
重要事項
在指令碼中,以您自己的值取代這些值:
- your-cosmosdb - Cosmos DB 帳戶的名稱
- access-key - 您的 Cosmos DB 帳戶金鑰
CREATE DATABASE SCOPED CREDENTIAL MyCosmosDbAccountCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'access-key';
GO
CREATE OR ALTER VIEW Ecdc
AS SELECT *
FROM OPENROWSET(
PROVIDER = 'CosmosDB',
CONNECTION = 'Account=your-cosmosdb;Database=covid',
OBJECT = 'Ecdc',
CREDENTIAL = 'MyCosmosDbAccountCredential'
) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows
如需詳細資訊,請在 Azure Synapse Link 中使用無伺服器 SQL 集區來查詢 Azure Cosmos DB 資料。
使用檢視
您可以在查詢中使用檢視,就像在 SQL Server 查詢中使用檢視一樣。
下列查詢會示範如何使用我們在建立檢視中建立的 population_csv 檢視。 此查詢會以遞減順序傳回各個國家/地區名稱和其 2019 年的人口數目。
附註
變更查詢中的第一行,也就是 [mydbname],以使用您所建立的資料庫。
USE [mydbname];
GO
SELECT
country_name, population
FROM populationView
WHERE
[year] = 2019
ORDER BY
[population] DESC;
當您查詢檢視,可能會遇到錯誤或非預期的結果。 這可能表示檢視參考了已修改或不再存在的資料行或物件。 您必須手動調整檢視定義,以與基礎結構描述變更一致。
相關內容
如需有關如何查詢不同檔案類型的詳細資訊,請參閱查詢單一 CSV 檔案、查詢 Parquet 檔案及查詢 JSON 檔案文章。