CREATE TABLE (Azure Synapse Analytics)

Si applica a:yes Azure Synapse Analytics Analytics yesPlatform System (PDW)

Crea una nuova tabella in Azure Synapse Analytics o Analytics Platform System (PDW).

Per comprendere le tabelle e come usarle, vedere Tabelle in Azure Synapse Analytics.

Nota

Le discussioni su Azure Synapse Analytics in questo articolo si applicano sia ad Azure Synapse Analytics che a Analytics Platform System (PDW) a meno che non venga specificato in altro modo.

Nota

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

Article link iconConvenzioni di 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 = 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 si omette, verrà usato lo schema predefinito.

table_name
Nome della nuova tabella. Per creare una tabella temporanea locale, precedere il nome della tabella con #. 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 colonne

COLLATEWindows_collation_name
Specifica le regole di confronto per l'espressione. Le regole di confronto devono essere 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 regole di confronto di Windows (Transact-SQL)/.

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

[ CONSTRAINTconstraint_name ] DEFAULTconstant_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 di tabella

Per indicazioni sulla scelta del tipo di tabella, vedere Indicizzare le tabelle 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 è l'impostazione predefinita per Azure Synapse Analytics.

HEAP Archivia la tabella come heap. Questo comportamento è l'impostazione predefinita per Analytics Platform System (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 le tabelle rowstore nella sezione Osservazioni generali.

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 Linee guida per la progettazione di tabelle distribuite tramite pool SQL dedicato in Azure Synapse Analytics.

DISTRIBUTION = HASH ( distribution_column_name ) Assegna ogni riga a una distribuzione eseguendo l'hashing del valore archiviato distribution_column_name. L'algoritmo è deterministico, ovvero l'hashing viene sempre eseguito sullo 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 = ROUND_ROBIN Distribuisce le righe in modo uniforme tra tutte le distribuzioni secondo uno schema round robin. Questo comportamento è l'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 Analytics Platform System (PDW), la tabella viene archiviata in un filegroup di SQL Server che si estende sul nodo di calcolo. Questo comportamento è l'impostazione predefinita per Analytics Platform System (PDW).

Opzioni di partizione della tabella

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

PARTITION ( partition_column_nameRANGE [ 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 che Azure Synapse Analytics userà per partizionare le righe. Questa colonna può essere qualsiasi tipo di dati. Azure Synapse Analytics ordina i valori delle colonne di partizione in ordine 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 creerà 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: una per i valori inferiori al valore limite e una per i valori superiori al valore limite. Se si sposta una partizione in una tabella non partizionata, la tabella non partizionata riceverà i dati, ma non avrà i limiti della partizione nei metadati.

Vedere Creare una tabella partizionata nella sezione Esempi.

Opzione relativa all'indice columnstore cluster ordinato

L'indice columnstore cluster è l'impostazione predefinita per la creazione di tabelle in Azure Synapse Analytics. I dati in un indice columnstore cluster 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 informazioni dettagliate, vedere Ottimizzazione delle prestazioni con indice columnstore cluster ordinato.

Un CCI ordinato può essere creato in colonne di qualsiasi tipo di dati supportato in Azure Synapse Analytics, ad eccezione delle colonne di stringa.

Gli utenti possono cercare nella colonna column_store_order_ordinal in sys.index_columns le colonne in base alle quali una tabella è ordinata 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 usati più comunemente. Di seguito è riportato un elenco dei tipi di dati supportati con i relativi dettagli e byte per l'archiviazione. Per comprendere meglio i tipi di dati e come usarli, vedere Tipi di dati per le tabelle in Azure Synapse Analytics.

Nota

Analogamente a SQL Server, esiste un limite di 8060 byte per riga. Questo può 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). Inserisce o aggiorna che violano il limite di byte 8060 genera codici di errore 511 o 611. Per altre informazioni, vedere Guida all'architettura pagine e estensioni.

Per una tabella delle conversioni di tipi di dati, vedere la sezione relativa alle conversioni implicite in CAST e CONVERT (Transact-SQL).

Nota

Per altre informazioni, vedere Tipi di dati e funzioni di data e ora (Transact-SQL).

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 Precision Scalabilità
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 ora, minuti e secondi. In alternativa, è 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 Precision Dimensioni dello spazio di archiviazione
1-24 7 cifre 4 byte
25-53 15 cifre 8 byte

Azure Synapse Analytics considera n come uno dei due valori possibili. Se 1<= n<= 24, n viene considerato come 24. Se 25<= n<= 53, n viene considerato come 53.

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

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

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

precisione
Numero massimo totale di cifre decimali che è possibile archiviare, sia a destra che a sinistra 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. La scala predefinita è 0 e quindi 0<= scale<= precisione. Le dimensioni massime di archiviazione variano a seconda della precisione.

Precision 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 ) ] - max si applica solo ad Azure Synapse Analytics.
Dati Unicode di tipo carattere 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.

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 ) ] - max si applica solo ad Azure Synapse Analytics.
Dati di tipo carattere non Unicode a lunghezza variabile con una lunghezza di n byte. ndeve essere un valore compreso tra 1 e 8000. max indica che le dimensioni massime dello spazio di archiviazione sono 2^31-1 byte (2 GB). Le dimensioni dello spazio di archiviazione sono la lunghezza effettiva dei dati immessi + 2 byte.

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 ) ] - max si applica solo ad Azure Synapse Analytics.
Dati binary 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.

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
  • Autorizzazione ALTER SCHEMA per lo schema che conterrà la 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 generali

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

Determinazione del numero di partizioni della 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. In Analytics Platform System (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, esisterà un solo indice columnstore per partizione, ovvero saranno disponibili 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, vedere Tabelle di partizionamento in pool SQL dedicati e indici in tabelle di pool SQL dedicate 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 compressione 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 sul modo in cui vengono distribuiti i dati, ma su come i dati vengono archiviati 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).

Per altre informazioni, vedere questi articoli:

Limitazioni e restrizioni

Non è possibile definire un vincolo DEFAULT per una colonna di distribuzione.

Partizioni

Quando si usano le partizioni, la colonna di partizione non può contenere 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 verificherà una discrepanza. Il valore letterale viene visualizzato tramite le visualizzazioni di sistema di Azure Synapse Analytics, ma il valore convertito viene usato per le operazioni Transact-SQL.

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 li 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 per 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

A. 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 ha un vincolo predefinito denominato constraint_colA e un valore predefinito pari a 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 verrà 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 è ordinato in base a 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 hash distribuita

Nell'esempio seguente viene creata la stessa tabella dell'esempio precedente. Tuttavia, per questa tabella le righe vengono distribuite (nella colonna id) anziché suddivise in modo casuale come una tabella ROUND_ROBIN. 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  
  (   
    DISTRIBUTION = HASH (id),   
    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 eseguire una compressione CLUSTERED COLUMNSTORE INDEX valida.

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

L'esempio seguente crea la stessa tabella dell'esempio A, con l'aggiunta del partizionamento RANGE LEFT per la colonna id. 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'  
      ))
  );  

Vedere anche

CREATE TABLE AS SELECT (Azure Synapse Analytics)
DROP TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL)
sys.index_columns (Transact-SQL)