CREATE TABLE

Si applica a: Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

Crea una nuova tabella in Azure Synapse Analytics o nella piattaforma di strumenti analitici (PDW).

Per informazioni sulle tabelle e il modo di usarle, vedere Tabelle in Azure Synapse Analytics.

Le indicazioni riferite ad Azure Synapse Analytics presenti in questo articolo si applicano sia ad Azure Synapse Analytics sia alla piattaforma di strumenti analitici (PDW), se non diversamente specificato.

Nota

Per le piattaforme SQL Server e Azure SQL, visitare CREATE TABLE e selezionare la versione del prodotto desiderata. Per informazioni di riferimento su Warehouse in Microsoft Fabric, vedere CREATE TABLE (Fabric).

Nota

Il pool SQL serverless di Azure Synapse Analytics supporta solo tabelle esterne e temporanee.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

-- Create a new table.
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( 
      { column_name <data_type>  [ <column_options> ] } [ ,...n ]
    )  
    [ WITH ( <table_option> [ ,...n ] ) ]  
[;]  

<column_options> ::=
    [ COLLATE Windows_collation_name ]
    [ NULL | NOT NULL ] -- default is NULL
    [ IDENTITY [ ( seed, increment ) ]
    [ <column_constraint> ]

<column_constraint>::=
    {
        DEFAULT constant_expression
        | PRIMARY KEY NONCLUSTERED NOT ENFORCED -- Applies to Azure Synapse Analytics only
        | UNIQUE NOT ENFORCED -- Applies to Azure Synapse Analytics only
    }

<table_option> ::=
    {
       CLUSTERED COLUMNSTORE INDEX -- default for Azure Synapse Analytics 
      | CLUSTERED COLUMNSTORE INDEX ORDER (column [,...n])  
      | HEAP --default for Parallel Data Warehouse
      | CLUSTERED INDEX ( { index_column_name [ ASC | DESC ] } [ ,...n ] ) -- default is ASC
    }  
    {
        DISTRIBUTION = HASH ( distribution_column_name )
      | DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] ) 
      | DISTRIBUTION = ROUND_ROBIN -- default for Azure Synapse Analytics
      | DISTRIBUTION = REPLICATE -- default for Parallel Data Warehouse
    }
    | PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] -- default is LEFT  
        FOR VALUES ( [ boundary_value [,...n] ] ) )

<data type> ::=
      datetimeoffset [ ( n ) ]  
    | datetime2 [ ( n ) ]  
    | datetime  
    | smalldatetime  
    | date  
    | time [ ( n ) ]  
    | float [ ( n ) ]  
    | real [ ( n ) ]  
    | decimal [ ( precision [ , scale ] ) ]   
    | numeric [ ( precision [ , scale ] ) ]   
    | money  
    | smallmoney  
    | bigint  
    | int   
    | smallint  
    | tinyint  
    | bit  
    | nvarchar [ ( n | max ) ]  -- max applies only to Azure Synapse Analytics 
    | nchar [ ( n ) ]  
    | varchar [ ( n | max )  ] -- max applies only to Azure Synapse Analytics 
    | char [ ( n ) ]  
    | varbinary [ ( n | max ) ] -- max applies only to Azure Synapse Analytics 
    | binary [ ( n ) ]  
    | uniqueidentifier  

Argomenti

database_name

Nome del database in cui sarà contenuta la nuova tabella. Il valore predefinito è il database attuale.

schema_name

Schema della tabella. Specificare lo schema è facoltativo. Se vuoto, viene usato lo schema predefinito.

table_name

Nome della nuova tabella. Per creare una tabella temporanea locale, anteporre # al nome della tabella. Per spiegazioni e indicazioni sulle tabelle temporanee, vedere Tabelle temporanee nel pool SQL dedicato in Azure Synapse Analytics.

column_name

Nome di una colonna di tabella.

Opzioni colonna

COLLATE Windows_collation_name
Specifica le regole di confronto per l'espressione. È necessario specificare una delle regole di confronto di Windows supportate da SQL Server. Per un elenco delle regole di confronto di Windows supportate da SQL Server, vedere Nome delle regole di confronto di Windows (Transact-SQL)).

NULL | NOT NULL
Specifica se i valori NULL sono consentiti nella colonna. Il valore predefinito è NULL.

[ CONSTRAINT constraint_name ] DEFAULT constant_expression
Specifica il valore di colonna predefinito.

Argomento Spiegazione
constraint_name Nome facoltativo per il vincolo. Il nome del vincolo è univoco all'interno del database. Può essere usato nuovamente in altri database.
constant_expression Il valore predefinito per la colonna. L'espressione deve essere un valore letterale o una costante. Ad esempio, queste espressioni costanti sono consentite: 'CA', 4. Queste espressioni costanti non sono consentite: 2+3, CURRENT_TIMESTAMP.

Opzioni della struttura della tabella

Per indicazioni su come scegliere il tipo di tabella, vedere Tabelle di indicizzazione in Azure Synapse Analytics.

CLUSTERED COLUMNSTORE INDEX

Archivia la tabella come indice columnstore cluster. L'indice columnstore cluster viene applicato a tutti i dati della tabella. Questo comportamento corrisponde all'impostazione predefinita per Azure Synapse Analytics.

HEAP Archivia la tabella come heap. Questo comportamento corrisponde all'impostazione predefinita per la piattaforma di strumenti analitici (PDW).

CLUSTERED INDEX ( index_column_name [ ,...n ] )
Archivia la tabella come indice cluster con una o più colonne chiave. Questo comportamento archivia i dati per riga. Usare index_column_name per specificare il nome di una o più colonne chiave nell'indice. Per altre informazioni, vedere Tabelle rowstore.

LOCATION = USER_DB Questa opzione è deprecata. Sintatticamente viene accettata, ma non è più richiesta e non influisce sul comportamento.

Opzioni di distribuzione della tabella

Per informazioni su come scegliere il metodo di distribuzione migliore e usare le tabelle distribuite, vedere Progettazione di tabelle distribuite con pool SQL dedicato in Azure Synapse Analytics.

Per consigli sulla migliore strategia di distribuzione da usare in base ai carichi di lavoro, vedere Synapse SQL Distribution Advisor (anteprima).

DISTRIBUTION = HASH ( distribution_column_name ) Assegna ogni riga a una distribuzione eseguendo l'hashing del valore archiviato distribution_column_name. L'algoritmo è deterministico ovvero esegue sempre l'hashing dello stesso valore per la stessa distribuzione. La colonna di distribuzione deve essere definita come NOT NULL perché tutte le righe con NULL vengono assegnate alla stessa distribuzione.

DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] ) Distribuisce le righe in base ai valori hash di un massimo di otto colonne, consentendo una distribuzione più uniforme dei dati della tabella di base, riducendo l'asimmetria dei dati nel tempo e migliorando le prestazioni delle query.

Nota

  • Per abilitare la funzionalità di distribuzione a più colonne , impostare il livello di compatibilità del database su 50 con questo comando. Per altre informazioni sull'impostazione del livello di compatibilità del database, vedere ALTER DATABASE SCOPED CONFIGURATION. Ad esempio: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 50;
  • Per disabilitare la funzionalità distribuzione a più colonne , eseguire questo comando per modificare il livello di compatibilità del database su AUTO. Ad esempio: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = AUTO; le tabelle MCD esistenti rimarranno ma diventano illeggibili. Le query sulle tabelle MCD restituiranno l'errore: Related table/view is not readable because it distributes data on multiple columns and multi-column distribution is not supported by this product version or this feature is disabled.
    • Per ottenere nuovamente l'accesso alle tabelle MCD, abilitare di nuovo la funzionalità.
    • Per caricare i dati in una tabella MCD, usare l'istruzione CTAS. Tenere presente che l'origine dati deve corrispondere a tabelle di Synapse SQL.
  • Generare script per creare tabelle MCD è attualmente supportato SSMS versione 19 e versioni successive.

DISTRIBUTION = ROUND_ROBIN Distribuisce le righe in modo uniforme tra tutte le distribuzioni secondo uno schema round robin. Questo comportamento corrisponde all'impostazione predefinita per Azure Synapse Analytics.

DISTRIBUTION = REPLICATE Archivia una copia della tabella in ogni nodo di calcolo. Per Azure Synapse Analytics, la tabella viene archiviata in un database di distribuzione in ogni nodo di calcolo. Per la piattaforma di strumenti analitici (PDW), la tabella viene archiviata in filegroup di SQL Server che si estende al nodo di calcolo. Questo comportamento corrisponde all'impostazione predefinita per la piattaforma di strumenti analitici (PDW).

Opzioni di partizione della tabella

Per informazioni sull'uso delle partizioni di tabella, vedere Partizionamento delle tabelle nel pool di SQL dedicato.

PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,...n] ] ))
Crea una o più partizioni di tabella. Queste partizioni sono porzioni orizzontali della tabella che consentono di applicare operazioni a subset di righe, indipendentemente dal fatto che la tabella sia archiviata come heap, indice cluster o indice columnstore cluster. A differenza della colonna di distribuzione, le partizioni della tabella non determinano la distribuzione in cui viene archiviata ogni riga. Le partizioni della tabella determinano invece il modo in cui le righe vengono raggruppate e archiviate all'interno di ogni distribuzione.

Argomento Spiegazione
partition_column_name Specifica la colonna usata da Azure Synapse Analytics per partizionare le righe. Questa colonna può essere qualsiasi tipo di dati. In Azure Synapse Analytics i valori della colonna di partizionamento vengono ordinati in modo crescente. L'ordinamento dal basso verso l'alto va da LEFT a RIGHT nella specifica RANGE.
RANGE LEFT Specifica che il valore limite appartiene alla partizione a sinistra (i valori più bassi). Il valore predefinito è LEFT.
RANGE RIGHT Specifica che il valore limite appartiene alla partizione a destra (i valori più alti).
FOR VALUES ( boundary_value [,...n] ) Specifica i valori limite per la partizione. boundary_value è un'espressione costante. Non può essere NULL. Deve corrispondere o essere convertibile in modo implicito nel tipo di dati di partition_column_name. Non può essere troncata durante la conversione implicita in modo che la dimensione e la scalabilità del valore non corrispondano al tipo di dati di partition_column_name



Se si specifica la PARTITION clausola , ma non si specifica un valore limite, Azure Synapse Analytics crea una tabella partizionata con una partizione. Se applicabile, è possibile suddividere la tabella in due partizioni in un secondo momento.



Se si specifica un valore limite, la tabella risultante ha due partizioni; uno per i valori inferiori al valore limite e uno per i valori superiori al valore limite. Se si sposta una partizione in una tabella non partizionata, la tabella non partizionata riceve i dati, ma non avrà i limiti della partizione nei relativi metadati.

Per un esempio, vedere Creare una tabella partizionata.

Opzione dell'indice columnstore cluster ordinato

L'indice columnstore cluster (CCI) rappresenta l'opzione predefinita per la creazione di tabelle in Azure Synapse Analytics. I dati in un CCI non vengono ordinati prima di essere compressi in segmenti columnstore. Quando si crea un indice columnstore cluster con ORDER, i dati vengono ordinati prima di essere aggiunti ai segmenti di indice e le prestazioni delle query possono quindi essere migliori. Per altre informazioni sugli indici columnstore cluster ordinati in Azure Synapse Analytics, vedere Ottimizzazione delle prestazioni con indice columnstore cluster ordinato.

È possibile creare un indice columnstore cluster ordinato in colonne con qualsiasi tipo di dati supportato in Azure Synapse Analytics, ad eccezione delle colonne stringa.

Gli utenti possono eseguire query column_store_order_ordinal sulla colonna in sys.index_columns per la colonna o le colonne su cui è ordinata una tabella e la sequenza nell'ordinamento.

Per informazioni dettagliate, vedere Ottimizzazione delle prestazioni con indice columnstore cluster ordinato.

Tipo di dati

Azure Synapse Analytics supporta i tipi di dati più diffusi. Per informazioni sui tipi di dati e sul modo di usarli, vedere Tipi di dati di tabella in Azure Synapse Analytics.

Nota

Come per SQL Server, è previsto un limite di 8.060 byte per riga. Questo potrebbe diventare un problema di blocco per le tabelle con molte colonne o colonne con tipi di dati di grandi dimensioni, ad esempio nvarchar(max) o varbinary(max). Inserimenti o aggiornamenti che violano il limite di byte 8060 generano errori con codice 511 o 611. Per altre informazioni, vedere Guida all'architettura di pagine ed extents.

Per una tabella delle conversioni dei tipi di dati, vedere la sezione Conversioni implicite di CAST e CONVERT (Transact-SQL).For a table of data type conversions, see the Implicit Conversions section of CAST and CONVERT (Transact-SQL). Per altre informazioni, vedere Funzioni e tipi di dati di data e ora (Transact-SQL).

L'elenco seguente dei tipi di dati supportati include i relativi dettagli e byte di archiviazione:

datetimeoffset [ ( n ) ]
Il valore predefinito di n è 7.

datetime2 [ ( n ) ]
Come per datetime, ad eccezione del fatto che è possibile specificare il numero di secondi frazionari. Il valore predefinito di n è 7.

Valore n Precisione Ridimensiona
0 19 0
1 21 1
2 22 2
3 23 3
4 24 4
5 25 5
6 26 6
7 27 7

datetime
Archivia data e ora del giorno con 19-23 caratteri in base al calendario gregoriano. La data può contenere anno, mese e giorno. L'ora contiene ore, minuti, secondi. È possibile visualizzare tre cifre per i secondi frazionari. Le dimensioni di archiviazione sono di 8 byte.

smalldatetime
Archivia una data e un'ora. La dimensione dello spazio di archiviazione è 4 byte.

date
Archivia una data usando un massimo di 10 caratteri per anno, mese e giorno in base al calendario gregoriano. La dimensione dello spazio di archiviazione è 3 byte. La data viene archiviata come numero intero.

time [ ( n ) ]
Il valore predefinito di n è 7.

float [ ( n ) ]
Tipo di dati numerici approssimati da usare con dati numerici a virgola mobile. I dati a virgola mobile sono approssimati, ovvero non tutti i valori nell'intervallo del tipo di dati possono essere rappresentati in modo esatto. n specifica il numero di bit usati per archiviare la mantissa di float in notazione scientifica. n determina la precisione e la dimensione dello spazio di archiviazione. Se si specifica n, il valore deve essere compreso tra 1 e 53. Il valore predefinito di n è 53.

Valore n Precisione Dimensioni dello spazio di archiviazione
1-24 7 cifre 4 byte
25-53 15 cifre 8 byte

In Azure Synapse Analytics n può assumere uno di due valori possibili. Se 1<= n<= 24, n viene interpretato come 24. Se 25<= n<= 53, n viene interpretato come 53.

Il tipo di dati float di Azure Synapse Analytics è conforme allo standard ISO per tutti i valori di n da 1 a 53. Il sinonimo di precisione doppia è float(53).

real [ ( n ) ]
La definizione di reale è la stessa di float. Il sinonimo ISO per real è float(24).

decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
Archivia numeri con precisione e scala fisse.

precision
Numero totale massimo di cifre decimali che è possibile archiviare, su entrambi i lati del separatore decimale. La precisione deve essere un valore compreso tra 1 e la precisione massima di 38. La precisione predefinita è 18.

scale
Numero massimo di cifre decimali che è possibile archiviare a destra del separatore decimale. Scale deve essere un valore compreso tra 0 e precision. È possibile specificare scale solo se precision è specificato. Poiché la scalabilità predefinita è 0, 0<= scale<= precision. Le dimensioni massime di archiviazione variano a seconda della precisione.

Precisione Byte per l'archiviazione
1-9 5
10-19 9
20-28 13
29-38 17

money | smallmoney
Tipi di dati che rappresentano valori di valuta.

Tipo di dati Byte per l'archiviazione
money 8
smallmoney 4

bigint | int | smallint | tinyint
Tipi di dati numerici esatti che utilizzano dati integer. La risorsa di archiviazione è illustrata nella tabella seguente.

Tipo di dati Byte per l'archiviazione
bigint 8
int 4
smallint 2
tinyint 1

bit
Tipo di dati integer che può accettare un valore di 1, 0 o NULL. Azure Synapse Analytics ottimizza l'archiviazione delle colonne di bit. Se una tabella contiene al massimo 8 colonne di tipo bit, le colonne vengono archiviate come singolo byte. Se la tabella contiene da 9 a 16 colonne di tipo bit, le colonne vengono archiviate come due byte e così via.

nvarchar [ ( n | max ) ] Dati di caratteri Unicode a lunghezza variabile. n può essere un valore compreso tra 1 e 4000. Tramite max viene indicato che la capacità di memorizzazione massima è di 2^31-1 byte (2 GB). Le dimensioni in byte dello spazio di archiviazione sono pari al doppio del numero di caratteri immessi + 2 byte. La lunghezza dei dati immessi può essere uguale a zero caratteri. La max lunghezza si applica solo ad Azure Synapse Analytics.

nchar [ ( n ) ]
Dati di tipo carattere Unicode a lunghezza fissa con una lunghezza di n caratteri. n deve essere un valore compreso tra 1 e 4000. Le dimensioni di archiviazione, espresse in byte, sono pari al doppio di n.

varchar [ ( n | max ) ] Dati di tipo carattere non Unicode a lunghezza variabile con lunghezza di n byte. ndeve essere un valore compreso tra 1 e 8000. Tramite max viene indicato che la capacità di memorizzazione massima è di 2^31-1 byte (2 GB). Le dimensioni di archiviazione sono pari all'effettiva lunghezza dei dati immessi + 2 byte. La max lunghezza si applica solo ad Azure Synapse Analytics.

char [ ( n ) ]
Dati di tipo carattere non Unicode a lunghezza fissa con una lunghezza di n byte. ndeve essere un valore compreso tra 1 e 8000. Le dimensioni di archiviazione corrispondono a n byte. L'impostazione predefinita per n è 1.

varbinary [ ( n | max ) ] Dati binari a lunghezza variabile. n può essere un valore compreso tra 1 e 8000. Tramite max viene indicato che la capacità di memorizzazione massima è di 2^31-1 byte (2 GB). Le dimensioni di archiviazione sono pari all'effettiva lunghezza dei dati immessi + 2 byte. Il valore predefinito di n è 7. La max lunghezza si applica solo ad Azure Synapse Analytics.

binary [ ( n ) ]
Dati binari a lunghezza fissa con lunghezza di n byte. n può essere un valore compreso tra 1 e 8000. Le dimensioni di archiviazione corrispondono a n byte. Il valore predefinito di n è 7.

uniqueidentifier
GUID a 16 byte.

Autorizzazioni

La creazione di una tabella richiede l'autorizzazione nel ruolo predefinito del database db_ddladmin o:

  • Autorizzazione CREATE TABLE per il database
  • ALTER SCHEMA autorizzazione per lo schema della tabella

La creazione di una tabella partizionata richiede l'autorizzazione nel ruolo predefinito del database db_ddladmin o

  • l'autorizzazione ALTER ANY DATASPACE

L'account di accesso che crea una tabella temporanea locale riceve le autorizzazioni CONTROL, INSERT, SELECT e UPDATE per la tabella.

Osservazioni:

Per i limiti minimi e massimi in Azure Synapse Analytics, vedere Limiti di capacità di Azure Synapse Analytics.

Determinare il numero di partizioni di tabella

Ogni tabella definita dall'utente è suddivisa in tabelle più piccole che vengono archiviate in percorsi separati detti distribuzioni. Azure Synapse Analytics usa 60 distribuzioni. Nella piattaforma di strumenti analitici (PDW) il numero di distribuzioni dipende dal numero di nodi di calcolo.

Ogni distribuzione contiene tutte le partizioni della tabella. Ad esempio, se sono presenti 60 distribuzioni e quattro partizioni di tabella oltre a una partizione vuota, vi saranno 300 partizioni (5 x 60= 300). Se la tabella è un indice columnstore cluster, sarà presente un indice columnstore per partizione, ovvero saranno presenti 300 indici columnstore.

Si consiglia di usare un numero inferiore di partizioni di tabella per garantire che ogni indice columnstore abbia righe a sufficienza per poter sfruttare i vantaggi degli indici columnstore. Per altre informazioni in Azure Synapse Analytics, vedere Partizionamento di tabelle nel pool SQL dedicato e negli indici nelle tabelle del pool SQL dedicato in Azure Synapse Analytics.

Tabella rowstore (heap o indice cluster)

Una tabella rowstore è una tabella archiviata in ordine riga per riga. Può essere un heap o un indice cluster. Azure Synapse Analytics crea tutte le tabelle rowstore con la compressione della pagina. Questo comportamento non è configurabile dall'utente.

Tabella columnstore (indice columnstore)

Una tabella columnstore è una tabella archiviata in ordine colonna per colonna. L'indice columnstore è la tecnologia che gestisce i dati archiviati in una tabella columnstore. L'indice columnstore cluster non influisce sulla modalità di distribuzione dei dati. Influisce invece sulla modalità di archiviazione dei dati all'interno di ogni distribuzione.

Per modificare una tabella rowstore in una tabella columnstore, eliminare tutti gli indici esistenti dalla tabella e creare un indice columnstore cluster. Per un esempio, vedere CREATE COLUMNSTORE INDEX (Transact-SQL).

Vedi questi articoli per ulteriori informazioni:

Limiti

  • Non è possibile definire un vincolo DEFAULT per una colonna di distribuzione.
  • Il nome della tabella non può essere maggiore di 128 caratteri.
  • Il nome della colonna non può essere maggiore di 128 caratteri.

Partizioni

La colonna di partizione non può avere regole di confronto solo Unicode. Ad esempio, l'istruzione seguente ha esito negativo:

CREATE TABLE t1 ( c1 varchar(20) COLLATE Divehi_90_CI_AS_KS_WS) WITH (PARTITION (c1 RANGE FOR VALUES (N'')))

Se boundary_value è un valore letterale che deve essere convertito in modo implicito nel tipo di dati in partition_column_name, si verifica una discrepanza. Nelle viste di sistema di Azure Synapse Analytics viene visualizzato il valore letterale, ma per le operazioni Transact-SQL viene usato il valore convertito.

Tabelle temporanee

Le tabelle temporanee globali che iniziano con ## non sono supportate.

Le tabelle temporanee locali presentano le seguenti limitazioni e restrizioni:

  • Sono visibili solo per la sessione corrente. Azure Synapse Analytics le elimina automaticamente alla fine della sessione. Per eliminarle in modo esplicito, usare l'istruzione DROP TABLE.
  • Non possono essere rinominate.
  • Non possono avere partizioni o viste.
  • Non è possibile modificarne le autorizzazioni. Le istruzioni GRANT, DENY e REVOKE non possono essere usate con le tabelle temporanee locali.
  • I comandi della console del database sono bloccati per le tabelle temporanee.
  • Se si usa più di una tabella temporanea locale all'interno di un batch, ogni tabella deve avere un nome univoco. Se più sessioni eseguono lo stesso batch e creano la stessa tabella temporanea locale, Azure Synapse Analytics aggiunge internamente un suffisso numerico al nome della tabella temporanea locale in modo da mantenere un nome univoco per ogni tabella temporanea locale.

Comportamento di blocco

Acquisisce un blocco esclusivo per la tabella. Acquisisce un blocco condiviso per gli oggetti DATABASE, SCHEMA e SCHEMARESOLUTION.

Esempi per le colonne

R. Specificare le regole di confronto a livello di colonna

Nell'esempio seguente la tabella MyTable viene creata con due diverse regole di confronto per la colonna. Per impostazione predefinita, la colonna, mycolumn1, ha le regole di confronto predefinite Latin1_General_100_CI_AS_KS_WS. La colonna mycolumn2 ha le regole di confronto Frisian_100_CS_AS.

CREATE TABLE MyTable   
  (  
    mycolumnnn1 nvarchar,  
    mycolumn2 nvarchar COLLATE Frisian_100_CS_AS )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

B. Specificare un vincolo DEFAULT per una colonna

L'esempio seguente illustra la sintassi che consente di specificare un valore predefinito per una colonna. La colonna colA è associata a un vincolo predefinito denominato constraint_colA e a un valore predefinito di 0.

CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

Esempi per le tabelle temporanee

C. Creare una tabella temporanea locale

L'esempio seguente crea una tabella temporanea locale denominata #myTable. La tabella viene specificata con un nome in tre parti, che inizia con #.

CREATE TABLE AdventureWorks.dbo.#myTable
  (  
   id int NOT NULL,  
   lastName varchar(20),  
   zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

Esempi per la struttura della tabella

D. Creare una tabella con un indice columnstore cluster

Nell'esempio seguente viene creata una tabella distribuita con un indice columnstore cluster. Ogni distribuzione viene archiviata come columnstore.

L'indice columnstore cluster non influisce sul modo in cui vengono distribuiti i dati. I dati vengono sempre distribuiti per riga. L'indice columnstore cluster influisce sul modo in cui vengono archiviati i dati all'interno di ogni distribuzione.

  CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH   
  (   
    DISTRIBUTION = HASH ( colB ),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

E. Creare un indice columnstore cluster ordinato

L'esempio seguente mostra come creare un indice columnstore cluster ordinato. L'indice viene ordinato in SHIPDATE.

CREATE TABLE Lineitem  
WITH (DISTRIBUTION = ROUND_ROBIN, CLUSTERED COLUMNSTORE INDEX ORDER(SHIPDATE))  
AS  
SELECT * FROM ext_Lineitem

Esempi per la distribuzione della tabella

F. Creare una tabella ROUND_ROBIN

L'esempio seguente crea una tabella ROUND_ROBIN con tre colonne e senza partizioni. I dati vengono diffusi in tutte le distribuzioni. La tabella viene creata con un indice columnstore cluster, che consente una migliore qualità delle prestazioni e della compressione dei dati rispetto a un heap o un indice rowstore cluster.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX );  

G. Creare una tabella con distribuzione hash in più colonne (anteprima)

Nell'esempio seguente viene creata la stessa tabella dell'esempio precedente. Per questa tabella, tuttavia, le righe vengono distribuite (nelle colonne id e zipCode). La tabella viene creata con un indice columnstore cluster, che consente un livello di prestazioni e compressione dati migliore rispetto a un heap o un indice rowstore cluster.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id, zipCode), 
    CLUSTERED COLUMNSTORE INDEX  
  );  

H. Creare una tabella replicata

L'esempio seguente crea una tabella replicata simile agli esempi precedenti. Le tabelle replicate vengono copiate completamente in ogni nodo di calcolo. Con questa copia in ogni nodo di calcolo, lo spostamento dei dati viene ridotto per le query. Questo esempio viene creato con CLUSTERED INDEX, che offre una compressione dei dati migliore di quella di un heap. Un heap potrebbe non contenere righe sufficienti per ottenere una buona compressione CLUSTERED COLUMNSTORE INDEX.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = REPLICATE,
    CLUSTERED INDEX (lastName)  
  );  

Esempi per le partizioni della tabella

I. Creare una tabella partizionata

Nell'esempio seguente viene creata la stessa tabella illustrata nell'esempio A, con l'aggiunta del RANGE LEFT partizionamento nella id colonna . Specifica quattro valori limite per le partizioni, ottenendo cinque partizioni.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
  (

    PARTITION ( id RANGE LEFT FOR VALUES (10, 20, 30, 40 )),  
    CLUSTERED COLUMNSTORE INDEX
  );  

In questo esempio i dati vengono ordinati nelle partizioni seguenti:

  • Partizione 1: col <= 10
  • Partizione 2: 10 < col <= 20
  • Partizione 3: 20 < col <= 30
  • Partizione 4: 30 < col <= 40
  • Partizione 5: 40 < col

Se questa stessa tabella viene partizionata RANGE RIGHT anziché RANGE LEFT (impostazione predefinita), i dati vengono ordinati nelle partizioni seguenti:

  • Partizione 1; col < 10
  • Partizione 2: 10 <= col < 20
  • Partizione 3: 20 <= col < 30
  • Partizione 4: 30 <= col < 40
  • Partizione 5: 40 <= col

J. Creare una tabella partizionata con una partizione

L'esempio seguente crea una tabella partizionata con un'unica partizione. Non specifica valori limite e quindi si ottiene una sola partizione.

CREATE TABLE myTable (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
    (
      PARTITION ( id RANGE LEFT FOR VALUES ( )),  
      CLUSTERED COLUMNSTORE INDEX  
    )  
;  

K. Creare una tabella con partizionamento di data

L'esempio seguente crea una nuova tabella denominata myTable, con partizionamento per una colonna date. Usando RANGE RIGHT e le date per i valori limite, inserisce un mese di dati in ogni partizione.

CREATE TABLE myTable (  
    l_orderkey      bigint,
    l_partkey       bigint,
    l_suppkey       bigint,
    l_linenumber    bigint,
    l_quantity      decimal(15,2),  
    l_extendedprice decimal(15,2),  
    l_discount      decimal(15,2),  
    l_tax           decimal(15,2),  
    l_returnflag    char(1),  
    l_linestatus    char(1),  
    l_shipdate      date,  
    l_commitdate    date,  
    l_receiptdate   date,  
    l_shipinstruct  char(25),  
    l_shipmode      char(10),  
    l_comment       varchar(44))  
WITH
  (
    DISTRIBUTION = HASH (l_orderkey),  
    CLUSTERED COLUMNSTORE INDEX,  
    PARTITION ( l_shipdate  RANGE RIGHT FOR VALUES
      (  
        '1992-01-01','1992-02-01','1992-03-01','1992-04-01','1992-05-01',
        '1992-06-01','1992-07-01','1992-08-01','1992-09-01','1992-10-01',
        '1992-11-01','1992-12-01','1993-01-01','1993-02-01','1993-03-01',
        '1993-04-01','1993-05-01','1993-06-01','1993-07-01','1993-08-01',
        '1993-09-01','1993-10-01','1993-11-01','1993-12-01','1994-01-01',
        '1994-02-01','1994-03-01','1994-04-01','1994-05-01','1994-06-01',
        '1994-07-01','1994-08-01','1994-09-01','1994-10-01','1994-11-01',
        '1994-12-01'  
      ))
  );  

Si applica a: Warehouse in Microsoft Fabric

Crea una nuova tabella in un warehouse in Microsoft Fabric.

Per altre informazioni, vedere Creare tabelle in Warehouse in Microsoft Fabric.

Nota

Per informazioni di riferimento su Azure Synapse Analytics and Analytics Platform System (PDW), vedere CREATE TABLE (Azure Synapse Analytics). Per le piattaforme SQL Server e Azure SQL, visitare CREATE TABLE e selezionare la versione del prodotto desiderata dall'elenco a discesa versione.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

-- Create a new table.
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( 
      { column_name <data_type>  [ <column_options> ] } [ ,...n ]
    )  
[;]  

<column_options> ::=
    [ NULL | NOT NULL ] -- default is NULL

<data type> ::=
      datetime2 ( n )   
    | date  
    | time ( n )   
    | float [ ( n ) ]  
    | real [ ( n ) ]  
    | decimal [ ( precision [ , scale ] ) ]   
    | numeric [ ( precision [ , scale ] ) ]   
    | bigint  
    | int   
    | smallint  
    | bit  
    | varchar [ ( n | MAX ) ] 
    | char [ ( n ) ]  
    | varbinary [ ( n | MAX ) ] 
    | uniqueidentifier  

Argomenti

database_name

Nome del database in cui sarà contenuta la nuova tabella. Il valore predefinito è il database attuale.

schema_name

Schema della tabella. Specificare lo schema è facoltativo. Se vuoto, viene usato lo schema predefinito.

table_name

Nome della nuova tabella.

column_name

Nome di una colonna di tabella.

Opzioni colonna

NULL | NOT NULL
Specifica se i valori NULL sono consentiti nella colonna. Il valore predefinito è NULL.

Tipo di dati

Microsoft Fabric supporta i tipi di dati usati più di frequente. Per altre informazioni, vedere Tipo di dati in Microsoft Fabric.

Nota

Come per SQL Server, è previsto un limite di 8.060 byte per riga. Questo potrebbe diventare un problema di blocco per le tabelle con molte colonne o colonne con tipi di dati di grandi dimensioni, ad esempio varchar(8000) o varbinary(8000). Inserimenti o aggiornamenti che violano il limite di byte 8060 generano errori con codice 511 o 611. Per altre informazioni, vedere Guida all'architettura di pagine ed extents.

Per una tabella delle conversioni dei tipi di dati, vedere la sezione Conversioni implicite di CAST e CONVERT (Transact-SQL).For a table of data type conversions, see the Implicit Conversions section of CAST and CONVERT (Transact-SQL). Per altre informazioni, vedere Funzioni e tipi di dati di data e ora (Transact-SQL).

L'elenco seguente dei tipi di dati supportati include i relativi dettagli e byte di archiviazione.

datetime2 ( n )
Archivia la data e l'ora del giorno con 19-26 caratteri in base al calendario gregoriano. La data può contenere anno, mese e giorno. L'ora contiene ore, minuti, secondi. Come opzione, è possibile archiviare e visualizzare da zero a sei cifre per i secondi frazionari in base al parametro n . Le dimensioni di archiviazione sono di 8 byte. ndeve essere un valore compreso tra 0 e 6.

Nota

Non esiste alcuna precisione predefinita come altre piattaforme SQL. È necessario specificare il valore per la precisione da 0 a 6.

Valore n Precisione Ridimensiona
0 19 0
1 21 1
2 22 2
3 23 3
4 24 4
5 25 5
6 26 6

date
Archivia una data usando un massimo di 10 caratteri per anno, mese e giorno in base al calendario gregoriano. La dimensione dello spazio di archiviazione è 3 byte. La data viene archiviata come numero intero.

time ( n )
ndeve essere un valore compreso tra 0 e 6.

float [ ( n ) ]
Tipo di dati numerici approssimati da usare con dati numerici a virgola mobile. I dati a virgola mobile sono approssimati, ovvero non tutti i valori nell'intervallo del tipo di dati possono essere rappresentati in modo esatto. n specifica il numero di bit utilizzati per archiviare la mantissa del float nella notazione scientifica. n determina la precisione e la dimensione dello spazio di archiviazione. Se si specifica n, il valore deve essere compreso tra 1 e 53. Il valore predefinito di n è 53.

Nota

Non esiste alcuna precisione predefinita come altre piattaforme SQL. È necessario specificare il valore per la precisione da 0 a 6.

Valore n Precisione Dimensioni dello spazio di archiviazione
1-24 7 cifre 4 byte
25-53 15 cifre 8 byte

In Azure Synapse Analytics n può assumere uno di due valori possibili. Se 1<= n<= 24, n viene interpretato come 24. Se 25<= n<= 53, n viene interpretato come 53.

Il tipo di dati float di Azure Synapse Analytics è conforme allo standard ISO per tutti i valori di n da 1 a 53. Il sinonimo di precisione doppia è float(53).

real [ ( n ) ]
La definizione di reale è la stessa di float. Il sinonimo ISO per real è float(24).

decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
Archivia numeri con precisione e scala fisse.

precision
Numero totale massimo di cifre decimali che è possibile archiviare, su entrambi i lati del separatore decimale. La precisione deve essere un valore compreso tra 1 e la precisione massima di 38. La precisione predefinita è 18.

scale
Numero massimo di cifre decimali che è possibile archiviare a destra del separatore decimale. Scale deve essere un valore compreso tra 0 e precision. È possibile specificare scale solo se precision è specificato. Poiché la scalabilità predefinita è 0, 0<= scale<= precision. Le dimensioni massime di archiviazione variano a seconda della precisione.

Precisione Byte per l'archiviazione
1-9 5
10-19 9
20-28 13
29-38 17

bigint | int | smallint
Tipi di dati numerici esatti che utilizzano dati integer. La risorsa di archiviazione è illustrata nella tabella seguente.

Tipo di dati Byte per l'archiviazione
bigint 8
int 4
smallint 2

bit
Tipo di dati integer che può accettare un valore di 1, 0 o NULL. Azure Synapse Analytics ottimizza l'archiviazione delle colonne di bit. Se una tabella contiene al massimo 8 colonne di tipo bit, le colonne vengono archiviate come singolo byte. Se la tabella contiene da 9 a 16 colonne di tipo bit, le colonne vengono archiviate come due byte e così via.

varchar [ ( n | MAX ) ] Dati di tipo carattere Unicode a lunghezza variabile con lunghezza di n byte. ndeve essere un valore compreso tra 1 e 8000. Le dimensioni di archiviazione sono pari all'effettiva lunghezza dei dati immessi + 2 byte. L'impostazione predefinita per n è 1. La varchar(MAX) colonna può archiviare fino a 1 MB di testo in Warehouse.

Nota

varchar(MAX) è disponibile in anteprima in Warehouse. Per altre informazioni, vedere Tipo di dati in Microsoft Fabric.

char [ ( n ) ]
Dati di tipo carattere Unicode a lunghezza fissa con lunghezza di n byte. ndeve essere un valore compreso tra 1 e 8000. Le dimensioni di archiviazione corrispondono a n byte. L'impostazione predefinita per n è 1.

varbinary [ ( n | MAX ) ] Dati binari a lunghezza variabile. n può essere un valore compreso tra 1 e 8000. Le dimensioni di archiviazione sono pari all'effettiva lunghezza dei dati immessi + 2 byte. Il valore predefinito di n è 7.
La varbinary(MAX) colonna può archiviare fino a 1 MB di dati nel warehouse.

Nota

varbinary(MAX) è disponibile in anteprima in Warehouse. Per altre informazioni, vedere Tipo di dati in Microsoft Fabric.

uniqueidentifier
GUID a 16 byte.

Autorizzazioni

Le autorizzazioni in Microsoft Fabric sono diverse dalle autorizzazioni di Azure Synapse Analytics.

L'utente deve essere membro dei ruoli Amministratore, Membro o Collaboratore nell'area di lavoro Infrastruttura.

Limiti

Osservazioni:

In Warehouse è disponibile una funzionalità Transact-SQL limitata. Per altre informazioni, vedere TSQL Surface Area in Microsoft Fabric.

Comportamento di blocco

Accetta un blocco di modifica dello schema sulla tabella, un blocco condiviso nel database e un blocco di stabilità dello schema sullo SCHEMA.