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.
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 (yellow
ebben 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_log
almappát tartalmaz.
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.