ALTER TABLE modifican la configuración de la tabla o sus datos:
La mayoría de las consultas
ALTER TABLE solo son compatibles con tablas *MergeTree, Merge y Distributed.ALTER manipulan vistas:
| Sentencia | Descripción |
|---|---|
| ALTER TABLE … MODIFY QUERY | Modifica la estructura de una vista materializada. |
ALTER modifican entidades relacionadas con el control de acceso basado en roles:
| Sentencia | Descripción |
|---|---|
| ALTER TABLE … MODIFY COMMENT | Agrega, modifica o elimina comentarios en la tabla, independientemente de si se habían establecido antes o no. |
| ALTER NAMED COLLECTION | Modifica las Named Collections. |
Mutaciones
ALTER destinadas a modificar datos de tablas se implementan mediante un mecanismo llamado “mutaciones”, en particular ALTER TABLE … DELETE y ALTER TABLE … UPDATE. Son procesos asíncronos en segundo plano, similares a las fusiones en tablas MergeTree, que producen nuevas versiones “mutadas” de las partes.
En las tablas *MergeTree, las mutaciones se ejecutan reescribiendo partes de datos completas.
No hay atomicidad: las partes se sustituyen por sus versiones mutadas en cuanto están listas, y una consulta SELECT que haya comenzado a ejecutarse durante una mutación verá datos de partes que ya han sido mutadas junto con datos de partes que aún no han sido mutadas.
Las mutaciones están totalmente ordenadas según su orden de creación y se aplican a cada parte en ese orden. Las mutaciones también están parcialmente ordenadas con las consultas INSERT INTO: los datos que se insertaron en la tabla antes de que se enviara la mutación serán mutados, y los datos que se insertaron después no serán mutados. Tenga en cuenta que las mutaciones no bloquean las inserciones de ninguna manera.
Una consulta de mutación devuelve el resultado inmediatamente después de que se añade la entrada de mutación (en el caso de las tablas replicadas, en ZooKeeper; en las tablas no replicadas, en el sistema de archivos). La mutación en sí se ejecuta de forma asíncrona usando la configuración del perfil del sistema. Para seguir el progreso de las mutaciones, puede usar la tabla system.mutations. Una mutación enviada correctamente seguirá ejecutándose incluso si se reinician los servidores de ClickHouse. No hay forma de revertir la mutación una vez enviada, pero si la mutación se queda atascada por algún motivo, puede cancelarse con la consulta KILL MUTATION.
Las entradas de las mutaciones finalizadas no se eliminan de inmediato (el número de entradas conservadas lo determina el parámetro del motor de almacenamiento finished_mutations_to_keep). Las entradas de mutación más antiguas se eliminan.
Sincronía de las consultas ALTER
ALTER se realizan de forma síncrona. Para las tablas replicadas, la consulta solo agrega en ZooKeeper instrucciones para las acciones correspondientes, y dichas acciones se realizan lo antes posible. Sin embargo, la consulta puede esperar a que estas acciones se completen en todas las réplicas.
Para las consultas ALTER que crean mutaciones (p. ej., entre otras, UPDATE, DELETE, MATERIALIZE INDEX, MATERIALIZE PROJECTION, MATERIALIZE COLUMN, APPLY DELETED MASK, APPLY PATCHES, CLEAR STATISTIC, MATERIALIZE STATISTIC), la sincronía se define mediante la configuración mutations_sync.
Para otras consultas ALTER que solo modifican los metadatos, puede usar la configuración alter_sync para definir la espera.
Puede especificar cuánto tiempo (en segundos) esperar a que las réplicas inactivas ejecuten todas las consultas ALTER con la configuración replication_wait_for_inactive_replica_timeout.
Para todas las consultas
ALTER, si alter_sync = 2 y algunas réplicas permanecen inactivas durante más tiempo del especificado en la configuración replication_wait_for_inactive_replica_timeout, se lanza una excepción UNFINISHED.