ALTER TABLE
Gäller för: Databricks SQL Databricks Runtime
Ändrar schemat eller egenskaperna för en tabell.
För typändringar eller byta namn på kolumner i Delta Lake, se skriva om data.
Om du vill ändra kommentaren i en tabell kan du också använda KOMMENTERA PÅ.
Om du vill ändra en STREAMING TABLE
använder du ALTER STREAMING TABLE.
Om tabellen cachelagras rensar kommandot cachelagrade data i tabellen och alla dess beroenden som refererar till den. Cachen fylls lazily när tabellen eller de beroende används nästa gång.
Kommentar
När du lägger till en kolumn i en befintlig Delta-tabell kan du inte definiera ett DEFAULT
värde. Alla kolumner som läggs till i Delta-tabeller behandlas som NULL
för befintliga rader. När du har lagt till en kolumn kan du definiera ett standardvärde för kolumnen, men detta tillämpas bara för nya rader som infogas i tabellen. Använd följande syntax:
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression
På sekundärtabeller kan du bara ALTER TABLE SET OWNER
utföra och ALTER TABLE RENAME TO
.
Behörigheter som krävs
Om du använder Unity Catalog måste du ha MODIFY
behörighet att:
- ÄNDRA KOLUMN
- LÄGG TILL KOLUMN
- SLÄPP KOLUMN
- ANGE TBLPROPERTIES
- UNSET TBLPROPERTIES
- ändra FÖRUTSÄGELSEOPTIMERING
Alla andra åtgärder kräver ägarskap för tabellen.
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}
Parametrar
-
Identifierar tabellen som ändras. Namnet får inte innehålla någon temporal specifikation. Om det inte går att hitta tabellen skapar Azure Databricks ett TABLE_OR_VIEW_NOT_FOUND fel.
RENAME TO
to_table_nameByter namn på tabellen inom samma schema.
-
Identifierar det nya tabellnamnet. Namnet får inte innehålla någon temporal specifikation.
-
-
Lägger till en eller flera kolumner i tabellen.
-
Ändrar en egenskap eller platsen för en kolumn.
-
Släpp en eller flera kolumner eller fält i en Delta Lake-tabell.
-
Byter namn på en kolumn eller ett fält i en Delta Lake-tabell.
-
Lägger till en kontrollbegränsning, villkor för informationsnyckel eller informationsbegränsning för primärnyckel i tabellen.
Sekundärnycklar och primära nycklar stöds endast för tabeller i Unity Catalog, inte
hive_metastore
katalogen. -
Släpper en primärnyckel, sekundärnyckel eller kontrollbegränsning från tabellen.
DROP FEATURE feature_name [ TRUNCATE HISTORY ]
Gäller för: Databricks SQL Databricks Runtime 14.1 och senare
Tar bort en funktion från en Delta Lake-tabell.
Borttagning av funktioner som påverkar både läsare och författare kräver en process i två steg:
Det första anropet rensar eventuella spår av funktionen och informerar dig om partiell framgång.
Sedan måste du vänta tills kvarhållningsperioden är över och köra instruktionen igen för att slutföra borttagningen.
Om du initierar det andra anropet för tidigt genererar Azure Databricks DELTA_FEATURE_DROP_WAIT_FOR_RETENTION_PERIOD eller DELTA_FEATURE_DROP_HISTORICAL_VERSIONS_EXIST.
Mer information finns i Vad är tabellfunktioner?
feature_name
Namnet på en funktion i form av en
STRING
literal eller identifierare, som måste förstås av Azure Databricks och stödjas i tabellen.Stöds
feature_names
:- "deletionVectors" eller
deletionvectors
- "v2Checkpoint" eller
v2checkpoint
- "v2Checkpoint" eller
Om funktionen inte finns i tabellen genererar Azure Databricks DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT.
- "deletionVectors" eller
TRUNKERA HISTORIK
Du kan också initiera den andra fasen av att släppa en läsare plus skrivare efter 24 timmar genom att trunkera tabellhistoriken till när anropskommandot kördes.
Om du trunkerar tabellhistoriken kan du utföra DESCRIBE HISTORY och köra frågor om tidsresor.
-
Lägger till en eller flera partitioner i tabellen.
-
Släpper en eller flera partitioner från tabellen.
-
Anger platsen för en partition.
-
Ersätter nycklarna för en partition.
-
Instruerar Azure Databricks att söka igenom tabellens plats och lägga till filer i tabellen som har lagts till direkt i filsystemet.
-
Gäller endast för: Databricks SQL Databricks Runtime 12.2 LTS och senare i Unity Catalog
Lägger till en radfilterfunktion i tabellen. Alla efterföljande frågor till tabellen tar emot en delmängd av raderna där funktionen utvärderas till boolesk TRUE. Detta kan vara användbart för detaljerad åtkomstkontroll där funktionen kan inspektera identitets- eller gruppmedlemskap för den anropande användaren för att avgöra om vissa rader ska filtreras.
DROP ROW FILTER
Gäller endast för: Unity Catalog
Släpper radfiltret från tabellen, om det finns några. Framtida frågor returnerar alla rader från tabellen utan automatisk filtrering.
-
Anger eller återställer en eller flera användardefinierade egenskaper.
-
Tar bort en eller flera användardefinierade egenskaper.
SET LOCATION
Flyttar platsen för en tabell.
SET LOCATION path
LOCATION path
path
måste vara enSTRING
literal. Anger den nya platsen för tabellen.Filer på den ursprungliga platsen flyttas inte till den nya platsen.
[ SET ] OWNER TO
principalÖverför ägarskapet för tabellen till
principal
.Gäller för: Databricks SQL Databricks Runtime 11.3 LTS och senare
SET
tillåts som ett valfritt nyckelord.SET TAGS ( { tag_name = tag_value } [, ...] )
Gäller för: Databricks SQL Databricks Runtime 13.3 LTS och senare
Använd taggar i tabellen. Du måste ha
APPLY TAG
behörighet att lägga till taggar i tabellen.tag_name
En literal
STRING
. Måstetag_name
vara unikt i tabellen eller kolumnen.tag_value
En literal
STRING
.
UNSET TAGS ( tag_name [, ...] )
Gäller för: Databricks SQL Databricks Runtime 13.3 LTS och senare
Ta bort taggar från tabellen. Du måste ha
APPLY TAG
behörighet att ta bort taggar från tabellen.tag_name
En literal
STRING
. Måstetag_name
vara unikt i tabellen eller kolumnen.
-
Gäller för: Databricks SQL Databricks Runtime 13.3 LTS och senare
Lägger till, ändrar eller släpper klustringsstrategin för en Delta Lake-tabell.
{ ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION
Gäller endast för: Databricks SQL Databricks Runtime 12.2 LTS och senare i Unity Catalog
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Ändrar den hanterade Delta Lake-tabellen till önskad inställning för förutsägelseoptimering.
När tabeller skapas är beteendet som standard till
INHERIT
från schemat.När prediktiv optimering uttryckligen aktiveras eller ärvs som aktiverad så anropas OPTIMIZE och VACUUM automatiskt i tabellen enligt vad som anses lämpligt av Azure Databricks. Mer information finns i: Förutsägande optimering för hanterade Unity Catalog-tabeller.
Exempel
För Delta Lake lägg till begränsningar och ändra kolumnexempel, se
-- 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;