Sdílet prostřednictvím


ALTER TABLE

Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného 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ář 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

  • table_name

    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 TOto_table_name

    Přejmenuje tabulku ve stejném schématu.

  • PŘIDAT SLOUPEC

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

  • ALTER COLUMN

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

  • DROP COLUMN

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

  • PŘEJMENOVAT SLOUPEC

    Přejmenuje sloupec nebo pole v tabulce Delta Lake.

  • PŘIDAT OMEZENÍ

    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.

  • DROP CONSTRAINT

    Zahodí primární klíč, cizí klíč nebo zkontroluje omezení tabulky.

  • DROP FEATURE feature_name [ TRUNCATE HISTORY ]

    Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano 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:

    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

      Pokud tato funkce není v tabulce Azure Databricks, vyvolá DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT.

    • 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ÁNÍ ODDÍLU

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

  • DROP PARTITION

    Zahodí jeden nebo více oddílů z tabulky.

  • ODDÍL... NASTAVIT UMÍSTĚNÍ

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

  • PŘEJMENOVÁNÍ ODDÍLU

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

  • SETKlauzule FILTER ŘÁDKU

    Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 12.2 LTS a vyšší zaškrtnutí označeného ano 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: zaškrtnutí označeného 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í.

  • NASTAVENÍ 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 TOhlavní

    Převede vlastnictví tabulky na principal.

    Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného 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škrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano 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: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano 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.

  • Klauzule CLUSTER BY

    Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano 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: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 12.2 LTS a vyšší zaškrtnutí označeného ano 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;