CREATE TABLE (Azure Synapse Analytics)

Gilt für: Azure Synapse Analytics Analytics Platform System (PDW)

Erstellt eine neue Tabelle in Azure Synapse Analytics oder Analytics-Plattformsystem (PDW).

Informationen zu Tabellen und deren Verwendung finden Sie unter Tabellen inAzure Synapse Analytics.

Hinweis

Die Erläuterungen zu Azure Synapse Analytics in diesem Artikel gelten sowohl für Azure Synapse Analytics als auch für Analytics-Plattformsystem (PDW), sofern nicht anders angegeben.

Hinweis

Der serverlose SQL-Pool in Azure Synapse Analytics unterstützt nur externe und temporäre Tabellen.

Article link iconTransact-SQL-Syntaxkonventionen

Syntax

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

Argumente

database_name
Der Name der Datenbank, die die neue Tabelle enthält. Gemäß Standardeinstellung die aktuelle Datenbank.

schema_name
Das Schema der Tabelle. Die Angabe von schema ist optional. Wenn keine Angabe gemacht wird, wird das Standardschema verwendet.

table_name
Der Name der neuen Tabelle. Stellen Sie dem Tabellennamen das Zeichen # voran, um eine temporäre lokale Tabelle zu erstellen. Erläuterungen und einen Leitfaden zu temporären Tabellen finden Sie unter Temporäre Tabellen in einem dedizierten SQL-Pool in Azure Synapse Analytics.

column_name
Der Name einer Tabellenspalte.

Spaltenoptionen

COLLATEWindows_collation_name
Gibt die Sortierung für den Ausdruck an. Bei der Sortierung muss es sich um eine von SQL Server unterstützte Windows-Sortierung handeln. Eine Liste mit von SQL Server unterstützten Windows-Sortierungen finden Sie unter Name der Windows-Sortierung (Transact-SQL).

NULL | NOT NULL
Gibt an, ob NULL-Werte in der Spalte zulässig sind. Der Standardwert lautet NULL.

[ CONSTRAINTconstraint_name ] DEFAULTconstant_expression
Gibt den Standardspaltenwert an.

Argument Erklärung
constraint_name Der optionale Name für die Einschränkung. Der Einschränkungsname ist innerhalb der Datenbank eindeutig. Der Name kann in anderen Datenbanken wiederverwendet werden.
constant_expression Der Standardwert für die Spalte. Bei dem Ausdruck muss es sich um einen Literalwert oder eine Konstante handeln. Folgende konstanten Ausdrücke sind beispielsweise zulässig: 'CA', 4. Folgende konstante Ausdrücke sind unzulässig: 2+3, CURRENT_TIMESTAMP.

Tabellenstrukturoptionen

Einen Leitfaden zum Auswählen des Tabellentyps finden Sie unter Indizieren von Tabellen in Azure Synapse Analytics.

CLUSTERED COLUMNSTORE INDEX

Speichert die Tabelle als gruppierten Columnstore-Index. Der gruppierte Columnstore-Index gilt für alle Tabellendaten. Dies ist das Standardverhalten für Azure Synapse Analytics.

HEAP Speichert die Tabelle als Heap. Dies ist das Standardverhalten für Analytics-Plattformsystem (PDW).

CLUSTERED INDEX ( index_column_name [ ,...n ] )
Speichert die Tabelle als gruppierten Index mit mindestens einer Schlüsselspalte. Durch dieses Verhalten werden die Daten zeilenweise gespeichert. Verwenden Sie index_column_name, um den Namen einer oder mehrerer Schlüsselspalten im Index anzugeben. Weitere Informationen finden Sie im Abschnitt über Rowstore-Tabellen unter den allgemeinen Hinweisen.

LOCATION = USER_DB Diese Option ist veraltet. Sie ist syntaktisch zulässig, aber nicht mehr erforderlich, und hat keine Auswirkungen auf das Verhalten.

Tabellenverteilungsoptionen

Um nachvollziehen zu können, wie Sie die beste Verteilungsmethode auswählen und verteilte Tabellen verwenden, lesen Sie Leitfaden zum Entwerfen verteilter Tabellen mit einem dedizierten SQL-Pool in Azure Synapse Analytics. Empfehlungen zur Auswahl der Verteilung für eine Tabelle auf Basis der tatsächlichen Verwendungs- oder Beispielabfragen finden Sie unter Verteilungsratgeber in Azure Synapse SQL.

DISTRIBUTION = HASH (distribution_column_name) Weist jede Zeile einer Verteilung zu, indem für den in distribution_column_name gespeicherten Wert ein Hashvorgang durchgeführt wird. Der Algorithmus ist deterministisch. Das bedeutet, er erzeugt für gleiche Verteilungen immer die gleichen Hashwerte. Die Verteilungsspalte muss als NOT NULL definiert sein, weil alle Zeilen, die NULL enthalten, derselben Verteilung zugewiesen werden.

DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] ) (Derzeit in Vorschau) Verteilt die Zeilen basierend auf den Hashwerten von bis zu acht Spalten, sodass die Basistabellendaten gleichmäßiger verteilt werden, die Datenschiefe im Laufe der Zeit verringert und die Abfrageleistung verbessert wird.

Hinweis

  • Zum Aktivieren dieses Features legen Sie die Datenbankkompatibilitätsstufe mit diesem Befehl auf 9000 fest, um an der Vorschau teilzunehmen. Weitere Informationen zum Festlegen der Datenbankkompatibilitätsebene finden Sie unter ALTER DATABSE SCOPED CONFIGURATION. Beispiel: DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 9000;
  • Führen Sie diesen Befehl aus, um die Kompatibilitätsstufe der Datenbank in AUTO zu ändern, wenn Sie nicht mehr an der Vorschau teilnehmen möchten. Beispiel: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = AUTO; Dadurch wird das Feature für die mehrspaltige Verteilung (MCD) (Vorschau) deaktiviert. Vorhandene MCD-Tabellen bleiben erhalten, werden aber unlesbar. Bei Abfragen mit MCD-Tabellen wird dieser Fehler zurückgegeben: 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.
    • Melden Sie sich erneut für die Vorschau an, um wieder auf MCD-Tabellen zugreifen zu können.
    • Um Daten in eine MCD-Tabelle zu laden, verwenden Sie CTAS-Anweisungen. Bei der Datenquelle muss es sich um Synapse SQL-Tabellen handeln.
  • Die Verwendung von SSMS zum Generieren eines Skripts zum Erstellen von MCD-Tabellen wird derzeit nicht unterstützt.

DISTRIBUTION = ROUND_ROBIN Verteilt die Zeilen im Roundrobinverfahren gleichmäßig auf alle Verteilungen. Dies ist das Standardverhalten für Azure Synapse Analytics.

DISTRIBUTION = REPLICATE Speichert in jedem Computeknoten eine Kopie der Tabelle. Bei Azure Synapse Analytics wird die Tabelle in einer Verteilungsdatenbank auf den einzelnen Computeknoten gespeichert. Bei Analytics-Plattformsystem (PDW) wird die Tabelle in einer SQL Server-Dateigruppe gespeichert, die sich über den gesamten Computeknoten erstreckt. Dies ist das Standardverhalten für Analytics-Plattformsystem (PDW).

Tabellenpartitionsoptionen

Einen Leitfaden zur Verwendung von Tabellenpartitionen finden Sie unter Partitionieren von Tabellen im dedizierten SQL-Pool.

PARTITION ( partition_column_nameRANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,...n] ] ))
Erstellt eine oder mehrere Tabellenpartitionen. Diese Partitionen sind horizontale Tabellenslices, mit deren Hilfe Sie Vorgänge für Teilmengen von Zeilen ausführen können, unabhängig davon, ob die Tabelle als Heap, gruppierter Index oder gruppierter Columnstore-Index gespeichert ist. Im Gegensatz zur Verteilungsspalte bestimmen Tabellenpartitionen nicht die Verteilung für den Speicherort der einzelnen Zeilen. Vielmehr bestimmten Tabellenpartitionen, wie die Zeilen in den einzelnen Verteilungen gruppiert und gespeichert werden.

Argument Erklärung
partition_column_name Gibt die Spalte an, die von Azure Synapse Analytics zum Partitionieren der Zeilen verwendet wird. Diese Spalte kann einen beliebigen Datentyp aufweisen. Azure Synapse Analytics sortiert die Werte der Partitionsspalte in aufsteigender Reihenfolge. Die Sortierung vom niedrigsten zum höchsten Wert erfolgt in der LEFT-Spezifikation von RIGHT nach RANGE.
RANGE LEFT Gibt den Begrenzungswert an, der zur Partition auf der linken Seite (niedrigere Werte) gehört. Die Standardeinstellung ist LEFT.
RANGE RIGHT Gibt den Begrenzungswert an, der zur Partition auf der rechten Seite (höhere Werte) gehört.
FOR VALUES ( boundary_value [,...n] ) Gibt die Begrenzungswerte für die Partition an. boundary_value ist ein konstanter Ausdruck. Er darf nicht NULL sein. Er muss entweder dem Datentyp partition_column_name entsprechen oder implizit in diesen Datentyp konvertierbar sein. Er darf bei der impliziten Konvertierung nicht abgeschnitten werden, sodass die Größe und Dezimalstellen des Werts nicht mehr dem Datentyp von partition_column_name entsprechen.



Wenn Sie die PARTITION-Klausel, aber keinen Begrenzungswert angeben, erstellt Azure Synapse Analytics eine partitionierte Tabelle mit einer Partition. Ggf. können Sie die Tabelle später in zwei Partitionen teilen.



Wenn Sie einen Begrenzungswert angeben, weist die resultierende Tabelle zwei Partitionen auf, eine für die im Vergleich zum Begrenzungswert niedrigeren Werte und eine für die im Vergleich zum Begrenzungswert höheren Werte. Wenn Sie eine Partition in eine nicht partitionierte Tabelle verschieben, empfängt die nicht partitionierte Tabelle die Daten, jedoch sind in den Metadaten keine Partitionsbegrenzungen enthalten.

Informationen hierzu finden Sie unter Erstellen einer partitionierten Tabelle im Abschnitt mit den Beispielen.

Option für sortierten gruppierten Columnstore-Index

Gruppierter Columnstore-Index (Clustered Columnstore Index, CCI) ist der Standardwert für das Erstellen von Tabellen in Azure Synapse Analytics. Daten im CCI werden nicht sortiert, bevor sie in Spaltensegmente komprimiert werden. Beim Erstellen eines CCI mit ORDER werden die Daten vor dem Hinzufügen zu Indexsegmenten sortiert, und die Abfrageleistung kann verbessert werden. Weitere Informationen finden Sie unter Leistungsoptimierung mit einem gruppierten Columnstore-Index.

Ein geordneter gruppierter CCI kann für Spalten aller Datentypen (außer Zeichenfolgenspalten) erstellt werden, die in Azure Synapse Analytics unterstützt werden.

Benutzer können die Spalte column_store_order_ordinal in sys.index_columns für die Spalte(n) nach der die Tabelle sortiert ist und nach der Sequenz der Sortierung abfragen.

Weitere Informationen finden Sie unter Leistungsoptimierung mit einem gruppierten Columnstore-Index.

Datentyp

Azure Synapse Analytics unterstützt die am häufigsten verwendeten Datentypen. Im Folgenden finden Sie eine Liste der unterstützten Datentypen mit entsprechenden Informationen und Angaben zum Speicherplatz in Byte. Ausführlichere Informationen zu Datentypen und deren Verwendung finden Sie unter Tabellendatentypen in Azure Synapse Analytics.

Hinweis

Ähnlich wie bei SQL Server gibt es ein Limit von 8060 Byte pro Zeile. Dies kann zu einem Blockierproblem für Tabellen werden, die viele Spalten oder Spalten mit großen Datentypen besitzen, z. B. nvarchar(max) oder varbinary(max). Einfügungen oder Updates, die gegen den Grenzwert von 8060 Byte verstoßen, führen zu den Fehlercodes 511 oder 611. Weitere Informationen finden Sie im Leitfaden zur Architektur von Seiten und Blöcken.

Eine Tabelle mit Datentypkonvertierungen finden Sie im Abschnitt über implizite Konvertierungen unter CAST und CONVERT (Transact-SQL).

Hinweis

Weitere Detailinformationen finden Sie unter Datums- und Uhrzeitdatentypen und zugehörige Funktionen (Transact-SQL).

datetimeoffset [ ( n ) ]
Der Standardwert für n ist 7.

datetime2 [ ( n ) ]
Entspricht datetime, jedoch mit der Ausnahme, dass die Anzahl von Sekundenbruchteilen angegeben werden kann. Der Standardwert für n ist 7.

Wert n Precision Skalieren
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
Speichert das Datum und die Uhrzeit mit 19 bis 23 Zeichen entsprechend dem gregorianischen Kalender. Das Datum kann das Jahr, den Monat und den Tag enthalten. In der Uhrzeit ist die Stunde, die Minuten und die Sekunden enthalten. Sie können optional drei Ziffern für Sekundenbruchteile anzeigen. Die Speichergröße beträgt 8 Byte.

smalldatetime
Speichert ein Datum und eine Uhrzeit. Die Speichergröße beträgt 4 Byte.

date
Speichert ein Datum mit maximal 10 Zeichen für das Jahr, den Monat und den Tag gemäß dem gregorianischen Kalender. Die Speichergröße beträgt 3 Byte. Das Datum wird als ganze Zahl gespeichert.

time [ ( n ) ]
Der Standardwert für n ist 7.

float [ ( n ) ]
Ungefähre Zahlendatentypen für numerische Gleitkommadaten. Gleitkommadaten sind Näherungswerte. Deshalb können nicht alle Werte im Bereich des Datentyps exakt dargestellt werden. n gibt die Anzahl der Bits zum Speichern der Mantisse von float in wissenschaftlicher Schreibweise an. Somit gibt n die Genauigkeit und die Speichergröße vor. Wenn n angegeben ist, muss es sich um einen Wert zwischen 1 und 53 handeln. Der Standardwert von n lautet 53.

Wert n Precision Speichergröße
1-24 7 Stellen 4 Byte
25-53 15 Stellen 8 Byte

Azure Synapse Analytics verarbeitet n als einen von zwei möglichen Werten. Wenn 1<= n<= 24 gegeben ist, wird n als 24 behandelt. Wenn 25<= n<= 53 gegeben ist, wird n als 53 behandelt.

Der Azure Synapse Analytics float-Datentyp entspricht dem ISO-Standard für alle Werte von n zwischen 1 und 53. Das Synonym für double precision lautet float(53).

real [ ( n ) ]
Die Definition von „real“ entspricht der von „float“. Das ISO-Synonym für real ist float(24).

decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
Speichert Zahlen mit fester Genauigkeit und mit fester Anzahl von Dezimalstellen.

precision
Die maximal speicherbare Gesamtzahl an Dezimalstellen, sowohl links als auch rechts vom Dezimalkomma. Die Genauigkeit muss ein Wert zwischen 1 und der maximalen Genauigkeit von 38 sein. Die Standardgenauigkeit beträgt 18.

scale
Die maximal speicherbare Zahl an Dezimalstellen rechts vom Dezimalkomma. Scale muss in einem Bereich zwischen 0 und precision liegen. scale kann nur angegeben werden, wenn precision angegeben wird. Der Standardwert lautet 0; daher gilt: 0<= scale<= precision. Die maximalen Speichergrößen variieren abhängig von der Genauigkeit.

Precision Speicherplatz in Bytes
1-9 5
10–19 9
20–28 13
29–38 17

money | smallmoney
Datentypen zur Darstellung von Währungswerten.

Datentyp Speicherplatz in Bytes
money 8
smallmoney 4

bigint | int | smallint | tinyint
Exakte Zahlendatentypen für ganzzahlige Daten. Der Speicherplatz wird wie in der folgenden Tabelle dargestellt.

Datentyp Speicherplatz in Bytes
bigint 8
int 4
smallint 2
tinyint 1

bit
Ein ganzzahliger Datentyp, der den Wert 1, 0 oder NULL annehmen kann. Azure Synapse Analytics optimiert das Speichern von bit-Spalten. Wenn in einer Tabelle 8 oder weniger bit-Spalten vorhanden sind, werden die Spalten als 1 Byte gespeichert. Sind zwischen 9 und 16 bit-Spalten vorhanden, werden diese als 2 Byte gespeichert usw.

nvarchar [ ( n | max ) ] -- max gilt nur für Azure Synapse Analytics.
Unicode-Daten variabler Länge. n muss ein Wert zwischen 1 und 4000 sein. max gibt an, dass die maximale Speichergröße 2^31-1 Byte (2 GB) beträgt. Die Speichergröße in Byte ist doppelt so groß wie die Anzahl eingegebener Zeichen + 2 Byte. Die eingegebenen Daten können null Zeichen lang sein.

nchar [ ( n ) ]
Unicode-Zeichendaten mit einer festen Länge von n Zeichen. n muss ein Wert zwischen 1 und 4000 sein. Die Speichergröße beträgt zweimal n Byte.

varchar [ ( n | max ) ] -- max gilt nur für Azure Synapse Analytics.
Nicht-Unicode-Zeichendaten mit einer variablen Länge von n Byte. n muss ein Wert zwischen 1 und 8000 sein. max gibt an, dass die maximale Speichergröße 2^31-1 Byte (2 GB) beträgt. Die Speichergröße ist die tatsächliche Länge der eingegebenen Daten + 2 Byte.

char [ ( n ) ]
Nicht-Unicode-Zeichendaten mit einer festen Länge von n Byte. n muss ein Wert zwischen 1 und 8000 sein. Die Speichergröße beträgt n Byte. Der Standardwert für n lautet 1.

varbinary [ ( n | max ) ] -- max gilt nur für Azure Synapse Analytics.
Binärdaten mit variabler Länge. n kann ein Wert zwischen 1 und 8000 sein. max gibt an, dass die maximale Speichergröße 2^31-1 Byte (2 GB) beträgt. Die Speichergröße ist die tatsächliche Länge der eingegebenen Daten + 2 Byte. Der Standardwert für n ist 7.

binary [ ( n ) ]
Binärdaten mit einer festen Länge von n Byte. n kann ein Wert zwischen 1 und 8000 sein. Die Speichergröße beträgt n Byte. Der Standardwert für n ist 7.

uniqueidentifier
Ein 16-Byte-GUID.

Berechtigungen

Zum Erstellen einer Tabelle sind Berechtigungen in der festen Datenbankrolle db_ddladmin oder folgende Berechtigungen erforderlich:

  • CREATE TABLE-Berechtigung für die Datenbank
  • ALTER SCHEMA-Berechtigung für das Schema, das die Tabelle enthält.

Zum Erstellen einer partitionierten Tabelle sind Berechtigungen in der festen Datenbankrolle db_ddladmin oder folgende Berechtigungen erforderlich:

  • ALTER ANY DATASPACE-Berechtigung

Der Anmeldename, der eine lokale temporäre Tabelle erstellt, erhält die Berechtigungen CONTROL, INSERT, SELECT und UPDATE für die Tabelle.

Allgemeine Hinweise

Informationen zu minimalen und maximalen Limits finden Sie unter Azure Synapse Analytics-Kapazitätslimits.

Bestimmen der Anzahl der Tabellenpartitionen

Jede benutzerdefinierte Tabelle ist in mehrere kleinere Tabellen aufgeteilt, die in getrennten entfernten Speicherorten, so genannten Verteilungen, gespeichert sind. Azure Synapse Analytics verwendet 60 Verteilungen. Bei Analytics-Plattformsystem (PDW) hängt die Anzahl der Verteilungen von der Anzahl der Computeknoten ab.

Jede Verteilung enthält alle Tabellenpartitionen. Bei 60 Verteilungen und vier Tabellenpartitionen, zuzüglich einer leeren Partition, sind beispielsweise 300 Partitionen (5 x 60 = 300) vorhanden. Wenn es sich bei der Tabelle um einen gruppierten columnstore-Index handelt, gibt es einen columnstore-Index pro Partition und somit 300 columnstore-Indizes.

Es wird empfohlen, weniger Tabellenpartitionen zu verwenden, um sicherzustellen, dass jeder Columnstore-Index genügend Zeilen aufweist, um von den Vorteilen der Columnstore-Indizes zu profitieren. Weitere Informationen finden Sie unter Partitionierungstabellen im dedizierten SQL-Pool und Indizes für dedizierte SQL-Pooltabellen in Azure Synapse Analytics.

Rowstore-Tabelle (Heap oder gruppierter Index)

Eine Rowstore-Tabelle ist eine in zeilenweiser Reihenfolge gespeicherte Tabelle. Es handelt sich um einen Heap oder gruppierten Index. Azure Synapse Analytics erstellt alle Rowstore-Tabellen mit Seitenkomprimierung. Dieses Verhalten kann vom Benutzer nicht konfiguriert werden.

Columnstore-Tabelle (Columnstore Index)

Eine Columnstore-Tabelle ist eine in spaltenweiser Reihenfolge gespeicherte Tabelle. Dabei stellt der Columnstore-Index eine Technologie zum Verwalten von Daten dar, die in einer Columnstore-Tabelle gespeichert sind. Der gruppierte Columnstore-Index hat keine Auswirkungen auf die Verteilung der Daten. Er bestimmt vielmehr, wie die Daten in den einzelnen Verteilungen gespeichert werden.

Um aus einer Rowstore-Tabelle eine Columnstore-Tabelle zu machen, müssen alle in der Tabelle vorhandenen Indizes gelöscht und ein gruppierter Columnstore-Index erstellt werden. Ein Beispiel hierzu finden Sie unter CREATE COLUMNSTORE INDEX (Transact-SQL).

Weitere Informationen und Beispiele finden Sie in diesen Artikeln:

Einschränkungen

Für eine Verteilungsspalte darf keine DEFAULT-Einschränkung definiert werden.

Partitionen

Bei Verwendung von Partitionen darf die Partitionsspalte keine reine Unicode-Sortierung aufweisen. So schlägt die folgende Anweisung beispielsweise fehl.

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

Wenn boundary_value ein Literalwert ist, der implizit in den Datentyp in partition_column_name konvertiert werden muss, ergibt sich eine Abweichung. Zwar wird über die Azure Synapse Analytics-Systemsichten der Literalwert angezeigt, für Transact-SQL-Vorgänge wird jedoch der konvertierte Wert verwendet.

Temporäre Tabellen

Globale temporäre Tabellen, die mit ## beginnen, werden nicht unterstützt.

Lokale temporäre Tabellen weisen die folgenden Einschränkungen auf:

  • Sie sind nur für die aktuelle Sitzung sichtbar. Am Ende der Sitzung werden sie von Azure Synapse Analytics automatisch gelöscht. Verwenden Sie zum Löschen die DROP TABLE-Anweisung.
  • Sie können nicht umbenannt werden.
  • Sie dürfen keine Partitionen oder Sichten enthalten.
  • Ihre Berechtigungen können nicht geändert werden. Im Zusammenhang mit lokalen temporären Tabellen können die Anweisungen GRANT, DENY und REVOKE nicht verwendet werden.
  • Datenbankkonsolenbefehle sind für temporäre Tabellen gesperrt.
  • Wenn in einem Batch mehrere lokale temporäre Tabellen verwendet werden, muss jede einen eindeutigen Namen aufweisen. Wenn ein Batch von mehreren Sitzungen ausgeführt und dabei jeweils eine lokale temporäre Tabelle erstellt wird, wird von Azure Synapse Analytics intern ein numerisches Suffix an den Namen der lokalen temporären Tabelle angehängt, sodass jede lokale temporäre Tabelle einen eindeutigen Name aufweist.

Sperrverhalten

Wendet auf die Tabelle eine exklusive Sperre an. Wendet auf die Objekte DATABASE, SCHEMA und SCHEMARESOLUTION eine gemeinsame Sperre an.

Beispiele für Spalten

A. Festlegen einer Spaltensortierung

Im folgenden Beispiel wird die Tabelle MyTable mit zwei verschiedenen Spaltensortierungen erstellt. Standardmäßig weist die Spalte mycolumn1 die Standardsortierung Latin1_General_100_CI_AS_KS_WS auf. Die Spalte mycolumn2 weist die Sortierung Frisian_100_CS_AS auf.

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

B. Festlegen einer DEFAULT-Einschränkung für eine Spalte

Im folgenden Beispiel ist die Syntax zum Festlegen eines Standardwerts für eine Spalte dargestellt. Die Spalte colA weist eine Standardeinschränkung mit dem Namen constraint_colA und den Standardwert 0 auf.

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

Beispiele für temporäre Tabellen

C. Erstellen einer lokalen temporären Tabelle

Im folgenden Beispiel wird eine lokale temporäre Tabelle namens #myTable erstellt. In der Tabelle wird mit einem dreiteiligen Namen angegeben, der mit einem # beginnt.

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

Beispiele für die Tabellenstruktur

D: Erstellen einer Tabelle mit einem gruppierten Columnstore-Index

Im folgende Beispiel wird eine verteilte Tabelle mit einem gruppierten Columnstore-Index erstellt. Jede Verteilung wird als Columnstore gespeichert.

Der gruppierte Columnstore-Index hat keine Auswirkung auf die Verteilung der Daten, da die Daten immer zeilenweise verteilt werden. Der gruppierte Columnstore-Index bestimmt jedoch, wie die Daten in den einzelnen Verteilungen gespeichert werden.

  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. Erstellen eines sortierten gruppierten Columnstore-Index

Das folgende Beispiel zeigt, wie ein sortierter gruppierter Columnstore-Index erstellt wird. Der Index ist nach SHIPDATE sortiert.

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

Beispiele für die Tabellenverteilung

F. Erstellen einer ROUND_ROBIN-Tabelle

Im folgenden Beispiel wird eine ROUND_ROBIN-Tabelle mit drei Spalten und ohne Partitionen erstellt. Die Daten werden in allen Verteilungen verteilt. Die Tabelle wird mit einem gruppierten Columnstore-Index erstellt, der im Vergleich zu einem Heap oder einem gruppierten Rowstore-Index eine bessere Leistung und Datensicherung gewährleistet.

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

G. Erstellen einer Tabelle mit Hashverteilung auf mehrere Spalten (Vorschau)

Im folgenden Beispiel wird dieselbe Tabelle wie im vorherigen Beispiel erstellt. Für diese Tabelle werden jedoch Zeilen verteilt (für id- und zipCode-Spalten). Die Tabelle wird mit einem gruppierten Columnstore-Index erstellt, der im Vergleich zu einem Heap oder einem gruppierten Rowstore-Index eine bessere Leistung und Datensicherung gewährleistet.

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

H. Erstellen einer replizierten Tabelle

Im folgenden Beispiel wird eine replizierte Tabelle ähnlich wie im vorherigen Beispiel erstellt. Replizierte Tabellen werden vollständig auf alle Computeknoten kopiert. Dank dieser Kopie auf allen Computeknoten wird die Anzahl der Datenverschiebungen für Abfragen reduziert. Dieses Beispiel wird mit einem CLUSTERED INDEX erstellt, wodurch eine bessere Datenkomprimierung als bei einem Heap erzielt wird. Ein Heap enthält möglicherweise nicht genügend Zeilen, um eine gute CLUSTERED COLUMNSTORE INDEX-Komprimierung zu erreichen.

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

Beispiele für Tabellenpartitionen

I. Erstellen einer partitionierten Tabelle

Im folgenden Beispiel wird dieselbe Tabelle wie in Beispiel A erstellt, jedoch mit einer RANGE LEFT-Partitionierung für die id-Spalte. Es werden vier Partitionsbegrenzungswerte angegeben, sodass sich fünf Partitionen ergeben.

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 diesem Beispiel werden die Daten in die folgenden Partitionen sortiert:

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

Wenn diese Tabelle statt mit RANGE LEFT (Standardeinstellung) mit RANGE RIGHT partitioniert wird, werden die Daten in die folgenden Partitionen sortiert:

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

J. Erstellen einer partitionierten Tabelle mit einer Partition

Im folgende Beispiel wird eine partitionierte Tabelle mit einer Partition erstellt. Es wird kein Begrenzungswert angegeben, sodass sich nur eine Partition ergibt.

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

K. Erstellen einer Tabelle mit Datumspartitionierung

Im folgenden Beispiel wird eine neue Tabelle mit dem Namen myTable mit Partitionierung in einer date-Spalte erstellt. Durch die Verwendung von RANGE RIGHT und Datumsangaben für die Begrenzungswerte werden in alle Partitionen die Daten eines Monats eingefügt.

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'  
      ))
  );  

Weitere Informationen

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