Tipi di dati delle tabelle in Synapse SQL

In questo articolo sono disponibili raccomandazioni per la definizione dei tipi di dati delle tabelle in Synapse SQL pool dedicato.

Tipi di dati

Synapse SQL pool dedicato supporta i tipi di dati usati più di frequente. 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 su file di archiviazione con pool SQL serverless in Azure Synapse Analytics e Come usare OPENROWSET usando un 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][NVARCHAR] quando serve solo VARCHAR.
  • Quando possibile, usare NVARCHAR(4000) o VARCHAR(8000) invece di NVARCHAR(MAX) o VARCHAR(MAX).

Nota

Se si usano tabelle esterne PolyBase per caricare le tabelle SQL Synapse, la lunghezza definita della riga della tabella non può superare 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')
 AND  y.[is_user_defined] = 1;

Alternative per i tipi di dati non supportati

L'elenco seguente mostra i tipi di dati che Synapse SQL non supporta e offre alternative che è possibile usare al posto dei tipi di dati non supportati.

Tipo di dati non supportati Soluzione alternativa
geometry varbinary
geography varbinary
hierarchyid nvarchar(4000)
image varbinary
text varchar
ntext nvarchar
sql_variant Dividere la colonna in più colonne fortemente tipizzate.
tabella Convertire in tabelle temporanee o prendere in considerazione l'archiviazione dei dati nell'archiviazione tramite CETAS.
timestamp Rielaborare il codice per usare datetime2 e la CURRENT_TIMESTAMP funzione . Solo le costanti sono supportate come valori predefiniti, quindi non è possibile definire current_timestamp 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 Riconvertire nel tipo di dati nativo, se possibile.
valori predefiniti I valori predefiniti supportano solo valori letterali e costanti.

Passaggi successivi

Per altre informazioni sullo sviluppo di tabelle, vedere Cenni preliminari sulle tabelle.