Megosztás a következőn keresztül:


Nézetek létrehozása és használata kiszolgáló nélküli SQL-készlet használatával az Azure Synapse Analyticsben

Ebben a szakaszban megtudhatja, hogyan hozhat létre és használhat nézeteket a kiszolgáló nélküli SQL-készlet lekérdezéseinek körbefuttatásához. A nézetek lehetővé teszik a lekérdezések újbóli felhasználását. A nézetekre akkor is szükség van, ha olyan eszközöket szeretne használni, mint a Power BI, a kiszolgáló nélküli SQL-készlettel együtt.

Előfeltételek

Első lépésként hozzon létre egy adatbázist, amelyben létrejön a nézet, és inicializálja az Azure Storage-ban való hitelesítéshez szükséges objektumokat a beállítási szkript ezen az adatbázison való végrehajtásával. A cikk összes lekérdezése a mintaadatbázison lesz végrehajtva.

Külső adatok nézetei

A nézeteket ugyanúgy hozhatja létre, mint a normál SQL Server nézeteket. Az alábbi lekérdezés population.csvfájlt beolvasó nézetet hoz létre.

Megjegyzés

Módosítsa a lekérdezés első sorát, azaz [mydbname], így a létrehozott adatbázist használja.

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

A nézet a EXTERNAL DATA SOURCE tár gyökér URL-címét használja, és DATA_SOURCE relatív fájlelérési útvonalat ad hozzá a fájlokhoz.

Delta Lake-nézetek

Ha a Delta Lake-mappa tetején hozza létre a nézeteket, a fájl elérési útjának megadása helyett a beállítás után BULK meg kell adnia a gyökérmappa helyét.

ECDC COVID-19 Delta Lake mappa

A OPENROWSET Delta Lake mappából adatokat beolvasó függvény megvizsgálja a mappastruktúrát, és automatikusan azonosítja a fájlhelyeket.

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

További információért tekintse át a Synapse kiszolgáló nélküli SQL-készlet önsegítő oldalát, és Azure Synapse Analytics ismert problémáit.

Particionált nézetek

Ha olyan fájlkészlettel rendelkezik, amely a hierarchikus mappastruktúrában van particionálva, a partíciómintát a fájl elérési útja helyettesítő karakterekkel írhatja le. FILEPATH A függvénnyel particionálási oszlopokként teheti közzé a mappa elérési útjának egyes részeit.

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

A particionált nézetek javíthatják a lekérdezések teljesítményét a partíciók eltávolításával, amikor a particionálási oszlopok szűrőivel kérdezi le őket. Azonban nem minden lekérdezés támogatja a partíciók eltávolítását, ezért fontos, hogy kövessen néhány ajánlott eljárást.

A partíciók eltávolításának biztosítása érdekében kerülje az albekérdezések használatát a szűrőkben, mivel zavarhatják a partíciók eltávolításának képességét. Ehelyett adja át az al lekérdezés eredményét változóként a szűrőnek.

HA JOIN-eket használ SQL-lekérdezésekben, deklarálja a szűrő predikátumot NVARCHAR-ként, hogy csökkentse a lekérdezési terv összetettségét, és növelje a megfelelő partícióelivétel valószínűségét. A partícióoszlopok általában NVARCHAR(1024) értékre vannak kikövetkeztetve, így ha ugyanazt a típust használja a predikátumhoz, elkerülhető az implicit leadás szükségessége, ami növelheti a lekérdezésterv összetettségét.

Delta Lake particionált nézetek

Ha a Delta Lake Storage tetején hozza létre a particionált nézeteket, csak egy gyökérSzintű Delta Lake-mappát adhat meg, és nem kell explicit módon elérhetővé tennie a particionálási oszlopokat a FILEPATH függvény használatával:

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

A OPENROWSET függvény megvizsgálja a mögöttes Delta Lake-mappa szerkezetét, és automatikusan azonosítja és elérhetővé teszi a particionálási oszlopokat. A partíció eltávolítása automatikusan megtörténik, ha a particionálási oszlopot egy WHERE lekérdezés záradékába helyezi.

A függvényben (yellowebben a OPENROWSET példában) az adatforrásban DeltaLakeStorage definiált URI-val LOCATION összefűzött mappanévnek a delta lake gyökérmappára kell hivatkoznia, amely egy nevű _delta_logalmappát tartalmaz.

Sárga Taxi Delta Lake mappa

További információért tekintse át a Synapse kiszolgáló nélküli SQL-készlet önsegítő oldalát, és Azure Synapse Analytics ismert problémáit.

JSON-nézetek

A nézetek akkor jó választás, ha további feldolgozást kell végeznie a fájlokból lekért eredményhalmazon felül. Ilyen lehet például a JSON-fájlok elemzése, ahol a JSON-függvényeket kell alkalmaznunk az értékek JSON-dokumentumokból való kinyeréséhez:

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')

A OPENJSON függvény soronként egy JSON-dokumentumot tartalmazó JSONL-fájl minden sorát szöveges formátumban elemzi.

Azure Cosmos DB-nézetek tárolókon

A nézetek az Azure Cosmos DB-tárolók tetején hozhatók létre, ha az Azure Cosmos DB elemzési tár engedélyezve van a tárolón. A nézet részeként hozzá kell adni az Azure Cosmos DB-fiók nevét, adatbázisnevét és tárolónevét, és az írásvédett hozzáférési kulcsot az adatbázis hatókörébe kell helyezni, amelyre a nézet hivatkozik.

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

További információ: Azure Cosmos DB-adatok lekérdezése kiszolgáló nélküli SQL-készlettel a Azure Synapse Linkben.

Nézet használata

A lekérdezésekben ugyanúgy használhat nézeteket, mint SQL Server lekérdezésekben.

Az alábbi lekérdezés a Nézet létrehozása szakaszban létrehozott population_csv nézet használatát mutatja be. 2019-ben csökkenő sorrendben adja vissza az ország-/régióneveket a lakossággal együtt.

Megjegyzés

Módosítsa a lekérdezés első sorát, azaz [mydbname], így a létrehozott adatbázist használja.

USE [mydbname];
GO

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

Amikor lekérdezi a nézetet, hibákat vagy váratlan eredményeket tapasztalhat. Ez valószínűleg azt jelenti, hogy a nézet olyan oszlopokra vagy objektumokra hivatkozik, amelyek módosultak vagy már nem léteznek. Manuálisan kell módosítania a nézetdefiníciót, hogy igazodjon az alapul szolgáló sémamódosításokhoz.

Következő lépések

A különböző fájltípusok lekérdezéséről az Egy CSV-fájl lekérdezése, a Lekérdezés parquet-fájlok és a JSON-fájlok lekérdezése című cikkben talál további információt.