ALTER TABLE
Platí pro: Databricks SQL Databricks Runtime
Změní schéma nebo vlastnosti tabulky.
Změny typů nebo přejmenování sloupců v Delta Lake najdete v tématu Přepsání dat.
Pokud chcete změnit komentář v tabulce, můžete také použít FUNKCI COMMENT ON.
Chcete-li změnit STREAMING TABLE
, použijte ALTER STREAMING TABLE.
Pokud je tabulka uložená v mezipaměti, příkaz vymaže data tabulky uložená v mezipaměti a všechny její závislé objekty, které na ni odkazují. Mezipaměť bude opožděně vyplněna, když se tabulka nebo závislé osoby při příštím přístupu k tabulce.
Poznámka:
Když přidáte sloupec do existující tabulky Delta, nemůžete definovat DEFAULT
hodnotu. Všechny sloupce přidané do tabulek Delta se považují za NULL
existující řádky. Po přidání sloupce můžete volitelně definovat výchozí hodnotu sloupce, ale použije se jenom pro nové řádky vložené do tabulky. Použijte následující syntax:
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression
U cizích tabulek můžete provádět pouze ALTER TABLE SET OWNER
a ALTER TABLE RENAME TO
.
Požadována oprávnění
Pokud používáte Katalog Unity, musíte mít MODIFY
oprávnění k:
- ALTER COLUMN
- PŘIDAT SLOUPEC
- DROP COLUMN
- NASTAVENÍ TBLPROPERTIES
- ZRUŠIT NASTAVENÍ TBLPROPERTIES
- úprava PREDIKTIVNÍ OPTIMALIZACE
Všechny ostatní operace vyžadují vlastnictví tabulky.
Syntaxe
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}
Parametry
-
Identifikuje změněnou tabulku. Název nesmí obsahovat dočasnou specifikaci. Pokud tabulku nenajdete, Azure Databricks vyvolá TABLE_OR_VIEW_NOT_FOUND chybu.
RENAME TO
to_table_namePřejmenuje tabulku ve stejném schématu.
-
Identifikuje nový název tabulky. Název nesmí obsahovat dočasnou specifikaci.
-
-
Přidá do tabulky jeden nebo více sloupců.
-
Změní vlastnost nebo umístění sloupce.
-
Odstraňte jeden nebo více sloupců nebo polí v tabulce Delta Lake.
-
Přejmenuje sloupec nebo pole v tabulce Delta Lake.
-
Přidá omezení kontroly, omezení informačního cizího klíče nebo omezení primárního primárního klíče s informacemi do tabulky.
Cizí klíče a primární klíče jsou podporovány pouze pro tabulky v katalogu Unity, nikoli pro
hive_metastore
katalog. -
Zahodí primární klíč, cizí klíč nebo zkontroluje omezení tabulky.
DROP FEATURE feature_name [ TRUNCATE HISTORY ]
Platí pro: Databricks SQL Databricks Runtime 14.1 a vyšší
Odebere funkci z tabulky Delta Lake.
Odebrání funkcí, které ovlivňují čtenáře i zapisovače, vyžaduje dvoufázový proces:
První vyvolání vymaže všechny stopy funkce a informuje vás o částečném úspěchu.
Pak musíte počkat, až se doba uchovávání dokončí, a pak příkaz znovu spusťte, aby se dokončilo odebrání.
Pokud zahájíte druhé vyvolání příliš brzy, Azure Databricks vyvolá DELTA_FEATURE_DROP_WAIT_FOR_RETENTION_PERIOD nebo DELTA_FEATURE_DROP_HISTORICAL_VERSIONS_EXIST.
Podrobnosti najdete v části Co jsou funkce tabulky?
feature_name
Název funkce ve formě
STRING
literálu nebo identifikátoru, který musí být srozumitelný službou Azure Databricks a podporovaný v tabulce.Podporované
feature_names
jsou:- "deletionVectors" nebo
deletionvectors
- 'v2Checkpoint' nebo
v2checkpoint
- 'v2Checkpoint' nebo
Pokud tato funkce není v tabulce Azure Databricks, vyvolá DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT.
- "deletionVectors" nebo
ZKRÁTIT HISTORII
Volitelně můžete zahájit druhou fázi vyřazení funkce reader-plus-writer po 24 hodinách zkrácením historie tabulky na spuštění příkazu vyvolání.
Zkrácení historie tabulek omezuje vaši schopnost provádět funkce DESCRIBE HISTORY a spouštět dotazy na čas.
-
Přidá do tabulky jeden nebo více oddílů.
-
Zahodí jeden nebo více oddílů z tabulky.
-
Nastaví umístění oddílu.
-
Nahradí klíče oddílu.
-
Dává Službě Azure Databricks pokyn, aby naskenoval umístění tabulky a přidal do tabulky všechny soubory, které byly přidány přímo do systému souborů.
-
Platí pro: Databricks SQL Databricks Runtime 12.2 LTS a vyšší pouze katalog Unity
Přidá do tabulky funkci filtru řádků. Všechny následné dotazy v tabulce obdrží podmnožinu řádků, ve kterých se funkce vyhodnotí jako logická hodnota PRAVDA. To může být užitečné pro jemně odstupňované účely řízení přístupu, kdy funkce může zkontrolovat členství v identitě nebo skupině vyvolání uživatele a určit, jestli se mají určité řádky filtrovat.
DROP ROW FILTER
Platí pro: Pouze katalog Unity
Pokud existuje, zahodí filtr řádků z tabulky. Budoucí dotazy vrátí všechny řádky z tabulky bez automatického filtrování.
-
Nastaví nebo obnoví jednu nebo více uživatelem definovaných vlastností.
ZRUŠIT NASTAVENÍ TBLPROPERTIES
Odebere jednu nebo více uživatelem definovaných vlastností.
SET LOCATION
Přesune umístění tabulky.
SET LOCATION path
LOCATION path
path
musí býtSTRING
literál. Určuje nové umístění tabulky.Soubory v původním umístění nebudou přesunuty do nového umístění.
[ SET ] OWNER TO
hlavníPřevede vlastnictví tabulky na
principal
.Platí pro: Databricks SQL Databricks Runtime 11.3 LTS a vyšší
SET
je povolený jako volitelné klíčové slovo.SET TAGS ( { tag_name = tag_value } [, ...] )
Platí pro: Databricks SQL Databricks Runtime 13.3 LTS a vyšší
Použití značek v tabulce Musíte mít
APPLY TAG
oprávnění k přidání značek do tabulky.tag_name
Literál
STRING
. Musítag_name
být jedinečný v tabulce nebo sloupci.tag_value
Literál
STRING
.
UNSET TAGS ( tag_name [, ...] )
Platí pro: Databricks SQL Databricks Runtime 13.3 LTS a vyšší
Odeberte značky z tabulky. Musíte mít
APPLY TAG
oprávnění k odebrání značek z tabulky.tag_name
Literál
STRING
. Musítag_name
být jedinečný v tabulce nebo sloupci.
-
Platí pro: Databricks SQL Databricks Runtime 13.3 LTS a vyšší
Přidá, změní nebo zahodí strategii clusteringu pro tabulku Delta Lake.
{ ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION
Platí pro: Databricks SQL Databricks Runtime 12.2 LTS a vyšší pouze katalog Unity
Důležité
Tato funkce je ve verzi Public Preview.
Změní spravovanou tabulku Delta Lake na požadované nastavení prediktivní optimalizace.
Při vytváření tabulek je ve výchozím nastavení chování
INHERIT
ze schématu.Pokud je prediktivní optimalizace explicitně povolená nebo zděděna jako povolená optimalizace a vakuum se automaticky vyvolá v tabulce, jak se považuje za vhodné v Azure Databricks. Další podrobnosti najdete v tématu Prediktivní optimalizace spravovaných tabulek v katalogu Unity.
Příklady
Informace o přidání omezení a změně příkladů sloupců v Delta Lake najdete v tématu .
-- 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;