ALTER TABLE (Databricks SQL)

Ändert das Schema oder die Eigenschaften einer Tabelle.

Informationen zu Typänderungen oder zum Umbenennen von Spalten in Delta Lake finden Sie unter Umschreiben der Daten.

Um den Kommentar in einer Tabelle zu ändern, verwenden Sie COMMNENT ON.

Wenn die Tabelle zwischengespeichert wird, werden zwischengespeicherte Daten der Tabelle und aller abhängigen Daten, die darauf verweisen, vom Befehl entfernt. Der Cache wird lazily gefüllt, wenn beim nächsten Zugriff auf die Tabelle oder die abhängigen Daten zugegriffen wird.

Syntax

ALTER TABLE table_name
   { RENAME clause |
     ADD COLUMN clause |
     ALTER COLUMN clause |
     ADD CONSTRAINT clause |
     DROP CONSTRAINT clause |
     SET LOCATION clause |
     ADD PARTITION clause |
     DROP PARTITION clause |
     RENAME PARTITION clause |
     RECOVER PARTITIONS clause |
     SET TBLPROPERTIES clause |
     UNSET TBLPROPERTIES clause |
     SET LOCATION clause }

Parameter

  • Table_name

    Identifiziert die Tabelle, die geändert wird. Der Name darf keine temporale Spezifikation enthalten.

  • UMBENENNEN IN TO_TABLE_NAME

    Benennt die Tabelle in eine neue Tabelle in derselben Datenbank um.

  • SPALTE HINZUFÜGEN

    Diese Klausel wird für Datenquellen JDBC nicht unterstützt.

    Fügt der Tabelle eine oder mehrere Spalten oder Felder vorhandenen Spalten in einer Delta Lake-Tabelle hinzu.

    { ADD [COLUMNS | COLUMNS ]
      ( { {column_identifier | field_name} data_type [COMMENT comment] [FIRST | AFTER identifier] } [, ...] ) }
    
    • column_identifier

      Der Name der hinzuzufügenden Spalte. Der Name muss innerhalb der Tabelle eindeutig sein.

      Sofern nicht oder angegeben sind, wird die Spalte oder das Feld FIRSTAFTER name am Ende angefügt.

    • field_name

      Der vollqualifizierte Name des Felds, das einer vorhandenen Spalte hinzugefügt werden soll. Alle Komponenten des Pfads zum geschachtelten Feld müssen vorhanden sein, und der Feldname selbst muss eindeutig sein.

    • KOMMENTARKOMMENTAR

      Ein optionales STRING-Literal, das die hinzugefügte Spalte oder das hinzugefügte Feld beschreibt.

    • FIRST

      Wenn angegeben, wird die Spalte als erste Spalte der Tabelle hinzugefügt, oder das Feld wird als erstes Feld von in der enthaltenden Struktur hinzugefügt.

    • AFTER-Bezeichner

      Wenn angegeben, wird die Spalte oder das Feld unmittelbar nach dem Feld oder der Spalte identifier hinzugefügt.

  • ALTER COLUMN

    Ändert eine Eigenschaft oder die Position einer Spalte.

    { { ALTER | CHANGE } [COLUMN] { column_identifier | field_name }
      { COMMENT comment |
        { FIRST | AFTER column_identifier } |
        { SET | DROP } NOT NULL } } }
    
    • column_identifier

      Der Name der zu ändernden Spalte.

    • field_name

      Der vollqualifizierte Name des zu ändernden Felds. Alle Komponenten des Pfads zum geschachtelten Feld müssen vorhanden sein.

    • KOMMENTARKOMMENTAR

      Ändert die Beschreibung der column_name Spalte. comment muss ein STRING-Literal sein.

    • FIRST- oder AFTER-Bezeichner

      Verschiebt die Spalte von ihrer aktuellen Position an den Anfang ( FIRST ) oder sofort an den AFTERidentifier . Diese Klausel wird nur unterstützt, wenn table_name eine Delta-Tabelle ist.

    • SET NOT NULL oderDROP NOT NULL

      Ändert die Domäne gültiger Spaltenwerte, um NULL-Werte SET NOT NULL auszuschließen, oder schließt NULL-Werte DROP NOT NULL ein. Diese Option wird nur für Delta Lake-Tabellen unterstützt. Delta Lake stellt sicher, dass die Einschränkung für alle vorhandenen und neuen Daten gültig ist.

  • ADD CONSTRAINT constraint_name CHECK ( Bedingung )

    Fügt der Delta Lake-Tabelle eine Check-Einschränkung hinzu.

    • constraint_name

      Ein Bezeichner, der innerhalb der Tabelle eindeutig ist.

    • CHECK ( Bedingung )

      Ein deterministischer Ausdruck, der einen BOOLEAN zurücksendet.

      conditionkann aus Literalen, Spaltenbezeichnern innerhalb der Tabelle und deterministischen, integrierten SQL-Operatoren bestehen, mit Ausnahme von:

      Darf condition auch keine condition

      Damit eine CHECK-Einschränkung in der Azure Databricks muss sie als ausgewertet true werden.

      Delta Lake hat die Gültigkeit der Check-Einschränkung sowohl für neue als auch für vorhandene Daten überprüft. Wenn eine vorhandene Zeile gegen die Einschränkung verstößt, wird ein Fehler ausgelöst.

  • DROP CONSTRAINT constraint_name

    Entfernt eine Check-Einschränkung aus der Delta Lake-Tabelle.

  • ADD PARTITION

    Wenn angegeben, wird der Tabelle eine oder mehrere Partitionen hinzufügt. Das Hinzufügen von Partitionen wird für Delta Lake-Tabellen nicht unterstützt.

    ADD [IF NOT EXISTS] { PARTITION clause [ LOCATION path ] } [...]
    
    • WENN NICHT VORHANDEN

      Eine optionale Klausel, die Databricks SQL, die Anweisung zu ignorieren, wenn die Partition bereits vorhanden ist.

    • PARTITION-Klausel

      Eine partition, die hinzugefügt werden soll. Die Partitionsschlüssel müssen mit der Partitionierung der Tabelle übereinstimmen und Werten zugeordnet sein. Wenn die Partition bereits vorhanden ist, wird ein Fehler ausgelöst, es sei IF NOT EXISTS denn, wurde angegeben.

    • LOCATION path (SPEICHERORTPFAD)

      path muss ein STRING-Literal sein, das einen optionalen Speicherort darstellt, der auf die Partition verweisen soll.

      Wenn kein Speicherort angegeben ist, wird der Speicherort vom Speicherort der Tabelle und den Partitionsschlüsseln abgeleitet.

      Wenn dateien am Speicherort vorhanden sind, füllen sie die Partition auf und müssen mit dem der Tabelle und ihrer data_source Optionen kompatibel sein.

  • DROP PARTITION

    Wenn angegeben, löscht diese Klausel eine oder mehrere Partitionen aus der Tabelle und löscht optional alle Dateien an den Speicherorten der Partitionen.

    Delta Lake-Tabellen unterstützen das Löschen von Partitionen nicht.

    DROP [ IF EXISTS ] PARTITION clause [, ...] [PURGE]
    
    • IF EXISTS

      Wenn Sie Azure Databricks IF EXISTS wird ein Versuch ignoriert, Partitionen zu löschen, die nicht vorhanden sind. Andernfalls führen nicht vorhandene Partitionen zu einem Fehler.

    • PARTITION-Klausel

      Gibt eine zu löschende Partition an. Wenn die Partition nur teilweise identifiziert wird, wird ein Slice von Partitionen gelöscht.

    • PURGE

      Wenn festgelegt, muss der Tabellenkatalog Partitionsdaten entfernen, indem der Papierkorbordner übersprungen wird, auch wenn der Katalog einen konfiguriert hat. Die Option gilt nur für verwaltete Tabellen. Sie ist nur wirksam, wenn:

      Das Dateisystem unterstützt einen Papierkorbordner. Der Katalog wurde für das Verschieben der gelöschten Partition in den Papierkorb konfiguriert. Es gibt keinen Papierkorbordner in AWS S3, daher ist er nicht effektiv.

      Nach dem Löschen von Partitionen ist es nicht mehr notwendig, Dateien manuell zu löschen.

  • PARTITION UMBENENNEN

    Ersetzt die Schlüssel einer Partition.

    Delta Lake-Tabellen unterstützen das Umbenennen von Partitionen nicht.

    from_partition_clause RENAME TO to_partition_clause
    
    • from_partition_clause

      Die Definition der Umzubenennungspartition.

    • to_partition_clause

      Die neue Definition für diese Partition. Eine Partition mit denselben Schlüsseln darf nicht bereits vorhanden sein.

  • WIEDERHERSTELLEN VON PARTITIONEN

    Diese Klausel gilt nicht für Delta Lake-Tabellen.

    Weist Databricks SQL an, den Speicherort der Tabelle zu überprüfen und der Tabelle alle Dateien hinzuzufügen, die direkt dem Dateisystem hinzugefügt wurden.

  • SET TBLPROPERTIES

    Legt eine oder mehrere benutzerdefinierte Eigenschaften der Tabelle fest. Eigenschaften sind Schlüsselwertpaare. Wenn die Schlüssel der Eigenschaften vorhanden sind, werden die Werte durch die neuen Werte ersetzt. Wenn die Schlüssel der Eigenschaften nicht vorhanden sind, werden die Schlüssel-Wert-Paare den Eigenschaften hinzugefügt.

    SET TBLPROPERTIES ( { property_key = property_val } [, ...] )
    
    • property_key

      Der Eigenschaftsschlüssel. Der Schlüssel kann aus einem oder mehreren Bezeichnern bestehen, die durch einen Punkt oder ein Zeichenfolgenliteral getrennt sind.

      Eigenschaftsschlüssel müssen eindeutig sein.

    • property_val

      Der neue Wert für die Eigenschaft. Der Wert muss ein BOOLEAN-, STRING-, INTEGER- oder DECIMAL-Literal sein.

  • UNSET-TBLPROPERTIES

    Entfernt eine oder mehrere benutzerdefinierte Eigenschaften von table_name .

    UNSET TBLPROPERTIES [ IF EXISTS ] ( property_key [, ...] )
    
    • IF EXISTS

      Sofern nicht IF EXISTS angegeben wird, wird ein Fehler ausgelöst, wenn die Eigenschaft nicht festgelegt wurde.

    • property_key

      Der Schlüssel kann aus einem oder mehreren Bezeichnern bestehen, die durch einen Punkt oder ein Zeichenfolgenliteral getrennt sind.

      Eigenschaftsschlüssel müssen eindeutig sein.

  • SET LOCATION

    Verschiebt den Speicherort einer Partition oder Tabelle.

    Delta Lake unterstützt das Verschieben einzelner Partitionen einer Delta Lake-Tabelle nicht.

    [ PARTITION clause ] SET LOCATION path
    
    • PARTITION-Klausel

      Gibt optional die Partition an, für die der Speicherort geändert werden soll. Wenn Sie die Benennung einer Partition weglassen, Azure Databricks verschiebt den Speicherort der Tabelle.

    • LOCATION-Pfad

      path muss ein STRING-Literal sein. Gibt den neuen Speicherort für die Partition oder Tabelle an.

      Dateien am ursprünglichen Speicherort werden nicht an den neuen Speicherort verschoben.

Beispiele

Beispiele zum Hinzufügen und Ändern von Spalten in Delta Lake finden Sie unter

-- RENAME table
> DESC student;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

> ALTER TABLE Student RENAME TO StudentInfo;

-- After Renaming the table
> DESC StudentInfo;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

-- RENAME partition

> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=10
    age=11
    age=12

> ALTER TABLE default.StudentInfo PARTITION (age='10') RENAME TO PARTITION (age='15');

-- After renaming Partition
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

-- Add new columns to a table
> DESC StudentInfo;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

> ALTER TABLE StudentInfo ADD columns (LastName string, DOB timestamp);

-- After Adding New columns to the table
> DESC StudentInfo;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                LastName    string    NULL
                     DOB timestamp    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

-- Add a new partition to a table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

> ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18);

-- After adding a new partition to the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15
    age=18

-- Drop a partition from the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15
    age=18

> ALTER TABLE StudentInfo DROP IF EXISTS PARTITION (age=18);

-- After dropping the partition of the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

-- Adding multiple partitions to the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

> ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18) PARTITION (age=20);

-- After adding multiple partitions to the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15
    age=18
    age=20

-- ALTER or CHANGE COLUMNS
> DESC StudentInfo;
                col_name data_type comment
+-----------------------+---------+-------
                    name    string    NULL
                  rollno       int    NULL
                LastName    string    NULL
                     DOB timestamp    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

ALTER TABLE StudentInfo ALTER COLUMN name COMMENT "new comment";

--After ALTER or CHANGE COLUMNS
> DESC StudentInfo;
                col_name data_type     comment
 ----------------------- --------- -----------
                    name    string new comment
                  rollno       int        NULL
                LastName    string        NULL
                     DOB timestamp        NULL
                     age       int        NULL
 # Partition Information
              # col_name data_type     comment
                     age       int        NULL

-- Change the file Location
> ALTER TABLE dbx.tab1 PARTITION (a='1', b='2') SET LOCATION '/path/to/part/ways'

-- SET TABLE PROPERTIES
> ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('winner' = 'loser');

-- DROP TABLE PROPERTIES
> ALTER TABLE dbx.tab1 UNSET TBLPROPERTIES ('winner');