Eliminar columnas de tabla

Vertica Analytics Platform Versión 9.2.documentación de x

ALTER TABLE…DROP COLUMNelimina la columna de tabla especificada y los contenedores ROS que corresponden a la columna eliminada:

 ALTER TABLE table DROP column 

Una vez finalizada la operación de eliminación, los datos respaldados desde el epoch actual en adelante se recuperan sin la columna. Los datos recuperados de una copia de seguridad que precede al epoch actual vuelven a agregar la columna de tabla. Dado que las operaciones de eliminación eliminan físicamente el almacenamiento de objetos y las definiciones de catálogo (historial de tablas) de la tabla, las consultas AT EPOCH (histórico) no devuelven nada para la columna eliminada.

La tabla alterada conserva su ID de objeto.

Las operaciones de soltar columnas pueden ser rápidas porque estos cambios a nivel de catálogo no requieren reorganización de datos, por lo que Vertica puede recuperar rápidamente el almacenamiento en disco.

Restricciones

  • No se puede soltar ni modificar una columna de clave primaria o una columna que participe en la cláusula de partición de tablas.
  • No se puede soltar la primera columna de ningún orden de clasificación de proyección, ni las columnas que participan en una expresión de segmentación de proyección.
  • Todos los nodos deben estar activados.
  • No se puede soltar una columna asociada a una directiva de acceso. Los intentos de hacerlo producen el siguiente error:
    ERROR 6482: Failed to parse Access Policies for table "t1"

Usando CASCADA para forzar una caída

Si la columna de tabla a soltar tiene dependencias, debe calificar la cláusula DROP COLUMN con la opción CASCADE. Por ejemplo, la columna de destino se puede especificar en un orden de proyección. En este y otros casos, DROP COLUMN…CASCADE maneja la dependencia reorganizando las definiciones de catálogo o eliminando una proyección. En todos los casos, CASCADE realiza la reorganización mínima necesaria para eliminar la columna.

Use CASCADE para soltar una columna con las siguientes dependencias:

Dependencia de columna caída Comportamiento EN CASCADA

Cualquier restricción

Vertica elimina la columna cuando una restricción de CLAVE FORÁNEA depende de una restricción de CLAVE ÚNICA o PRIMARIA en las columnas a las que se hace referencia.

Especificado en el orden de clasificación de la proyección

Vertica trunca el orden de clasificación de la proyección hasta e incluyendo la proyección que se suelta sin afectar al almacenamiento físico de otras columnas y, a continuación, suelta la columna especificada. Por ejemplo, si las columnas de una proyección están en orden de clasificación (a,b,c), eliminar la columna b hace que el orden de clasificación de la proyección sea solo (a), omitiendo la columna (c).

Especificado en una expresión de segmentación de proyección

La columna a soltar es parte integral de la definición de proyección. Si es posible, Vertica elimina la proyección siempre y cuando no comprometa la seguridad K; de lo contrario, la transacción retrocede.

A la que se hace referencia como valor predeterminado de otra columna

Consulte Eliminar una columna a la que se hace referencia como valor predeterminado, a continuación.

Eliminar una columna a la que se hace referencia como valor predeterminado

Es posible que desee eliminar una columna de tabla a la que se hace referencia en otra columna como valor predeterminado. Por ejemplo, en la siguiente tabla se define con dos columnas, a y b:, donde b obtiene su valor predeterminado de la columna a:

=> CREAR TABLA x (int) SEGMENTADO TODOS los NODOS;CREATE TABLE=> ALTER TABLE x AGREGAR la COLUMNA b int DEFECTO;ALTER TABLE

En este caso, cayendo columna a requiere el siguiente procedimiento:

  1. Elimine la dependencia predeterminada a través de ALTER COLUMN..DROP DEFAULT:
    => ALTER TABLE x ALTER COLUMN b DROP DEFAULT;
  2. Crear una superproyección de reemplazo para la tabla de destino si una o ambas de las siguientes condiciones es verdadera:
  • La columna de destino es la primera columna de orden de clasificación de la tabla. Si la tabla no tiene un orden de clasificación explícito, el orden de clasificación predeterminado de la tabla especifica la primera columna de la tabla como la primera columna de orden de clasificación. En este caso, la nueva superproyección debe especificar un orden de clasificación que excluya la columna de destino.
  • Si la tabla está segmentada, la columna de destino se especifica en la expresión de segmentación. En este caso, la nueva superproyección debe especificar una expresión de segmentación que excluya la columna de destino.

Dado el ejemplo anterior, la tabla x tiene un orden de clasificación predeterminado de (a, b). Dado que la columna a es la primera columna de orden de clasificación de la tabla, debe crear una superproyección de reemplazo que se clasifique en la columna b:

=> CREATE PROJECTION x_p1 as select * FROM x ORDER BY b UNSEGMENTED ALL NODES;

  • Run START_REFRESH:
    => SELECT START_REFRESH(); START_REFRESH---------------------------------------- Starting refresh background process.(1 row)
  • Run MAKE_AHM_NOW:
    => SELECT MAKE_AHM_NOW(); MAKE_AHM_NOW------------------------------- AHM set (New AHM Epoch: 1231)(1 row)
  • Drop the column:
    => ALTER TABLE x DROP COLUMN a CASCADE;
  • Vertica implementa el CASCADE directiva de la siguiente manera:

    • baja el original superprojection de la tabla xx_super).
    • Actualiza la superproyección de reemplazo x_p1eliminando la columna a.

    Ejemplos

    La siguiente serie de comandos elimina con éxito una columna de tipo de datos de BYTEA:

     = > CREATE TABLE (x BYTEA(65000), y BYTEA, z BYTEA(1)); CREATE TABLE=> ALTER TABLE t DROP COLUMN y;ALTER TABLE=> SELECT y FROM t;ERROR 2624: Column "y" does not exist=> ALTER TABLE t DROP COLUMN x RESTRICT;ALTER TABLE=> SELECT x FROM t;ERROR 2624: Column "x" does not exist=> SELECT * FROM t; z---(0 rows)=> DROP TABLE t CASCADE;TABLA DE CAÍDA

    La siguiente serie de comandos intenta soltar una columna FLOAT (8) y falla porque no hay suficientes proyecciones para mantener la seguridad K.

    => CREATE TABLE t (x FLOAT(8),y FLOAT(08));CREATE TABLE=> ALTER TABLE DROP COLUMN y RESTRICT;ALTER TABLE=> SELECT y FROM t;ERROR 2624: La columna "y" no existe=> ALTER table DROP x CASCADE;ROLLBACK 2409: No se pueden soltar más columnas en t=> DROP t TABLE CASCADE;



    Deja una respuesta

    Tu dirección de correo electrónico no será publicada.