Hay varias formas de eliminar datos en ClickHouse, cada una con sus propias ventajas y características de rendimiento. Debe seleccionar el método adecuado en función de su modelo de datos y de la cantidad de datos que pretenda eliminar.
| Método | Sintaxis | Cuándo usarlo |
|---|
| Eliminación ligera | DELETE FROM [table] | Úselo para eliminar pequeñas cantidades de datos. Las filas quedan excluidas de inmediato de todas las consultas SELECT posteriores, pero al principio solo se marcan internamente como eliminadas y no se quitan del disco. |
| Mutación DELETE | ALTER TABLE [table] DELETE | Úselo cuando los datos deban eliminarse del disco de inmediato (por ejemplo, por cumplimiento normativo). Afecta negativamente al rendimiento de SELECT. |
| Truncar tabla | TRUNCATE TABLE [db.table] | Elimina de forma eficiente todos los datos de una tabla. |
| Eliminar partición | DROP PARTITION | Elimina de forma eficiente todos los datos de una partición. |
A continuación, se ofrece un resumen de las distintas formas de eliminar datos en ClickHouse:
Las eliminaciones ligeras hacen que las filas se marquen inmediatamente como eliminadas, de modo que puedan excluirse automáticamente de todas las consultas SELECT posteriores. La eliminación posterior de estas filas se produce durante los ciclos naturales de merge y, por lo tanto, conlleva menos E/S. Como resultado, es posible que, durante un período no especificado, los datos no se eliminen realmente del almacenamiento y solo queden marcados como eliminados. Si necesita garantizar que los datos se eliminen, considere el comando de mutación anterior.
-- eliminar todos los datos de 2018 con una eliminación ligera. No recomendado.
DELETE FROM posts WHERE toYear(CreationDate) = 2018
Eliminar grandes volúmenes de datos con la sentencia de eliminación ligera DELETE también puede afectar negativamente al rendimiento de las consultas SELECT. Además, este comando no es compatible con tablas que tengan proyecciones.
Tenga en cuenta que en esta operación se utiliza una mutación para marcar las filas eliminadas (añadiendo una columna _row_exists), lo que genera cierta E/S.
En general, deben preferirse las eliminaciones ligeras frente a las mutaciones si se puede tolerar que los datos eliminados sigan existiendo en disco (por ejemplo, en casos sin requisitos de cumplimiento). Aun así, debe evitarse este enfoque si es necesario eliminar todos los datos.
Obtenga más información sobre las eliminaciones ligeras.
Mutaciones de eliminación
Las mutaciones de eliminación se pueden ejecutar con un comando ALTER TABLE ... DELETE, por ejemplo.
-- eliminar todos los datos de 2018 con una mutación. No recomendado.
ALTER TABLE posts DELETE WHERE toYear(CreationDate) = 2018
Estas pueden ejecutarse de forma síncrona (de forma predeterminada si no son no replicadas) o asíncrona (según lo determine la configuración mutations_sync). Son operaciones extremadamente intensivas en I/O, ya que reescriben todas las partes que coinciden con la expresión WHERE. Este proceso no tiene atomicidad: las partes se sustituyen por partes mutadas en cuanto están listas, y una consulta SELECT que comience 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. Los usuarios pueden seguir el progreso mediante la tabla system.mutations. Estas son operaciones intensivas en I/O y deben usarse con moderación, ya que pueden afectar al rendimiento de SELECT en el cluster.
Lea más sobre las mutaciones de eliminación.
Si necesita eliminar todos los datos de una tabla, use el comando TRUNCATE TABLE que se muestra a continuación. Esta es una operación ligera.
Más información sobre TRUNCATE TABLE.
Si ha especificado una clave de particionado personalizada para sus datos, las particiones pueden eliminarse de forma eficiente. Evite el particionado de alta cardinalidad.
ALTER TABLE posts (DROP PARTITION '2008')
Más información sobre DROP PARTITION.
Última modificación el 10 de junio de 2026