Интуитивно, да, изменения вставляются парами: старое-новое значения. Но инфраструктура нашего приложения такова, что ряд серверов регистрируют сравнительно большой поток событий, дальше события уходят пачками на ETL сервера, и ETL сервера выполняют вставку в ClickHouse также порциями по 32К записей (или с заданной периодичностью). И возможны вставки вида:
INSERT INTO test.test0 (sign, session_id, search_phrase, session_duration, user_id) VALUES
( 1, 123, 'Google', 300, 12345),
(-1, 123, 'Google', 300, 12345),
( 1, 123, 'Yandex', 600, 12345)
;
вместо:
INSERT INTO test.test0 (sign, session_id, search_phrase, session_duration, user_id) VALUES
( 1, 123, 'Google', 300, 12345)
;
INSERT INTO test.test0 (sign, session_id, search_phrase, session_duration, user_id) VALUES
(-1, 123, 'Google', 300, 12345),
( 1, 123, 'Yandex', 600, 12345)
;
Таким образом, в нашем случае ETL должны выполнять локальное схлопывание, чтобы не было более 1 пары записей с одинаковым первичным ключом + sign? Будем пробовать в памяти приложения (ETL) схлопывать записи, и только потом писать их в ClickHouse.
Спасибо за ценное замечание!
Таким образом, в нашем случае ETL должны выполнять локальное схлопывание, чтобы не было более 1 пары записей с одинаковым первичным ключом + sign? Будем пробовать в памяти приложения (ETL) схлопывать записи, и только потом писать их в ClickHouse.