Megosztás a következőn keresztül:


Parquet-fájl virtualizálása S3-kompatibilis objektumtárolóban a PolyBase használatával

A következőkre vonatkozik: SQL Server 2022 (16.x)

Az SQL Server 2022 (16.x) képes virtualizálni az adatokat a parquet-fájlokból. Ez a folyamat lehetővé teszi az adatok eredeti helyének megtartását, de lekérdezhetők egy T-SQL-parancsokkal rendelkező SQL Server-példányból, mint bármely más tábla. Ez a funkció PolyBase-összekötőket használ, és minimalizálja a kinyerési, átalakítási és betöltési (ETL-) folyamatok szükségességét.

Az alábbi példában egy S3-kompatibilis objektumtárolóban tárolt parquetfájlt virtualizálunk.

Az adatvirtualizálással kapcsolatos további információkért lásd: Adatok virtualizálása a PolyBase használatával.

Előfeltételek

Az S3-kompatibilis objektumtároló-integrációs funkciók használatához a következő eszközökre és erőforrásokra van szüksége:

  • Telepítse az SQL Server PolyBase szolgáltatását.
  • Telepítse az SQL Server Management Studio (SSMS) alkalmazást.
  • S3-kompatibilis tároló.
  • Létrehozva egy S3 tároló. A tárolók nem hozhatók létre vagy konfigurálhatók az SQL Serverből.
  • A felhasználó (Access Key ID) és a titkos kód (Secret Key ID) és a felhasználó ismert Az Ön számára. Mindkettőtöknek hitelesítenie kell az S3 objektumtár-végpontnál.
  • Az ListBucket engedély S3-felhasználóra vonatkozóan.
  • ReadOnly engedélyt az S3-felhasználónak.
  • A TLS-t konfigurálni kell. Feltételezzük, hogy az összes kapcsolat biztonságosan lesz továbbítva HTTPS-en keresztül, nem HTTP-en keresztül. A végpontot az SQL Server operációsrendszer-gazdagépre telepített tanúsítvány ellenőrzi.

Engedély

Ahhoz, hogy a proxyfelhasználó felolvassa egy S3-gyűjtő tartalmát, a felhasználónak engedélyeznie kell a következő műveleteket az S3-végponton:

  • ListBucket;
  • ReadOnly;

Előkonfiguráció

  1. A PolyBase engedélyezése a sp_configure:
exec sp_configure @configname = 'polybase enabled', @configvalue = 1
;
RECONFIGURE
;
exec sp_configure @configname = 'polybase enabled'
;
  1. Az adatbázis hatókörébe tartozó hitelesítő adatok létrehozása előtt a felhasználói adatbázisnak rendelkeznie kell egy fő kulccsal a hitelesítő adatok védelméhez. További információ: CREATE MASTER KEY.

Adatbázis-hatókörű hitelesítő adatok létrehozása

Az alábbi példaszkript adatbázis-hatókörű hitelesítő adatokat s3-dc hoz létre az SQL Server forrásfelhasználói adatbázisában. További információ: 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

Ellenőrizze az új adatbázis-hatókörű hitelesítő adatokat sys.database_scoped_credentials (Transact-SQL):

SELECT * FROM sys.database_scoped_credentials;

Külső adatforrás létrehozása

Az alábbi példaszkript létrehoz egy külső adatforrást s3_ds az SQL Server forrásfelhasználói adatbázisában. A külső adatforrás a s3_dc adatbázis hatókörébe tartozó hitelesítő adatokra hivatkozik. További információ: KÜLSŐ ADATFORRÁS LÉTREHOZÁSA.

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

Ellenőrizze az új külső adatforrást sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

Virtuálisan üzemeltetett URL-címek

Egyes S3-kompatibilis tárolórendszerek (például az Amazon Web Services) virtual_hosted stílusú URL-címeket használnak a mappastruktúra S3-gyűjtőben való implementálásához. Adja hozzá a következő CONNECTION_OPTIONS, hogy lehetővé tegye az S3 gyűjtőben lévő mappahelyekre mutató külső táblák létrehozását, például CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.

E CONNECTION_OPTIONS beállítás nélkül, ha egy mappára mutató külső táblákat kérdez le, a következő hibát tapasztalhatja:

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

SELECT egy parquet-fájlból az OPENROWSET használatával

Az alábbi példa bemutatja, hogy a T-SQL használatával lekérdezhető egy S3-kompatibilis objektumtárolóban tárolt parquet fájl OPENROWSET-lekérdezésen keresztül. További információ: OPENROWSET (Transact-SQL).

Mivel ez egy parquet fájl, két fontos dolog történik automatikusan:

  1. Az SQL Server magától a fájlból olvassa be a sémát, így nincs szükség a tábla, oszlopok vagy adattípusok definiálására.
  2. Nem szükséges deklarálni a fájl olvasásához szükséges tömörítés típusát.
SELECT  * 
FROM    OPENROWSET
        (   BULK '/<bucket>/<parquet_folder>'
        ,   FORMAT       = 'PARQUET'
        ,   DATA_SOURCE  = 's3_ds'
        ) AS [cc];

S3-kompatibilis objektumtároló lekérdezése külső táblán keresztül

Az alábbi példa bemutatja, hogy a T-SQL használatával lekérdezhető egy S3-kompatibilis objektumtárolóban tárolt parquet fájl külső tábla lekérdezésével. A minta egy relatív elérési utat használ a külső adatforráson belül.

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

További információkért lásd:

Korlátozások

  1. Az S3-kompatibilis tárolóval támogatott külső táblán futó SQL Server-lekérdezések előtagonként 1000 objektumra korlátozódnak. Ennek az az oka, hogy az S3-kompatibilis objektumok listája előtagonként 1000 objektumkulcsra korlátozódik.
  2. Az S3-kompatibilis objektumtárolók esetében az ügyfelek nem hozhatják létre a hozzáférési kulcs azonosítóját egy : karakterrel.
  3. A teljes URL-cím hossza legfeljebb 259 karakter lehet. Ez azt jelenti, hogy s3://<hostname>/<objectkey> nem haladhatja meg a 259 karaktert. A s3:// beleszámít ebbe a korlátba, így az elérési út hossza nem haladhatja meg a 259-5 = 254 karaktert.
  4. Az SQL-hitelesítő adatok neve 128 karakterből áll UTF-16 formátumban.
  5. A létrehozott hitelesítőadat-névnek tartalmaznia kell a gyűjtő nevét, kivéve, ha ez a hitelesítő adat egy új külső adatforráshoz tartozik.
  6. A hozzáférési kulcs azonosítója és a titkos kulcs azonosítója csak alfanumerikus értékeket tartalmazhat.

Következő lépések