ALTER TABLE

Platí pro:označeno jako ano Databricks SQL označeno jako ano Databricks Runtime

Změní schéma nebo vlastnosti tabulky.

Dočasné tabulky podporují ALTER TABLE ... SET TBLPROPERTIES bezserverové ALTER TABLE ... UNSET TBLPROPERTIES výpočetní prostředky, Databricks Runtime 18.2 a novější a Databricks SQL 2026.15 a vyšší. V dočasných tabulkách nejsou podporovány další ALTER TABLE klauzule a vrací chybu. 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.

Cizí tabulky podporují omezenou sadu ALTER TABLE operací, včetně ALTER TABLE SET OWNER, ALTER TABLE RENAME TO, ALTER TABLE SET MANAGED { MOVE | COPY }, a ALTER TABLE SET EXTERNAL. SET MANAGED a SET EXTERNAL vyžadují zahraniční tabulku federovanou pomocí Hive metastore a Glue Federation, a SET MANAGED také vyžaduje formát Delta Lake. Viz Cizí tabulky a Převod cizí tabulky na externí tabulku Unity Catalog.

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

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

  • SET OWNER TO
  • PREDICTIVE OPTIMIZATION

Všechny ostatní operace vyžadují vlastnictví tabulky, včetně SET MANAGED a .UNSET MANAGED

SET EXTERNALa forma cizí tabulky vyžadují SET MANAGEDCREATE také povolení na .EXTERNAL LOCATION Pro všechny předpoklady pro každou konverzi viz Předpoklady a Předpoklady.

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 EXTERNAL clause |
      SET MANAGED clause |
      UNSET MANAGED clause |
      SET OWNER TO clause |
      SET TAGS clause |
      UNSET TAGS clause |
      CLUSTER BY clause |
      REPLACE PARTITIONED BY WITH 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.

    > ALTER TABLE student RENAME TO student_info;
    
  • PŘIDAT COLUMN

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

    Když přidáte sloupec do existující tabulky Delta Lake, nemůžete definovat DEFAULT hodnotu. Všechny sloupce přidané do tabulek Delta Lake se považují za NULL existující řádky. Po přidání sloupce můžete volitelně definovat výchozí hodnotu pro nové řádky pomocí ALTER COLUMN.

    > DESCRIBE StudentInfo;
                    col_name data_type comment
    ----------------------- --------- -------
                        name    string    NULL
                      rollno       int    NULL
                         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
    
    -- Optionally set a default value for new rows
    > ALTER TABLE StudentInfo ALTER COLUMN LastName SET DEFAULT 'unknown';
    

  • PROMĚNIT COLUMN

    Změní vlastnost nebo umístění sloupce.

    > DESCRIBE StudentInfo;
                    col_name data_type comment
    ----------------------- --------- -------
                        name    string    NULL
                      rollno       int    NULL
                    LastName    string    NULL
                         DOB timestamp    NULL
                         age       int    NULL
    
    > ALTER TABLE StudentInfo ALTER COLUMN name COMMENT "new comment";
    
    -- After altering the column
    > DESCRIBE StudentInfo;
                    col_name data_type     comment
    ----------------------- --------- -----------
                        name    string new comment
                      rollno       int        NULL
                    LastName    string        NULL
                         DOB timestamp        NULL
                         age       int        NULL
    

    V jednom příkazu můžete změnit více sloupců:

    -- 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
    
  • ODHODIT COLUMN

    Odstraňte jeden nebo více sloupců nebo polí v tabulce Delta Lake.

  • přejmenovat COLUMN

    Přejmenuje sloupec nebo pole v tabulce Delta Lake.

    > ALTER TABLE StudentInfo RENAME COLUMN name TO FirstName;
    
    -- After renaming the column
    > DESCRIBE StudentInfo;
                    col_name data_type     comment
    ----------------------- --------- -----------
                   FirstName    string new comment
                      rollno       int        NULL
                    LastName    string        NULL
                         DOB timestamp        NULL
                         age       int        NULL
    

  • 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 Protocol versions and table features.

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

    -- 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;
    
  • PŘIDAT PARTITION

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

    > 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
    
    -- Adding multiple partitions to the table
    > ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18) PARTITION (age=20);
    
    > SHOW PARTITIONS StudentInfo;
    partition
    ---------
        age=11
        age=12
        age=15
        age=18
        age=20
    
  • ODHODIT PARTITION

    Zahodí jednu nebo více partition z tabulky.

    > 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
    
  • PARTITION ... SET UMÍSTĚNÍ

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

    > ALTER TABLE dbx.tab1 PARTITION (a='1', b='2') SET LOCATION '/path/to/part/ways';
    
  • přejmenovat PARTITION

    Nahrazuje klíče oddílu.

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

    > ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('winner' = 'loser');
    
  • ZRUŠIT NASTAVENÍ TBLPROPERTIES

    Odebere jednu nebo více uživatelem definovaných vlastností.

    > ALTER TABLE dbx.tab1 UNSET TBLPROPERTIES ('winner');
    
  • SET SERDE

    Platí pro:označeno zaškrtnutím ano Databricks Runtime

    Určuje serializátor /deserializer (SerDe) třídy sloužící ke čtení a zápisu dat v tabulce Hive formátu. Můžete také nakonfigurovat vlastnosti SerDe pomocí WITH SERDEPROPERTIES.

    > 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 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 EXTERNAL [ DRY RUN ]

    Platí pro:check označený jako ano Databricks Runtime 17.3 a vyšší kontrola označená pouze jako ano Unity Catalog

    Převádí cizí tabulku na externí tabulku Unity Catalog, přičemž zachovává historii a konfigurace tabulky, včetně názvu, nastavení, oprávnění a zobrazení. Podporováno pouze na zahraničních tabulkách federovaných pomocí Hive metastore a Glue Federation.

    Vyžaduje OWNER nebo MANAGE povolení na stole a CREATE povolení na .EXTERNAL LOCATION

    Pro vrácení konverze zrušte tabulku. Azure Databricks jej při další synchronizaci katalogu znovu federuje jako cizí tabulku.

    • DRY RUN

      Kontroluje, zda lze zdrojovou tabulku převést, aniž by ji převáděl. Příkaz se vrátí, DRY_RUN_SUCCESS pokud lze tabulku převést.

    Pro předpoklady a pokyny specifické pro formát viz Převod cizí tabulky na externí tabulku Unity Catalog.

    -- Check whether a foreign table can be converted
    > ALTER TABLE hms_federated_catalog.my_schema.my_table SET EXTERNAL DRY RUN;
    
    -- Convert a foreign table to an external table
    > ALTER TABLE hms_federated_catalog.my_schema.my_table SET EXTERNAL;
    

  • SET MANAGED

    Platí na:zaškrtnuté ano, Databricks Runtime 17.3 LTS a výše zaškrtnuté ano, pouze Unity Catalog

    Převádí externí nebo zahraniční tabulku Delta Lake z Unity Catalogu na tabulku spravovanou Unity Catalog. Konverze zachovává název tabulky, nastavení, oprávnění, zobrazení a historii.

    Externí a cizí tabulky používají různé formy klauzule, jak je ukázáno v následující syntaxi:

    SET MANAGED [ TRUNCATE UNIFORM HISTORY ]  -- external tables
    SET MANAGED { MOVE | COPY }               -- foreign tables
    

    Pro externí tabulky vynecháme MOVE a COPY. Pokud zahrneš některou z nich, Azure Databricks zvyšuje DELTA_ALTER_TABLE_SET_MANAGED_UNSUPPORTED_COPY_MOVE_SYNTAX.

    Pro cizí tabulky uveďme buď nebo MOVECOPY. Pokud vynecháte obě možnosti, Azure Databricks zvyšuje DELTA_ALTER_TABLE_SET_MANAGED_COPY_OR_MOVE_REQUIRED. Pro výběr mezi těmito dvěma formami viz Výběr správného příkazu pro vaši zdrojovou tabulku.

    • TRUNCATE UNIFORM HISTORY

      Platí to pro externí tabulky, které mají zapnuté čtení Apache Iceberg . Pokud má tabulka zapnuté čtení Iceberg a vy tuto možnost vynecháte, Azure Databricks zvyšuje DELTA_ALTER_TABLE_SET_MANAGED_DOES_NOT_SUPPORT_UNIFORM_ICEBERG.

      TRUNCATE UNIFORM HISTORY zkracuje historii ledovců UniForm a neodstraňuje historii jezera Delta. Zkrácení způsobuje krátkou dobu čtení a zápisu ledovce.

    • MOVE

      Převede cizí tabulku na spravovanou a zakáže přístup ke zdrojové tabulce v externím katalogu. Po konverzi selže přístup přes externí katalog a přístup založený na cestách, takže všichni čtenáři a autoři musí používat jmenný prostor Unity Catalog.

    • COPY

      Převádí cizí tabulku na spravovanou bez úpravy nebo zakázání přístupu ke zdrojové tabulce v externím katalogu. Konverze kopíruje data do spravovaného úložiště, čímž vznikají dvě samostatné kopie dat. Jste zodpovědní za vypnutí čtení a zápisu do zdrojové tabulky a migraci pracovních zátěží do spravované tabulky.

    Pro předpoklady, odhady výpadků a řešení problémů viz Převod externích nebo zahraničních tabulek Delta Lake na tabulky spravované v Unity Catalog.

    -- Convert an external table
    > ALTER TABLE main.default.my_external_table SET MANAGED;
    
    -- Convert an external table that has Iceberg reads enabled
    > ALTER TABLE main.default.my_external_table SET MANAGED TRUNCATE UNIFORM HISTORY;
    
    -- Convert a foreign table and disable access to the source table
    > ALTER TABLE hms_federated_catalog.my_schema.my_table SET MANAGED MOVE;
    
  • UNSET MANAGED

    Platí na:zaškrtnuté ano, Databricks Runtime 17.3 LTS a výše zaškrtnuté ano, pouze Unity Catalog

    Vrátí tabuli SET MANAGED zpět na externí tabulku aktualizací metadat tabulky tak, aby ukazovala na původní externí lokaci. Azure Databricks uchovává zápisy provedené do spravované lokality po konverzi. U převedené externí tabulky můžete vrátit zpět do 14 dnů od konverze.

    UNSET MANAGED [ TRUNCATE UNIFORM HISTORY ]
    

    Commity vytvořené mezi konverzí a rollbackem podporují cestování časem podle verzí, ale ne podle časového razítka.

    Pro převedení cizí tabulky MOVE zpět do cizí tabulky spusťte UNSET MANAGED a poté zrušte výslednou externí tabulku, která se při další synchronizaci katalogu znovu federuje. Cizí tabulka konvertovaná s nepotřebuje COPYUNSET MANAGED, protože konverze nechala zdrojovou tabulku neupravenou.

    Warning

    Pokud jste převedli cizí tabulku s MOVE, nerušte spravovanou tabulku před spuštěním UNSET MANAGED. Pokud ho vyřadíte jako první, může to vést ke ztrátě dat nebo k nesrovnalosti.

    Pro úplné pokyny k návratu zpět viz Zpět převod řízené tabulky.

    -- Roll a converted managed table back to an external table
    > ALTER TABLE main.default.my_managed_table UNSET MANAGED;
    
  • [ 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.

    Note

    Změna vlastníka není dostupná u datových sad spravovaných kanálem pracovního prostoru.

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

    -- Applies three tags to the table named `test`.
    > ALTER TABLE test SET TAGS ('tag1' = 'val1', 'tag2' = 'val2', 'tag3' = 'val3');
    
    -- 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');
    
  • 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.

    -- Removes three tags from the table named `test`.
    > ALTER TABLE test UNSET TAGS ('tag1', 'tag2', 'tag3');
    
    -- Removes three tags from table `main.schema1.test` column `col1`.
    > ALTER TABLE main.schema1.test ALTER COLUMN col1 UNSET TAGS ('tag1', 'tag2', 'tag3');
    
  • 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.

  • REPLACE PARTITIONED BY WITH CLUSTER BY [( <clustering_columns> ) | AUTO]

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

    Převede existující dělenou tabulku Delta Lake na likvidní clustering s minimálními výpadky čtečky a zapisovače. Klauzule CLUSTER BY přijímá explicitní sloupce clusteringu, AUTO delegování výběru klíče na prediktivní optimalizaci nebo je možné vynechat pro použití existujících sloupců oddílů.

    Viz Převod dělené tabulky na clustering liquid.

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

    -- Enables predictive optimization for my_table
    > ALTER TABLE my_table ENABLE PREDICTIVE OPTIMIZATION;
    

Další příklady

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