Dela via


Virtualisera parquet-fil i en S3-kompatibel objektlagring med PolyBase

Gäller för: SQL Server 2022 (16.x)

SQL Server 2022 (16.x) kan virtualisera data från "parquet"-filer. Den här processen gör att data kan stanna kvar på sin ursprungliga plats, men kan efterfrågas från en SQL Server-instans med T-SQL-kommandon, precis som andra tabeller. Den här funktionen använder PolyBase-anslutningskomponenter och minskar behovet av extrahering, transformering och inläsning (ETL-processer).

I följande exempel virtualiserar vi en parquet-fil som lagras på S3-kompatibel objektlagring.

Mer information om datavirtualisering finns i Introduktion till datavirtualisering med PolyBase.

Förutsättningar

Om du vill använda de S3-kompatibla objektlagringsintegreringsfunktionerna behöver du följande verktyg och resurser:

  • Installera PolyBase-funktionen för SQL Server.
  • Installera SQL Server Management Studio (SSMS).
  • S3-kompatibel lagring.
  • En S3-bucket har skapats. Bucketar kan inte skapas eller konfigureras från SQL Server.
  • En användare (Access Key ID) och hemligheten (Secret Key ID) och den användaren är känd för dig. Du behöver båda för att autentisera mot S3-objektlagringsslutpunkten.
  • ListBucket-behörighet för S3-användare.
  • ReadOnly-behörighet för S3-användare.
  • TLS måste ha konfigurerats. Det förutsätts att alla anslutningar överförs säkert via HTTPS, inte HTTP. Slutpunkten verifieras av ett certifikat som är installerat på operativsystemets värd för SQL Server.

Tillåtelse

För att proxyanvändaren ska kunna läsa innehållet i en S3-bucket måste användaren tillåtas utföra följande åtgärder mot S3-slutpunkten:

  • ListBucket;
  • ReadOnly;

Förkonfiguration

  1. Aktivera PolyBase i sp_configure:
exec sp_configure @configname = 'polybase enabled', @configvalue = 1
;
RECONFIGURE
;
exec sp_configure @configname = 'polybase enabled'
;
  1. Innan du skapar en databasomfattande autentiseringsuppgift måste användardatabasen ha en huvudnyckel för att skydda autentiseringsuppgifterna. Mer information finns i CREATE MASTER KEY.

Skapa en databasomfattande autentiseringsuppgift

Följande exempelskript skapar en databasomfattande autentiseringsuppgift s3-dc i källanvändardatabasen i SQL Server. Mer information finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

IF NOT EXISTS(SELECT * FROM sys.credentials WHERE name = 's3_dc')
BEGIN
 CREATE DATABASE SCOPED CREDENTIAL s3_dc
 WITH IDENTITY = 'S3 Access Key',
 SECRET = '<AccessKeyID>:<SecretKeyID>' ;
END

Kontrollera den nya databasomfattande autentiseringsuppgiften med sys.database_scoped_credentials (Transact-SQL):

SELECT * FROM sys.database_scoped_credentials;

Skapa en extern datakälla

Följande exempelskript skapar en extern datakälla s3_ds i källanvändardatabasen i SQL Server. Den externa datakällan refererar till s3_dc databasomfattande autentiseringsuppgifter. Mer information finns i CREATE EXTERNAL DATA SOURCE.

CREATE EXTERNAL DATA SOURCE s3_ds
WITH
(   LOCATION = 's3://<ip_address>:<port>/'
,   CREDENTIAL = s3_dc
);
GO

Verifiera den nya externa datakällan med sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

Virtuella värdbaserade URL:er

Vissa S3-kompatibla lagringssystem (till exempel Amazon Web Services) använder url:er i virtual_hosted format för att implementera mappstrukturen i S3-bucketen. Lägg till följande CONNECTION_OPTIONS för att skapa externa tabeller som pekar på mappplatser i S3-bucketen, till exempel CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.

Utan den CONNECTION_OPTIONS inställningen kan följande fel uppstå när du frågar efter externa tabeller som pekar på en mapp:

Msg 13807, Level 16, State 1, Line 23  
Content of directory on path '/<folder_name>/' cannot be listed. 

VÄLJ från en parquet-fil med OPENROWSET

I följande exempel visas hur du använder T-SQL för att fråga en parquet-fil som lagras i S3-kompatibel objektlagring via en OPENROWSET-fråga. Mer information finns i OPENROWSET (Transact-SQL).

Eftersom det här är en parquetfil händer två viktiga saker automatiskt:

  1. SQL Server läser schemat från själva filen, så du behöver inte definiera tabellen, kolumnerna eller datatyperna.
  2. Du behöver inte deklarera typen av komprimering för att filen ska läsas.
SELECT  * 
FROM    OPENROWSET
        (   BULK '/<bucket>/<parquet_folder>'
        ,   FORMAT       = 'PARQUET'
        ,   DATA_SOURCE  = 's3_ds'
        ) AS [cc];

Anropa S3-kompatibel objektlagringstjänst via extern tabell

I följande exempel visas hur du använder T-SQL för att ställa frågor mot en parquet-fil, som lagras i S3-kompatibel objektlagring, genom att fråga en extern tabell. Exemplet använder en relativ sökväg i den externa datakällan.

CREATE EXTERNAL FILE FORMAT ParquetFileFormat WITH(FORMAT_TYPE = PARQUET);
GO

CREATE EXTERNAL TABLE Region (
r_regionkey BIGINT,
r_name CHAR(25),
r_comment VARCHAR(152) )
WITH (LOCATION = '/region/', DATA_SOURCE = 's3_ds', 
FILE_FORMAT = ParquetFileFormat);
GO

SELECT * FROM [Region];

Mer information finns i:

Begränsningar

  1. SQL Server-frågor i en extern tabell som backas upp av S3-kompatibel lagring är begränsade till 1 000 objekt per prefix. Det beror på att S3-kompatibel objektlista är begränsad till 1 000 objektnycklar per prefix.
  2. För S3-kompatibel objektlagring får kunderna inte skapa sitt åtkomstnyckel-ID med ett : tecken i det.
  3. Den totala URL-längden är begränsad till 259 tecken. Det innebär att s3://<hostname>/<objectkey> inte får överstiga 259 tecken. Antalet s3:// räknas med mot den här gränsen, vilket innebär att sökvägslängden inte får överstiga 259–5 = 254 tecken.
  4. SQL-autentiseringsuppgifternas namn begränsas av 128 tecken i UTF-16-format.
  5. Namnet på autentiseringsuppgifterna som skapas måste innehålla bucketnamnet om inte den här autentiseringsuppgiften är för en ny extern datakälla.
  6. Åtkomstnyckel-ID och hemligt nyckel-ID får endast innehålla alfanumeriska värden.

Nästa steg