PolyBase를 사용하여 형식 매핑
적용 대상: SQL Server(Windows에만 해당) Azure SQL Database Azure Synapse Analytics Analytics Platform System(PDW)
이 문서에서는 PolyBase 외부 데이터 원본과 SQL Server 간의 매핑에 대해 설명합니다. 이 정보를 사용하여 CREATE EXTERNAL TABLE Transact-SQL 명령을 사용하여 외부 테이블을 올바르게 정의할 수 있습니다.
개요
PolyBase를 사용하여 외부 테이블을 만들 때 데이터 형식 및 열 수를 포함한 열 정의는 외부 파일의 데이터와 일치해야 합니다. 일치하지 않는 경우 실제 데이터를 쿼리할 때 파일 행이 거부됩니다.
외부 데이터 원본의 파일을 참조하는 외부 테이블의 경우 열 및 형식 정의가 외부 파일의 정확한 스키마에 매핑되어야 합니다. Hadoop/Hive에 저장된 데이터를 참조하는 데이터 형식을 정의하는 경우 SQL과 Hive 데이터 형식 간에 다음 매핑을 사용하고 그로부터 선택할 때 형식을 SQL 데이터 형식으로 캐스팅합니다. 달리 명시하지 않는 한 형식에는 Hive의 모든 버전이 포함되었습니다.
참고 항목
SQL Server는 변환에서 Hive 무한대 데이터 값을 지원하지 않습니다. PolyBase는 데이터 형식 변환 오류로 실패합니다.
Hadoop 형식 매핑 참조
SQL 데이터 형식 | .NET 데이터 형식 | Hive 데이터 형식 | Hadoop/Java 데이터 형식1 | 설명 |
---|---|---|---|---|
tinyint | Byte | tinyint | ByteWritable | 부호 없는 숫자만 해당합니다. |
smallint | Int16 | smallint | ShortWritable | |
int | Int32 | int | IntWritable | |
bigint | Int64 | bigint | LongWritable | |
bit | 부울 | 부울 값 | BooleanWritable | |
float | Double | double | DoubleWritable | |
real | Single | float | FloatWritable | |
money | Decimal | double | DoubleWritable | |
smallmoney | Decimal | double | DoubleWritable | |
nchar | 문자열 Char[] |
string | Varchar | |
nvarchar | 문자열 Char[] |
string | Varchar | |
char | 문자열 Char[] |
string | Varchar | |
varchar | 문자열 Char[] |
string | Varchar | |
binary | Byte[] | binary | BytesWritable | Hive 0.8 이상에 적용됩니다. |
varbinary | Byte[] | binary | BytesWritable | Hive 0.8 이상에 적용됩니다. |
date | DateTime | timestamp | TimestampWritable | |
smalldatetime | DateTime | timestamp | TimestampWritable | |
datetime2 | DateTime | timestamp | TimestampWritable | |
Datetime | DateTime | timestamp | TimestampWritable | |
time | TimeSpan | timestamp | TimestampWritable | |
decimal | Decimal | decimal | BigDecimalWritable | Hive0.11 이상에 적용됩니다. |
1 SQL Server 2022부터(16.x) Hadoop은 더 이상 지원되지 않습니다.
Parquet 및 델타 형식 매핑 참조
아래는 SQL Server 데이터 형식에 대한 Parquet 및 Delta 외부 테이블 형식 매핑입니다.
Parquet 및 Delta Lake 파일에는 모든 열에 대한 형식 설명이 포함되어 있습니다. 다음 표에서는 Parquet 형식이 SQL 네이티브 형식에 매핑되는 방법을 설명합니다.
Parquet 형식 | Parquet 논리 형식(주석) | SQL 데이터 형식 |
---|---|---|
BOOLEAN | bit | |
BINARY / BYTE_ARRAY | varbinary | |
DOUBLE | float | |
FLOAT | real | |
INT32 | int | |
INT64 | bigint | |
INT96 | datetime2 | |
FIXED_LEN_BYTE_ARRAY | binary | |
BINARY | UTF8 | varchar *(UTF8 데이터 정렬) |
BINARY | STRING | varchar *(UTF8 데이터 정렬) |
BINARY | ENUM | varchar *(UTF8 데이터 정렬) |
FIXED_LEN_BYTE_ARRAY | UUID | uniqueidentifier |
BINARY | DECIMAL | decimal |
BINARY | JSON | varchar(8000) *(UTF8 데이터 정렬) |
BINARY | BSON | 지원되지 않음 |
FIXED_LEN_BYTE_ARRAY | DECIMAL | decimal |
BYTE_ARRAY | INTERVAL | 지원되지 않음 |
INT32 | INT(8, true) | smallint |
INT32 | INT(16, true) | smallint |
INT32 | INT(32, true) | int |
INT32 | INT(8, false) | tinyint |
INT32 | INT(16, false) | int |
INT32 | INT(32, false) | bigint |
INT32 | DATE | date |
INT32 | DECIMAL | decimal |
INT32 | TIME(MILLIS) | time |
INT64 | INT(64, true) | bigint |
INT64 | INT(64, false) | decimal(20,0) |
INT64 | DECIMAL | decimal |
INT64 | TIME(MICROS) | time |
INT64 | TIME(NANOS) | 지원되지 않음 |
INT64 | TIMESTAMP(utc로 정규화됨)(MILLIS/MICROS) | datetime2 |
INT64 | TIMESTAMP(utc로 정규화되지 않음)(MILLIS/MICROS) | bigint - 날짜/시간 값으로 변환하기 전에 표준 시간대 오프셋을 사용하여 bigint 값을 명시적으로 조정해야 합니다. |
INT64 | TIMESTAMP(NANOS) | 지원되지 않음 |
복합 형식 | 명단 등록 | varchar(8000), JSON으로 직렬화 |
복합 형식 | MAP | varchar(8000), JSON으로 직렬화 |
Oracle 형식 매핑 참조
Oracle 데이터 형식 | SQL Server 유형 |
---|---|
Float | Float |
NUMBER | Float |
NUMBER(p,s) | 10진수(p, s) |
LONG | Nvarchar |
BINARY_FLOAT | 실수 |
BINARY_DOUBLE | Float |
CHAR | Char |
VARCHAR2 | Varchar |
NVARCHAR2 | Nvarchar |
RAW | Varbinary |
LONG RAW | Varbinary |
BLOB | Varbinary |
Clob | Varchar |
NCLOB | Nvarchar |
ROWID | Varchar |
UROWID | Varchar |
DATE | Datetime2 |
timestamp | Datetime2 |
형식이 일치하지 않습니다.
Float: Oracle은 SQL Server에서 지원하는 것보다 낮은 126의 부동 소수점 정밀도를 지원합니다(53). 따라서 Float (1-53)을 직접 매핑할 수 있지만 정밀도가 이보다 큰 경우 잘림으로 인해 데이터가 손실될 수 있습니다.
타임스탬프:
Oracle의 현지 표준 시간대가 있는 타임스탬프 및 타임스탬프는 9개의 소수 자릿수 초 정밀도를 지원하는 반면 SQL Server DateTime2는 소수 자릿수 초 정밀도를 7초만 지원합니다.
MongoDB 형식 매핑
BSON 데이터 형식 | SQL Server 유형 |
---|---|
두 배 | Float |
문자열 | Nvarchar |
이진 데이터 | Nvarchar |
개체 ID입니다. | Nvarchar |
부울 | bit |
날짜 | Datetime2 |
32비트 정수 | 정수 |
타임스탬프 | Nvarchar |
64비트 정수 | BigInt |
10진수 128 | 소수 |
DBPointer | Nvarchar |
JavaScript | Nvarchar |
최대 키 | Nvarchar |
최소 키 | Nvarchar |
기호 | Nvarchar |
정규식 | Nvarchar |
Undefined/NULL | Nvarchar |
MongoDB는 BSON 문서를 사용하여 데이터 레코드를 저장합니다. 이전 시나리오와 달리 BSON은 스키마가 없으며 다른 문서 내에 문서와 배열 포함을 지원합니다. 이렇게 하면 사용자에게 유연성이 제공됩니다.
Teradata 형식 매핑 참조
Teradata 데이터 형식 | SQL Server 유형 |
---|---|
INTEGER | 정수 |
SMALLINT | SmallInt |
BIGINT | BigInt |
BYTEINT | SmallInt |
DECIMAL | Decimal |
FLOAT | 소수 |
BYTE | 이진 |
VARBYTE | Varbinary |
BLOB | varbinary |
CHAR | Nchar |
Clob | Nvarchar |
Varchar | Nvarchar |
Graphic | Nchar |
JSON | Nvarchar |
VARGRAPHIC | Nvarchar |
DATE | 날짜 |
timestamp | Datetime2 |
TIME | Time |
TIME WITH TIME ZONE | Time |
표준 시간대가 있는 타임스탬프 | Time |
다음 단계
이 항목의 사용 방법에 대한 자세한 내용은 CREATE EXTERNAL TABLE의 Transact-SQL 참조 문서를 참조하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기