Virtualisieren der Parquet-Datei in einem S3-kompatiblen Objektspeicher mit PolyBase

Gilt für: SQL Server 2022 (16.x)

SQL Server 2022 (16.x) kann Daten aus Parkettdateien virtualisieren. Dieser Prozess ermöglicht es, dass die Daten am ursprünglichen Speicherort verbleiben und dennoch wie jede andere Tabelle von einer SQL Server-Instanz mit T-SQL-Befehlen abgefragt werden können. Für dieses Feature werden PolyBase-Connectors verwendet. Der Bedarf für ETL-Prozesse wird dabei minimiert.

Im folgenden Beispiel werden wir eine auf einem S3-kompatiblen Objektspeicher gespeicherte Parquet-Datei virtualisieren.

Weitere Informationen zur Datenvirtualisierung finden Sie unter Einführung in die Datenvirtualisierung mit PolyBase.

Voraussetzungen

Um die S3-kompatiblen Objektspeicherintegrationsfeatures zu verwenden, benötigen Sie die folgenden Tools und Ressourcen:

  • Installieren Sie das PolyBase-Feature für SQL Server.
  • Installieren Sie SQL Server Management Studio (SSMS) oder Azure Data Studio.
  • S3-kompatibler Speicher.
  • Ein S3-Bucket wird erstellt. Von SQL Server aus können keine Buckets erstellt oder konfiguriert werden.
  • Ein Benutzer (Access Key ID) und das Geheimnis (Secret Key ID) wurden konfiguriert, und dieser Benutzer ist Ihnen bekannt. Sie benötigen beide für die Authentifizierung beim S3-Objektspeicher.
  • ListBucket-Berechtigung für S3-Benutzer*innen.
  • ReadOnly-Berechtigung für S3-Benutzer*innen.
  • TLS muss konfiguriert sein. Es wird vorausgesetzt, dass alle Verbindungen sicher über HTTPS (nicht über HTTP) übertragen werden. Der Endpunkt wird anhand eines Zertifikats überprüft, das auf dem SQL Server-Betriebssystemhost installiert ist.

Berechtigung

Damit Proxybenutzer*innen den Inhalt eines S3-Buckets lesen können, müssen diese die folgenden Aktionen für den S3-Endpunkt ausführen dürfen:

  • ListBucket;
  • ReadOnly;

Vorkonfiguration

  1. Aktivieren von PolyBase in sp_configure:
exec sp_configure @configname = 'polybase enabled', @configvalue = 1
;
RECONFIGURE
;
exec sp_configure @configname = 'polybase enabled'
;
  1. Vor dem Erstellen von datenbankweit gültigen Anmeldeinformationen muss die Benutzerdatenbank über einen Hauptschlüssel zum Schützen der Anmeldeinformationen verfügen. Weitere Informationen finden Sie unter CREATE MASTER KEY.

Erstellen einer datenbankweiten Anmeldeinformation

Das folgende Beispielskript erstellt eine datenbankbezogene Anmeldeinformation s3-dc in der Quellbenutzerdatenbank in SQL Server. Weitere Informationen finden Sie unter 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

Überprüfen Sie die neue datenbankbezogene Anmeldeinformation mit sys.database_scoped_credentials (Transact-SQL):

SELECT * FROM sys.database_scoped_credentials;

Erstellen einer externen Datenquelle

Das folgende Beispielskript erstellt eine externe Datenquelle s3_ds in der Quellbenutzerdatenbank in SQL Server. Die externe Datenquelle verweist auf die Anmeldeinformationen für die Datenbank s3_dc. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (CREATE EXTERNAL DATA SOURCE).

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

Überprüfen Sie die neue externe Datenquelle mit sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

SELECT aus einer Parquet-Datei mit OPENROWSET

Das folgende Beispiel veranschaulicht die Verwendung von T-SQL zum Abfragen einer In-S3-kompatiblen Objektspeicherung über OPENROWSET-Abfrage. Weitere Informationen finden Sie unter OPENROWSET (Transact-SQL).

Da dies eine Parquet-Datei ist, werden zwei wichtige Dinge automatisch geschehen:

  1. SQL Server liest das Schema aus der Datei automatisch, sodass es nicht erforderlich ist, die Tabelle, Spalten oder Datentypen zu definieren.
  2. Es ist nicht erforderlich, den Komprimierungtyp für die zu lesende Datei zu deklarieren.
SELECT  * 
FROM    OPENROWSET
        (   BULK '/<bucket>/<parquet_folder>'
        ,   FORMAT       = 'PARQUET'
        ,   DATA_SOURCE  = 's3_ds'
        ) AS [cc];

Abfragen von S3-kompatiblen Objektspeichern über eine externe Tabelle

Das folgende Beispiel zeigt, wie mithilfe von T-SQL eine in einem S3-kompatiblen Objektspeicher gespeicherte Parquet-Datei durch Abfragen einer externen Tabelle abgefragt wird. In dem Beispiel wird ein relativer Pfad innerhalb der externen Datenquelle verwendet.

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

Weitere Informationen finden Sie unter:

Begrenzungen

  1. SQL Server-Abfragen für eine externe Tabelle, die von S3-kompatiblem Speicher unterstützt wird, sind auf 1000 Objekte pro Präfix beschränkt. Dies liegt daran, dass die S3-kompatible Objektauflistung auf 1000 Objektschlüssel pro Präfix beschränkt ist.
  2. Für den S3-kompatiblen Objektspeicher dürfen Kunden ihre Zugriffstasten-ID nicht mit einem : Zeichen erstellen.
  3. Die Gesamtlänge der URL ist auf 259 Zeichen beschränkt. Dies bedeutet, dass s3://<hostname>/<objectkey> 259 Zeichen nicht überschreiten darf. s3:// wird auf diesen Grenzwert angerechnet, sodass die Pfadlänge 259-5 = 254 Zeichen nicht überschreiten kann.
  4. Der SQL-Anmeldeinformationsname ist auf 128 Zeichen im UTF-16-Format beschränkt.
  5. Der erstellte Anmeldeinformationsname muss den Bucketnamen enthalten, es sei denn, diese Anmeldeinformation ist für eine neue externe Datenquelle vorgesehen.
  6. Zugriffstasten-ID und „Geheimer Schlüssel“-ID dürfen nur alphanumerische Werte enthalten.

Nächste Schritte