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 호스트에 설치된 인증서에 의해 유효성이 검사됩니다.

권한

프록시 사용자가 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;

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

다음 단계