Tipi di dati di tabella in Azure SQL Data WarehouseTable data types in Azure SQL Data Warehouse

Raccomandazioni per la definizione dei tipi di dati di tabella in Azure SQL Data Warehouse.Recommendations for defining table data types in Azure SQL Data Warehouse.

Quali sono i tipi di dati?What are the data types?

SQL Data Warehouse supporta i tipi di dati più diffusi.SQL Data Warehouse supports the most commonly used data types. Per un elenco dei tipi di dati supportati, vedere tipi di dati nell'istruzione CREATE TABLE.For a list of the supported data types, see data types in the CREATE TABLE statement.

Ridurre al minimo la lunghezza di rigaMinimize row length

Ridurre al minimo le dimensioni dei tipi di dati consente di ridurre la lunghezza di riga, con conseguenti prestazioni migliori per le query.Minimizing the size of data types shortens the row length, which leads to better query performance. Usare il tipo di dati più piccolo adatto ai dati.Use the smallest data type that works for your data.

  • Evitare di definire le colonne di tipo carattere con una lunghezza predefinita elevata.Avoid defining character columns with a large default length. Ad esempio, se il valore più lungo è 25 caratteri, definire la colonna come VARCHAR(25).For example, if the longest value is 25 characters, then define your column as VARCHAR(25).
  • Evitare di usare [NVARCHAR][NVARCHAR] quando serve solo VARCHAR.Avoid using [NVARCHAR][NVARCHAR] when you only need VARCHAR.
  • Quando possibile, usare NVARCHAR(4000) o VARCHAR(8000) invece di NVARCHAR(MAX) o VARCHAR(MAX).When possible, use NVARCHAR(4000) or VARCHAR(8000) instead of NVARCHAR(MAX) or VARCHAR(MAX).

Se si usano le tabelle esterne PolyBase per caricare le tabelle, la lunghezza definita per la riga della tabella non può essere maggiore di 1 MB.If you are using PolyBase external tables to load your tables, the defined length of the table row cannot exceed 1 MB. Quando una riga con dati di lunghezza variabile supera 1 MB, è possibile caricare la riga con BCP, ma non con PolyBase.When a row with variable-length data exceeds 1 MB, you can load the row with BCP, but not with PolyBase.

Identificare i tipi di dati non supportatiIdentify unsupported data types

Se si esegue la migrazione del database da un altro database SQL, durante la migrazione è possibile riscontrare tipi di dati non supportati in SQL Data Warehouse.If you are migrating your database from another SQL database, you might encounter data types that are not supported in SQL Data Warehouse. Usare questa query per individuare i tipi di dati non supportati nello schema SQL esistente.Use this query to discover unsupported data types in your existing SQL schema.

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 supportatiWorkarounds for unsupported data types

L'elenco seguente mostra i tipi di dati non supportati da SQL Data Warehouse e indica le alternative utilizzabili al posto dei tipi di dati non supportati.The following list shows the data types that SQL Data Warehouse does not support and gives alternatives that you can use instead of the unsupported data types.

Tipo di dati non supportatiUnsupported data type Soluzione alternativaWorkaround
geometrygeometry varbinaryvarbinary
geographygeography varbinaryvarbinary
hierarchyidhierarchyid nvarchar(4000)nvarchar(4000)
imageimage varbinaryvarbinary
texttext varcharvarchar
ntextntext nvarcharnvarchar
sql_variantsql_variant Dividere la colonna in più colonne fortemente tipizzate.Split column into several strongly typed columns.
tabellatable Convertire in tabelle temporanee.Convert to temporary tables.
timestamptimestamp Rielaborare il codice per usare datetime2 e la funzione CURRENT_TIMESTAMP.Rework code to use datetime2 and the CURRENT_TIMESTAMP function. Solo le costanti sono supportate come valori predefiniti, quindi non è possibile definire current_timestamp come vincolo predefinito.Only constants are supported as defaults, therefore current_timestamp cannot be defined as a default constraint. 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.If you need to migrate row version values from a timestamp typed column, then use BINARY(8) or VARBINARY(8) for NOT NULL or NULL row version values.
xmlxml varcharvarchar
tipo definito dall'utente (UDT)user-defined type Riconvertire nel tipo di dati nativo, se possibile.Convert back to the native data type when possible.
valori predefinitidefault values I valori predefiniti supportano solo valori letterali e costanti.Default values support literals and constants only.

Passaggi successiviNext steps

Per altre informazioni sullo sviluppo di tabelle, vedere Cenni preliminari sulle tabelle.For more information on developing tables, see Table Overview.