ALTER TABLE
Gilt für: Databricks SQL Databricks Runtime
Ä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, können Sie auch COMMENT ON verwenden.
Verwenden Sie ALTER STREAMING TABLE zum Ändern von STREAMING TABLE
.
Wenn die Tabelle zwischengespeichert wurde, löscht der Befehl zwischengespeicherte Daten der Tabelle und alle abhängigen Daten, die darauf verweisen. Der Cache wird beim nächsten Zugriff auf die Tabelle oder die abhängigen Daten verzögert gefüllt.
Hinweis
Wenn Sie einer vorhandenen Delta-Tabelle eine Spalte hinzufügen, können Sie keinen DEFAULT
-Wert definieren. Alle Spalten, die Delta-Tabellen hinzugefügt werden, werden als NULL
für vorhandene Zeilen behandelt. Nachdem Sie eine Spalte hinzugefügt haben, können Sie optional einen Standardwert für die Spalte definieren, dies wird jedoch nur für neue Zeilen angewendet, die in die Tabelle eingefügt wurden. Verwenden Sie die folgende Syntax:
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression
Bei Fremdtabellen können Sie nur ALTER TABLE SET OWNER
und ALTER TABLE RENAME TO
ausführen.
Erforderliche Berechtigungen
Wenn Sie Unity Catalog verwenden, müssen Sie über die MODIFY
-Berechtigung für Folgendes verfügen:
- ALTER COLUMN
- ADD COLUMN
- DROP COLUMN
- SET TBLPROPERTIES
- UNSET TBLPROPERTIES
- Ändern von PREDICTIVE OPTIMIZATION
Für alle anderen Vorgänge müssen Sie Eigentümer der Tabelle sein.
Syntax
ALTER TABLE table_name
{ RENAME TO clause |
ADD COLUMN clause |
ALTER COLUMN clause |
DROP COLUMN clause |
RENAME COLUMN clause |
ADD CONSTRAINT clause |
DROP CONSTRAINT clause |
DROP FEATURE clause |
ADD PARTITION clause |
DROP PARTITION clause |
PARTITION SET LOCATION clause |
RENAME PARTITION clause |
RECOVER PARTITIONS clause |
SET { ROW FILTER clause } |
DROP ROW FILTER |
SET TBLPROPERTIES clause |
UNSET TBLPROPERTIES clause |
SET SERDE clause |
SET LOCATION clause |
SET OWNER TO clause |
SET SERDE clause |
SET TAGS clause |
UNSET TAGS clause |
CLUSTER BY clause }
PREDICTIVE OPTIMIZATION clause}
Parameter
-
Gibt die Tabelle an, die geändert wird. Der Name darf keine zeitliche Spezifikation oder Optionsspezifikation enthalten. Wenn die Tabelle nicht gefunden werden kann, löst Azure Databricks den Fehler TABLE_OR_VIEW_NOT_FOUND aus.
RENAME TO
to_table_nameBenennt die Tabelle innerhalb desselben Schemas um.
-
Gibt den neuen Tabellennamen an. Der Name darf keine zeitliche Spezifikation oder Optionsspezifikation enthalten.
-
-
Fügt der Tabelle mindestens eine Spalte hinzu.
-
Ändert eine Eigenschaft oder die Position einer Spalte.
-
Legen Sie eine oder mehrere Spalten oder Felder in einer Delta Lake-Tabelle ab.
-
Benennt eine Spalte oder ein Feld in einer Delta Lake-Tabelle um.
-
Fügt der Tabelle eine CHECK-Einschränkung, Fremdschlüssel- (Information) oder Primärschlüsseleinschränkung (Information) hinzu.
Fremdschlüssel und Primärschlüssel werden nur für Tabellen in Unity Catalog unterstützt, nicht im
hive_metastore
-Katalog. -
Löscht eine Primärschlüssel- oder Fremdschlüsseleinschränkung oder CHECK-Einschränkung aus der Tabelle.
DROP FEATURE feature_name [ TRUNCATE HISTORY ]
Gilt für: Databricks SQL Databricks Runtime 14.1 und höher
Entfernt ein Feature aus einer Delta Lake-Tabelle.
Das Entfernen von Features, die sowohl Reader als auch Writer betreffen, erfordert einen zweistufigen Prozess:
Der erste Aufruf löscht alle Ablaufverfolgungen des Features und informiert Sie über teilweisen Erfolg.
Sie müssen dann warten, bis der Aufbewahrungszeitraum abgelaufen ist, und die Anweisung erneut ausführen, um die Entfernung abzuschließen.
Wenn Sie den zweiten Aufruf zu früh initiieren, löst Azure Databricks DELTA_FEATURE_DROP_WAIT_FOR_RETENTION_PERIOD oder DELTA_FEATURE_DROP_HISTORICAL_VERSIONS_EXIST aus.
Weitere Informationen finden Sie unter Was sind Tabellenfeatures?.
feature_name
Der Name eines Features in Form eines
STRING
-Literals oder Bezeichners, der von Azure Databricks verstanden und in der Tabelle unterstützt werden muss.Unterstützte
feature_names
sind:- ‘deleteVectors’ oder
deletionvectors
- ‘v2Checkpoint’ oder
v2checkpoint
- ‘v2Checkpoint’ oder
Wenn das Feature nicht in der Tabelle vorhanden ist, löst Azure Databricks DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT aus.
- ‘deleteVectors’ oder
TRUNCATE HISTORY
Optional können Sie die zweite Phase des Ablegens einer Lese-plus-Writer-Funktion nach 24 Stunden initiieren, indem Sie den Tabellenverlauf abschneiden, bis der Aufrufbefehl ausgeführt wurde.
Durch das Abschneiden des Tabellenverlaufs können Sie DESCRIBE HISTORY ausführen und Zeitreisenabfragen ausführen.
-
Fügt der Tabelle eine oder mehrere Partitionen hinzu.
-
Entfernt eine oder mehrere Partitionen aus der Tabelle.
-
Legt den Ort einer Partition fest.
-
Ersetzt die Schlüssel einer Partition.
-
Weist Azure Databricks an, den Speicherort der Tabelle zu überprüfen und der Tabelle alle Dateien hinzuzufügen, die dem Dateisystem direkt hinzugefügt wurden.
-
Gilt für: Databricks SQL Databricks Runtime 12.2 LTS und höher Nur Unity Catalog
Fügt der Tabelle eine Zeilenfilterfunktion hinzu. Alle zukünftigen Abfragen der Tabelle erhalten eine Teilmenge der Zeilen, in denen die Funktion als boolescher WAHR ausgewertet wird. Dies kann für eine fein abgestufte Zugriffssteuerung nützlich sein, bei der die Funktion die Identität oder Gruppenmitgliedschaften der aufrufenden Benutzer überprüfen kann, um zu entscheiden, ob bestimmte Spalten gefiltert werden sollen.
DROP ROW FILTER
Gilt für: Nur Unity Catalog
Löscht den Zeilenfilter aus der Tabelle, sofern vorhanden. Zukünftige Abfragen geben alle Zeilen aus der Tabelle ohne automatische Filterung zurück.
-
Legt eine oder mehrere benutzerdefinierte Eigenschaften fest oder setzt diese zurück.
-
Entfernt eine oder mehrere benutzerdefinierte Eigenschaften.
SET LOCATION
Verschiebt den Speicherort einer Tabelle.
SET LOCATION path
LOCATION path
path
muss einSTRING
-Literal sein. Gibt den neuen Speicherort für die Tabelle an.Dateien am ursprünglichen Speicherort werden nicht an den neuen Speicherort verschoben.
[ SET ] OWNER TO
principalÜberträgt den Besitz der Tabelle an
principal
.Gilt für: Databricks SQL Databricks Runtime 11.3 LTS und höher
SET
ist als optionales Schlüsselwort zulässig.SET TAGS ( { tag_name = tag_value } [, ...] )
Gilt für: Databricks SQL Databricks Runtime 13.3 LTS und höher
Wenden Sie Tags auf die Tabelle an. Sie benötigen die Berechtigung
APPLY TAG
, um Tags zur Tabelle hinzufügen zu können.tag_name
Ein
STRING
-Literal.tag_name
muss innerhalb der Tabelle oder Spalte eindeutig sein.tag_value
Ein
STRING
-Literal.
UNSET TAGS ( tag_name [, ...] )
Gilt für: Databricks SQL Databricks Runtime 13.3 LTS und höher
Entfernen Sie Tags aus der Tabelle. Sie benötigen die Berechtigung
APPLY TAG
, um Tags aus der Tabelle entfernen zu können.tag_name
Ein
STRING
-Literal.tag_name
muss innerhalb der Tabelle oder Spalte eindeutig sein.
-
Gilt für: Databricks SQL Databricks Runtime 13.3 LTS und höher
Fügt die Gruppierungstrategie für eine Delta Lake-Tabelle hinzu, ändert sie oder verwirft sie.
{ ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION
Gilt für: Databricks SQL Databricks Runtime 12.2 LTS und höher Nur Unity Catalog
Wichtig
Dieses Feature befindet sich in der Public Preview.
Ändert die verwaltete Delta Lake-Tabelle in die gewünschte Einstellung für die prädiktive Optimierung.
Wenn Tabellen erstellt werden, wird standardmäßig aus dem Schema geerbt (
INHERIT
).Wenn die prädiktive Optimierung explizit aktiviert oder als aktiviert vererbt wird, werden OPTIMIZE und VACUUM automatisch für die Tabelle aufgerufen, wenn Azure Databricks dies für angemessen hält. Weitere Details finden Sie unter Prädiktive Optimierung für verwaltete Unity Catalog-Tabellen.
Beispiele
Beispiele zum Hinzufügen von Einschränkungen und zum Ändern von Spalten in Delta Lake finden Sie hier:
-- RENAME table
> DESCRIBE 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
> DESCRIBE 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
> DESCRIBE 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
> DESCRIBE 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
> DESCRIBE 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
> DESCRIBE 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
-- RENAME COLUMN
> ALTER TABLE StudentInfo RENAME COLUMN name TO FirstName;
--After RENAME COLUMN
> DESCRIBE StudentInfo;
col_name data_type comment
----------------------- --------- -----------
FirstName 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 SERDE/ SERDE Properties (DBR only)
> ALTER TABLE test_tab SET SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe';
> ALTER TABLE dbx.tab1 SET SERDE 'org.apache.hadoop' WITH SERDEPROPERTIES ('k' = 'v', 'kay' = 'vee');
-- SET TABLE PROPERTIES
> ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('winner' = 'loser');
-- DROP TABLE PROPERTIES
> ALTER TABLE dbx.tab1 UNSET TBLPROPERTIES ('winner');
-- Drop the "deletion vectors" from a Delta table
> ALTER TABLE my_table DROP FEATURE deletionVectors;
-- 24 hours later
> ALTER TABLE my_table DROP FEATURE deletionVectors TRUNCATE HISTORY;
-- Applies three tags to the table named `test`.
> ALTER TABLE test SET TAGS ('tag1' = 'val1', 'tag2' = 'val2', 'tag3' = 'val3');
-- Removes three tags from the table named `test`.
> ALTER TABLE test UNSET TAGS ('tag1', 'tag2', 'tag3');
-- Applies three tags to table `main.schema1.test` column `col1`.
> ALTER TABLE main.schema1.test ALTER COLUMN col1 SET TAGS ('tag1' = 'val1', 'tag2' = 'val2', 'tag3' = 'val3');
-- Removes three tags from table `main.schema1.test` column `col1`.
> ALTER TABLE main.schema1.test ALTER COLUMN col1 UNSET TAGS ('tag1', 'tag2', 'tag3');
-- Enables predictive optimization for my_table
> ALTER TABLE my_table ENABLE PREDICTIVE OPTIMIZATION;