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

Область применения: SQL Server (только на Windows) Not supported. База данных SQL Azure Not supported. Azure Synapse Analytics Not supported. Analytics Platform System (PDW)

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

Обзор

При создании внешней таблицы с PolyBase определения столбцов, включая типы данных и количество столбцов, должны соответствовать данным во внешних файлах. Если есть несоответствие, строки файлов отклоняются при запросе фактических данных.

Во внешних таблицах, которые ссылаются на файлы во внешних источниках данных, определения столбцов и типов должны точно соответствовать схеме внешнего файла. При определении типов данных, которые ссылаются на данные, хранящиеся в Hadoop или Hive, используйте следующие сопоставления типов данных SQL и Hive и приведите тип к типу данных SQL при выборе. Типы включают все версии Hive, если не указано иное.

Примечание.

SQL Server не поддерживает тип данных Hive infinity в любых преобразованиях. PolyBase будет завершаться ошибкой преобразования типов данных.

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

Тип данных SQL Тип данных .NET Тип данных Hive Тип данныхHadoop/Java 1 Комментарии
tinyint Байт tinyint ByteWritable Только для чисел без знака.
smallint Int16 smallint ShortWritable
INT Int32 INT IntWritable
bigint Int64 bigint LongWritable
bit Логический boolean BooleanWritable
с плавающей запятой Двойной двойной точности DoubleWritable
real Одна с плавающей запятой FloatWritable
money Decimal двойной точности DoubleWritable
smallmoney Decimal двойной точности DoubleWritable
nchar Строка

Char[]
строка Varchar
nvarchar Строка

Char[]
строка Varchar
char Строка

Char[]
строка Varchar
varchar Строка

Char[]
строка Varchar
binary Byte[] binary BytesWritable Применяется к Hive 0.8 и более поздней версии.
varbinary Byte[] binary BytesWritable Применяется к Hive 0.8 и более поздней версии.
Дата Дата/время TIMESTAMP TimestampWritable
smalldatetime Дата/время TIMESTAMP TimestampWritable
datetime2 Дата/время TIMESTAMP TimestampWritable
datetime DateTime TIMESTAMP TimestampWritable
Время TimeSpan TIMESTAMP TimestampWritable
десятичное Десятичное число десятичное BigDecimalWritable Применяется к Hive 0.11 и более поздней версии.

1 Начиная с SQL Server 2022 (16.x) Hadoop больше не поддерживается.

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

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

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

Тип Parquet Логический тип Parquet (заметка) Тип данных SQL
BOOLEAN bit
BINARY / BYTE_ARRAY varbinary
DOUBLE с плавающей запятой
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 десятичное
BINARY JSON varchar(8000) *(параметры сортировки UTF8)
BINARY BSON Не поддерживается
FIXED_LEN_BYTE_ARRAY 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 десятичное
INT32 TIME (MILLIS) Время
INT64 INT(64, true) bigint
INT64 INT(64, false) decimal(20,0)
INT64 DECIMAL десятичное
INT64 TIME (MICROS) Время
INT64 TIME (NANOS) Не поддерживается
INT64 TIMESTAMP (нормализовано в формат UTC) (MILLIS / MICROS) datetime2
INT64 TIMESTAMP (не нормализовано в формат UTC) (MILLIS / MICROS) bigint — убедитесь, что значение bigint явно отрегулировано с помощью смещения часового пояса, прежде чем преобразовать его в значение даты и времени (datetime).
INT64 TIMESTAMP (NANOS) Не поддерживается
Сложный тип LIST varchar(8000), сериализованный в JSON
Сложный тип MAP varchar(8000), сериализованный в JSON

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

Тип данных Oracle Тип SQL Server
Тип с плавающей запятой Тип с плавающей запятой
NUMBER Тип с плавающей запятой
NUMBER (p,s) Decimal (p, s)
LONG Nvarchar
BINARY_FLOAT Вещественное число
BINARY_DOUBLE Тип с плавающей запятой
CHAR Char
VARCHAR2 Varchar
NVARCHAR2 Nvarchar
НЕОБРАБОТАННЫЕ Varbinary
LONG RAW Varbinary
BLOB-объект Varbinary
CLOB Varchar
NCLOB Nvarchar
ROWID Varchar
UROWID Varchar
DATE Дата и время2
TIMESTAMP Дата и время2

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

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

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

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

Тип данных BSON Тип SQL Server
Двойной Тип с плавающей запятой
Строка Nvarchar
Двоичные данные Nvarchar
Код объекта Nvarchar
Логический бит
Date Дата и время2
32-разрядное целое число Int
Метка времени Nvarchar
64-разрядное целое число BigInt
Decimal 128 Десятичное число
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 Десятичное число
FLOAT Decimal
BYTE Binary
VARBYTE Varbinary
BLOB-объект varbinary
CHAR Nchar
CLOB Nvarchar
VARCHAR Nvarchar
GRAPHIC Nchar
JSON Nvarchar
VARGRAPHIC Nvarchar
DATE Date
TIMESTAMP Дата и время2
TIME Время
TIME WITH TIME ZONE Время
TIMESTAMP WITH TIME ZONE Время

Следующие шаги

Дополнительные сведения об использовании сопоставления см. в справочнике по Transact-SQL для CREATE EXTERNAL TABLE (Transact-SQL).