Compartir a través de


Tipos de datos de tabla en SQL de Synapse

En este artículo, encontrará recomendaciones para definir tipos de datos de tabla en un grupo dedicado de Synapse SQL.

Tipos de datos

El grupo dedicado de Synapse SQL admite los tipos de datos usados más comúnmente. Para obtener una lista de los tipos de datos admitidos, consulte tipos de datos en la instrucción CREATE TABLE. Para Synapse SQL sin servidor, consulte el artículo Consulta de archivos de almacenamiento con un grupo de SQL sin servidor en Azure Synapse Analytics y Uso de OPENROWSET con un grupo de SQL sin servidor en Azure Synapse Analytics

Minimizar la longitud de fila

Minimizar el tamaño de los tipos de datos acorta la longitud de fila, lo que conduce a un mejor rendimiento de las consultas. Utilice el tipo de datos más pequeño que sirva para los datos.

  • Evite definir las columnas de caracteres con una longitud predeterminada de gran tamaño. Por ejemplo, si el valor más largo es de 25 caracteres, defina la columna como VARCHAR(25).
  • Evite el uso de NVARCHAR cuando solo necesite VARCHAR.
  • Utilice NVARCHAR(4000) o VARCHAR(8000) cuando sea posible en lugar de NVARCHAR(MAX) o VARCHAR(MAX).
  • Evite el uso de valores float y decimales con una escala de 0 (cero). Deben ser TINYINT, SMALLINT, INT o BIGINT.

Nota:

Si usa tablas externas de PolyBase para cargar las tablas de Synapse SQL, la longitud definida para la fila de la tabla no puede superar 1 MB. Cuando una fila con datos de longitud variable supera 1 MB, puede cargar la fila con BCP, pero no con PolyBase.

Identificar los tipos de datos no admitidos

Si va a migrar la base de datos desde otra base de datos SQL, puede encontrar tipos de datos no admitidos en SQL de Synapse. Utilice esta consulta para detectar tipos de datos no admitidos en el esquema de SQL existente.

SELECT  t.[name], c.[name], c.[system_type_id], c.[user_type_id], y.[is_user_defined], y.[name]
FROM sys.tables  t
JOIN sys.columns c on t.[object_id]    = c.[object_id]
JOIN sys.types   y on c.[user_type_id] = y.[user_type_id]
WHERE y.[name] IN ('geography','geometry','hierarchyid','image','text','ntext','sql_variant','xml')
 OR  y.[is_user_defined] = 1;

Soluciones alternativas para los tipos de datos no admitidos

La lista siguiente muestra los tipos de datos que SQL de Synapse no admite y proporciona alternativas que puede usar en lugar de los tipos de datos no admitidos.

Tipo de datos no admitido Solución alternativa
geometry varbinary
geography varbinary
hierarchyid nvarchar(4000)
image varbinary
text varchar
ntext nvarchar
sql_variant Divida la columna en varias columnas fuertemente tipadas.
table Convierta en tablas temporales o considere la posibilidad de almacenar datos en Storage mediante CETAS.
timestamp Cambie el código para usar datetime2 y la función CURRENT_TIMESTAMP. Solo se admiten las constantes como valores predeterminados, por lo tanto, current_timestamp no se puede definir como una restricción predeterminada. Si tiene que migrar valores de la versión de fila de una columna de tipo timestamp, use BINARY(8) o VARBINARY(8) para valores de versión de fila NOT NULL o NULL.
xml varchar
tipo definido por el usuario Volver a convertir el tipo de datos nativo cuando sea posible.
valores predeterminados Los valores predeterminados solo admiten literales y constantes.

Para obtener más información sobre el desarrollo de tablas, consulte la introducción al desarrollo.