ALTER TABLE (Databricks SQL)

Modifica el esquema o las propiedades de una tabla.

Parámetro de identificador de tabla

El parámetro de identificador de tabla de todas las instrucciones tiene el formato siguiente:

  • table_identifier
    • [database_name.] table_name: un nombre de tabla, opcionalmente calificado con un nombre de base de datos.
    • delta.`<path-to-table>`: ubicación de una tabla delta existente.

AGREGAR COLUMNAS

Agregue columnas a una tabla existente.

Sintaxis

ALTER TABLE table_identifier ADD COLUMNS ( col_spec [ , ... ] )

Parámetros

  • COLUMNS ( col_spec )

    Columnas que se van a agregar.

AGREGAR Y QUITAR PARTICIÓN

ADD PARTITION

Agrega una partición a la tabla con particiones.

Sintaxis

ALTER TABLE table_identifier ADD [IF NOT EXISTS]
    ( partition_spec [ partition_spec ... ] )

Parámetros

  • partition_spec

    Partición que se va a agregar.

    Sintaxis:PARTITION ( partition_col_name = partition_col_val [ , ... ] )

DROP PARTITION

Quita la partición de la tabla.

Sintaxis

ALTER TABLE table_identifier DROP [ IF EXISTS ] partition_spec [PURGE]

Parámetros

  • partition_spec

    Partición que se va a descartar.

    Sintaxis:PARTITION ( partition_col_name = partition_col_val [ , ... ] )

CAMBIAR EL NOMBRE A

Cambia el nombre de una tabla existente en la base de datos.

Sintaxis

ALTER TABLE table_name RENAME TO table_name

ALTER TABLE table_identifier partition_spec RENAME TO partition_spec

Parámetros

  • table_name

    Un nombre de tabla, opcionalmente calificado con un nombre de base de datos.

    Sintaxis:[database_name.] table_name

  • partition_spec

    Partición cuyo nombre se va a cambiar.

    Sintaxis:PARTITION ( partition_col_name = partition_col_val [ , ... ] )

SET Y UNSET

ESTABLECER PROPIEDADES DE TABLA

Establezca y desasoyé las propiedades de la tabla. Si ya se ha establecido una propiedad, invalida el valor anterior por el nuevo.

Syntax

-- Set Table Properties
ALTER TABLE table_identifier SET TBLPROPERTIES ( key1 = val1, key2 = val2, ... )

-- Unset Table Properties
ALTER TABLE table_identifier UNSET TBLPROPERTIES [ IF EXISTS ] ( key1, key2, ... )

SET SERDE

Establece las SERDE propiedades o en las tablas de SERDE Hive. Si ya se ha establecido una propiedad, invalida el valor anterior por el nuevo.

Syntax

-- Set SERDE Properties
ALTER TABLE table_identifier [ partition_spec ]
    SET SERDEPROPERTIES ( key1 = val1, key2 = val2, ... )

ALTER TABLE table_identifier [ partition_spec ] SET SERDE serde_class_name
    [ WITH SERDEPROPERTIES ( key1 = val1, key2 = val2, ... ) ]

SET LOCATION y SET FILE FORMAT

Establece la ubicación del archivo y el formato de archivo de las tablas existentes.

Sintaxis

-- Changing File Format
ALTER TABLE table_identifier [ partition_spec ] SET FILEFORMAT file_format

-- Changing File Location
ALTER TABLE table_identifier [ partition_spec ] SET LOCATION 'new_location'

Parámetros

  • partition_spec

    Partición en la que se debe establecer la propiedad.

    Sintaxis:PARTITION ( partition_col_name = partition_col_val [ , ... ] )

  • SERDEPROPERTIES ( key1 = val1, key2 = val2, ... )

    Propiedades de SERDE que se establecerán.

Opciones de tabla delta

Además de las opciones ALTER TABLE estándar, las tablas delta admiten las opciones descritas en esta sección.

En esta sección:

Para obtener ejemplos de agregar, cambiar y reemplazar columnas, vea Actualización explícita del esquema.

AGREGAR COLUMNAS

Agrega columnas a una tabla existente, incluida la adición de columnas anidadas. Si ya existe una columna con el mismo nombre en la tabla o en la misma estructura anidada, se produce una excepción.

Syntax

ALTER TABLE table_identifier ADD COLUMNS (col_name data_type [COMMENT col_comment] [FIRST|AFTER colA_name], ...)

ALTER TABLE table_identifier ADD COLUMNS (col_name.nested_col_name data_type [COMMENT col_comment] [FIRST|AFTER colA_name], ...)

CAMBIAR COLUMNA

Cambia una definición de columna de una tabla existente. Puede cambiar el tipo de datos, el comentario o la nulabilidad de una columna y reordenar columnas.

Syntax

ALTER TABLE table_identifier (ALTER|CHANGE) [COLUMN] alterColumnAction

ALTER TABLE table_identifier (ALTER|CHANGE) [COLUMN] alterColumnAction

alterColumnAction:
    : TYPE dataType
    : [COMMENT col_comment]
    : [FIRST|AFTER colA_name]
    : (SET | DROP) NOT NULL

CHANGE COLUMN (sintaxis de Hive)

Cambia una definición de columna de una tabla existente. Puede cambiar el comentario de la columna y reordenar las columnas.

Syntax

ALTER TABLE table_identifier CHANGE [COLUMN] col_name col_name data_type [COMMENT col_comment] [FIRST|AFTER colA_name]

ALTER TABLE table_identifier CHANGE [COLUMN] col_name.nested_col_name col_name data_type [COMMENT col_comment] [FIRST|AFTER colA_name]

Nota

No puede usar CHANGE COLUMN :

  • Para cambiar el contenido de tipos de datos complejos, como structs. En su ADD COLUMNS lugar, use para agregar nuevas columnas a campos anidados o para ALTER COLUMN cambiar las propiedades de una columna anidada.
  • Para relajar la nulabilidad de una columna. En su lugar, use ALTER TABLE table_name ALTER COLUMN column_name DROP NOT NULL .

REEMPLAZAR COLUMNAS

Reemplaza las definiciones de columna de una tabla existente. Admite el cambio de los comentarios de las columnas, la adición de columnas y la reordenación de columnas. Si las definiciones de columna especificadas no son compatibles con las definiciones existentes, se produce una excepción.

Sintaxis

ALTER TABLE table_name REPLACE COLUMNS (col_name1 col_type1 [COMMENT col_comment1], ...)

Ejemplos

-- RENAME table
DESC 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
DESC 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
DESC 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
DESC 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
DESC 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
DESC 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|
+-----------------------+---------+-----------+

-- Change the fileformat
ALTER TABLE loc_orc SET fileformat orc;

ALTER TABLE p1 partition (month=2, day=2) SET fileformat parquet;

-- Change the file Location
ALTER TABLE dbx.tab1 PARTITION (a='1', b='2') SET LOCATION '/path/to/part/ways'

-- SET SERDE/ SERDE Properties
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');

-- SET TABLE COMMENT Using SET PROPERTIES
ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('comment' = 'A table comment.');

-- Alter TABLE COMMENT Using SET PROPERTIES
ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('comment' = 'This is a new comment.');

-- DROP TABLE PROPERTIES
ALTER TABLE dbx.tab1 UNSET TBLPROPERTIES ('winner');