Øvelse - Brug PolyBase til at forespørge en Parquet-fil
I denne øvelse gør du:
- Installer og aktivér PolyBase.
- Opret en database.
- Opret en databasehovednøgle for at sikre den databasebaserede legitimationsoplysninger.
- Opret en database-scoped credential for at få adgang til datakilden.
- Opret datakilden.
- Forespørg og manipulér data, der er lagret på den offentlige datakilde.
- Opret et eksternt filformat og en ekstern tabel.
Installer PolyBase
Du kan installere PolyBase med SQL Server-installationsfilen under den indledende opsætning, eller tilføje det som funktion senere. På siden Feature Selection i SQL Server setup.exevælg PolyBase Query Service for External Data.
PolyBase-tjenester kræver, at firewallporte er aktiveret for at kunne forbinde til eksterne datakilder. Som standard bruger PolyBase porte fra 16450 til 16460.
Konfiguration af PolyBase installerer to PolyBase-tjenester, SQL Server PolyBase Engine- og SQL Server PolyBase Data Movement. For fuldstændig information og forudsætninger for PolyBase-installation, se:
Aktiver PolyBase
Når du har installeret tjenesten, skal du oprette forbindelse til din SQL Server 2025-instans i SQL Server Management Studio (SSMS) og køre følgende kommando for at aktivere PolyBase.
EXEC SP_CONFIGURE @CONFIGNAME = N'POLYBASE ENABLED', @CONFIGVALUE = 1;
RECONFIGURE;
Bemærkning
I denne øvelse forespørger du Apache Parquet-filer ved at bruge PolyBase REST API'en, så du behøver ikke aktivere eller konfigurere SQL Server PolyBase Data Movement eller SQL Server PolyBase Engine-tjenesterne .
Opret en database
Kør følgende kommando i SSMS for at oprette en database til denne øvelse kaldet Demo1. Hvis databasen allerede er oprettet, dropper scriptet og genskaber den.
USE MASTER;
IF EXISTS (SELECT * FROM sys.databases WHERE [name] = N'Demo1')
BEGIN
ALTER DATABASE Demo1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE IF EXISTS Demo1
END;
CREATE DATABASE Demo1;
USE Demo1;
Opret databasens hovednøgle
Du skal oprette en databasehovednøgle for at sikre databaseafgrænset legitimationssikkerhed. Det følgende eksempel skaber nøglen med en tilfældigt genereret adgangskode, og en backup er nødvendig.
DECLARE @randomWord VARCHAR(64) = NEWID();
DECLARE @createMasterKey NVARCHAR(500) = N'
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE name = ''##MS_DatabaseMasterKey##'')
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ' + QUOTENAME(@randomWord, '''')
EXECUTE sp_executesql @createMasterKey;
SELECT * FROM sys.symmetric_keys;
For bedre at forstå og vedligeholde krypteringsnøgler i et produktionsmiljø, se:
Opret den database-scopede legitimation
Databasescoped-legitimationen er ansvarlig for at gemme de legitimationsoplysninger, datakilden bruger til at forbinde til endepunktet. Dette eksempel bruger et offentligt endpoint, så legitimationsoplysningerne behøver ikke en hemmelighed.
IF EXISTS (SELECT * FROM sys.database_scoped_credentials WHERE name = N'PublicCredential')
DROP DATABASE SCOPED CREDENTIAL PublicCredential;
CREATE DATABASE SCOPED CREDENTIAL PublicCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<KEY>'; -- This example doesn't need the SECRET because the data source is public
Oprette datakilden
Dette eksempel bruger et offentligt tilgængeligt COVID Parquet-datasæt, der er gemt i Azure Blob Storage. Du bruger den databasescope, PublicCredential du har oprettet, til at etablere forbindelsen.
LOKATIONSVÆRDIER:
- Præfiks:
abs - Azure Storage account:
pandemicdatalake - Azure Storage-konto fuld path:
pandemicdatalake.blob.core.windows.net - Beholdernavn:
public - Container fuld sti:
public/curated/covid-19/bing_covid-19_data/latest
IF EXISTS (SELECT * FROM sys.external_data_sources WHERE name = N'Public_Covid') DROP EXTERNAL DATA SOURCE Public_Covid;
CREATE EXTERNAL DATA SOURCE Public_Covid
WITH (
LOCATION = 'abs://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest',
CREDENTIAL = [PublicCredential]
);
- For en komplet liste over datakilder og tilsvarende præfikser, se OPRET EKSTERN DATAKILDE.
- For mere information om det offentlige datasæt, se Bing COVID-19.
Forespørg dataene med OPENROWSET
Du kan bruge OPENROWSET til at tilgå og udforske dataene. OPENROWSET er optimeret til ad hoc arbejdsbelastning og dataudforskningsscenarier.
OPENROWSET-værdier:
- BULK: Filnavn og filendelse. BULK tilføjes automatisk til datakildeinformationen, så den fulde filplacering er
abs://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet - FORMAT:
PARQUET - DATA_SOURCE: Forbindelsesinformation, i dette tilfælde din nye datakilde
Public_Covid
SELECT TOP 1000 *
FROM OPENROWSET
(BULK 'bing_covid-19_data.parquet'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 'Public_Covid')
AS [COVID_Dataset]
Det følgende eksempel bruger T-SQL-fleksibilitet til at forespørge Parquet-filen i realtid, ligesom en almindelig tabel. For at returnere antallet af bekræftede tilfælde pr. amerikansk stat i faldende rækkefølge, udfør følgende forespørgsel:
SELECT [COVID_Dataset].admin_region_1,
SUM(CAST([COVID_Dataset].confirmed AS BIGINT)) AS Confirmed
FROM OPENROWSET
(BULK 'bing_covid-19_data.parquet'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 'Public_Covid')
AS [COVID_Dataset]
WHERE [COVID_Dataset].country_region = 'United States' AND
[COVID_Dataset].admin_region_1 IS NOT NULL
GROUP BY [COVID_Dataset].admin_region_1
ORDER BY confirmed DESC
Opret og forespørg en ekstern tabel
OPENROWSET er optimeret til ad hoc-udførelse og dataudforskning. Eksterne tabeller egner sig bedre til gentagne adgangssystemer, fordi de også kan bruge statistik.
Opdag skemaet for den eksterne tabel
For at oprette en ekstern tabel skal du først bestemme kolonnerne og typen. Skemaet kommer fra en ekstern fil, så det kan være tidskrævende præcist at bestemme datatyper og -intervaller. Heldigvis kan du bruge den lagrede procedure sp_describe_first_result_set (Transact-SQL) til at fremskynde denne proces.
DECLARE @tsql NVARCHAR(MAX) = 'SELECT TOP 1000 *
FROM OPENROWSET
(BULK ''bing_covid-19_data.parquet''
, FORMAT = ''PARQUET''
, DATA_SOURCE = ''Public_Covid'')
AS [COVID_Dataset]';
EXEC sys.sp_describe_first_result_set @tsql;
Du kan se, at det sp_describe_first_result_set returnerede kolonnenavne, typer, længde, præcision og endda sammenstillingen af datakilden.
Opret det eksterne filformat
Fordi du skal referere Parquet-filen til den eksterne tabel, skal du først køre for at tilføje CREATE EXTERNAL FILE FORMAT Parquet-filformatet. Filformatdefinitionen er vigtig for eksterne tabeller, fordi den specificerer det faktiske layout og komprimeringstypen.
Kør følgende kommando:
IF EXISTS (SELECT * FROM sys.external_file_formats WHERE name = N'ParquetFileFormat')
DROP EXTERNAL FILE FORMAT ParquetFileFormat;
CREATE EXTERNAL FILE FORMAT ParquetFileFormat WITH(FORMAT_TYPE = PARQUET);
Opret den eksterne tabel
Endelig, med alle de oplysninger, du lige har erhvervet, og det eksterne filformat oprettet, kan du oprette den eksterne tabel ved at bruge følgende script:
IF EXISTS (SELECT * FROM sys.external_file_formats WHERE name = N'ParquetFileFormat')
DROP EXTERNAL FILE FORMAT ParquetFileFormat;
CREATE EXTERNAL FILE FORMAT ParquetFileFormat WITH(FORMAT_TYPE = PARQUET);
-- 8.3 CREATE EXTERNAL TABLE
IF OBJECT_ID(N'ext_covid_data', N'ET') IS NOT NULL
DROP EXTERNAL TABLE ext_covid_data;
CREATE EXTERNAL TABLE ext_covid_data
(
id int,
updated date,
confirmed int,
confirmed_change int,
deaths int,
deaths_change smallint,
recovered int,
recovered_change int,
latitude float,
longitude float,
iso2 varchar(8000),
iso3 varchar(8000),
country_region varchar(8000),
admin_region_1 varchar(8000),
iso_subdivision varchar(8000),
admin_region_2 varchar(8000),
load_time datetime2(7)
)
WITH
(
LOCATION = 'bing_covid-19_data.parquet'
, FILE_FORMAT = ParquetFileFormat
, DATA_SOURCE = Public_Covid
);
CREATE STATISTICS [Stats_ext_covid_data_updated] ON ext_covid_data([updated]);
SELECT TOP 1000 * FROM ext_covid_data;
Bemærkning
Kolonnenavnene skal matche de kolonner, der er gemt i Parquet-filen, ellers kan SQL Server ikke identificere kolonnerne og returnerene NULL.
Når du har oprettet den eksterne tabel ext_covid_data, kan du tilføje statistik på de opdaterede kolonner for effektivitet. For mere information om statistikker på eksterne tabeller, se CREATE STATISTICS (Transact-SQL).
I denne enhed brugte du PolyBase til at forbinde til en ekstern datakilde og brugte OPENROWSET eller en ekstern tabel til at forespørge Parquet-filen. I næste øvelse bruger du PolyBase-tjenester til at forbinde til og oprette en ekstern tabel fra en database i Azure SQL Database.