Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op: SQL Server 2022 (16.x)
SQL Server 2022 (16.x) kan gegevens uit Parquet-bestanden virtualiseren. Met dit proces kunnen de gegevens op de oorspronkelijke locatie blijven, maar kunnen ze worden opgevraagd vanuit een SQL Server-exemplaar met T-SQL-opdrachten, net als elke andere tabel. Deze functie maakt gebruik van PolyBase-connectors en minimaliseert de noodzaak voor ETL-processen (extract, transform and load).
In het volgende voorbeeld virtualiseren we een Parquet-bestand dat is opgeslagen op S3-compatibele objectopslag.
Zie Inleiding tot gegevensvirtualisatie met PolyBase voor meer informatie over gegevensvirtualisatie.
Vereiste voorwaarden
Als u de S3-compatibele functies voor objectopslagintegratie wilt gebruiken, hebt u de volgende hulpprogramma's en resources nodig:
- Installeer de PolyBase-functie voor SQL Server.
- Installeer SQL Server Management Studio (SSMS).
- S3-compatibele opslag.
- Er is een S3-bucket gemaakt. Buckets kunnen niet worden gemaakt of geconfigureerd vanuit SQL Server.
- Een gebruiker (
Access Key ID) en het geheim (Secret Key ID) en die gebruiker is bij u bekend. U moet beide authenticeren bij het eindpunt voor S3-objectopslag. - ListBucket-machtiging voor S3-gebruiker.
- Alleen-lezen machtiging voor S3-gebruiker .
- TLS moet zijn geconfigureerd. Er wordt vanuit gegaan dat alle verbindingen veilig via HTTPS worden verzonden, niet via HTTP. Het eindpunt wordt gevalideerd door een certificaat dat is geïnstalleerd op de SQL Server-besturingssysteemhost.
Toestemming
Als de proxygebruiker de inhoud van een S3-bucket wil lezen, moet de gebruiker de volgende acties mogen uitvoeren op het S3-eindpunt:
- ListBucket;
- ReadOnly;
Configuratie vooraf
- PolyBase inschakelen in
sp_configure:
exec sp_configure @configname = 'polybase enabled', @configvalue = 1
;
RECONFIGURE
;
exec sp_configure @configname = 'polybase enabled'
;
- Voordat u een database-scope referentie maakt, moet de gebruikersdatabase een hoofdcode hebben om de referentie te beschermen. Zie CREATE MASTER KEYvoor meer informatie.
Een databasebereikreferentie maken
Met het volgende voorbeeldscript wordt een database-omvangcredential s3-dc aangemaakt in de brongebruikersdatabase van SQL Server. Zie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) voor meer informatie.
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
Controleer de nieuwe referentie binnen het databasebereik met sys.database_scoped_credentials (Transact-SQL):
SELECT * FROM sys.database_scoped_credentials;
Een externe gegevensbron maken
Met het volgende voorbeeldscript maakt u een externe gegevensbron s3_ds in de brongebruikersdatabase in SQL Server. De externe gegevensbron verwijst naar de gegevensreferentie van het s3_dc databasebereik. Zie CREATE EXTERNAL DATA SOURCEvoor meer informatie.
CREATE EXTERNAL DATA SOURCE s3_ds
WITH
( LOCATION = 's3://<ip_address>:<port>/'
, CREDENTIAL = s3_dc
);
GO
Controleer de nieuwe externe gegevensbron met sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
Virtueel gehoste URLs
Sommige S3-compatibele opslagsystemen (zoals Amazon Web Services) maken gebruik van virtual_hosted stijl-URL's om mapstructuur in de S3-bucket te implementeren. Voeg de volgende CONNECTION_OPTIONS toe voor de creatie van externe tabellen die wijzen naar maplocaties in de S3-bucket, bijvoorbeeld CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.
Zonder dat CONNECTION_OPTIONS instelling ziet u mogelijk de volgende fout bij het uitvoeren van query's op externe tabellen die naar een map verwijzen:
Msg 13807, Level 16, State 1, Line 23
Content of directory on path '/<folder_name>/' cannot be listed.
SELECT uit een Parquet-bestand met behulp van OPENROWSET
In het volgende voorbeeld ziet u hoe u met T-SQL een query uitvoert op een Parquet-bestand dat is opgeslagen in S3-compatibele objectopslag via openROWSET-query. Zie OPENROWSET (Transact-SQL) voor meer informatie.
Omdat dit een Parquet-bestand is, gebeuren er automatisch twee belangrijke dingen:
- SQL Server leest het schema uit het bestand zelf, dus u hoeft de tabel, kolommen of gegevenstypen niet te definiëren.
- Het is niet nodig om het type compressie op te geven voor het bestand dat moet worden gelezen.
SELECT *
FROM OPENROWSET
( BULK '/<bucket>/<parquet_folder>'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 's3_ds'
) AS [cc];
Query's uitvoeren op S3-compatibele objectopslag via externe tabel
In het volgende voorbeeld ziet u hoe u met T-SQL een query uitvoert op een parquet-bestand dat is opgeslagen in S3-compatibele objectopslag via het uitvoeren van query's op externe tabellen. In het voorbeeld wordt een relatief pad in de externe gegevensbron gebruikt.
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];
Voor meer informatie, zie:
Beperkingen
- SQL Server-query's op een externe tabel die wordt ondersteund door S3-compatibele opslag, zijn beperkt tot 1000 objecten per voorvoegsel. Dit komt doordat S3-compatibele objectvermelding is beperkt tot 1000 objectsleutels per voorvoegsel.
- Voor S3-compatibele objectopslag mogen klanten hun toegangssleutel-id niet maken met een
:teken erin. - De totale URL-lengte is beperkt tot 259 tekens. Dit betekent dat
s3://<hostname>/<objectkey>niet langer mag zijn dan 259 tekens. Des3://telt mee voor deze limiet, dus de padlengte mag niet langer zijn dan 259-5 = 254 tekens. - De naam van de SQL-referentie wordt beperkt door 128 tekens in UTF-16-indeling.
- De naam van de referentie die is gemaakt, moet de naam van de bucket bevatten, tenzij deze referentie voor een nieuwe externe gegevensbron is.
- Toegangssleutel-id en geheime sleutel-id mogen alleen alfanumerieke waarden bevatten.
Volgende stappen
- Zie Overzicht van SQL Server PolyBase voor meer informatie over PolyBase
- PolyBase configureren voor toegang tot externe gegevens in S3-compatibele objectopslag