Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2022 (16.x)
SQL Server 2022 (16.x), parquet dosyalarındaki verileri sanallaştırabilir. Bu işlem, verilerin özgün konumunda kalmasına olanak tanır, ancak T-SQL komutları içeren bir SQL Server örneğinden diğer tüm tablolar gibi sorgulanabilir. Bu özellik PolyBase bağlayıcılarını kullanır ve ayıklama, dönüştürme ve yükleme (ETL) işlemleri gereksinimini en aza indirir.
Aşağıdaki örnekte, S3 uyumlu nesne depolama alanında depolanan bir parquet dosyasını sanallaştıracağız.
Veri sanallaştırma hakkında daha fazla bilgi için bkz. PolyBase ile veri sanallaştırmaya giriş.
Önkoşullar
S3 uyumlu nesne depolama tümleştirme özelliklerini kullanmak için aşağıdaki araçlara ve kaynaklara ihtiyacınız vardır:
- SQL Server için PolyBase özelliğini yükleyin.
- SQL Server Management Studio'yu (SSMS) yükleyin.
- S3 uyumlu depolama.
- Bir S3 bucket oluşturuldu. Kovalar SQL Server'dan oluşturulamaz veya yapılandırılamaz.
- Bir kullanıcı (
Access Key ID) ve bir gizli (Secret Key ID) vardır. Bu kullanıcı sizin tarafından tanıdığınız biridir. Her ikisinin de S3 nesne depolama uç noktasında kimlik doğrulaması yapmanız gerekir. - S3 kullanıcısı üzerinde ListBucket izni.
- S3 kullanıcısı üzerinde Salt Okunur izni.
- TLS yapılandırılmış olmalıdır. Tüm bağlantıların HTTP üzerinden değil HTTPS üzerinden güvenli bir şekilde iletileceği varsayılır. Uç nokta, SQL Server İşletim Sistemi Konağı'nda yüklü bir sertifika tarafından doğrulanır.
İzin
Ara sunucu kullanıcısının bir S3 demetinin içeriğini okuması için kullanıcının S3 uç noktasında aşağıdaki eylemleri gerçekleştirmesine izin verilmelidir:
- ListBucket;
- Salt Okunabilir
Ön yapılandırma
-
sp_configure'de PolyBase'i etkinleştirme:
exec sp_configure @configname = 'polybase enabled', @configvalue = 1
;
RECONFIGURE
;
exec sp_configure @configname = 'polybase enabled'
;
- Veritabanı kapsamlı bir kimlik bilgisi oluşturmadan önce, kullanıcı veritabanında kimlik bilgisini korumak için bir anahtar bulunmalıdır. Daha fazla bilgi için bkz. CREATE MASTER KEY .
Veritabanı Kapsamlı Kimlik Bilgisi Oluşturma
Aşağıdaki örnek betik, SQL Server'daki kaynak kullanıcı veritabanında veritabanı kapsamlı bir kimlik bilgisi s3-dc oluşturur. Daha fazla bilgi için bkz. 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
yeni veritabanı kapsamlı kimlik bilgilerini sys.database_scoped_credentials (Transact-SQL) ile doğrulayın:
SELECT * FROM sys.database_scoped_credentials;
Dış veri kaynağı oluşturma
Aşağıdaki örnek betik, SQL Server'daki kaynak kullanıcı veritabanında bir dış veri kaynağı s3_ds oluşturur. Dış veri kaynağı, s3_dc veritabanı kapsamlı kimlik bilgilerine başvurur. Daha fazla bilgi için bkz. CREATE EXTERNAL DATA SOURCE.
CREATE EXTERNAL DATA SOURCE s3_ds
WITH
( LOCATION = 's3://<ip_address>:<port>/'
, CREDENTIAL = s3_dc
);
GO
yeni dış veri kaynağını sys.external_data_sourcesile doğrulayın.
SELECT * FROM sys.external_data_sources;
Sanal barındırılan URL'ler
Bazı S3 uyumlu depolama sistemleri (Amazon Web Services gibi), S3 demetinde klasör yapısını uygulamak için virtual_hosted stil URL'leri kullanır. S3 demetindeki klasör konumlarına işaret eden dış tablolar oluşturulmasına izin vermek için aşağıdaki CONNECTION_OPTIONS ekleyin, örneğin CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.
Bu CONNECTION_OPTIONS ayarı olmadan, bir klasörü işaret eden dış tabloları sorgularken aşağıdaki hatayı gözlemleyebilirsiniz:
Msg 13807, Level 16, State 1, Line 23
Content of directory on path '/<folder_name>/' cannot be listed.
Bir parquet dosyasından OPENROWSET kullanarak SELECT
Aşağıdaki örnekte, OPENROWSET sorgusu aracılığıyla S3 uyumlu nesne depolama alanında depolanan bir parquet dosyasını sorgulamak için T-SQL'in kullanılması gösterilmektedir. Daha fazla bilgi için bkz. OPENROWSET (Transact-SQL).
Bu bir parquet dosyası olduğundan, iki önemli şey otomatik olarak gerçekleşiyor:
- SQL Server şemayı dosyanın kendisinden okur, bu nedenle tablo, sütun veya veri türlerini tanımlamaya gerek yoktur.
- Dosyanın okunacağı sıkıştırma türünü bildirmeye gerek yoktur.
SELECT *
FROM OPENROWSET
( BULK '/<bucket>/<parquet_folder>'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 's3_ds'
) AS [cc];
Dış tablo aracılığıyla S3 uyumlu nesne depolamayı sorgulama
Aşağıdaki örnek, dış tabloyu sorgulayarak S3 uyumlu nesne depolama alanında depolanan bir parquet dosyasını sorgulamak için T-SQL'in kullanılmasını gösterir. Örnek, dış veri kaynağı içinde göreceli bir yol kullanır.
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];
Daha fazla bilgi için bakınız:
Sınırlamalar
- S3 uyumlu depolama alanı tarafından desteklenen bir dış tablodaki SQL Server sorguları ön ek başına 1.000 nesneyle sınırlıdır. Bunun nedeni S3 uyumlu nesne listesinin ön ek başına 1.000 nesne anahtarıyla sınırlı olmasıdır.
- S3 uyumlu nesne depolaması için, müşterilerin içinde bir
:karakter bulunan erişim anahtarı kimliklerini oluşturmasına izin verilmez. - Toplam URL uzunluğu 259 karakterle sınırlıdır. Bu,
s3://<hostname>/<objectkey>259 karakteri aşmaması gerektiği anlamına gelir. Bus3://sınıra doğru sayıldığından yol uzunluğu 259-5 = 254 karakteri aşamaz. - SQL kimlik bilgisi adı UTF-16 biçiminde 128 karakterle sınırlıdır.
- Eğer bu kimlik bilgisi yeni bir dış veri kaynağı için değilse, oluşturulan kimlik bilgisi adı depolama birimi adını içermelidir.
- Erişim Anahtarı Kimliği ve Gizli Anahtar Kimliği yalnızca alfasayısal değerler içermelidir.
Sonraki Adımlar
- PolyBase hakkında daha fazla bilgi edinmek için bkz. SQL Server PolyBase'e Genel Bakış
- PolyBase'i S3 uyumlu nesne depolama dış verilere erişecek şekilde yapılandırma