Weergaven maken en gebruiken met behulp van een serverloze SQL-pool in Azure Synapse Analytics
In deze sectie leert u hoe u weergaven kunt maken en gebruiken in om query's voor serverloze SQL-pools te verpakken. Weergaven stellen u in staat deze query's opnieuw te gebruiken. Weergaven zijn ook nodig als u hulpprogramma’s, zoals Power BI, wilt gebruiken samen met een serverloze SQL-pool.
Vereisten
De eerste stap bestaat uit het maken van een database waar de weergave wordt gemaakt, en het initialiseren van de objecten die nodig zijn voor verificatie in Azure Storage door setup script uit te voeren voor deze database. Alle query's in dit artikel worden uitgevoerd op uw voorbeelddatabase.
Weergaven van externe gegevens
U kunt weergaven op dezelfde manier maken als normale SQL Server-weergaven. Met de volgende query wordt een weergave gemaakt die het population.csv-bestand leest.
Notitie
Wijzig de eerste regel in de query, d.w.z. [mydbname], zodat u de database gebruikt die u hebt gemaakt.
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];
De weergave gebruikt een EXTERNAL DATA SOURCE
met een hoofd-URL van uw opslag als een DATA_SOURCE
en voegt een relatief bestandspad toe aan de bestanden.
Uitzicht op Delta Lake
Als u de weergaven boven op de Delta Lake-map maakt, moet u na de BULK
optie de locatie van de hoofdmap opgeven in plaats van het bestandspad op te geven.
De OPENROWSET
functie die gegevens uit de Delta Lake-map leest, onderzoekt de mapstructuur en identificeert automatisch de bestandslocaties.
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
Raadpleeg de pagina met zelfhulp voor serverloze SQL-pool in Synapse en Azure Synapse Bekende problemen met Analytics voor meer informatie.
Gepartitioneerde weergaven
Als u een set bestanden hebt die is gepartitioneerd in de hiërarchische mapstructuur, kunt u het partitiepatroon beschrijven met behulp van de jokertekens in het bestandspad. Gebruik de FILEPATH
functie om delen van het mappad weer te geven als partitioneringskolommen.
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
Gepartitioneerde weergaven kunnen de prestaties van uw query's verbeteren door partitieverwijdering uit te voeren wanneer u er een query op uitvoert met filters op de partitioneringskolommen. Niet alle query's bieden echter ondersteuning voor het elimineren van partities, dus het is belangrijk om enkele aanbevolen procedures te volgen.
Vermijd het gebruik van subquery's in filters om partities te verwijderen, omdat deze de mogelijkheid om partities te verwijderen kunnen verstoren. Geef in plaats daarvan het resultaat van de subquery door als een variabele aan het filter.
Wanneer u JOIN's gebruikt in SQL-query's, declareert u het filterpredicaat als NVARCHAR om de complexiteit van het queryplan te verminderen en de kans op de juiste partitieverwijdering te vergroten. Partitiekolommen worden meestal afgeleid als NVARCHAR(1024), dus het gebruik van hetzelfde type voor het predicaat voorkomt de noodzaak van een impliciete cast, waardoor de complexiteit van het queryplan kan toenemen.
Gepartitioneerde weergaven van Delta Lake
Als u de gepartitioneerde weergaven boven op Delta Lake-opslag maakt, kunt u alleen een Delta Lake-hoofdmap opgeven en hoeft u de partitioneringskolommen niet expliciet beschikbaar te maken met behulp van de FILEPATH
functie:
CREATE OR ALTER VIEW YellowTaxiView
AS SELECT *
FROM
OPENROWSET(
BULK 'yellow',
DATA_SOURCE = 'DeltaLakeStorage',
FORMAT='DELTA'
) nyc
Met de OPENROWSET
functie wordt de structuur van de onderliggende Delta Lake-map onderzocht en worden de partitioneringskolommen automatisch geïdentificeerd en weergegeven. De partitieverwijdering wordt automatisch uitgevoerd als u de partitioneringskolom in de WHERE
component van een query plaatst.
De mapnaam in de OPENROWSET
functie (yellow
in dit voorbeeld) die is samengevoegd met de URI die is gedefinieerd in DeltaLakeStorage
de LOCATION
gegevensbron, moet verwijzen naar de hoofdmap van Delta Lake die een submap bevat met de naam _delta_log
.
Raadpleeg de pagina met zelfhulp voor serverloze SQL-pool in Synapse en Azure Synapse Bekende problemen met Analytics voor meer informatie.
JSON-weergaven
De weergaven zijn de goede keuze als u extra verwerking moet uitvoeren boven op de resultatenset die wordt opgehaald uit de bestanden. Een voorbeeld is het parseren van JSON-bestanden waarbij we de JSON-functies moeten toepassen om de waarden uit de JSON-documenten te extraheren:
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')
De OPENJSON
functie parseert elke regel uit het JSONL-bestand met één JSON-document per regel in tekstindeling.
Azure Cosmos DB-weergaven in containers
De weergaven kunnen worden gemaakt boven op de Azure Cosmos DB-containers als de analytische opslag van Azure Cosmos DB is ingeschakeld voor de container. De naam van het Azure Cosmos DB-account, de databasenaam en de containernaam moeten worden toegevoegd als onderdeel van de weergave en de alleen-lezen toegangssleutel moet worden geplaatst in de referentie van het databasebereik waarnaar in de weergave wordt verwezen.
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
Zie Query's uitvoeren op Azure Cosmos DB-gegevens met een serverloze SQL-pool in Azure Synapse Link voor meer informatie.
Een weergave gebruiken
U kunt weergaven in uw query's op dezelfde manier gebruiken als u weergaven in SQL Server-query's gebruikt.
Met de volgende query demonstreert het gebruik van de weergave population_csv die we hebben gemaakt bij Een weergave maken. Deze tabel retourneert de namen van landen/regio's met hun populatie in 2019 in aflopende volgorde.
Notitie
Wijzig de eerste regel in de query, d.w.z. [mydbname], zodat u de database gebruikt die u hebt gemaakt.
USE [mydbname];
GO
SELECT
country_name, population
FROM populationView
WHERE
[year] = 2019
ORDER BY
[population] DESC;
Wanneer u een query uitvoert op de weergave, kunnen er fouten of onverwachte resultaten optreden. Dit betekent waarschijnlijk dat de weergave verwijst naar kolommen of objecten die zijn gewijzigd of niet meer bestaan. U moet de weergavedefinitie handmatig aanpassen om af te stemmen op de onderliggende schemawijzigingen.
Volgende stappen
Raadpleeg voor informatie over het uitvoeren van een query op verschillende bestandstypen de artikelen Query's uitvoeren op één CSV-bestand, Query uitvoeren op Parquet-bestandenen Query's uitvoeren op JSON-bestanden.