PolyBase 的类型映射
适用于: SQL Server(仅限 Windows) Azure SQL 数据库 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 | 布尔 | boolean | BooleanWritable | |
FLOAT | Double | double | DoubleWritable | |
real | Single | FLOAT | FloatWritable | |
money | 十进制 | double | DoubleWritable | |
smallmoney | 十进制 | double | DoubleWritable | |
nchar | String Char[] |
string | Varchar | |
nvarchar | String Char[] |
string | Varchar | |
char | String Char[] |
string | Varchar | |
varchar | String 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 | |
时间 | TimeSpan | timestamp | TimestampWritable | |
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 | STRING | 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 | 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 类型 |
---|---|
浮点 | 浮点 |
NUMBER | 浮点 |
NUMBER (p,s) | Decimal (p, s) |
LONG | Nvarchar |
BINARY_FLOAT | Real |
BINARY_DOUBLE | 浮点 |
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),但除此之外,截断会导致数据丢失。
时间戳:
Oracle 中的时间戳和具有当地时区的时间戳支持 0.9 秒的精度,而 SQL Server DateTime2 仅支持 0.7 秒的精度。
MongoDB 类型映射
BSON 数据类型 | SQL Server 类型 |
---|---|
Double | 浮点 |
字符串 | Nvarchar |
二进制数据 | Nvarchar |
对象 ID | Nvarchar |
布尔 | bit |
日期 | Datetime2 |
32-bit integer | int |
时间戳 | Nvarchar |
64 位整数 | BigInt |
Decimal 128 | 十进制 |
DBPointer | Nvarchar |
JavaScript | Nvarchar |
Max Key | Nvarchar |
Min Key | Nvarchar |
符号 | Nvarchar |
Regular Expression | Nvarchar |
Undefined/NULL | Nvarchar |
MongoDB 使用 BSON 文档来存储数据记录。 与之前的方案不同,BSON 是无架构的,并且支持在其他文档中嵌入文档和数组。 这为用户提供了灵活性。
Teradata 类型映射引用
Teradata 数据类型 | SQL Server 类型 |
---|---|
INTEGER | int |
SMALLINT | SmallInt |
BIGINT | BigInt |
BYTEINT | SmallInt |
DECIMAL | 小数 |
FLOAT | 十进制 |
BYTE | 二进制 |
VARBYTE | Varbinary |
BLOB | varbinary |
CHAR | Nchar |
CLOB | Nvarchar |
VARCHAR | Nvarchar |
Graphic | Nchar |
JSON | Nvarchar |
VARGRAPHIC | Nvarchar |
DATE | 日期 |
TIMESTAMP | Datetime2 |
TIME | 时间 |
TIME WITH TIME ZONE | 时间 |
TIMESTAMP WITH TIME ZONE | 时间 |
后续步骤
有关如何使用它的更多信息,请参阅 CREATE EXTERNAL TABLE 的 Transact-SQL 参考文章。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈