Sdílet prostřednictvím


ALTER TABLE

Platí pro:označeno jako ano Databricks SQL označeno jako ano 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ář k tabulce nebo sloupci, můžete použít také 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 líně vyplněna, když dojde k příštímu přístupu k tabulce nebo jejím závislostem.

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 pro 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
  • ADD COLUMN
  • DROP COLUMN
  • SET TBLPROPERTIES
  • UNSET TBLPROPERTIES
  • upravit PREDICTIVE OPTIMIZATION

Pokud používáte Unity katalog, musíte mít oprávnění nebo vlastnictví k MANAGE:

  • SET OWNER TO

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 |
      DEFAULT COLLATION 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

  • table_name

    Identifikuje změněnou tabulku. Název nesmí obsahovat dočasnou specifikaci ani specifikaci možností. Pokud tabulku nenajdete, Azure Databricks vyvolá TABLE_OR_VIEW_NOT_FOUND chybu.

  • RENAME TO to_table_name

    Přejmenuje tabulku.

    • to_table_name

      Identifikuje nový název tabulky. Název nesmí obsahovat dočasnou specifikaci ani specifikaci možností.

      Pro tabulky to_table_name katalogu Unity musí být ve stejném katalogu jako table_name. U jiných tabulek to_table_name musí být ve stejném schématu jako table_name.

      Pokud to_table_name není kvalifikovaný, je implicitně kvalifikován aktuálním schématem.

  • PŘIDAT COLUMN

    Přidá do tabulky jeden nebo více sloupců.

  • ADD CONSTRAINT

    Přidá omezení kontroly, informační omezení cizího klíče nebo informační omezení primárního klíče do tabulky.

    Cizí klíče a primární klíče jsou podporovány pouze pro tabulky v katalogu Unity, nikoli pro hive_metastore katalog.

  • DEFAULT COLLATION collation_name

    Platí pro:zaškrtnuto jako ano Databricks SQL zaškrtnuto jako ano Databricks Runtime 16.3 a vyšší

    Mění výchozí kolaci tabulky pro nové sloupce STRING. Na existující sloupce tato klauzule nemá vliv. Chcete-li změnit kolaci existujícího sloupce, použijte ALTER TABLE ... ALTER COLUMN ... COLLATE collation_name.

  • DROP CONSTRAINT

    Odstraní primární klíč, cizí klíč nebo kontrolu omezení z tabulky.

  • DROP FEATURE feature_name [ TRUNCATE HISTORY ]

    Platí pro:zaškrtnuto ano Databricks Runtime 14.3 LTS a novější

    Podpora pro starší verze DROP FEATURE je dostupná od Databricks Runtime 14.3 LTS. Dokumentaci ke starším funkcím najdete v tématu Funkce tabulky Drop Delta (starší verze).

    Platí pro:zaškrtnuto jako ano Databricks SQL zaškrtnuto jako ano Databricks Runtime 16.3 a vyšší

  • Azure Databricks doporučuje používat Databricks Runtime 16.3 a vyšší pro všechny DROP FEATURE příkazy, které nahrazují starší chování.

    Odebere vlastnost z tabulky Delta Lake.

    Odebrání funkce může vést k přidání funkce zápisu checkpointProtection v tabulkovém protokolu. Další informace naleznete v tématu Drop Delta table features and Table features for protocol compatibility.

    • 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.

      Pokud funkce není přítomna v tabulce, Azure Databricks vyvolá DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT.

    • ODSTRANIT HISTORII

      Odebrání funkcí zkrácením historie To vyžaduje dvoufázový proces:

Odstranění funkcí zkrácením historie vyžaduje dvoukrokový proces:

  • První vyvolání vymaže stopy funkce a informuje vás o částečném úspěchu.

  • Potom počkejte, až doba uchovávání skončí, a teprve potom příkaz znovu spusťte a dokončete 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.

    Zkrácení historie tabulky omezuje schopnost provádět DESCRIBE HISTORY a spouštět časové dotazy.

  • PŘIDAT PARTITION

    Přidá do tabulky jeden nebo více oddílů.

  • ODHODIT PARTITION

    Zahodí jednu nebo více partition z tabulky.

  • PARTITION ... SET UMÍSTĚNÍ

    Nastaví umístění oddílu.

  • přejmenovat PARTITION

    Nahrazuje klíče oddílu.

  • OBNOVENÍ ODDÍLŮ

    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ů.

  • SET ROW FILTER klauzule

    Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 12.2 LTS a vyšší zaškrtnuto ano pouze pro Unity Catalog

    Přidá do tabulky funkci filtru řádků. Všechny následné dotazy pro tabulku obdrží podmnožinu řádků, ve kterých se funkce vyhodnotí jako booleovská hodnota TRUE. To může být užitečné pro jemně odstupňované řízení přístupu, kdy funkce může zkontrolovat identitu nebo členství ve skupině uživatele, který funkci vyvolává, a určit, zda se mají určité řádky filtrovat.

  • DROP ROW FILTER

    Platí pro:zaškrtnuto ano Pouze katalog Unity

    Pokud existuje, zahodí filtr řádků z tabulky. Budoucí dotazy vrátí všechny řádky z tabulky bez automatického filtrování.

  • SET TBLPROPERTIES

    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ýt STRING 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:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 11.3 LTS a vyšší

    SET je povolený jako volitelné klíčové slovo.

  • SET TAGS ( { tag_name = tag_value } [, ...] )

    Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 13.3 LTS a novější

    Aplikujte značky na tabulku. 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:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 13.3 LTS a novější

    Odstraňte 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.

  • CLUSTER BY klauzule

    Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 13.3 LTS a novější

    Přidá, změní nebo zahodí strategii clusteringu pro tabulku Delta Lake.

  • { ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION

    Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 12.2 LTS a vyšší zaškrtnuto ano pouze pro Unity Catalog

    Změní spravovanou tabulku Delta Lake na požadované nastavení prediktivní optimalizace.

    Ve výchozím nastavení, když jsou tabulky vytvářeny, je chování INHERIT ze schématu.

    Pokud je prediktivní optimalizace explicitně povolena nebo zděděna jako povolená, OPTIMIZE a VACUUM se automaticky vyvolají na tabulce, pokud to Azure Databricks považuje za vhodné. Další podrobnosti najdete v tématu Prediktivní optimalizace spravovaných tabulek v katalogu Unity.

Příklady

Informace o přidávání omezení a změnách sloupců v Delta Lake najdete v příslušné dokumentaci.

-- 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;

-- Alter multiple columns in a single statement
-- Create a table with 3 columns
> CREATE TABLE my_table (num INT, str STRING, bool BOOLEAN) TBLPROPERTIES('delta.feature.allowColumnDefaults' = 'supported')
> DESCRIBE TABLE my_table;
  col_name    data_type     comment
  --------    ---------     -------
       num          int        null
       str       string        null
       bool      boolean       null

-- Update comments on multiple columns
> ALTER TABLE table ALTER COLUMN
   num COMMENT 'number column',
   str COMMENT 'string column';

> DESCRIBE TABLE my_table;
  col_name    data_type      comment
  --------    ---------   -------------
       num          int   number column
       str       string   string column
      bool      boolean            null

-- Can mix different types of column alter
> ALTER TABLE table ALTER COLUMN
   bool COMMENT 'boolean column',
   num AFTER bool,
   str AFTER num,
   bool SET DEFAULT true;

> DESCRIBE TABLE my_table;
  col_name    data_type      comment
  --------    ---------   --------------
      bool      boolean   boolean column
       num          int    number column
       str       string    string column