在 Azure Synapse Analytics 中使用無伺服器 SQL 集區建立及使用檢視

在本節中,您將了解如何建立和使用檢視來包裝無伺服器 SQL 集區查詢。 檢視可讓您重複使用這些查詢。 如果您想要使用工具 (例如 Power BI) 來搭配無伺服器 SQL 集區,也是需要檢視。

Prerequisites

您的第一個步驟是建立資料庫以便在其中建立檢視,並藉由在該資料庫上執行安裝指令碼,而初始化要在 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];

此視圖會使用 EXTERNAL DATA SOURCE 具有您儲存空間的根 URL, DATA_SOURCE 並將相對檔案路徑加入至檔案。

Delta Lake views

如果您要在 Delta Lake 資料夾之上建立視圖,您需要在選項之後指定根資料夾的位置, BULK 而不是指定檔案路徑。

ECDC COVID-19-19 Delta Lake 資料夾

OPENROWSET從 Delta Lake 資料夾讀取資料的函式會檢查資料夾結構,並自動識別檔案位置。

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

Delta Lake 處於公開預覽狀態,而且有一些已知問題和限制。 請參閱Synapse 無伺服器 SQL 集區自助頁面的已知問題。

資料分割檢視

如果您有一組以階層式資料夾結構分割的檔案,您可以在檔案路徑中使用萬用字元來描述磁碟分割模式。 您 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

如果您使用分割資料行上的篩選準則來查詢此視圖,則資料分割的視圖會執行資料夾分割區刪除。 這可能會改善查詢的效能。

Delta Lake 分割區視圖

如果您要在 Delta 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

在此範例中,函式中的資料夾名稱 OPENROWSET (yellow 在此範例中,與資料來源中定義的 URI 串連) , LOCATION DeltaLakeStorage 必須參考包含名為之子資料夾的根 Delta Lake 資料夾 _delta_log

黃色計程車 Delta Lake 資料夾

WITH OPENROWSET 當您查詢分割的 Delta Lake 資料時,請勿在函數中使用子句。 由於預覽中的已知問題, WITH 子句 不會正確地傳回基礎分割資料行中的值。 如果您直接使用具有子句的函式, OPENROWSET WITH (而沒有 views) ,資料分割刪除就會正常運作。

Delta Lake 處於公開預覽狀態,而且有一些已知問題和限制。 請參閱Synapse 無伺服器 SQL 集區自助頁面的已知問題。

使用檢視

您可以在查詢中使用檢視,就像在 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 檔案文章。