Øvelse - Brug PolyBase til at forespørge en Parquet-fil

Fuldført

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.

Diagram over opsætningseksekverbaren for SQL Server, der viser PolyBase-muligheden.

PolyBase-tjenester kræver, at firewallporte er aktiveret for at kunne forbinde til eksterne datakilder. Som standard bruger PolyBase porte fra 16450 til 16460.

Diagram over opsætningsfilen for SQL Server, der viser konfigurationen af PolyBase-portområdet.

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;

Diagram over aktivering af PolyBase ved hjælp af T-SQL i SQL Server Management Studio.

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

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;

Diagram over skemaresultaterne fra den eksterne Parquet-datakilde i SQL Server Management Studio.

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.