ALTER TABLE
Gäller för: Databricks SQL Databricks Runtime
Ändrar schema eller egenskaperna hos en table.
För typändringar eller byta namn på columns i Delta Lake, se skriva om data.
Om du vill ändra kommentaren på en table eller en columnkan du också använda COMMENT ON.
Om du vill ändra en STREAMING TABLE
använder du ALTER STREAMING TABLE.
Om table cachelagras rensar kommandot cachelagrade data för table och alla dess beroenden som refererar till den. Cachen kommer att fyllas på i efterhand när table eller dess beroenden nås nästa gång.
Kommentar
När du lägger till en column i en befintlig Delta-tablekan du inte definiera ett DEFAULT
värde. Alla columns som läggs till i Delta tables behandlas som NULL
för befintliga rader. När du har lagt till en columnkan du definiera ett standardvärde för column, men detta tillämpas bara för nya rader som infogas i table. Använd följande syntax:
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression
På främmande tableskan du bara utföra ALTER TABLE SET OWNER
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 COLUMN
- LÄGG TILL COLUMN
- SLÄPP COLUMN
- SET TBLPROPERTIES
- UNSET TBLPROPERTIES
- ändra FÖRUTSÄGELSEOPTIMERING
Om du använder Unity Catalog måste du ha MANAGE
behörighet eller ägarskap för att:
- SET ÄGARE TILL
Alla andra åtgärder kräver ägarskap av table.
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}
Parameters
-
Identifierar den table som ändras. Namnet får inte innehålla en temporal specifikation eller alternativspecifikation. Om table inte kan hittas genererar Azure Databricks ett TABLE_OR_VIEW_NOT_FOUND fel.
RENAME TO
to_table_nameByter namn på table inom samma schema.
-
Identifierar det nya table-namnet. Namnet får inte innehålla en temporal specifikation eller alternativspecifikation.
-
-
Lägger till en eller flera columns i table.
-
Ändrar en egenskap eller läget för en column.
-
Släpp ett eller flera columns eller fält i en Delta Lake-table.
-
Byter namn på ett column eller fält i en Delta Lake-table.
-
Lägger till en kontroll constraint, informationsnyckel constraint, eller informationsprimärnyckel constraint till table.
Främmande nycklar och primära nycklar stöds endast för tables i Unity Catalog, inte
hive_metastore
catalog. -
Tar bort en primärnyckel, utländsk nyckel eller kontroll constraint från table.
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 table.
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.
Se Vad är table funktioner? för mer information.
feature_name
Namnet på en funktion i form av en
STRING
literal eller identifiersom måste förstås av Azure Databricks och stödjas på table.Stöds
feature_names
:- "deletionVectors" eller
deletionvectors
- "v2Checkpoint" eller
v2checkpoint
- "v2Checkpoint" eller
Om funktionen inte finns i table genererar Azure Databricks DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT.
- "deletionVectors" eller
TRUNKERA HISTORIK
Om du vill kan du initiera andra fasen av att avaktivera en läsare-och-skrivare-funktion efter 24 timmar genom att trunkera table-historiken till tidpunkten för kommandots körning.
Om du trunkerar table-historiken begränsar det din förmåga att utföra DESCRIBE HISTORY och köra frågor om tidsresor.
-
Lägger till en eller flera partitioner i table.
-
Tar bort en eller flera partitioner från table.
-
Ställer in platsen för en partition.
-
Ersätter nycklarna på en partition.
-
Instruerar Azure Databricks att genomsöka table:s plats och lägga till de filer i table som har lagts till direkt i filsystemet.
SET
ROW FILTER-satsgäller för: Databricks SQL Databricks Runtime 12.2 LTS och senare Unity Catalog
Lägger till en radfilterfunktion i table. Alla efterföljande frågor till table mottar en del av de rader where som funktionen utvärderar till boolesk TRUE. Detta kan vara användbart för detaljerad åtkomstkontroll where 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 för: Unity endast Catalog
Släpper radfiltret från table, om det finns några. Framtida frågor returnerar alla rader från table utan automatisk filtrering.
-
Anger eller återställer en eller flera användardefinierade egenskaper.
-
Tar bort en eller flera användardefinierade egenskaper.
SET LOCATION
Ändrar platsen för en table.
SET LOCATION path
LOCATION path
path
måste vara enSTRING
literal. Anger den nya platsen för table.Filer på den ursprungliga platsen flyttas inte till den nya platsen.
[ SET ] OWNER TO
principalÖverför ägarskapet för table 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
Tillämpa taggar på table. Du måste ha
APPLY TAG
behörighet att lägga till taggar i table.tag_name
En literal
STRING
.tag_name
måste vara unikt i table eller column.tag_value
En literal
STRING
.
UNSET TAGS ( tag_name [, ...] )
Gäller för: Databricks SQL Databricks Runtime 13.3 LTS och senare
Remove taggar från table. Du måste ha
APPLY TAG
behörighet för att kunna remove taggar från table.tag_name
En literal
STRING
.tag_name
måste vara unikt i table eller column.
-
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 table.
{ ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION
gäller för: Databricks SQL Databricks Runtime 12.2 LTS och senare Unity Catalog
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Ändrar den styrda Delta Lake table till önskade inställningar för prediktiv optimering.
När tables skapas är det förvalda beteendet att
INHERIT
från schema.När förutsägande optimering uttryckligen aktiveras eller ärvs som aktiverad kommer OPTIMIZE och VACUUM att anropas automatiskt på table på det sätt som anses lämpligt av Azure Databricks. Mer information finns i: Förutsägelseoptimering för Unity Catalog hanterad tables.
Exempel
För att lägga till begränsningar och ändra column exempel i Delta Lake, 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;