о настройке mutations_sync. Задача - перезалить часть данных, сначала нужно все данные по предикату удалить, а после вставить новые. После прочтения документации мне показалось, что при установке mutations_sync=2, команда ALTER DELETE завершается после того, как все данные удалены на всех репликах и партиции перезаписаны.
Выполняю в clickhouse-client
set mutations_sync = 2;
ALTER TABLE mytable ON CLUSTER mycluster
DELETE WHERE device_id = 42540
SETTINGS mutations_sync = 2
Query id: d2cd632a-0848-461b-bc1c-d18659b70d59
┌─host────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ ch_server_1 │ 9000 │ 0 │ │ 1 │ 0 │
│ ch_server_2 │ 9000 │ 0 │ │ 0 │ 0 │
└─────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
2 rows in set. Elapsed: 0.638 sec.
Следом выполняю count(*) WHERE device_id = 42540 и получаю не нулевое количество.
Я что-то не так понял или сделал?
а что в system.mutations для этой мутации?
в mutations присутствует запись. parts_to_do постепенно уменьшается. но я ожидал что команда ALTER TABLE вернет управление только когда все партиции перезапишутся. возможно есть разница в выполнении из clickhouse-client и по jdbc? Я выполняю из client, но это исключительно для тестирования. по факту на prod нужно будет выполнять по jdbc и было бы удобно написать в коде что-то типа client.execute("ALTER TABLE DELETE ....) client.execute("INSERT ...") т.е. я хочу записывать новые данные только после того, как удалены старые
странно, таблица replicated?
Обсуждают сегодня