Поделиться через


Сопоставление типов с помощью PolyBase

Применимо к: SQL Server 2016 (13.x) и более поздних версий в Windows

В этой статье описывается сопоставление между внешними источниками данных PolyBase и SQL Server. Эти сведения можно использовать, чтобы правильно определить внешние таблицы с помощью команды Transact-SQL CREATE EXTERNAL TABLE.

Обзор

При создании внешней таблицы с 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 boolean BooleanWritable
float Double double DoubleWritable
реальный Single float FloatWritable
деньги Decimal double DoubleWritable
smallmoney Decimal double DoubleWritable
nchar String
Char[]
string Varchar
nvarchar String
Char[]
string Varchar
символ String
Char[]
string Varchar
varchar String
Char[]
string Varchar
binary Byte[] binary BytesWritable Применяется к Hive 0.8 и более поздним версиям.
varbinary Byte[] binary BytesWritable Применяется к Hive 0.8 и более поздним версиям.
дата 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 Hadoop больше не поддерживается в SQL Server 2022 (16.x) и более поздних версиях.

Справочник по сопоставлению типов Parquet и Delta

Сопоставление типов внешних таблиц Parquet и Delta с типами данных SQL Server приведено в этом разделе.

Файлы Parquet и Delta Lake содержат описания типов для каждого столбца. В приведенной ниже таблице показано, как типы Parquet сопоставляются с собственными типами SQL.

Тип Parquet Логический тип Parquet (заметка) Тип данных SQL
BOOLEAN bit
BINARY / BYTE_ARRAY varbinary
DOUBLE float
FLOAT реальный
INT32 int
INT64 bigint
INT96 datetime2
FIXED_LEN_BYTE_ARRAY binary
BINARY UTF8 varchar1
BINARY STRING varchar1
BINARY ENUM varchar1
FIXED_LEN_BYTE_ARRAY UUID uniqueidentifier
BINARY DECIMAL decimal
BINARY JSON varchar(8000)1
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) (МИЛЛИ / МИКРОС) datetime2
INT64 TIMESTAMP (не нормализовано в формате UTC) (МИЛЛИ / МИКРОС) bigint — убедитесь, что значение bigint явно отрегулировано с помощью смещения часового пояса, прежде чем преобразовать его в значение даты и времени (datetime).
INT64 TIMESTAMP (NANOS) Не поддерживается
Сложный тип LIST varchar(8000), сериализованный в JSON
Сложный тип MAP varchar(8000), сериализованный в JSON

1 коллация UTF-8.

Сопоставление типов Oracle

Тип данных Oracle Тип данных SQL Server
FLOAT float
NUMBER float
NUMBER (p,s) Десятичная(p, s)
LONG nvarchar
BINARY_FLOAT реальный
BINARY_DOUBLE float
CHAR символ
VARCHAR2 varchar
NVARCHAR2 nvarchar
RAW varbinary
LONG RAW varbinary
BLOB varbinary
CLOB varchar
NCLOB nvarchar
ROWID varchar
UROWID varchar
DATE datetime2
TIMESTAMP datetime2

Несоответствие типов

Тип с плавающей запятой

Oracle поддерживает точность чисел с плавающей запятой до 126 цифр, что выше, чем точность, поддерживаемая SQL Server (53). Таким образом, Float (1–53) можно сопоставлять напрямую, но за его пределами происходит потеря данных из-за усечения.

Метка времени

Метка времени и метка времени с локальным часовом поясом в Oracle поддерживает точность 9 дробных секунд, в то время как SQL Server DateTime2 поддерживает только 7 дробных секунд.

Сопоставление типов MongoDB

Тип данных BSON Тип данных SQL Server
Двойной float
Строка nvarchar
Двоичные данные nvarchar
Код объекта nvarchar
Логический bit
Дата datetime2
32-разрядное целое число int
Метка времени nvarchar
64-разрядное целое число bigint
Десятичная 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