Dela via


ALTER TABLE

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

Ändrar schema eller egenskaperna hos en table.

För typändringar eller byta namn på columns i Delta Lake, se skriva om data.

Om du vill ändra kommentaren på en table eller en columnkan du också använda COMMENT ON.

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

Om table cachelagras rensar kommandot cachelagrade data för table och alla dess beroenden som refererar till den. Cachen kommer att fyllas på i efterhand när table eller dess beroenden nås nästa gång.

Kommentar

När du lägger till en column i en befintlig Delta-tablekan du inte definiera ett DEFAULT värde. Alla columns som läggs till i Delta tables behandlas som NULL för befintliga rader. När du har lagt till en columnkan du definiera ett standardvärde för column, men detta tillämpas bara för nya rader som infogas i table. Använd följande syntax:

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression

På främmande tableskan 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:

  • ÄNDRA COLUMN
  • LÄGG TILL COLUMN
  • SLÄPP COLUMN
  • SET TBLPROPERTIES
  • UNSET TBLPROPERTIES
  • ändra FÖRUTSÄGELSEOPTIMERING

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

  • SET ÄGARE TILL

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

Syntax

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}

Parameters

  • table_name

    Identifierar den table som ändras. Namnet får inte innehålla en temporal specifikation eller alternativspecifikation. Om table inte kan hittas genererar Azure Databricks ett TABLE_OR_VIEW_NOT_FOUND fel.

  • RENAME TO to_table_name

    Byter namn på table inom samma schema.

  • Lägg till COLUMN

    Lägger till en eller flera columns i table.

  • ALTER COLUMN

    Ändrar en egenskap eller läget för en column.

  • DROP COLUMN

    Släpp ett eller flera columns eller fält i en Delta Lake-table.

  • BYT NAMN PÅ COLUMN

    Byter namn på ett column eller fält i en Delta Lake-table.

  • ADD CONSTRAINT

    Lägger till en kontroll constraint, informationsnyckel constraint, eller informationsprimärnyckel constraint till table.

    Främmande nycklar och primära nycklar stöds endast för tables i Unity Catalog, inte hive_metastorecatalog.

  • DROP CONSTRAINT

    Tar bort en primärnyckel, utländsk nyckel eller kontroll constraint från table.

  • DROP FEATURE feature_name [ TRUNCATE HISTORY ]

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

    Tar bort en funktion från en Delta Lake table.

    Borttagning av funktioner som påverkar både läsare och författare kräver en process i två steg:

    Se Vad är table funktioner? för mer information.

    • feature_name

      Namnet på en funktion i form av en STRING literal eller identifiersom måste förstås av Azure Databricks och stödjas på table.

      Stöds feature_names :

      • "deletionVectors" eller deletionvectors
        • "v2Checkpoint" eller v2checkpoint

      Om funktionen inte finns i table genererar Azure Databricks DELTA_FEATURE_DROP_FEATURE_NOT_PRESENT.

    • TRUNKERA HISTORIK

      Om du vill kan du initiera andra fasen av att avaktivera en läsare-och-skrivare-funktion efter 24 timmar genom att trunkera table-historiken till tidpunkten för kommandots körning.

      Om du trunkerar table-historiken begränsar det din förmåga att utföra DESCRIBE HISTORY och köra frågor om tidsresor.

  • LÄGG till PARTITION

    Lägger till en eller flera partitioner i table.

  • DROP PARTITION

    Tar bort en eller flera partitioner från table.

  • PARTITION ... SET PLATS

    Ställer in platsen för en partition.

  • BYT NAMN PÅ PARTITION

    Ersätter nycklarna på en partition.

  • ÅTERSTÄLLA PARTITIONER

    Instruerar Azure Databricks att genomsöka table:s plats och lägga till de filer i table som har lagts till direkt i filsystemet.

  • SET ROW FILTER-sats

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

    Lägger till en radfilterfunktion i table. Alla efterföljande frågor till table mottar en del av de rader where som funktionen utvärderar till boolesk TRUE. Detta kan vara användbart för detaljerad åtkomstkontroll where 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:markerat med ja Unity endast Catalog

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

  • SET TBLPROPERTIES

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

  • UNSET TBLPROPERTIES

    Tar bort en eller flera användardefinierade egenskaper.

  • SET LOCATION

    Ändrar platsen för en table.

    SET LOCATION path
    
    • LOCATION path

      path måste vara en STRING literal. Anger den nya platsen för table.

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

  • [ SET ] OWNER TO principal

    Överför ägarskapet för table 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

    Tillämpa taggar på table. Du måste ha APPLY TAG behörighet att lägga till taggar i table.

    • tag_name

      En literal STRING. tag_name måste vara unikt i table eller column.

    • tag_value

      En literal STRING.

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

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

    Remove taggar från table. Du måste ha APPLY TAG behörighet för att kunna remove taggar från table.

    • tag_name

      En literal STRING. tag_name måste vara unikt i table eller column.

  • CLUSTER BY-sats

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

  • { ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION

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

    Viktigt!

    Den här funktionen finns som allmänt tillgänglig förhandsversion.

    Ändrar den styrda Delta Lake table till önskade inställningar för prediktiv optimering.

    När tables skapas är det förvalda beteendet att INHERIT från schema.

    När förutsägande optimering uttryckligen aktiveras eller ärvs som aktiverad kommer OPTIMIZE och VACUUM att anropas automatiskt på table på det sätt som anses lämpligt av Azure Databricks. Mer information finns i: Förutsägelseoptimering för Unity Catalog hanterad tables.

Exempel

För att lägga till begränsningar och ändra column exempel i Delta Lake, 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;