Memvirtualisasikan file parkek dalam penyimpanan objek yang kompatibel dengan S3 dengan PolyBase

Berlaku untuk: SQL Server 2022 (16.x)

SQL Server 2022 (16.x) dapat memvirtualisasi data dari file parket. Proses ini memungkinkan data untuk tetap berada di lokasi aslinya, tetapi dapat dikueri dari instans SQL Server dengan perintah T-SQL, seperti tabel lainnya. Fitur ini menggunakan konektor PolyBase, dan meminimalkan kebutuhan akan proses ETL.

Dalam contoh di bawah ini, kita akan memvirtualisasi file parket yang disimpan di penyimpanan objek yang kompatibel dengan S3.

Untuk informasi selengkapnya tentang virtualisasi data, lihat Memperkenalkan virtualisasi data dengan PolyBase.

Prasyarat

Untuk menggunakan fitur integrasi penyimpanan objek yang kompatibel dengan S3, Anda memerlukan alat dan sumber daya berikut:

  • Instal fitur PolyBase untuk SQL Server.
  • Instal SQL Server Management Studio (SSMS) atau Azure Data Studio.
  • Penyimpanan yang kompatibel dengan S3.
  • Wadah S3 dibuat. Wadah tidak dapat dibuat atau dikonfigurasi dari SQL Server.
  • Pengguna (Access Key ID) telah dikonfigurasi dan rahasia (Secret Key ID) dan pengguna tersebut diketahui oleh Anda. Anda akan memerlukan keduanya untuk mengautentikasi terhadap titik akhir penyimpanan objek S3.
  • Izin ListBucket pada pengguna S3.
  • Izin ReadOnly pada pengguna S3.
  • TLS harus dikonfigurasi. Diasumsikan bahwa semua koneksi akan ditransmisikan dengan aman melalui HTTPS bukan HTTP. Titik akhir akan divalidasi oleh sertifikat yang diinstal pada Host OS SQL Server.

Izin

Agar pengguna proksi membaca konten wadah S3, pengguna harus diizinkan untuk melakukan tindakan berikut terhadap titik akhir S3:

  • ListBucket;
  • ReadOnly;

Pra-konfigurasi

  1. Aktifkan PolyBase di sp_configure:
exec sp_configure @configname = 'polybase enabled', @configvalue = 1
;
RECONFIGURE
;
exec sp_configure @configname = 'polybase enabled'
;
  1. Sebelum Anda membuat kredensial lingkup database, database pengguna harus memiliki kunci master untuk melindungi kredensial. Untuk informasi selengkapnya, lihat MEMBUAT KUNCI MASTER.

Membuat Kredensial Cakupan Database

Contoh skrip berikut membuat kredensial s3-dc lingkup database dalam database pengguna sumber di SQL Server. Untuk informasi selengkapnya, lihat MEMBUAT KREDENSIAL CAKUPAN DATABASE (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

Verifikasi kredensial cakupan database baru dengan sys.database_scoped_credentials (Transact-SQL):

SELECT * FROM sys.database_scoped_credentials;

Membuat sumber data eksternal

Contoh skrip berikut membuat sumber s3_ds data eksternal di database pengguna sumber di SQL Server. Sumber data eksternal mereferensikan s3_dc kredensial cakupan database. Untuk informasi selengkapnya, lihat MEMBUAT SUMBER DATA EKSTERNAL.

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

Verifikasi sumber data eksternal baru dengan sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

SELECT dari file parquet menggunakan OPENROWSET

Contoh berikut menunjukkan penggunaan T-SQL untuk mengkueri file parket yang disimpan dalam penyimpanan objek yang kompatibel dengan S3 melalui kueri OPENROWSET. Untuk informasi selengkapnya, lihat OPENROWSET (Transact-SQL).

Karena ini adalah file parkquet, dua hal penting terjadi secara otomatis:

  1. SQL Server akan membaca skema dari file itu sendiri, sehingga tidak perlu menentukan jenis tabel, kolom, atau data.
  2. Tidak perlu mendeklarasikan jenis kompresi untuk file yang akan dibaca.
SELECT  * 
FROM    OPENROWSET
        (   BULK '/<bucket>/<parquet_folder>'
        ,   FORMAT       = 'PARQUET'
        ,   DATA_SOURCE  = 's3_ds'
        ) AS [cc];

Kueri penyimpanan objek yang kompatibel dengan S3 melalui tabel eksternal

Contoh berikut menunjukkan penggunaan T-SQL untuk mengkueri file parket yang disimpan dalam penyimpanan objek yang kompatibel dengan S3 melalui kueri tabel eksternal. Sampel menggunakan jalur relatif dalam sumber data eksternal.

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

Untuk informasi selengkapnya, lihat:

Batasan

  1. Kueri SQL Server pada tabel eksternal yang didukung oleh penyimpanan yang kompatibel dengan S3 dibatasi hingga 1000 objek per awalan. Ini karena daftar objek yang kompatibel dengan S3 dibatasi hingga 1000 kunci objek per awalan.
  2. Untuk penyimpanan objek yang kompatibel dengan S3, pelanggan tidak diizinkan untuk membuat ID kunci akses mereka dengan : karakter di dalamnya.
  3. Panjang URL total dibatasi hingga 259 karakter. Ini berarti s3://<hostname>/<objectkey> tidak boleh melebihi 259 karakter. Hitungan s3:// terhadap batas ini, sehingga panjang jalur tidak boleh melebihi 259-5 = 254 karakter.
  4. Nama kredensial SQL dibatasi oleh 128 karakter dalam format UTF-16.
  5. Nama kredensial yang dibuat harus berisi nama wadah kecuali kredensial ini untuk sumber data eksternal baru.
  6. ID Kunci Akses dan ID Kunci Rahasia hanya boleh berisi nilai alfanumerik.

Langkah berikutnya