CREATE TABLE

Gilt für:Azure Synapse AnalyticsAnalytics 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

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 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 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, aber die Metadaten enthalten keine Partitionsbegrenzungen.

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

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:

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

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

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.

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

Nächste Schritte