使用 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 的 infinity 資料值。 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 | Boolean | boolean | BooleanWritable | |
FLOAT | Double | double | DoubleWritable | |
real | Single | FLOAT | FloatWritable | |
money | Decimal | double | DoubleWritable | |
SMALLMONEY | Decimal | double | DoubleWritable | |
NCHAR | String Char[] |
字串 | Varchar | |
NVARCHAR | String Char[] |
字串 | Varchar | |
char | String Char[] |
字串 | Varchar | |
varchar | String Char[] |
字串 | 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 | 適用於 Hive 0.11 及更新版本。 |
1 自 SQL Server 2022 (16.x) 起不再支援 Hadoop。
Parquet 和 Delta 類型對應參考
對應至 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 collation) |
BINARY | 字串 | varchar (UTF8 collation) |
BINARY | ENUM | varchar (UTF8 collation) |
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 |
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) | Decimal (p, s) |
LONG | nvarchar |
BINARY_FLOAT | Real |
BINARY_DOUBLE | Float |
CHAR | Char |
VARCHAR2 | Varchar |
NVARCHAR2 | nvarchar |
RAW | Varbinary |
LONG RAW | Varbinary |
BLOB | Varbinary |
CLOB | Varchar |
NCLOB | nvarchar |
ROWID | Varchar |
UROWID | Varchar |
日期 | Datetime2 |
timestamp | Datetime2 |
類型不符
Float:Oracle 支援 126 浮點數精確度,低於 SQL Server 支援的程度 (53)。 因此,Float (1-53) 可以直接對應,但在超出這個範圍之後,便會因截斷而發生資料遺失。
Timestamp:
Oracle 中的 Timestamp 和 Timestamp with local timezone 支援 9 毫秒精確度,但 SQL Server DateTime2 只支援 7 毫秒精確度。
MongoDB 類型對應
BSON 資料類型 | SQL Server 類型 |
---|---|
Double | Float |
String | nvarchar |
二進位資料 | nvarchar |
物件識別碼 | nvarchar |
Boolean | bit |
Date | Datetime2 |
32 位元整數 | Int |
時間戳記 | nvarchar |
64 位元整數 | BigInt |
Decimal 128 | Decimal |
DBPointer | nvarchar |
JavaScript | nvarchar |
最大索引鍵 | nvarchar |
最小索引鍵 | nvarchar |
符號 | nvarchar |
規則運算式 | nvarchar |
未定義/NULL | nvarchar |
MongoDB 會使用 BSON 文件來儲存資料記錄。 不同於先前的案例,BSON 為無結構描述,並支援內嵌文件和其他文件內的陣列。 這可為使用者提供彈性。
Teradata 類型對應參考
Teradata 資料類型 | SQL Server 類型 |
---|---|
INTEGER | Int |
SMALLINT | SmallInt |
bigint | BigInt |
BYTEINT | SmallInt |
DECIMAL | Decimal |
FLOAT | Decimal |
BYTE | Binary |
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 |
TIMESTAMP WITH TIME ZONE | Time |
下一步
如需使用此項目方式的詳細資訊,請參閱 CREATE EXTERNAL TABLE 的 Transact-SQL 參考文章。