전용 SQL 풀을 위한 PolyBase 데이터 로드 전략 설계
기존 대칭 SMP(다중 처리 시스템) 데이터 웨어하우스는 데이터를 로드하기 위해 ETL(추출, 변환 및 로드) 프로세스를 사용합니다. Azure SQL 풀은 스케일링이 가능하고 유연한 컴퓨팅 및 스토리지 리소스를 활용하는 MPP(대량 병렬 처리) 아키텍처입니다.
반면 ELT(추출, 로드 및 변환) 프로세스는 기본 제공 분산 쿼리 처리 기능을 활용하고 로드하기 전에 데이터를 변환하는 데 필요한 리소스를 제거할 수 있습니다.
SQL 풀은 bcp(대량 복사 프로그램) 및 SQL BulkCopy API와 같은 Polybase가 아닌 옵션을 포함하여 많은 로드 방법을 지원하지만, 데이터를 로드하는 가장 빠르고 확장 가능한 방법은 PolyBase를 통해서입니다. PolyBase는 T-SQL(Transact-SQL) 언어를 통해 Azure Blob Storage 또는 Azure Data Lake Storage에 저장된 외부 데이터에 액세스하는 기술입니다.
Polybase ELT 구현
ELT(추출, 로드 및 변환)는 원본 시스템에서 데이터를 추출하여 데이터 웨어하우스로 로드한 다음 변환하는 프로세스입니다.
전용 SQL 풀에서 PolyBase ELT를 구현하는 기본적인 단계는 다음과 같습니다.
- 원본 데이터를 텍스트 파일로 추출합니다.
- Azure Blob Storage 또는 Azure Data Lake Storage에 데이터를 배치합니다.
- 로드할 데이터를 준비합니다.
- PolyBase를 사용하여 전용 SQL 풀 준비 테이블에 데이터를 로드합니다.
- 데이터를 변환합니다.
- 프로덕션 테이블에 데이터를 삽입합니다.
로드 자습서는 뉴욕 Taxicab 데이터 세트 로드를 참조 하세요.
자세한 내용은 패턴 및 전략 로드를 참조하세요.
텍스트 파일에 원본 데이터 추출
원본 시스템에서 데이터를 추출하는 방식은 스토리지 위치에 따라 달라집니다. 목표는 데이터를 PolyBase 지원으로 구분된 텍스트 파일로 이동하는 것입니다.
PolyBase 외부 파일 형식
PolyBase는 UTF-8 및 UTF-16으로 인코딩된 구분된 텍스트 파일에서 데이터를 로드합니다. PolyBase는 Hadoop 파일 형식인 RC File, ORC 및 Parquet에서도 로드됩니다. 또한 Gzip 및 Snappy 압축 파일에서도 데이터를 로드할 수 있습니다. PolyBase는 현재 확장 ASCII, 고정 너비 형식 또는 WinZip, JSON 및 XML과 같은 중첩된 형식을 지원하지 않습니다.
SQL Server에서 내보내는 경우에는 bcp 명령줄 도구를 사용하여 분리된 텍스트 파일로 데이터를 내보낼 수 있습니다. 다음 표에서는 Azure Synapse Analytics에 매핑된 Parquet 데이터 형식을 나열합니다.
Parquet 데이터 형식 | SQL 데이터 형식 |
---|---|
tinyint | tinyint |
smallint | smallint |
int | int |
bigint | bigint |
부울 값 | bit |
double | float |
float | real |
double | money |
double | smallmoney |
string | nchar |
string | nvarchar |
string | char |
string | varchar |
binary | binary |
binary | varbinary |
timestamp | 날짜 |
timestamp | smalldatetime |
timestamp | datetime2 |
timestamp | 날짜/시간 |
timestamp | 시간 |
date | date |
decimal | decimal |
Azure Blob Storage 또는 Azure Data Lake Store에 데이터 배치
Azure Storage에 데이터를 배치하려면 Azure Blob Storage 또는 Azure Data Lake Storage로 이동할 수 있습니다. 어느 위치에서든 데이터를 텍스트 파일에 저장해야 합니다. Polybase는 두 위치 중 하나에서 데이터를 로드할 수 있습니다.
다음 도구와 서비스를 사용하여 데이터를 Azure Storage로 이동할 수 있습니다.
- Azure ExpressRoute 서비스는 네트워크 처리량, 성능 및 예측 가능성을 개선합니다. ExpressRoute는 Azure에 대한 전용 프라이빗 연결을 통해 데이터를 라우팅하는 서비스입니다. ExpressRoute 연결은 공용 인터넷을 통해 데이터를 라우팅하지 않습니다. 이 연결은 공용 인터넷을 통한 일반적인 연결보다 안정적이고 속도가 빠르며 대기 시간이 짧고 보안성이 높습니다.
- AzCopy 유틸리티는 공용 인터넷을 통해 Azure Storage로 데이터를 이동합니다. 이는 데이터 크기가 10TB 미만인 경우에 작동합니다. AzCopy를 사용하여 정기적으로 부하를 수행하려면 네트워크 속도를 테스트하여 허용되는지 확인합니다.
- Azure Data Factory 에는 로컬 서버에 설치할 수 있는 게이트웨이가 있습니다. 그런 다음 파이프라인을 만들어 로컬 서버에서 Azure Storage로 데이터를 이동할 수 있습니다. 전용 SQL 풀에서 Data Factory를 사용하려면 Azure Synapse Analytics에 데이터 로드를 참조 하세요.
로드할 데이터 준비
데이터를 전용 SQL 풀에 로드하기 전에 스토리지 계정에서 데이터를 준비하고 정리해야 할 수 있습니다. 데이터가 원본에 있거나, 데이터를 텍스트 파일로 내보내거나, 데이터가 Azure Storage에 있는 경우 데이터 준비를 수행할 수 있습니다. 가능한 한 빨리 데이터로 작업하는 것이 가장 쉽습니다.
외부 테이블 정의
데이터를 로드하려면 먼저 데이터 웨어하우스에서 외부 테이블을 정의해야 합니다. PolyBase는 외부 테이블을 사용하여 Azure Storage의 데이터를 정의하고 액세스합니다. 데이터베이스 뷰와 비슷한 외부 테이블은 테이블 스키마를 포함하며 데이터 웨어하우스 외부에 저장된 데이터를 가리킵니다.
외부 테이블 정의에는 데이터 원본, 텍스트 파일 형식 및 테이블 정의를 지정하는 것이 포함됩니다. 다음은 필요한 T-SQL 구문 항목입니다.
텍스트 파일 형식 지정
외부 개체가 정의되면 텍스트 파일의 행을 외부 테이블 및 파일 형식 정의와 정렬해야 합니다. 텍스트 파일의 각 행에 있는 데이터는 테이블 정의와 정렬되어야 합니다. 텍스트 파일의 형식을 지정하려면:
- 데이터가 비관계형 원본에서 가져온 경우 행과 열로 변환해야 합니다. 데이터가 관계형 원본에서 오건 비관계형 원본에서 오건, 데이터를 로드하려고 하는 테이블에 대한 열 정의와 정렬되도록 데이터를 변환해야 합니다.
- SQL 풀 대상 테이블의 열 및 데이터 형식과 정렬되도록 텍스트 파일에서 데이터의 형식을 지정합니다. 외부 텍스트 파일의 데이터 형식과 데이터 웨어하우스 테이블의 데이터 형식이 정렬되지 않으면 로드 중에 행이 거부됩니다.
- 종결자로 텍스트 파일의 필드를 구분합니다. 원본 데이터에서 찾을 수 없는 문자 또는 문자 시퀀스를 사용해야 합니다. CREATE EXTERNAL FILE FORMAT으로 지정한 종결자를 사용하세요.
PolyBase를 사용하여 전용 SQL 풀 준비 테이블에 데이터 로드
준비 테이블에 데이터를 로드하는 것이 가장 좋습니다. 준비 테이블을 사용하면 프로덕션 테이블에 영향을 주지 않고 오류를 처리할 수 있습니다. 또한 준비 테이블을 사용하면 데이터를 프로덕션 테이블에 삽입하기 전에 데이터를 변환하는 데 SQL 풀에서 기본 제공하는 분산 쿼리 처리 기능을 사용해 볼 수 있습니다.
PolyBase로 로드하기 위한 옵션
PolyBase를 사용하여 데이터를 로드하려는 경우 다음 로드 옵션 중 하나를 사용할 수 있습니다.
- Microsoft Entra ID를 사용하여 외부 데이터를 로드합니다.
- 관리 ID를 사용하여 외부 데이터를 로드합니다.
- T-SQL 을 사용하는 PolyBase는 데이터가 Azure Blob Storage 또는 Azure Data Lake Storage에 있을 때 잘 작동합니다. 로드 프로세스를 가장 잘 제어할 수 있지만, 외부 데이터 개체를 정의해야 합니다. 다른 방법에서는 원본 테이블을 대상 테이블에 매핑할 때 배후에서 이러한 개체를 정의합니다. T-SQL 로드를 오케스트레이션하려면 Azure Data Factory, SSIS 또는 Azure Functions를 사용할 수 있습니다.
- 원본 데이터가 SQL Server에 있는 경우 SSIS(SQL Server Integration Services) 를 사용하는 PolyBase가 잘 작동합니다. SSIS는 원본-대상 테이블 매핑을 정의하고 부하를 오케스트레이션합니다. 이미 SSIS 패키지가 있는 경우 새 데이터 웨어하우스 대상으로 작업하도록 패키지를 수정할 수 있습니다.
- Azure Data Factory 를 사용하는 PolyBase는 또 다른 오케스트레이션 도구입니다. 파이프라인을 정의하고 작업을 예약합니다.
- PolyBase와 Azure Databricks는 PolyBase를 사용하여 Azure Synapse Analytics 테이블에서 Databricks 데이터 프레임으로 데이터를 전송하거나 Databricks 데이터 프레임에서 Azure Synapse Analytics 테이블로 데이터를 씁니다.
PolyBase 외 로드 옵션
데이터가 PolyBase와 호환되지 않는 경우 bcp 또는 SQLBulkCopy API를 사용할 수 있습니다. BCP는 Azure Blob Storage를 거치지 않고도 전용 SQL 풀에 직접 로드되며, 소규모 로드에만 사용됩니다. 이러한 옵션의 로드 성능은 PolyBase보다 느립니다.
데이터 변환
데이터가 준비 테이블에 있는 동안, 워크로드에 필요한 변환을 수행하세요. 그런 다음 데이터를 프로덕션 테이블로 이동하세요.
프로덕션 테이블에 데이터 삽입
이 문은 INSERT INTO ... SELECT
준비 테이블에서 영구 테이블로 데이터를 이동합니다.
ETL 프로세스를 설계할 때 작은 테스트 샘플에서 프로세스를 실행해 보세요. 테이블에서 파일로 1,000개의 행을 추출하고 Azure로 이동한 다음 준비 테이블에 로드해 봅니다.
파트너 로드 솔루션
상당수의 파트너에게는 로드 솔루션이 있습니다. 자세한 내용을 알아보려면 솔루션 파트너 목록을 참조하세요.