使用 PolyBase 進行類型對應

適用於:SQL Server (僅限 Windows) Not supported. Azure SQL Database Not supported. Azure Synapse Analytics Not supported. 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
DATE 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
字串 nvarchar
二進位資料 nvarchar
物件識別碼 nvarchar
布林值 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 Date
timestamp Datetime2
TIME Time
TIME WITH TIME ZONE Time
TIMESTAMP WITH TIME ZONE 時間

後續步驟

如需使用此項目方式的詳細資訊,請參閱 CREATE EXTERNAL TABLE 的 Transact-SQL 參考文章。