Dela via


ALTER TABLE

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime

Ändrar schemat eller egenskaperna för en tabell.

För att byta typ eller byta namn på kolumner i Delta Lake, se för att skriva om data.

Om du vill ändra kommentaren i en tabell eller kolumn kan du också använda COMMENT ON.

Om du vill ändra en STREAMING TABLEanvänder du ALTER STREAMING TABLE.

Om tabellen cachelagras rensar kommandot cachelagrade data i tabellen och alla dess beroenden som refererar till den. Cachen fylls på vid behov när tabellen eller de beroende åtkomst sker nästa gång.

Anmärkning

När du lägger till en kolumn i en befintlig Delta-tabell kan du inte definiera ett DEFAULT värde. Alla kolumner som läggs till i Delta-tabeller behandlas som NULL för befintliga rader. När du har lagt till en kolumn kan du definiera ett standardvärde för kolumnen, men detta tillämpas bara för nya rader som infogas i tabellen. Använd följande syntax:

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression

På externa tabeller kan 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:

  • ALTER COLUMN
  • ADD COLUMN
  • DROP COLUMN
  • SET TBLPROPERTIES
  • UNSET TBLPROPERTIES
  • modifiera PREDICTIVE OPTIMIZATION

Om du använder Unity Catalog måste du ha MANAGE behörighet eller ägarskap för att:

  • SET OWNER TO

Alla andra åtgärder kräver ägarskap av tabellen.

Syntax

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}

Parametrar

  • ÄNDRA COLUMN

    Ändrar en egenskap eller platsen för en kolumn.

  • SLÄPP COLUMN

    Släpp en eller flera kolumner eller fält i en Delta Lake-tabell.

  • BYT NAMN PÅ COLUMN

    Byter namn på en kolumn eller ett fält i en Delta Lake-tabell.

  • ADD CONSTRAINT

    Lägger till en kontrollbegränsning, informationsbegränsning för främmande nyckel eller informationsprimärnyckelbegränsning i tabellen.

    Främmande nycklar och primära nycklar stöds endast för tabeller i Unity Catalog, inte för hive_metastore-katalogen.

  • DEFAULT COLLATION collation_name

    Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 16.3 och senare

    Ändrar standardsortering av tabellen för nya STRING kolumner. Befintliga kolumner påverkas inte av den här satsen. Om du vill ändra sortering av en befintlig kolumn använder du ALTER TABLE ... ALTER COLUMN ... COLLATE collation_name.

  • DROP CONSTRAINT

    Tar bort en primärnyckel, utländsk nyckel eller kontrollvillkor från tabellen.

  • DROP FEATURE feature_name [ TRUNCATE HISTORY ]

    Gäller för:markerad med ja Databricks Runtime 14.3 LTS och nyare

    Äldre stöd för DROP FEATURE är tillgängligt från och med Databricks Runtime 14.3 LTS. Dokumentation om äldre funktioner finns i Drop Delta table features (legacy).

    Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 16.3 och senare

  • Azure Databricks rekommenderar att du använder Databricks Runtime 16.3 och senare för alla DROP FEATURE kommandon, vilket ersätter det äldre beteendet.

    Tar bort en funktion från en Delta Lake-tabell.

    Om du tar bort en funktion kan det leda till att checkpointProtection skrivarfunktionen läggs till i tabellprotokollet. Mer information finns i Drop Delta table features and Table features for protocol compatibility (Ta bort deltatabellfunktioner och Tabellfunktioner för protokollkompatibilitet).

    • feature_name

      Namnet på en funktion i form av en STRING literal eller identifierare, som måste förstås av Azure Databricks och stödjas i tabellen.

      Om funktionen inte finns i tabellen genererar Azure Databricks DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT.

    • TRUNKERA HISTORIKDATA

      Borttagning av funktioner genom att trunkera historiken. Detta kräver en process i två steg:

Borttagningen av funktioner genom att trunkera historiken kräver en tvåstegsprocess:

  • Det första anropet rensar spår av funktionen och informerar dig om delvis framgång.

  • Vänta sedan tills kvarhållningsperioden är slut innan du kör instruktionen igen för att slutföra borttagningen.

    Om du initierar det andra anropet för tidigt, utlöser Azure Databricks antingen DELTA_FEATURE_DROP_WAIT_FOR_RETENTION_PERIOD eller DELTA_FEATURE_DROP_HISTORICAL_VERSIONS_EXIST.

    Att trunkera tabellhistoriken begränsar din möjlighet att utföra DESCRIBE HISTORY och köra frågor om tidsresor.

  • Lägg till PARTITION

    Lägger till en eller flera partitioner i tabellen.

  • SLÄPP PARTITION

    Tar bort en eller flera partitioner från tabellen.

  • PARTITION ... SET PLATS

    Anger platsen för en partition.

  • BYT NAMN PÅ PARTITION

    Ersätter nycklarna för en partition.

  • ÅTERSTÄLLA PARTITIONER

    Instruerar Azure Databricks att söka igenom tabellens plats och lägga till filer i tabellen som har lagts till direkt i filsystemet.

  • SET ROW FILTERsats

    gäller för:checkad som ja Databricks SQL checkad som ja Databricks Runtime 12.2 LTS och senare checkad som ja endast Unity Catalog

    Lägger till en radfilterfunktion i tabellen. Alla efterföljande frågor till tabellen tar emot en delmängd av raderna där funktionen utvärderas till det booleska värdet SANT. Detta kan vara användbart för detaljerad åtkomstkontroll där 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:ikryssad ja endast Unity Catalog

    Släpper radfiltret från tabellen, om det finns några. Framtida frågor returnerar alla rader från tabellen utan automatisk filtrering.

  • SET TBLPROPERTIES

    Anger eller återställer en eller flera användardefinierade egenskaper.

  • AVSTÄLL TBLPROPERTIES

    Tar bort en eller flera användardefinierade egenskaper.

  • SET LOCATION

    Flyttar platsen för en tabell.

    SET LOCATION path
    
    • LOCATION path

      path måste vara ett STRING literalvärde. Anger den nya platsen för tabellen.

      Filer på den ursprungliga platsen flyttas inte till den nya platsen.

  • [ SET ] OWNER TO rektor

    Överför ägarskapet för tabellen till principal.

    Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 11.3 LTS och senare

    SET tillåts som ett valfritt nyckelord.

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

    Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 13.3 LTS och senare

    Använd taggar i tabellen. Du måste ha APPLY TAG behörighet att lägga till taggar i tabellen.

    • tag_name

      En bokstavlig STRING. tag_name måste vara unikt i tabellen eller kolumnen.

    • tag_value

      En bokstavlig STRING.

  • UNSET TAGS ( tag_name [, ...] )

    Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 13.3 LTS och senare

    Ta bort taggar från tabellen. Du måste ha APPLY TAG behörighet att ta bort taggar från tabellen.

    • tag_name

      En bokstavlig STRING. tag_name måste vara unikt i tabellen eller kolumnen.

  • CLUSTER BY klausul

    Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 13.3 LTS och senare

    Lägger till, ändrar eller släpper klustringsstrategin för en Delta Lake-tabell.

  • { ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION

    gäller för:checkad som ja Databricks SQL checkad som ja Databricks Runtime 12.2 LTS och senare checkad som ja endast Unity Catalog

    Ändrar den hanterade Delta Lake-tabellen till önskad inställning för förutsägelseoptimering.

    Som standard, när tabeller skapas, är beteendet att utföra åtgärden INHERIT enligt scheman.

    När förutsägande optimering uttryckligen aktiveras eller ärvs som aktiverad kommer OPTIMIZE och VACUUM automatiskt att anropas på tabellen enligt vad Azure Databricks anser vara lämpligt. Mer information finns i: Förutsägelseoptimering för hanterade Unity Catalog-tabeller.

Exempel

För Delta Lake lägg till begränsningar och ändra kolumnexempel, 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;

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