Vytváření a používání zobrazení pomocí bezserverového fondu SQL v Azure Synapse Analytics

V této části se dozvíte, jak vytvářet a používat zobrazení k zabalení dotazů bezserverového fondu SQL. Zobrazení vám umožní tyto dotazy znovu použít. Zobrazení jsou také potřebná, pokud chcete používat nástroje, jako je Power BI, ve spojení s bezserverovým fondem SQL.

Požadavky

Vaším prvním krokem je vytvoření databáze, ve které se vytvoří zobrazení, a inicializace objektů potřebných k ověření ve službě Azure Storage spuštěním instalačního skriptu v této databázi. Všechny dotazy v tomto článku se budou spouštět ve vaší ukázkové databázi.

Zobrazení externích dat

Zobrazení můžete vytvářet stejným způsobem jako běžná zobrazení SQL Server. Následující dotaz vytvoří zobrazení, které čte population.csv soubor.

Poznámka

Změňte první řádek dotazu, tj. [mydbname], abyste používali databázi, kterou jste vytvořili.

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];

Zobrazení používá EXTERNAL DATA SOURCE objekt s kořenovou adresou URL úložiště jako DATA_SOURCE a přidá k souborům relativní cestu k souboru.

Zobrazení Delta Lake

Pokud vytváříte zobrazení nad složkou Delta Lake, musíte místo určení cesty k souboru zadat umístění kořenové složky za BULK touto možností.

Složka ECDC COVID-19 Delta Lake

Funkce OPENROWSET , která čte data ze složky Delta Lake, prozkoumá strukturu složek a automaticky identifikuje umístění souborů.

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

Další informace najdete na stránce samoobslužné podpory pro bezserverový fond SQL Synapse a známé problémy Azure Synapse Analytics.

Dělené zobrazení

Pokud máte sadu souborů, které jsou rozdělené do hierarchické struktury složek, můžete popsat model oddílu pomocí zástupných znaků v cestě k souboru. FILEPATH Pomocí funkce můžete zveřejnit části cesty ke složce jako sloupce dělení.

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

Dělená zobrazení můžou zlepšit výkon dotazů tím, že při dotazování pomocí filtrů na sloupce dělení provádějí odstranění oddílů. Ne všechny dotazy ale podporují odstranění oddílů, proto je důležité postupovat podle některých osvědčených postupů.

Pokud chcete zajistit odstranění oddílů, vyhněte se používání poddotazů ve filtrech, protože můžou kolidovat se schopností eliminovat oddíly. Místo toho předejte výsledek poddotazu jako proměnnou filtru.

Při použití hodnot JOIN v dotazech SQL deklarujte predikát filtru jako NVARCHAR, abyste snížili složitost plánu dotazu a zvýšili pravděpodobnost odstranění správných oddílů. Sloupce oddílů se obvykle odvozují jako NVARCHAR(1024), takže použití stejného typu pro predikát se vyhne nutnosti implicitního přetypování, které může zvýšit složitost plánu dotazu.

Dělené zobrazení Delta Lake

Pokud vytváříte dělené zobrazení nad úložištěm Delta Lake, můžete zadat jenom kořenovou složku Delta Lake a nemusíte explicitně zveřejňovat sloupce dělení pomocí FILEPATH funkce:

CREATE OR ALTER VIEW YellowTaxiView
AS SELECT *
FROM  
    OPENROWSET(
        BULK 'yellow',
        DATA_SOURCE = 'DeltaLakeStorage',
        FORMAT='DELTA'
    ) nyc

Funkce OPENROWSET prozkoumá strukturu podkladové složky Delta Lake a automaticky identifikuje a zveřejní sloupce dělení. Odstranění oddílu se provede automaticky, pokud vložíte sloupec dělení do WHERE klauzule dotazu.

Název složky ve OPENROWSET funkci (yellow v tomto příkladu), která je zřetězená s identifikátorem URI definovaným LOCATION ve DeltaLakeStorage zdroji dat, musí odkazovat na kořenovou složku Delta Lake, která obsahuje podsložku s názvem _delta_log.

Složka Yellow Taxi Delta Lake

Další informace najdete na stránce samoobslužné podpory pro bezserverový fond SQL Synapse a známé problémy Azure Synapse Analytics.

Zobrazení JSON

Zobrazení jsou dobrou volbou, pokud potřebujete provést nějaké další zpracování nad sadou výsledků, která se načítá ze souborů. Jedním z příkladů může být analýza souborů JSON, kde potřebujeme použít funkce JSON k extrahování hodnot z dokumentů 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')

Funkce OPENJSON analyzuje každý řádek ze souboru JSONL obsahujícího jeden dokument JSON na řádek v textovém formátu.

Zobrazení služby Azure Cosmos DB v kontejnerech

Zobrazení je možné vytvořit nad kontejnery Azure Cosmos DB, pokud je v kontejneru povolené analytické úložiště Azure Cosmos DB. Název účtu služby Azure Cosmos DB, název databáze a název kontejneru by se měly přidat jako součást zobrazení a přístupový klíč jen pro čtení by se měl umístit do přihlašovacích údajů s oborem databáze, na které toto zobrazení odkazuje.

CREATE DATABASE SCOPED CREDENTIAL MyCosmosDbAccountCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 's5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==';
GO
CREATE OR ALTER VIEW Ecdc
AS SELECT *
FROM OPENROWSET(
      PROVIDER = 'CosmosDB',
      CONNECTION = 'Account=synapselink-cosmosdb-sqlsample;Database=covid',
      OBJECT = 'Ecdc',
      CREDENTIAL = 'MyCosmosDbAccountCredential'
    ) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows

Další informace najdete v tématu Dotazování dat služby Azure Cosmos DB pomocí bezserverového fondu SQL v Azure Synapse Linku.

Použití zobrazení

Zobrazení můžete ve svých dotazech používat stejně jako zobrazení v SQL Server dotazech.

Následující dotaz ukazuje použití zobrazení population_csv , které jsme vytvořili v části Vytvoření zobrazení. Vrátí názvy zemí/oblastí s jejich počtem obyvatel v roce 2019 v sestupném pořadí.

Poznámka

Změňte první řádek dotazu, tj. [mydbname], abyste používali databázi, kterou jste vytvořili.

USE [mydbname];
GO

SELECT
    country_name, population
FROM populationView
WHERE
    [year] = 2019
ORDER BY
    [population] DESC;

Při dotazování zobrazení může dojít k chybám nebo neočekávaným výsledkům. To pravděpodobně znamená, že zobrazení odkazuje na sloupce nebo objekty, které byly změněny nebo již neexistují. Musíte ručně upravit definici zobrazení tak, aby odpovídala základním změnám schématu.

Další kroky

Informace o tom, jak dotazovat různé typy souborů, najdete v článcích Dotazování na jeden soubor CSV, Dotazování souborů Parquet a Dotazování souborů JSON .