When you delete a row in Cassandra, it does not get deleted straight away. Instead it is marked with a tombstone. The effect is, that you still get a result for the key, but no columns will be delivered. The tombstone is required because
- Cassandra data files become read-only once they are "full"; the tombstone is added to the currently open data file containing the deleted row.
- you have to give the cluster a chance to propagate the delete to all nodes holding a copy of the row.
For the row and its tombstone to be removed a compaction is required. This process re-organizes the data files and while it does that, it prunes deleted rows. That is, if the GC grace period of the tombstone has been reached. For single-node(!) clusters it is OK to set the grace period to 0 because the delete does not have to be propagated to any other node (that might be down at the point in time you issued the delete).
If you want to enforce the removal of deleted rows, you can trigger a flush (sync memory with data files) and a major compaction via the nodetool utility. E.g.
./nodetool flush your_key_space the_column_family && ./nodetool compact your_key_space the_column_family
After the compaction completes, the deleted rows should truly be gone.