Tipi di dati per le tabelle in Synapse SQL
In questo articolo sono illustrate le raccomandazioni per la definizione dei tipi di dati per le tabelle nel pool SQL dedicato.
Tipo di dati
Il pool SQL dedicato di Synapse supporta i tipi di dati più diffusi. Per un elenco dei tipi di dati supportati, vedere tipi di dati nell'istruzione CREATE TABLE. Per Synapse SQL Serverless, vedere l'articolo Eseguire query sui file di archiviazione con un pool SQL serverless in Azure Synapse Analytics e Su come usare OPENROWSET usando il pool SQL serverless in Azure Synapse Analytics
Ridurre al minimo la lunghezza di riga
Ridurre al minimo le dimensioni dei tipi di dati consente di ridurre la lunghezza di riga, con conseguenti prestazioni migliori per le query. Usare il tipo di dati più piccolo adatto ai dati.
- Evitare di definire le colonne di tipo carattere con una lunghezza predefinita elevata. Ad esempio, se il valore più lungo è 25 caratteri, definire la colonna come VARCHAR(25).
- Evitare di usare NVARCHAR quando serve solo VARCHAR.
- Quando possibile, usare NVARCHAR(4000) o VARCHAR(8000) invece di NVARCHAR(MAX) o VARCHAR(MAX).
- Evitare di usare valori float e decimali con scala 0 (zero). Devono essere TINYINT, SMALLINT, INT o BIGINT.
Nota
Se si usano le tabelle esterne PolyBase per caricare le tabelle di Synapse SQL, la lunghezza definita per la riga della tabella non può essere maggiore di 1 MB. Quando una riga con dati di lunghezza variabile supera 1 MB, è possibile caricare la riga con BCP, ma non con PolyBase.
Identificare i tipi di dati non supportati
Se si esegue la migrazione del database da un altro database SQL, è possibile che si verifichino tipi di dati non supportati in Synapse SQL. Usare questa query per individuare i tipi di dati non supportati nello schema SQL esistente.
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;
Alternative per i tipi di dati non supportati
L'elenco seguente mostra i tipi di dati non supportati da Synapse SQL e offre alternative che è possibile usare anziché i tipi di dati non supportati.
Tipo di dati non supportati | Soluzione alternativa |
---|---|
geometry | varbinary |
geography | varbinary |
hierarchyid | nvarchar(4000) |
Immagine | varbinary |
Testo | varchar |
ntext | nvarchar |
sql_variant | Dividere la colonna in più colonne fortemente tipizzate. |
table | Eseguire la conversione in tabelle temporanee o valutare la possibilità di archiviare i dati nella risorsa di archiviazione usando CETAS. |
timestamp | Rielaborare il codice per usare datetime2 e la funzione CURRENT_TIMESTAMP. Solo le costanti sono supportate come impostazioni predefinite, pertanto current_timestamp non può essere definita come vincolo predefinito. Se è necessario eseguire la migrazione di valori della versione di riga da una colonna di tipo timestamp, usare BINARY(8) o VARBINARY(8) per valori della versione di riga NOT NULL o NULL. |
xml | varchar |
tipo definito dall'utente (UDT) | Riconvertire nel tipo di dati nativo, se possibile. |
valori predefiniti | I valori predefiniti supportano solo valori letterali e costanti. |
Contenuto correlato
Per altre informazioni sullo sviluppo di tabelle, vedere la panoramica dello sviluppo.