Asignación de tipos con PolyBase
Se aplica a: SQL Server (solo Windows) Azure SQL Database Azure Synapse Analytics 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 |
---|---|
Flotante | Flotante |
NUMBER | Flotante |
NUMBER (p,s) | Decimal (p, s) |
LONG | Nvarchar |
BINARY_FLOAT | Real |
BINARY_DOUBLE | Flotante |
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 |
---|---|
Doble | Flotante |
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 |
TIME | Time |
TIME WITH TIME ZONE | Time |
TIMESTAMP WITH TIME ZONE | Time |
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.