CREATE OR ALTER <objekt>¶
CREATE OR ALTER-Befehle sind DDL-Befehle, die die Funktionalität des CREATE-Befehls und des ALTER-Befehls kombinieren, indem sie es Ihnen ermöglichen, ein Objekt mit der vom CREATE <object>-Befehl unterstützten Syntax mit den Einschränkungen des ALTER <object>-Befehls zu definieren.
Die Befehle pflegen Daten und Zuordnungen, d. h. Daten und andere Zustände, Tag-Zuordnungen und angehängte Richtlinien sowie Berechtigungen für das Objekt bleiben erhalten. Einige Objekttransformationen können jedoch dazu führen, dass Daten verloren gehen. Wenn zum Beispiel eine CREATE OR ALTER TABLE-Anweisung dazu führt, dass eine Spalte gelöscht wird, werden alle in der Spalte enthaltenen Daten gelöscht.
CREATE OR ALTER-Befehle ermöglichen es Ihnen, Objekte mithilfe einer deklarativen, idempotenten Methode inkrementell zu aktualisieren. Wenn eine CREATE OR ALTER-Anweisung ausgeführt wird, führt sie zu einem der folgenden Ergebnisse:
Wenn das Objekt nicht existiert, wird es gemäß der Definition erstellt.
Wenn das Objekt existiert, wird es in das in der Anweisung definierte Objekt umgewandelt.
Wenn das Objekt bereits mit der Definition übereinstimmt, bleibt es unverändert.
Der Befehl bewahrt Daten, Zustände, Tag-Zuordnungen, angehängte Richtlinien und Berechtigungen für das Objekt. Einige Transformationen können jedoch dazu führen, dass Daten verloren gehen. Wenn zum Beispiel eine CREATE OR ALTER TABLE-Anweisung eine Spalte löscht, gehen die Daten in dieser Spalte verloren, können aber mit Time Travel wiederhergestellt werden.
- Siehe auch:
Syntax¶
CREATE OR ALTER <object_type> <object_name>
[ <object_type_properties> ]
[ <object_type_params> ]
[ COMMENT = '<string_literal>' ]
Dabei sind die Werte von object_type_properties
(Eigenschaften des Objekttyps) und object_type_params
(Parameter des Objekttyps) für den Objekttyp spezifisch.
Spezifische Syntax, Nutzungshinweise und Beispiele finden Sie unter:
Kontoobjekte:
Datenbankobjekte:
Allgemeine Nutzungshinweise¶
Data Governance: Die CREATE OR ALTER-Befehle unterstützen keine Data Governance-Änderungen. Bestehende Tags oder Richtlinien sind von den von CREATE OR ALTER-Anweisungen nicht betroffen und bleiben unverändert.
Eigenschaften und Parameter von Objekten zurücksetzen: Wenn eine zuvor festgelegte Eigenschaft oder ein Parameter in der geänderten Objektdefinition nicht vorhanden ist, wird sie/er zurückgesetzt.
Wenn Sie einen expliziten Parameterwert aufheben, wird der Parameter auf den Standardwert zurückgesetzt. Wenn der Parameter für ein Objekt festgelegt wird, das das Zielobjekt enthält, erbt das Zielobjekt den Wert, der für das Objekt festgelegt wurde, das ihn enthält. Andernfalls wird der Parameterwert für das Objekt auf den Standardwert zurückgesetzt.
Atomarität: Der CREATE OR ALTER TABLE-Befehl garantiert derzeit keine Atomarität. Das bedeutet, dass beim Fehlschlagen einer CREATE OR ALTER TABLE-Anweisung während der Ausführung möglicherweise eine Teilmenge der Änderungen auf die Tabelle angewendet worden ist. Wenn die Möglichkeit von Teiländerungen besteht, enthält die Fehlermeldung in den meisten Fällen den folgenden Text:
CREATE OR ALTER execution failed. Partial updates may have been applied.
Wenn die Anweisung beispielsweise versucht, die Spalte
A
zu löschen und eine neue SpalteB
zu einer Tabelle hinzuzufügen, und die Anweisung abgebrochen wird, ist es möglich, dass die SpalteA
gelöscht, aber die SpalteB
nicht hinzugefügt wurde.Bemerkung
Wenn Änderungen teilweise übernommen werden, ist die resultierende Tabelle immer noch in einem gültigen Zustand und Sie können weitere ALTER TABLE-Anweisungen verwenden, um die ursprünglichen Änderungen zu vervollständigen.
Zur Wiederherstellung von partiellen Updates empfiehlt Snowflake die folgenden Wiederherstellungsmechanismen:
Vorwärtskorrektur
Führen Sie die CREATE OR ALTER TABLE-Anweisung erneut aus: Wenn die Anweisungen beim zweiten Versuch erfolgreich sind, ist der Zielzustand erreicht.
Untersuchen Sie die Fehlermeldung. Beheben Sie, wenn möglich, den Fehler, und führen Sie die CREATE OR ALTER TABLE-Anweisung erneut aus.
Zurücksetzen (Rollback)
Wenn eine Vorwärtskorrektur nicht möglich ist, empfiehlt Snowflake, partielle Änderungen manuell rückgängig zu machen:
Untersuchen Sie den Zustand der Tabelle mit den Befehlen DESCRIBE TABLE und SHOW TABLES. Ermitteln Sie, ob und welche Teiländerungen vorgenommen wurden.
Wenn partielle Änderungen vorgenommen wurden, führen Sie die entsprechenden ALTER TABLE-Anweisungen aus, um die Tabelle wieder in ihren ursprünglichen Zustand zu transformieren.
Bemerkung
In manchen Fällen ist es nicht möglich, partielle Änderungen rückgängig zu machen. Weitere Informationen dazu finden Sie unter den unterstützten und nicht unterstützten Aktionen zum Ändern von Spalteneigenschaften unter dem Thema ALTER TABLE … ALTER COLUMN.
Wenn Sie Unterstützung beim Wiederherstellen nach einer partiellen Aktualisierung benötigen, wenden Sie sich an den Snowflake-Support.
Einschränkungen¶
Die spezifischen Beschränkungen des CREATE OR ALTER <object>-Befehls hängen vom jeweiligen Objekt ab. Einige Beispiele für Beschränkungen:
CREATE OR ALTER TABLE-Befehle unterstützen keine Suchoptimierung, da die Suchoptimierung nicht Teil der CREATE TABLE-Syntax ist.
Sie können den Datentyp einer Spalte in einer Tabelle nicht in einen inkompatiblen Datentyp ändern.
Sie können die Definition einer bestehenden Ansicht nicht ändern.
Sie müssen eine Aufgabe anhalten, bevor Sie sie ändern können.
Die Varianten-Syntax für die Erstellung von Objekten (z. B. CREATE OR ALTER TABLE … AS SELECT) wird derzeit nicht unterstützt.
Die Einschränkungen für ein bestimmtes Objekt finden Sie unter im Referenzthema für das Objekt.
Beispiel für einen Anwendungsfall¶
Wenn Sie SQL-Skripte haben, die Snowflake-Objekte für eine Anwendung einrichten, können Sie CREATE OR ALTER <object>-Anweisungen in Ihren Skripten verwenden, um die Bereitstellung von Änderungen in Entwicklungs-, Test- und Produktionsumgebungen zu erleichtern. Wenn sich die Anwendung weiterentwickelt, können Sie Änderungen am Skript vornehmen.
Mit der CREATE OR ALTER <object>-Anweisung können Sie das Skript in einer neuen Umgebung ausführen und gleichzeitig das Skript in einer bestehenden Umgebung erneut ausführen. So können Sie die gewünschte Objektdefinition einmal schreiben und sie in verschiedenen Umgebungen anwenden.