다음을 통해 공유


PolyBase를 사용하여 S3 호환 개체 스토리지에서 parquet 파일 가상화

적용 대상: SQL Server 2022(16.x)

SQL Server 2022(16.x)는 parquet 파일의 데이터를 가상화할 수 있습니다. 이 프로세스를 사용하면 데이터가 원래 위치에 유지되면서도 다른 테이블처럼 T-SQL 명령을 사용하여 SQL Server 인스턴스에서 쿼리될 수 있습니다. 이 기능은 PolyBase 커넥터를 사용하며 ETL(추출, 변환 및 로드) 프로세스의 필요성을 최소화합니다.

다음 예제에서는 S3 호환 개체 스토리지에 저장된 parquet 파일을 가상화합니다.

데이터 가상화에 대한 자세한 내용은 PolyBase를 사용한 데이터 가상화 소개를 참조하세요.

필수 조건

S3 호환 개체 스토리지 통합 기능을 사용하려면 다음 도구와 리소스가 필요합니다.

  • SQL Server PolyBase 기능을 설치합니다.
  • SSMS(SQL Server Management Studio) 또는 Azure Data Studio를 설치합니다.
  • S3 호환 스토리지입니다.
  • 생성한 S3 버킷입니다. 버킷은 SQL Server에서 만들거나 구성할 수 없습니다.
  • 사용자(Access Key ID) 및 비밀(Secret Key ID) 및 해당 사용자는 사용자에게 알려져 있습니다. S3 개체 스토리지 엔드포인트에 대해 인증하려면 두 항목이 모두 필요합니다.
  • S3 사용자에 대한 ListBucket 권한입니다.
  • S3 사용자에 대한 ReadOnly 권한입니다.
  • TLS가 구성되어 있어야 합니다. 모든 연결이 HTTP가 아닌 HTTPS를 통해 안전하게 전송된다고 가정합니다. 엔드포인트는 SQL Server OS 호스트에 설치된 인증서에 의해 유효성이 검사됩니다.

Permission

프록시 사용자가 S3 버킷의 콘텐츠를 읽으려면 사용자가 S3 엔드포인트에 대해 다음 작업을 수행할 수 있어야 합니다.

  • ListBucket;
  • ReadOnly;

사전 구성

  1. sp_configure에서 PolyBase 사용:
exec sp_configure @configname = 'polybase enabled', @configvalue = 1
;
RECONFIGURE
;
exec sp_configure @configname = 'polybase enabled'
;
  1. 데이터베이스 범위 자격 증명을 만들기 전에 자격 증명을 보호하려면 사용자 데이터베이스에 마스터 키가 있어야 합니다. 자세한 내용은 CREATE MASTER KEY를 참조하세요.

데이터베이스 범위 자격 증명 만들기

다음 샘플 스크립트는 SQL Server 원본 사용자 데이터베이스에 데이터베이스 범위 자격 증명인 s3-dc를 만듭니다. 자세한 내용은 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

sys.database_scoped_credentials(Transact-SQL)를 사용하여 새 데이터베이스 범위 자격 증명을 확인합니다.

SELECT * FROM sys.database_scoped_credentials;

외부 데이터 원본 만들기

다음 샘플 스크립트는 SQL Server의 원본 사용자 데이터베이스에 s3_ds 외부 데이터 원본을 만듭니다. 외부 데이터 원본은 s3_dc 데이터베이스 범위 자격 증명을 참조합니다. 자세한 내용은 CREATE EXTERNAL DATA SOURCE를 참조하세요.

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

sys.external_data_sources를 사용하여 새 외부 데이터 원본을 확인합니다.

SELECT * FROM sys.external_data_sources;

가상 호스팅 URL

일부 S3 호환 스토리지 시스템(예: Amazon Web Services)은 스타일 URL을 활용하여 virtual_hosted S3 버킷에서 폴더 구조를 구현합니다. 다음 CONNECTION_OPTIONS 을 추가하여 S3 버킷의 폴더 위치를 가리키는 외부 테이블을 만들 수 있습니다. 예를 들면 다음과 같습니다 CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.

이 설정이 CONNECTION_OPTIONS 없으면 폴더를 가리키는 외부 테이블을 쿼리할 때 다음 오류가 발생할 수 있습니다.

Msg 13807, Level 16, State 1, Line 23  
Content of directory on path '/<folder_name>/' cannot be listed. 

OPENROWSET를 사용하여 parquet 파일에서 선택

다음 예제에서는 T-SQL을 사용하여 OPENROWSET 쿼리를 통해 S3 호환 개체 스토리지에 저장된 parquet 파일을 쿼리하는 방법을 보여 줍니다. 자세한 내용은 OPENROWSET(Transact-SQL)를 참조하세요.

parquet 파일이므로 두 가지 중요한 작업이 자동으로 발생합니다.

  1. SQL Server는 파일 자체에서 스키마를 읽으므로 테이블, 열 또는 데이터 형식을 정의할 필요가 없습니다.
  2. 파일을 읽을 압축 형식을 선언할 필요가 없습니다.
SELECT  * 
FROM    OPENROWSET
        (   BULK '/<bucket>/<parquet_folder>'
        ,   FORMAT       = 'PARQUET'
        ,   DATA_SOURCE  = 's3_ds'
        ) AS [cc];

외부 테이블을 통해 S3 호환 개체 스토리지 쿼리

다음 예제에서는 T-SQL을 사용하여 외부 테이블 쿼리를 통해 S3 호환 개체 스토리지에 저장된 parquet 파일을 쿼리하는 방법을 보여 줍니다. 이 샘플에서는 외부 데이터 원본 내의 상대 경로를 사용합니다.

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

자세한 내용은 다음을 참조하세요.

제한 사항

  1. S3 호환 스토리지에서 지원되는 외부 테이블의 SQL Server 쿼리는 접두사당 1,000개의 개체로 제한됩니다. 이는 S3 호환 개체 목록이 접두사당 1,000개의 개체 키로 제한되기 때문입니다.
  2. S3 호환 개체 스토리지의 경우 고객은 : 문자가 포함된 액세스 키 ID를 만들 수 없습니다.
  3. 전체 URL 길이는 259자로 제한됩니다. 따라서 s3://<hostname>/<objectkey>는 259자를 초과하면 안 됩니다. s3://는 이 제한에 대한 개수이므로 경로 길이는 259-5 = 254자를 초과할 수 없습니다.
  4. SQL 자격 증명 이름은 UTF-16 형식에서 128자로 제한됩니다.
  5. 이 자격 증명이 새 외부 데이터 원본에 대한 것이 아니면 만든 자격 증명 이름에 버킷 이름이 포함되어야 합니다.
  6. 액세스 키 ID 및 비밀 키 ID는 영숫자 값만 포함해야 합니다.

다음 단계