Delen via


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.

MAP ECDC COVID-19 Delta Lake

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 (yellowin 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.

Map Yellow Taxi Delta Lake

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.