CREATE TABLE - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

CREATE TABLE

Erstellt eine neue Tabelle in der aktuellen Datenbank. Sie definieren eine Liste von Spalten, die jeweils Daten eines bestimmten Typs enthalten. Der Besitzer der Tabelle gibt den Befehl CREATE TABLE aus.

Erforderliche Berechtigungen

Für CREATE TABLE sind folgende Berechtigungen erforderlich:

  • Superuser

  • Benutzer mit der Berechtigung CREATE TABLE

Syntax

CREATE [ [LOCAL ] { TEMPORARY | TEMP } ] TABLE [ IF NOT EXISTS ] table_name ( { column_name data_type [column_attributes] [ column_constraints ] | table_constraints | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ] ) [ BACKUP { YES | NO } ] [table_attributes] where column_attributes are: [ DEFAULT default_expr ] [ IDENTITY ( seed, step ) ] [ GENERATED BY DEFAULT AS IDENTITY ( seed, step ) ] [ ENCODE encoding ] [ DISTKEY ] [ SORTKEY ] [ COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE ] and column_constraints are: [ { NOT NULL | NULL } ] [ { UNIQUE | PRIMARY KEY } ] [ REFERENCES reftable [ ( refcolumn ) ] ] and table_constraints are: [ UNIQUE ( column_name [, ... ] ) ] [ PRIMARY KEY ( column_name [, ... ] ) ] [ FOREIGN KEY (column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ] and table_attributes are: [ DISTSTYLE { AUTO | EVEN | KEY | ALL } ] [ DISTKEY ( column_name ) ] [ [COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) | [ SORTKEY AUTO ] ] [ ENCODE AUTO ]

Parameter

LOCAL

Optional. Obwohl dieses Schlüsselwort in der Anweisung akzeptiert wird, hat es in Amazon Redshift keine Auswirkungen.

TEMPORARY | TEMP

Ein Schlüsselwort, das eine temporäre Tabelle erstellt, die nur innerhalb der aktuellen Sitzung angezeigt wird. Die Tabelle wird am Ende der Sitzung, in der sie erstellt wird, automatisch entfernt. Die temporäre Tabelle kann denselben Namen wie eine permanente Tabelle haben. Die temporäre Tabelle wird in einem eigenen, sitzungsspezifischen Schema erstellt. (Sie können für dieses Schema keinen Namen angeben.) Dieses temporäre Schema wird das erste Schema im Suchpfad. Daher hat die temporäre Tabelle Vorrang vor der permanenten Tabelle, es sei denn, Sie qualifizieren den Tabellennamen mit dem Schemanamen, um auf die permanente Tabelle zuzugreifen. Weitere Informationen zu Schemata und Rangfolgen finden Sie unter search_path.

Anmerkung

Standardmäßig besitzen Datenbankbenutzer aufgrund ihrer automatischen Mitgliedschaft in der Gruppe PUBLIC die Berechtigung, temporäre Tabellen zu erstellen. Um dieses Recht für einen Benutzer abzulehnen, widerrufen Sie das TEMP-Recht in der Gruppe PUBLIC und gewähren dann das TEMP-Recht explizit nur spezifischen Benutzern oder Benutzergruppen.

IF NOT EXISTS

Eine Klausel, die angibt, dass der Befehl keine Änderungen ausführen und die Meldung zurückgeben soll, dass die Tabelle vorhanden ist, statt mit einem Fehler beendet zu werden, wenn die angegebene Tabelle bereits vorhanden ist. Beachten Sie, dass die vorhandene Tabelle möglicherweise überhaupt nicht der Tabelle entspricht, die erstellt worden wäre. Es wird nur der Tabellenname verglichen.

Diese Klausel ist beim Scripting nützlich, damit das Skript nicht fehlschlägt, wenn CREATE TABLE versucht, eine Tabelle zu erstellen, die bereits vorhanden ist.

table_name

Der Name der Tabelle, die erstellt werden soll.

Wichtig

Wenn Sie einen Tabellennamen angeben, der mit „#“ beginnt, wird die Tabelle als temporäre Tabelle erstellt. Im Folgenden wird ein Beispiel gezeigt:

create table #newtable (id int);

Sie verwenden „#“ auch für Verweise auf die Tabelle. Beispielsweise:

select * from #newtable;

Die maximale Länge des Tabellennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten. Sie können UTF-8-Multibyte-Zeichen bis zu einer Länge von vier Bytes verwenden. Amazon Redshift erzwingt ein Kontingent für die Anzahl der Tabellen pro Cluster nach Knotentyp, einschließlich benutzerdefinierter temporärer Tabellen und temporärer Tabellen, die von Amazon Redshift während der Abfrageverarbeitung oder Systemwartung erstellt werden. Optional kann der Tabellenname mit dem Datenbank- und Schemanamen qualifiziert werden. Im folgenden Beispiel ist der Datenbankname tickit, der Schemaname public und der Tabellenname test.

create table tickit.public.test (c1 int);

Wenn die Datenbank oder das Schema nicht vorhanden sind, wird die Tabelle nicht erstellt, und die Anweisung gibt einen Fehler zurück. Sie können in den Systemdatenbanken template0, template1, padb_harvest oder sys:internal keine Tabellen oder Ansichten erstellen.

Wenn ein Schemaname vorhanden ist, wird die neue Tabelle in diesem Schema erstellt (vorausgesetzt, der Ersteller kann auf das Schema zugreifen). Der Tabellenname muss für dieses Schema eindeutig sein. Wenn kein Schema angegeben ist, wird die Tabelle anhand des aktuellen Datenbankschemas erstellt. Wenn Sie eine temporäre Tabelle erstellen, können Sie keinen Schemanamen angeben, da sich temporäre Tabellen in einem speziellen Schema befinden.

Mehrere temporäre Tabellen mit demselben Namen können in derselben Datenbank zur gleichen Zeit vorhanden sein, wenn sie in getrennten Sitzungen erstellt wurden, da die Tabellen unterschiedlichen Schemata zugewiesen werden. Weitere Informationen zu gültigen Namen finden Sie unter Namen und Kennungen.

column_name

Der Name einer Spalte, die in der neuen Tabelle erstellt werden soll. Die maximale Länge des Spaltennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten. Sie können UTF-8-Multibyte-Zeichen bis zu einer Länge von vier Bytes verwenden. Die maximale Anzahl der Spalten, die Sie in einer einzelnen Tabelle definieren können, ist 1.600. Weitere Informationen zu gültigen Namen finden Sie unter Namen und Kennungen.

Anmerkung

Wenn Sie eine „breite Tabelle“ erstellen, achten Sie darauf, dass Ihre Spaltenliste nicht die Zeilenbreitengrenzen überschreitet, um während der Verarbeitung von Lasten und Abfragen sofort Ergebnisse bereitzustellen. Weitere Informationen finden Sie unter Nutzungshinweise.

data_type

Der Datentyp der Spalte, die erstellt wird. Im Fall der Spalten CHAR und VARCHAR können Sie das Schlüsselwort MAX verwenden, statt eine maximale Länge zu deklarieren. MAX legt die maximale Länge auf 4.096 Bytes für CHAR oder 65.535 Bytes für VARCHAR fest. Die maximale Größe eines GEOMETRY-Objekts beträgt 1.048.447 Byte..

Informationen zu den Datentypen, die Amazon Redshift unterstützt, finden Sie unter Datentypen.

DEFAULT default_expr

Eine Klausel, die der Spalte einen Standarddatenwert zuweist. Der Datentyp von default_expr muss dem Datentyp der Spalte entsprechen. Der Wert DEFAULT muss ein variablenloser Ausdruck sein. Unterabfragen, Querreferenzen auf andere Spalten in der aktuellen Tabelle und benutzerdefinierte Funktionen sind nicht zulässig.

Der Ausdruck default_expr wird in jeder INSERT-Operation verwendet, die keinen Wert für die Spalte angibt. Wenn kein Standardwert angegeben ist, ist der Standardwert für die Spalte null.

Wenn eine COPY-Operation mit einer definierten Spaltenliste eine Spalte mit einem DEFAULT-Wert auslässt, fügt der Befehl COPY den Wert von default_expr ein.

IDENTITY(seed, step)

Eine Klausel, die angibt, dass es sich bei der Spalte um eine IDENTITY-Spalte handelt. Eine IDENTITY-Spalte enthält eindeutige, automatisch generierte Werte. Der Datentyp für eine IDENTITY-Spalte muss entweder INT oder BIGINT sein.

Wenn Sie Zeilen mithilfe einer INSERT- oder INSERT INTO [tablename] VALUES()-Anweisung hinzufügen, beginnen diese Werte mit dem Wert, der als Startwert angegeben ist, und werden um die Zahl gesteigert, die als Schritt bezeichnet wird.

Wenn Sie die Tabelle mithilfe einer INSERT INTO [tablename] SELECT * FROM- oder COPY-Anweisung laden, werden die Daten parallel geladen und auf die Knoten-Slices verteilt. Um sicherzustellen, dass die IDENTITY-Werte eindeutig sind, überspringt Amazon Redshift beim Erstellen von IDENTITY-Werten eine Reihe von Werten. Identity-Werte sind eindeutig, ihre Reihenfolge stimmt jedoch möglicherweise nicht mit der in den Quelldateien überein.

GENERATED BY DEFAULT AS IDENTITY(Startwert, Schritt)

Eine Anweisung, die angibt, dass es sich bei der Spalte um eine Standard-IDENTITY-Spalte handelt, und dass Sie der Spalte automatisch einen eindeutigen Wert zuweisen können. Der Datentyp für eine IDENTITY-Spalte muss entweder INT oder BIGINT sein. Wenn Sie Zeilen ohne Werte hinzufügen, beginnen diese Werte mit dem Wert, der als Startwert angegeben ist, und werden um die Zahl erhöht, die als Schritt bezeichnet wird. Informationen zur Generierung von Werten finden Sie unter IDENTITY .

Außerdem können Sie während INSERT, UPDATE oder COPY einen Wert ohne EXPLICIT_IDS angeben. Amazon Redshift verwendet diesen Wert zum Einfügen in die Identitätsspalte, anstatt den vom System generierten Wert zu verwenden. Der Wert kann ein Duplikat, ein Wert unter dem Startwert oder ein Wert zwischen Schrittwerten sein. Amazon Redshift prüft nicht die Eindeutigkeit der Werte in der Spalte. Das Angeben eines Wertes hat keinen Einfluss auf den nächsten vom System generierten Wert.

Anmerkung

Wenn Sie Eindeutigkeit in der Spalte benötigen, fügen Sie keinen Duplikatwert hinzu. Fügen Sie stattdessen einen eindeutigen Wert hinzu, der unter dem Startwert oder zwischen Schrittwerten liegt.

Bedenken Sie Folgendes zu Standard-Identity-Spalten:

  • Standard-IDENTITY-Spalten sind NOT NULL. NULL kann nicht eingefügt werden.

  • Verwenden Sie zum Einfügen eines generierten Wertes in eine Standard-Identity-Spalte das Schlüsselwort DEFAULT.

    INSERT INTO tablename (identity-column-name) VALUES (DEFAULT);
  • Das Überschreiben von Werten einer Standard-Identity-Spalte hat keine Auswirkungen auf den nächsten generierten Wert.

  • Sie können nicht eine Standard-Identity-Spalte mit der Anweisung ALTER TABLE ADD COLUMN anhängen.

  • Sie können eine Standard-Identity-Spalte mit der Anweisung ALTER TABLE APPEND anhängen.

ENCODE encoding

Die Kompressionskodierung für eine Spalte. ENCODE AUTO ist die Standardeinstellung für Tabellen. Amazon Redshift verwaltet automatisch die Komprimierungskodierung für alle Spalten in der Tabelle. Wenn Sie die Komprimierungskodierung für eine Spalte in der Tabelle angeben, wird die Tabelle nicht mehr auf ENCODE AUTO festgelegt. Amazon Redshift verwaltet nicht mehr automatisch die Komprimierungskodierung für alle Spalten in der Tabelle. Sie können die Option ENCODE AUTO für die Tabelle angeben, damit Amazon Redshift die Komprimierungskodierung für alle Spalten in der Tabelle automatisch verwalten kann.

Amazon Redshift weist den Spalten, für die Sie keine Komprimierungskodierung angeben, automatisch eine anfängliche Komprimierungskodierung zu:

  • Allen Spalten in temporären Tabellen wird standardmäßig die RAW-Kompression zugewiesen.

  • Spalten, die als Sortierschlüssel definiert sind, wird die RAW-Kompression zugewiesen.

  • Spalten, die als Datentyp BOOLEAN, REAL, DOUBLE PRECISION, GEOMETRY oder GEOGRAPHY definiert sind, wird die RAW-Kompression zugewiesen.

  • Spalten, die als SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP oder TIMESTAMPTZ definiert sind, wird die AZ64-Komprimierung zugewiesen.

  • Spalten, die als CHAR, VARCHAR oder VARBYTE definiert sind, wird LZO-Komprimierung zugewiesen.

Anmerkung

Wenn Sie nicht möchten, dass eine Spalte komprimiert wird, geben Sie die RAW-Kodierung explizit an.

Die folgenden compression encodings werden unterstützt:

  • AZ64

  • BYTEDICT

  • DELTA

  • DELTA32K

  • LZO

  • MOSTLY8

  • MOSTLY16

  • MOSTLY32

  • RAW (keine Kompression)

  • RUNLENGTH

  • TEXT255

  • TEXT32K

  • ZSTD

DISTKEY

Ein Schlüsselwort, das angibt, dass die Spalte der Verteilungsschlüssel für die Tabelle ist. In eine Tabelle kann nur eine Spalte der Verteilungsschlüssel sein. Sie können das DISTKEY-Schlüsselwort nach einem Spaltennamen oder als Teil der Tabellendefinition verwenden, indem Sie die DISTKEY-Syntax (column_name) verwenden. Beide Methoden haben die gleiche Wirkung. Weitere Informationen finden Sie unter „DISTSTYLE-Parameter“ später in diesem Thema.

Als Datentyp einer Verteilungsschlüsselspalte kommen BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP oder TIMESTAMPTZ, CHAR oder VARCHAR infrage.

SORTKEY

Ein Schlüsselwort, das angibt, dass die Spalte der Sortierschlüssel für die Tabelle ist. Wenn Daten in die Tabelle geladen werden, werden die Daten anhand einer oder mehrerer Spalten sortiert, die als Sortierschlüssel bezeichnet sind. Sie können das DISTKEY-Schlüsselwort nach einem Spaltennamen verwenden, um eine einzelne Spalte als Sortierschlüssel zu bezeichnen, oder eine oder mehrere Spalten als Sortierschlüsselspalten für die Tabelle angeben, indem Sie die SORTKEY (column_name [, ...]) -Syntax verwenden. Mit dieser Syntax werden nur zusammengesetzte Sortierschlüssel erstellt.

Sie können maximal 400 SORTKEY-Spalten pro Tabelle definieren.

Als Datentyp einer Sortierschlüsselspalte kommen BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP oder TIMESTAMPTZ, CHAR oder VARCHAR infrage.

COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE

Eine Klausel, die angibt, ob bei der Suche oder Vergleichen in der Spalte zwischen Groß- und Kleinschreibung unterschieden wird (CASE_SENSITIVE) oder nicht (CASE_INSENSITIVE). Der Standardwert entspricht der aktuellen Konfiguration für die Beachtung der Groß-/Kleinschreibung in der Datenbank.

Verwenden Sie den folgenden Befehl, um die Sortierinformationen der Datenbank zu ermitteln:

SELECT db_collation(); db_collation ---------------- case_sensitive (1 row)
NOT NULL | NULL

NOT NULL gibt an, dass die Spalte keine Null-Werte enthalten darf. Der Standardwert NULL gibt an, dass die Spalte Null-Werte akzeptiert. IDENTITY-Spalten werden standardmäßig als NOT NULL deklariert.

UNIQUE

Ein Schlüsselwort, das angibt, dass die Spalte nur eindeutige Werte enthalten darf. Das Verhalten der Tabelleneinschränkung in Bezug auf Eindeutigkeit ist das gleiche wie im Fall von Spalteneinschränkungen, kann jedoch zusätzlich mehrere Spalten umfassen. Um eine Tabelleneinschränkung in Bezug auf Eindeutigkeit zu definieren, verwenden Sie die UNIQUE-Syntax (column_name [, ... ]).

Wichtig

Eindeutigkeitseinschränkungen dienen Informationszwecken und werden nicht vom System erzwungen.

PRIMARY KEY

Ein Schlüsselwort, das angibt, dass die Spalte der Primärschlüssel für die Tabelle ist. Mittels einer Spaltendefinition kann nur eine Spalte als Primärschlüssel definiert werden. Um eine Tabelleneinschränkung mit einem mehrspaltigen Primärschlüssel zu definieren, verwenden Sie die PRIMARY KEY-Syntax (column_name [, ... ]).

Die Identifizierung einer Spalte als Primärschlüssel stellt Metadaten über das Design des Schemas bereit. Ein Primärschlüssel impliziert, dass sich andere Tabellen auf diesen Spaltensatz als eindeutige Bezeichner von Zeilen verlassen können. Für eine Tabelle kann jeweils nur ein Primärschlüssel angegeben werden, ob als Spalten- oder als Tabelleneinschränkung. Die Primärschlüsseleinschränkung sollte einen Spaltensatz nennen, der sich von anderen Spaltensätzen unterscheidet, der von anderen eindeutigen Einschränkungen genannt wird, die für dieselbe Tabelle definiert sind.

PRIMARY KEY-Spalten sind ebenfalls als NOT NULL definiert.

Wichtig

Primärschlüsseleinschränkungen dienen lediglich Informationszwecken. Sie werden nicht vom System erzwungen, werden jedoch vom Planer verwendet.

References reftable [ ( refcolumn ) ]

Eine Klausel, die eine Fremdschlüsseleinschränkung angibt, die impliziert, dass die Spalte nur Werte enthalten darf, die Werten in der referenzierten Spalte einer Zeile der referenzierten Tabelle entsprechen. Bei den referenzierten Spalten muss es sich um die Spalten einer Eindeutigkeits- oder Primärschlüsseleinschränkung in der referenzierten Tabelle handeln.

Wichtig

Fremdschlüsseleinschränkungen dienen lediglich Informationszwecken. Sie werden nicht vom System erzwungen, werden jedoch vom Planer verwendet.

LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ]

Eine Klausel, die eine vorhandene Tabelle angibt, aus der die neue Tabelle automatisch Spaltennamen, Datentypen und NOT NULL-Einschränkungen kopiert. Die neue Tabelle und die übergeordnete Tabelle werden entkoppelt, und Änderungen, die in der übergeordneten Tabelle ausgeführt werden, werden nicht auf die neue Tabelle angewendet. Standardausdrücke für die kopierten Spaltendefinitionen werden nur kopiert, wenn INCLUDING DEFAULTS angegeben ist. Das Standardverhalten besteht darin, Standardausdrücke auszuschließen, sodass alle Spalten der neuen Tabelle keine Standardwerte besitzen.

Tabellen, die mit der LIKE-Option erstellt werden, erben keine Primär- und Fremdschlüsseleinschränkungen. Die Eigenschaften Verteilungstyp, Sortierschlüssel, BACKUP und NULL werden von LIKE-Tabellen geerbt. Sie können sie in der Anweisung CREATE TABLE ... LIKE jedoch nicht explizit festlegen.

BACKUP { YES | NO }

Eine Klausel, die angibt, ob die Tabelle in automatisierten und manuellen Cluster-Snapshots enthalten sein sollte. Geben Sie für Tabellen wie Staging-Tabellen, die keine kritischen Daten enthalten, BACKUP NO an, um beim Erstellen und Wiederherstellen von Snapshots Verarbeitungszeit zu sparen und den Speicherplatz auf Amazon Simple Storage Service zu reduzieren. Die Einstellung BACKUP NO wirkt sich nicht auf die automatische Replikation von Daten zu anderen Knoten innerhalb des Clusters aus. Daher werden Tabellen, für die BACKUP NO angegeben ist, bei einem Knotenausfall wiederhergestellt. Der Standardwert ist BACKUP YES.

DISTSTYLE { AUTO | EVEN | KEY | ALL }

Schlüsselwort, das den Datenverteilungsstil für die gesamte Tabelle definiert. Amazon Redshift verteilt die Zeilen einer Tabelle an die Datenverarbeitungsknoten gemäß dem für die Tabelle angegebenen Verteilungstyp. Der Standardwert ist "AUTO".

Der von Ihnen für Tabellen ausgewählte Verteilungsstil wirkt sich auf die allgemeine Leistung Ihrer Datenbank aus. Weitere Informationen finden Sie unter Arbeiten mit Datenverteilungsstilen. Die möglichen Distributionsstile sind:

  • AUTO: Amazon Redshift weist auf der Grundlage der Tabellendaten den optimalen Verteilungsstil aus. Wenn beispielsweise der Verteilungsstil AUTO angegeben ist, weist Amazon Redshift kleinen Tabellen zunächst den Verteilungsstil ALL zu. Wenn die Tabelle größer wird, ändert Amazon Redshift den Verteilungsstil möglicherweise in KEY und wählt den Primärschlüssel (oder eine Spalte des zusammengesetzten Primärschlüssels) als DISTKEY. Wenn die Tabelle größer wird und keine der Spalten als DISTKEY geeignet ist, ändert Amazon Redshift den Verteilungsstil in EVEN. Die Änderung des Verteilungsstils erfolgt im Hintergrund mit minimalen Auswirkungen auf die Benutzerabfragen.

    Um den Verteilungsstil einer Tabelle anzuzeigen, führen Sie eine Abfrage für die Systemkatalogtabelle PG_CLASS aus. Weitere Informationen finden Sie unter Anzeigen von Verteilungsstilen.

  • EVEN: Die Daten in der Tabelle werden gleichmäßig in einer Round-Robin-Verteilung auf die Knoten in einem Cluster verteilt. Für die Festlegung der Verteilung werden Zeilen-IDs verwendet und jedem Knoten wird ungefähr die gleiche Zahl von Zeilen zugeteilt.

  • KEY: Die Daten werden anhand der Werte in der DISTKEY-Spalte verteilt. Wenn Sie verknüpfte Spalten von verknüpften Tabellen als Verteilungsschlüssel festlegen, werden die verknüpften Zeilen aus beiden Tabellen auf den Datenverarbeitungsknoten zusammen platziert. Wenn Daten zusammen platziert werden, kann der Optimierer Verknüpfungen effizienter ausführen. Wenn Sie DISTSTYLE KEY angeben, müssen Sie eine DISTKEY-Spalte benennen, entweder für die Tabelle oder als Teil der Spaltendefinition. Weitere Informationen finden Sie unter „DISTKEY-Parameter“ früher in diesem Thema.

  • ALL: Eine Kopie der gesamten Tabelle wird zu jedem Knoten verteilt. Dieser Verteilungsstil stellt sicher, dass alle Zeilen, die für eine Verknüpfung erforderlich sind, auf jedem Knoten vorhanden sind. Die Speicheranforderungen werden jedoch multipliziert und die Lade- und Wartungszeiten für die Tabelle werden verlängert. Der Verteilungsstil ALL kann die Ausführungszeit verbessern, wenn er in Verbindung mit bestimmten Dimensionstabellen verwendet wird, für die der Verteilungsstil KEY nicht geeignet ist. Die Leistungsverbesserungen müssen jedoch gegen die Wartungskosten abgewogen werden.

DISTKEY ( column_name )

Eine Einschränkung, die die Spalte angibt, die als Verteilungsschlüssel für die Tabelle verwendet werden soll. Sie können das DISTKEY-Schlüsselwort nach einem Spaltennamen oder als Teil der Tabellendefinition verwenden, indem Sie die DISTKEY-Syntax (column_name) verwenden. Beide Methoden haben die gleiche Wirkung. Weitere Informationen finden Sie unter „DISTSTYLE-Parameter“ früher in diesem Thema.

[COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) | [ SORTKEY AUTO ]

Gibt einen oder mehrere Sortierschlüssel für die Tabelle an. Wenn Daten in die Tabelle geladen werden, werden die Daten anhand der Spalten sortiert, die als Sortierschlüssel bezeichnet sind. Sie können das DISTKEY-Schlüsselwort nach einem Spaltennamen verwenden, um eine einzelne Spalte als Sortierschlüssel zu bezeichnen, oder eine oder mehrere Spalten als Sortierschlüsselspalten für die Tabelle angeben, indem Sie die SORTKEY (column_name [ , ... ] )-Syntax verwenden.

Sie können optional den COMPOUND- oder INTERLEAVED-Sortierstil angeben. Wenn Sie SORTKEY mit Spalten angeben, ist der Standardwert COMPOUND. Weitere Informationen finden Sie unter Arbeiten mit Sortierschlüsseln.

Wenn Sie keine Sortierschlüsseloptionen angeben, ist die Standardeinstellung AUTO.

Sie können pro Tabelle maximal 400 COMPOUND SORTKEY-Spalten oder 8 INTERLEAVED SORTKEY-Spalten definieren.

AUTO

Legt fest, dass Amazon Redshift einen optimalen Sortierschlüssel basierend auf den Tabellendaten zuweist. Wenn zum Beispiel der Sortierschlüssel AUTO angegeben ist, weist Amazon Redshift einer Tabelle zunächst keinen Sortierschlüssel zu. Wenn Amazon Redshift feststellt, dass ein Sortierschlüssel die Leistung von Abfragen verbessert, kann Amazon Redshift den Sortierschlüssel Ihrer Tabelle ändern. Die eigentliche Sortierung der Tabelle erfolgt durch die automatische Tabellensortierung. Weitere Informationen finden Sie unter Automatische Tabellensortierung.

Amazon Redshift ändert keine Tabellen, die bereits Sortier- oder Verteilungsschlüssel haben. Wenn eine Tabelle über einen Verteilungsschlüssel verfügt, der nie in einem JOIN verwendet wurde, kann der Schlüssel geändert werden, wenn Amazon Redshift feststellt, dass ein besserer Schlüssel vorhanden ist.

Um den Sortierschlüssel einer Tabelle anzuzeigen, fragen Sie die Systemkatalogansicht SVV_TABLE_INFO ab. Weitere Informationen finden Sie unter SVV_TABLE_INFO. Um die Empfehlungen von Amazon Redshift Advisor für Tabellen anzuzeigen, fragen Sie die Systemkatalogansicht SVV_ALTER_TABLE_RECOMMENDATIONS ab. Weitere Informationen finden Sie unter SVV_ALTER_TABLE_RECOMMENDATIONS. Um die von Amazon Redshift durchgeführten Aktionen anzuzeigen, fragen Sie die Systemkatalogansicht SVL_AUTO_WORKER_ACTION ab. Weitere Informationen finden Sie unter SVL_AUTO_WORKER_ACTION.

COMPOUND

Gibt an, dass die Daten mittels eines zusammengesetzten Schlüssels sortiert werden, der aus allen aufgelisteten Spalten in der Reihenfolge ihrer Auflistung besteht. Ein zusammengesetzter Sortierschlüssel ist am nützlichsten, wenn eine Abfrage Zeilen in der Reihenfolge der Sortierspalten scannt. Die Leistungsvorteile einer Sortierung mit einem zusammengesetzten Schlüssel nehmen ab, wenn Abfragen von sekundären Sortierspalten abhängig sind. Sie können maximal 400 COMPOUND SORTKEY-Spalten pro Tabelle definieren.

INTERLEAVED

Gibt an, dass die Daten mittels eines überlappenden Sortierschlüssels sortiert werden. Für einen überlappenden Sortierschlüssel können maximal acht Spalten angegeben werden.

Eine überlappende Sortierung gewichtet jede Spalte bzw. jeden Subsatz von Spalten im Sortierschlüssel gleich, so dass Abfragen nicht von der Reihenfolge der Spalten im Sortierschlüssel abhängig sind. Wenn eine Abfrage eine oder mehrere sekundäre Sortierspalten verwendet, wird die Abfrageleistung durch die überlappende Sortierung deutlich verbessert. Die überlappende Sortierung führt zu geringfügigen Overhead-Kosten für das Laden von Daten und das Bereinigen von Operationen.

Wichtig

Verwenden Sie keinen Interleaved-Sortierschlüssel in Spalten mit monoton ansteigenden Attributen, wie Identitätsspalten, Daten oder Zeitstempel.

ENCODE AUTO

Ermöglicht Amazon Redshift, den Kodierungstyp für alle Spalten in der Tabelle automatisch anzupassen, um die Abfrageleistung zu optimieren. ENCODE AUTO behält die anfänglichen Kodierungstypen bei, die Sie beim Erstellen der Tabelle angeben. Wenn Amazon Redshift dann feststellt, dass ein neuer Kodierungstyp die Abfrageleistung verbessern kann, kann Amazon Redshift den Kodierungstyp der Tabellenspalten ändern. ENCODE AUTO ist die Standardeinstellung, wenn Sie keinen Kodierungstyp für eine Spalte in der Tabelle angeben.

UNIQUE ( column_name [,...] )

Eine Einschränkung, die angibt, dass eine Gruppe aus einer oder mehreren Spalten einer Tabelle nur eindeutige Werte enthalten darf. Das Verhalten der Tabelleneinschränkung in Bezug auf Eindeutigkeit ist das gleiche wie im Fall von Spalteneinschränkungen, kann jedoch zusätzlich mehrere Spalten umfassen. Im Kontext von Eindeutigkeitseinschränkungen werden Null-Werte nicht als gleichwertig betrachtet. Jede Eindeutigkeitseinschränkung für eine Tabelle muss einen Spaltensatz nennen, der sich von dem Spaltensatz unterscheidet, der von einer anderen Eindeutigkeits- oder Primärschlüsseleinschränkung genannt wird, die für die Tabelle definiert ist.

Wichtig

Eindeutigkeitseinschränkungen dienen Informationszwecken und werden nicht vom System erzwungen.

PRIMARY KEY ( column_name [,...] )

Eine Einschränkung, die angibt, dass eine Spalte oder eine Reihe von Spalten einer Tabelle nur eindeutige (nicht duplizierte) Nicht-Null-Werte enthalten darf. Die Identifizierung eines Spaltensatzes als Primärschlüssel stellt darüber hinaus Metadaten zum Design des Schemas bereit. Ein Primärschlüssel impliziert, dass sich andere Tabellen auf diesen Spaltensatz als eindeutige Bezeichner von Zeilen verlassen können. Für eine Tabelle kann jeweils nur ein Primärschlüssel angegeben werden, ob als Einzelspalten- oder als Tabelleneinschränkung. Die Primärschlüsseleinschränkung sollte einen Spaltensatz nennen, der sich von anderen Spaltensätzen unterscheidet, der von anderen eindeutigen Einschränkungen genannt wird, die für dieselbe Tabelle definiert sind.

Wichtig

Primärschlüsseleinschränkungen dienen lediglich Informationszwecken. Sie werden nicht vom System erzwungen, werden jedoch vom Planer verwendet.

FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ]

Eine Einschränkung, die eine Fremdschlüsseleinschränkung angibt, die erfordert, dass eine Gruppe aus einer oder mehreren Spalten der neuen Tabelle nur Werte enthalten darf, die Werten in der referenzierten Spalte oder den Spalten einer Zeile der referenzierten Tabelle entsprechen. Wenn refcolumn ausgelassen wird, wird der Primärschlüssel von reftable verwendet. Bei den referenzierten Spalten muss es sich um die Spalten einer Eindeutigkeits- oder Primärschlüsseleinschränkung in der referenzierten Tabelle handeln.

Wichtig

Fremdschlüsseleinschränkungen dienen lediglich Informationszwecken. Sie werden nicht vom System erzwungen, werden jedoch vom Planer verwendet.

Nutzungshinweise

Einschränkungen hinsichtlich Eindeutigkeit, Primärschlüssel und Fremdschlüssel dienen lediglich Informationszwecken. Sie werden von Amazon Redshift nicht erzwungen, wenn Sie eine Tabelle ausfüllen. Wenn Sie beispielsweise Daten in eine Tabelle mit Abhängigkeiten einfügen, kann der Einfügevorgang erfolgreich sein, auch wenn er gegen die Einschränkung verstößt. Dennoch werden Primärschlüssel und Fremdschlüssel als Planungshilfen verwendet und sollten deklariert werden, wenn Ihr ETL-Prozess oder ein anderer Prozess in Ihrer Anwendung ihre Integrität erzwingt. Hinweise zum Entfernen einer Tabelle mit Abhängigkeiten finden Sie unter DROP TABLE.

Limits und Kontingente

Berücksichtigen Sie beim Erstellen einer Tabelle die folgenden Grenzwerte.

  • Es gibt eine Begrenzung für die maximale Anzahl von Tabellen in einem Cluster nach Knotentyp. Weitere Informationen finden Sie unter Limits im Amazon-Redshift-Verwaltungshandbuch.

  • Die maximale Anzahl von Zeichen für einen Tabellennamen ist 127.

  • Die maximale Anzahl der Spalten, die Sie in einer einzelnen Tabelle definieren können, ist 1.600.

  • Die maximale Anzahl der SORTKEY-Spalten, die Sie in einer einzelnen Tabelle definieren können, ist 400.

Übersicht über Einstellungen auf Spalten- und Tabellenebene

Auf Spalten- oder Tabellenebene können verschiedene Attribute und Einstellungen festgelegt werden. In einigen Fällen hat die Festlegung eines Attributs oder einer Einschränkung auf der Spalten- oder Tabellenebene die gleiche Wirkung. In anderen Fällen führt dies zu unterschiedlichen Ergebnissen.

Die folgende Liste bietet eine Übersicht über Einstellungen auf Spalten- und Tabellenebene:

DISTKEY

Es gibt keinen Unterschied hinsichtlich der Wirkung, ob auf Spalten- oder ob auf Tabellenebene festgelegt.

Wenn DISTKEY festgelegt auf der Spalten- oder Tabellenebene festgelegt wird, muss DISTSTYLE auf KEY oder darf überhaupt nicht festgelegt werden. DISTSTYLE kann nur auf Tabellenebene festgelegt werden.

SORTKEY

Bei Festlegung auf Spaltenebene muss SORTKEY aus einer einzelnen Spalte bestehen. Bei Festlegung von SORTKEY auf Tabellenebene können eine oder mehrere Spalten einen zusammengesetzten oder überlappenden Sortierschlüssel bilden.

COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE

Amazon Redshift bietet keine Unterstützung für die Änderung der Groß-/Kleinschreibungskonfiguration für eine Spalte. Wenn Sie eine neue Spalte an die Tabelle anhängen, verwendet Amazon Redshift den Standardwert für die Unterscheidung von Groß- und Kleinschreibung. Amazon Redshift unterstützt beim Anhängen einer neuen Spalte nicht das Schlüsselwort COLLATE.

Weitere Informationen zur Erstellung von Datenbanken mit der Datenbanksortierung finden Sie unter CREATE DATABASE.

Weitere Informationen über die COLLATE-Funktionen finden Sie unter Funktion COLLATE.

UNIQUE

Bei Festlegung auf Spaltenebene können ein oder mehrere Schlüssel als UNIQUE festgelegt werden. Die UNIQUE-Einschränkung gilt für jede Spalte einzeln. Bei Festlegung von UNIQUE auf Tabellenebene können eine oder mehrere Spalten eine zusammengesetzte UNIQUE-Einschränkung bilden.

PRIMARY KEY

Bei Festlegung auf Spaltenebene muss PRIMARY KEY aus einer einzelnen Spalte bestehen. Bei Festlegung von PRIMARY KEY auf Tabellenebene können eine oder mehrere Spalten einen zusammengesetzten Primärschlüssel bilden.

FOREIGN KEY

Es gibt keinen Unterschied hinsichtlich der Wirkung, unabhängig davon, ob FOREIGN KEY auf Spalten- oder auf Tabellenebene festgelegt wird. Auf Spaltenebene ist die Syntax einfach REFERENCES reftable [ ( refcolumn )].

Verteilung eingehender Daten

Wenn das Hash-Verteilungsschema der eingehenden Daten dem der Zieltabelle entspricht, ist keine physische Verteilung der Daten notwendig, wenn die Daten geladen werden. Wenn beispielsweise ein Verteilungsschlüssel für die neue Tabelle festgelegt wird und die Daten aus einer anderen Tabelle eingefügt werden, die anhand der gleichen Schlüsselspalte verteilt wird, werden die Daten unter Verwendung derselben Knoten und Slices entsprechend geladen. Wenn jedoch sowohl die Quell- als auch die Zieltabelle auf eine EVEN-Verteilung festgelegt sind, werden die Daten neu zur Zieltabelle verteilt.

Breite Tabellen

Möglicherweise können Sie eine sehr breite Tabelle erstellen, können jedoch für die Tabelle keine Abfragen wie INSERT oder SELECT verarbeiten. Die maximale Breite einer Tabelle mit Spalten fester Breite, z. B. CHAR, beträgt 64 KB - 1 (oder 65535 Bytes). Wenn eine Tabelle VARCHAR-Spalten enthält, kann die Tabelle eine größere deklarierte Breite haben, ohne einen Fehler zurückzugeben, da VARCHAR-Spalten nicht die gesamte deklarierte Breite zum berechneten Limit für die Abfrageverarbeitung beitragen. Das effektive Limit für die Abfrageverarbeitung für VARCHAR-Spalten ist von einer Reihe von Faktoren abhängig.

Wenn eine Tabelle zu breit für das Einfügen oder Auswählen ist, wird folgender Fehler gemeldet.

ERROR: 8001 DETAIL: The combined length of columns processed in the SQL statement exceeded the query-processing limit of 65535 characters (pid:7627)

Beispiele

Unter dem Thema Beispiele finden Sie Beispiele für die Verwendung des Befehls CREATE TABLE.