Asignación de tipos con PolyBase

Se aplica a: SQL Server (solo Linux) Not supported. Azure SQL Database Not supported. Azure Synapse Analytics Not supported. Analytics Platform System (PDW)

En este artículo se describe la asignación entre los orígenes de datos externos de PolyBase y SQL Server. Puede usar esta información para definir correctamente las tablas externas con el comando de Transact-SQL CREATE EXTERNAL TABLE.

Información general

A la hora de crear una tabla externa con PolyBase, las definiciones de columna, incluidos los tipos de datos y el número de columnas, deben coincidir con los datos de los archivos externos. Si hay alguna error de coincidencia, se rechazan las filas de archivo al consultar los datos reales.

En tablas externas que hacen referencia a archivos de orígenes de datos externos, las definiciones de columna y tipo deben asignarse al esquema exacto del archivo externo. Al definir tipos de datos que hacen referencia a datos almacenados en Hadoop/Hive, use las siguientes asignaciones entre tipos de datos SQL y Hive y convierta el tipo a un tipo de datos SQL cuando seleccione desde él. Los tipos incluyen todas las versiones de Hive, a menos que se indique lo contrario.

Nota:

SQL Server no admite el valor de datos infinity de Hive en ninguna conversión. En PolyBase se produce un error de conversión de tipo de datos.

Referencia de asignación de tipos de Hadoop

Tipo de datos de SQL Tipo de datos de .NET Tipo de datos de Hive Tipo de datos de Hadoop/Java1 Comentarios
tinyint Byte tinyint ByteWritable Solo para números sin signo.
smallint Int16 smallint ShortWritable
int Int32 int IntWritable
bigint Int64 bigint LongWritable
bit Booleano boolean BooleanWritable
float Double doble DoubleWritable
real Single flotante FloatWritable
money Decimal double DoubleWritable
SMALLMONEY Decimal 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 Se aplica a Hive 0.8 y posterior.
varbinary Byte[] binary BytesWritable Se aplica a Hive 0.8 y posterior.
date DateTime timestamp TimestampWritable
smalldatetime DateTime timestamp TimestampWritable
datetime2 DateTime timestamp TimestampWritable
datetime DateTime timestamp TimestampWritable
time TimeSpan timestamp TimestampWritable
Decimal Decimal Decimal BigDecimalWritable Se aplica a Hive 0.11 y posterior.

1A partir de SQL Server 2022 (16.x), Hadoop ya no es compatible.

Referencia de asignaciones de tipos Parquet y Delta

A continuación se enumeran las asignaciones de tipos de tabla externa Parquet y Delta a tipos de datos de SQL Server.

Los archivos Parquet y Delta Lake contienen descripciones de tipos para cada columna. En la tabla siguiente se describe cómo se asignan los tipos de Parquet a los tipos nativos de SQL.

Tipo de Parquet Tipo lógico de Parquet (anotación) Tipo de datos de 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) *(intercalación UTF8)
BINARY BSON No compatible
FIXED_LEN_BYTE_ARRAY DECIMAL Decimal
BYTE_ARRAY INTERVAL No compatible
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) No compatible
INT64 TIMESTAMP (normalizado a utc) (MILLIS / MICROS) datetime2
INT64 TIMESTAMP (no normalizado a utc) (MILLIS / MICROS) bigint: asegúrese de ajustar bigint explícitamente el valor con el desplazamiento de zona horaria antes de convertirlo en un valor datetime.
INT64 TIMESTAMP (NANOS) No compatible
Tipo complejo LISTA varchar(8000), serializado en JSON
Tipo complejo MAP varchar(8000), serializado en JSON

Referencia de asignación de tipos de Oracle

Tipo de datos de Oracle Tipo de 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
FECHA Datetime2
TIMESTAMP Datetime2

Error de coincidencia de tipos

Números flotantes: Oracle admite una precisión de número de punto flotante de 126, que es menor que la que admite SQL Server (53). Por lo tanto, Float (1-53) se puede asignar directamente, pero si se asigna un valor mayor, se experimentará una pérdida de datos debido al truncamiento.

Marca de tiempo:
Marca de tiempo y marca de tiempo con zona horaria local en Oracle admiten una precisión de 9 fracciones de segundo, mientras que SQL Server DateTime2 solo admite una precisión de 7 fracciones de segundo.

Asignación de tipo MongoDB

Tipo de datos BSON Tipo de SQL Server
Double Float
Cadena Nvarchar
Datos binarios Nvarchar
Id. de objeto Nvarchar
Booleano bit
Date Datetime2
Entero de 32 bits Int
Marca de tiempo Nvarchar
Entero de 64 bits BigInt
Decimal 128 Decimal
DBPointer Nvarchar
JavaScript Nvarchar
Clave Max Nvarchar
Clave Min Nvarchar
Símbolo Nvarchar
Expresión regular Nvarchar
Sin definir/NULL Nvarchar

MongoDB usa documentos BSON para almacenar los registros de datos. A diferencia de los escenarios anteriores, BSON carece de esquema y admite la incrustación de documentos y matrices en otros documentos. Esto proporciona flexibilidad al usuario.

Referencia de asignación de tipos de Teradata

Tipo de datos de Teradata Tipo de SQL Server
INTEGER Int
SMALLINT SmallInt
BIGINT BigInt
BYTEINT SmallInt
DECIMAL Decimal
FLOAT Decimal
BYTE Binario
VARBYTE Varbinary
BLOB varbinary
CHAR Nchar
CLOB Nvarchar
VARCHAR Nvarchar
Graphic Nchar
JSON Nvarchar
VARGRAPHIC Nvarchar
FECHA Date
TIMESTAMP Datetime2
HORA Hora
TIME WITH TIME ZONE Hora
TIMESTAMP WITH TIME ZONE Hora

Pasos siguientes

Para obtener más información sobre cómo se usa, consulte el artículo de referencia de Transact-SQL relativo a CREATE EXTERNAL TABLE.