CREATE TABLE
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.
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
Informationen zu den Plattformen SQL Server und Azure SQL finden Sie unter CREATE TABLE. Wählen Sie dort Ihre gewünschte Produktversion aus. Referenzinformationen zu Warehouse in Microsoft Fabric finden Sie unter CREATE TABLE (Fabric).
Hinweis
Der serverlose SQL-Pool in Azure Synapse Analytics unterstützt nur externe und temporäre Tabellen.
Transact-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
COLLATE
Windows_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
.
[CONSTRAINT
constraint_name] DEFAULT
constant_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 unter Rowstore Tables.
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 den Artikel zum Entwerfen verteilter Tabellen mit einem dedizierten SQL-Pool in Azure Synapse Analytics.
Empfehlungen für die beste Verteilungsstrategie, die basierend auf Ihren Workloads verwendet werden soll, finden Sie unter Verteilungsratgeber (Distribution Advisor) 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]] )
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 wird und die Abfrageleistung verbessert wird.
Hinweis
- Wenn Sie das Feature für die mehrspaltige Verteilung (Multi-Column Distribution, MCD) aktivieren möchten, ändern Sie mit diesem Befehl den Kompatibilitätsgrad der Datenbank zu 50. Weitere Informationen zum Festlegen des Datenbank-Kompatibilitätsgrads finden Sie unter ALTER DATABSE SCOPED CONFIGURATION. Beispiel:
ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 50;
- Wenn Sie das Feature für die mehrspaltige Verteilung (Multi-Column Distribution, MCD) deaktivieren möchten, führen Sie diesen Befehl aus, um den Kompatibilitätsgrad der Datenbank in AUTO zu ändern. Beispiel:
ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = AUTO;
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.
- Aktivieren Sie das Feature erneut, 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.
- Generieren eines Skripts zum Erstellen von MCD-Tabellen wird derzeit ab SSMS-Version 19 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 Serverknoten 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 Azure Synapse Analytics zum Partitionieren der Zeilen verwendet. 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, aber die Metadaten enthalten keine Partitionsbegrenzungen. |
Ein Beispiel finden Sie unter Erstellen einer partitionierten Tabelle.
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 in einem CCI werden vor dem Komprimieren in Columnstore-Segmente nicht sortiert. 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 eine Spalte für sys.index_columns
die Spalte oder Spalten abfragencolumn_store_order_ordinal
, nach der eine Tabelle sortiert ist, und die Reihenfolge in der Reihenfolge.
Weitere Informationen finden Sie unter Leistungsoptimierung mit einem gruppierten Columnstore-Index.
Datentyp
Azure Synapse Analytics unterstützt die am häufigsten verwendeten Datentypen. 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 zu impliziten Konvertierungen unter CAST und CONVERT (Transact-SQL). Weitere Informationen finden Sie unter Datums- und Uhrzeitdatentypen und zugehörige Funktionen (Transact-SQL).
In der folgenden Liste der unterstützten Daten werden detaillierte Informationen sowie Speicherbytes aufgeführt:
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 maximale Gesamtanzahl von Dezimalziffern, die auf beiden Seiten des Dezimalkomma gespeichert werden können. 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
) ] Unicode-Zeichendaten 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. Die max
Länge gilt nur für Azure Synapse Analytics.
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
[ ( nmax
| ) ] Variablenlänge, Nicht-Unicode-Zeichendaten mit einer Länge von n Bytes. 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. Die max
Länge gilt nur für Azure Synapse Analytics.
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
) ] 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. Die max
Länge gilt nur für Azure Synapse Analytics.
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 DatenbankALTER SCHEMA
Berechtigung für das Schema der Tabelle
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.
Bemerkungen
Informationen zu minimalen und maximalen Limits finden Sie unter Azure Synapse Analytics-Kapazitätslimits.
Ermitteln der Anzahl von 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 wirkt sich nicht darauf aus, wie die Daten verteilt werden. Er wirkt sich aber darauf aus, wie die Daten innerhalb der 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:
- Columnstore-Indizes: Zusammenfassung der Features für Produktversionen
- Indizieren von Tabellen in Azure Synapse Analytics
- Beschreibung von Columnstore-Indizes
Einschränkungen
- Für eine Verteilungsspalte darf keine DEFAULT-Einschränkung definiert werden.
- Der Tabellenname darf maximal 128 Zeichen umfassen.
- Der Spaltenname darf maximal 128 Zeichen umfassen.
Partitionen
Die Partitionsspalte darf keine reine Unicode-Sammlung enthalten. Bei der folgenden Anweisung beispielsweise tritt ein Fehler auf:
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 Diskrepanz. 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
undREVOKE
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 erzielen.
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'
))
);
Nächste Schritte
Gilt für: Warehouse in Microsoft Fabric
Erstellt eine neue Tabelle in einem Warehouse in Microsoft Fabric.
Weitere Informationen finden Sie unter Erstellen von Tabellen in Warehouse in Microsoft Fabric.
Hinweis
Referenzinformationen zu Azure Synapse Analytics und Analytics Platform System (PDW) finden Sie unter CREATE TABLE (Azure Synapse Analytics). Informationen zu den Plattformen SQL Server und Azure SQL finden Sie unter CREATE TABLE. Wählen Sie dort Ihre gewünschte Produktversion aus der Dropdownliste mit den Versionen aus.
Transact-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 ]
)
[;]
<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 ) ]
| char [ ( n ) ]
| varbinary [ ( 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.
column_name
Der Name einer Tabellenspalte.
Spaltenoptionen
NULL
| NOT NULL
Gibt an, ob NULL
-Werte in der Spalte zulässig sind. Der Standardwert lautet NULL
.
Datentyp
Microsoft Fabric unterstützt die gängigsten Datentypen.
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. varchar(8000)
oder varbinary(8000)
. 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 zu impliziten Konvertierungen unter CAST und CONVERT (Transact-SQL). Weitere Informationen finden Sie unter Datums- und Uhrzeitdatentypen und zugehörige Funktionen (Transact-SQL).
In der folgenden Liste der unterstützten Daten werden detaillierte Informationen sowie Speicherbytes aufgeführt.
datetime2
( n )
Speichert das Datum und die Uhrzeit mit 19 bis 26 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. Optional können Sie null bis sechs Ziffern für Sekundenbruchteile basierend auf dem Parameter n speichern und anzeigen. Die Speichergröße beträgt 8 Byte. n muss ein Wert zwischen 0
und 6
sein.
Hinweis
Es gibt keine Standardgenauigkeit wie bei anderen SQL-Plattformen. Sie müssen den Wert für die Genauigkeit von 0
bis 6
angeben.
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 |
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 )
n muss ein Wert zwischen 0
und 6
sein.
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
.
Hinweis
Es gibt keine Standardgenauigkeit wie bei anderen SQL-Plattformen. Sie müssen den Wert für die Genauigkeit von 0
bis 6
angeben.
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 maximale Gesamtanzahl von Dezimalziffern, die auf beiden Seiten des Dezimalkomma gespeichert werden können. 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 |
bigint
| int
| smallint
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 |
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.
varchar
[ ( n ) ] Unicode-Zeichendaten mit einer variablen Länge von n Byte. n muss ein Wert zwischen 1
und 8000
sein. Die Speichergröße ist die tatsächliche Länge der eingegebenen Daten + 2 Byte. Der Standardwert für n lautet 1
.
char
[ ( n ) ]
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 ) ] Binärdaten mit variabler Länge. n kann ein Wert zwischen 1
und 8000
sein. Die Speichergröße ist die tatsächliche Länge der eingegebenen Daten + 2 Byte. Der Standardwert für n ist 7.
uniqueidentifier
Ein 16-Byte-GUID.
Berechtigungen
Berechtigungen in Microsoft Fabric unterscheiden sich von Berechtigungen Azure Synapse Analytics.
Der Benutzer muss Mitglied der Rollen "Administrator", "Mitglied" oder "Mitwirkender" im Fabric-Arbeitsbereich sein.
Einschränkungen
- Tabellennamen dürfen nicht größer als 128 Zeichen sein.
- Tabellennamen in Warehouse in Microsoft Fabric dürfen die Zeichen
/
oder\
enden nicht mit einem.
. - Spaltennamen dürfen nicht größer als 128 Zeichen sein.
- Tabellen weisen maximal 1.024 Spalten pro Tabelle auf.
- Der standardmäßige und einzige unterstützte Wert in Warehouse ist „Latin1_General_100_BIN2_UTF8“.
Hinweise
Die Transact-SQL-Funktionalität in Warehouse ist eingeschränkt. Weitere Informationen finden Sie unter TSQL-Benutzeroberfläche in Microsoft Fabric.
Sperrverhalten
Akzeptiert eine Schema-Modification-Sperre für die Tabelle, eine Freigabesperre für DATABASE und eine Schema-Stability-Sperre für SCHEMA.