Övning – Använda PolyBase för att fråga en Parquet-fil
I den här övningen:
- Installera och aktivera PolyBase.
- Skapa en databas.
- Skapa en databashuvudnyckel för att skydda databasens begränsade autentiseringsuppgifter.
- Skapa en databasomfattande autentiseringsuppgift för åtkomst till datakällan.
- Skapa datakällan.
- Fråga efter och ändra data som lagras på den offentliga datakällan.
- Skapa ett externt filformat och en extern tabell.
Installera PolyBase
Du kan installera PolyBase med sql Server-installationen körbar under den inledande installationen eller lägga till den som en funktion senare. På sidan Funktionsval i SQL Server setup.exeväljer du PolyBase Query Service för externa data.
PolyBase-tjänster kräver att brandväggsportar aktiveras för att ansluta till externa datakällor. PolyBase använder som standard portar från 16450 till 16460.
PolyBase-installationen installerar två PolyBase-tjänster, SQL Server PolyBase Engine och SQL Server PolyBase Data Movement. Fullständig information och förutsättningar för PolyBase-installation finns i:
Aktivera PolyBase
När du har installerat tjänsten ansluter du till SQL Server 2025-instansen i SQL Server Management Studio (SSMS) och kör följande kommando för att aktivera PolyBase.
EXEC SP_CONFIGURE @CONFIGNAME = N'POLYBASE ENABLED', @CONFIGVALUE = 1;
RECONFIGURE;
Notera
I den här övningen kör du frågor mot Apache Parquet-filer med hjälp av PolyBase REST API, så du behöver inte aktivera eller konfigurera SQL Server PolyBase Data Movement - eller SQL Server PolyBase Engine-tjänsterna .
Skapa en databas
Kör följande kommando i SSMS för att skapa en databas för den här övningen med namnet Demo1. Om databasen redan har skapats släpper skriptet och återskapar 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;
Skapa databasens huvudnyckel
Du måste skapa en databashuvudnyckel för att säkerställa säkerheten för databasomfattningen för autentiseringsuppgifter. I följande exempel skapas nyckeln med ett slumpmässigt genererat lösenord och en säkerhetskopia krävs.
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;
Mer information om och underhåll av krypteringsnycklar i en produktionsmiljö finns i:
Skapa en databasavgränsad behörighet
De databasbegränsade autentiseringsuppgifterna ansvarar för att förvara de behörigheter som datakällan använder för att ansluta till slutpunkten. I det här exemplet används en offentlig slutpunkt, så autentiseringsuppgifterna behöver ingen hemlighet.
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
Skapa datakällan
I det här exemplet används en offentligt tillgänglig COVID Parquet-datauppsättning som lagras i Azure Blob Storage. Du använder den databasomfattade PublicCredential du skapade för att upprätta anslutningen.
PLATSvärden:
- Prefix:
abs - Azure Storage-konto:
pandemicdatalake - Fullständig sökväg för Azure Storage-konto:
pandemicdatalake.blob.core.windows.net - Containernamn:
public - Fullständig sökväg för container:
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]
);
- En fullständig lista över datakällor och motsvarande prefix finns i SKAPA EXTERN DATAKÄLLA.
- Mer information om den offentliga datamängden finns i Bing COVID-19 .
Fråga data med OPENROWSET
Du kan använda OPENROWSET för att komma åt och utforska data. OPENROWSET är optimerat för scenarier för ad hoc-arbetsbelastning och datautforskning.
OPENROWSET-värden:
- BULK: Filnamn och filnamnstillägg. BULK lägger automatiskt till datakällans information, så den fullständiga filplatsen är
abs://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet - FORMAT:
PARQUET - DATA_SOURCE: Anslutningsinformation, i det här fallet din nya datakälla
Public_Covid
SELECT TOP 1000 *
FROM OPENROWSET
(BULK 'bing_covid-19_data.parquet'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 'Public_Covid')
AS [COVID_Dataset]
I följande exempel används T-SQL-flexibilitet för att köra frågor mot Parquet-filen i realtid, precis som en vanlig tabell. Utför följande frågesats för att returnera antalet bekräftade fall per delstat i USA i fallande ordning:
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
Skapa och fråga en extern tabell
OPENROWSET är optimerat för ad hoc-körning och datautforskning. Externa tabeller passar bättre för återkommande åtkomst, eftersom de också kan använda statistik.
Identifiera schemat för den externa tabellen
Om du vill skapa en extern tabell måste du först fastställa kolumnerna och typen. Schemat kommer från en extern fil, så det kan vara tidskrävande att exakt fastställa datatyper och intervall. Som tur är kan du använda den lagrade proceduren sp_describe_first_result_set (Transact-SQL) för att påskynda den här processen.
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 att sp_describe_first_result_set returnerade kolumnnamn, typer, längd, precision och till och med sortering av datakällan.
Skapa det externa filformatet
Eftersom du måste referera till Parquet-filen till den externa tabellen måste du först köra CREATE EXTERNAL FILE FORMAT för att lägga till Parquet-filformatet. Filformatsdefinitionen är viktig för externa tabeller eftersom den anger den faktiska layout- och komprimeringstypen.
Kör följande 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);
Skapa den externa tabellen
Slutligen kan du skapa den externa tabellen med all information som du precis har hämtat och det externa filformatet som skapats med hjälp av följande skript:
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;
Notera
Kolumnnamnen måste matcha de kolumner som lagras i Parquet-filen, eller så kan SQL Server inte identifiera kolumnerna och returnerar NULL.
När du har skapat den externa tabellen ext_covid_datakan du lägga till statistik för de uppdaterade kolumnerna för effektivitet. Mer information om statistik i extern tabell finns i CREATE STATISTICS (Transact-SQL).
I den här lektionen använde du PolyBase för att ansluta till en extern datakälla och använde OPENROWSET eller en extern tabell för att fråga Parquet-filen. I nästa övning använder du PolyBase-tjänster för att ansluta till och skapa en extern tabell från en databas i Azure SQL Database.