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 ekstraksi, transformasi, dan pemuatan (ETL).
Dalam contoh berikut, 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
) 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
- Aktifkan PolyBase di
sp_configure
:
exec sp_configure @configname = 'polybase enabled', @configvalue = 1
;
RECONFIGURE
;
exec sp_configure @configname = 'polybase enabled'
;
- 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;
URL yang dihosting virtual
Beberapa sistem penyimpanan yang kompatibel dengan S3 (seperti Amazon Web Services) menggunakan virtual_hosted
URL gaya untuk menerapkan struktur folder dalam wadah S3. Tambahkan yang berikut ini CONNECTION_OPTIONS
untuk memungkinkan pembuatan tabel eksternal yang menunjuk ke lokasi folder di wadah S3, misalnya CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'
.
Tanpa pengaturan tersebut CONNECTION_OPTIONS
, saat mengkueri tabel eksternal yang menunjuk ke folder, Anda mungkin mengamati kesalahan berikut:
Msg 13807, Level 16, State 1, Line 23
Content of directory on path '/<folder_name>/' cannot be listed.
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:
- SQL Server membaca skema dari file itu sendiri, sehingga tidak perlu menentukan jenis tabel, kolom, atau data.
- 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
- Kueri SQL Server pada tabel eksternal yang didukung oleh penyimpanan yang kompatibel dengan S3 dibatasi hingga 1.000 objek per awalan. Ini karena daftar objek yang kompatibel dengan S3 dibatasi hingga 1.000 kunci objek per awalan.
- Untuk penyimpanan objek yang kompatibel dengan S3, pelanggan tidak diizinkan untuk membuat ID kunci akses mereka dengan
:
karakter di dalamnya. - Panjang URL total dibatasi hingga 259 karakter. Ini berarti
s3://<hostname>/<objectkey>
tidak boleh melebihi 259 karakter. Hitungans3://
terhadap batas ini, sehingga panjang jalur tidak boleh melebihi 259-5 = 254 karakter. - Nama kredensial SQL dibatasi oleh 128 karakter dalam format UTF-16.
- Nama kredensial yang dibuat harus berisi nama wadah kecuali kredensial ini untuk sumber data eksternal baru.
- ID Kunci Akses dan ID Kunci Rahasia hanya boleh berisi nilai alfanumerik.
Langkah berikutnya
- Untuk mempelajari selengkapnya tentang PolyBase, lihat Gambaran Umum PolyBase SQL Server
- Mengonfigurasi PolyBase untuk mengakses data eksternal di penyimpanan objek yang kompatibel dengan S3