# DELETE
DELETE FROM [db.]table WHERE expr
DELETE FROM
elimina filas de la tabla [db.]table
que coinciden con la expresión expr
. Las filas eliminadas se marcan como eliminadas de inmediato y se filtrarán automáticamente en todas las consultas posteriores. La limpieza de datos ocurre de forma asíncrona en segundo plano.
Por ejemplo, la siguiente consulta elimina todas las filas de la tabla hits
donde la columna Title
contiene el texto hello
:
DELETE FROM hits WHERE Title LIKE '%hello%';
En MyScale (y ClickHouse), esta operación se conoce como eliminación ligera. Involucra significativamente menos sobrecarga en comparación con la consulta ALTER TABLE ... DELETE
(opens new window). Por defecto, las eliminaciones ligeras son asíncronas. Sin embargo, hemos configurado mutations_sync
(opens new window) en 1, lo que significa que el cliente esperará a que una réplica procese la declaración.
Tenga en cuenta que hemos deshabilitado la consulta ALTER TABLE ... DELETE
en tablas con índices vectoriales debido a su ineficiencia. En su lugar, recomendamos utilizar DELETE FROM
en todas las tablas, ya que es mucho más rápido.
# Cómo actualizar datos
En ClickHouse, los usuarios pueden actualizar datos utilizando el comando ALTER TABLE ... UPDATE
(opens new window). Sin embargo, no se recomienda utilizar este comando para escenarios de actualización de vectores en MyScale. Sería mejor utilizar DELETE and INSERT en su lugar.
Por ejemplo, las siguientes consultas demuestran cómo actualizar una fila en la tabla test_vector
donde la columna id
es igual a 100.
DELETE FROM test_vector WHERE id = 100;
INSERT INTO test_vector values (100, [-0.045589335, ..., 0.026581138]);
Tenga en cuenta que MyScale es una base de datos OLAP y no está optimizada para operaciones frecuentes de inserción y eliminación. Para un rendimiento óptimo, es crucial ejecutar múltiples inserciones y eliminaciones de datos en una sola sentencia, en lugar de procesar cada fila individualmente. El siguiente ejemplo demuestra cómo realizar de manera eficiente operaciones de inserción y eliminación por lotes en una sola sentencia.
DELETE FROM test_vector where id in (2, 3, 5, 7, 11, ...);
INSERT INTO test_vector values (2, [-0.045589335, ..., 0.026581138]), (3, [-0.051993933, ..., 0.031703997]), (5, [-0.038116932, ..., -0.116080105]), ...;
No se recomienda utilizar ALTER TABLE ... UPDATE
.
ALTER TABLE test_vector UPDATE vector = [-0.045589335, ..., 0.026581138] WHERE id = 100;