table(
id FixedString(512) NOT NULL,
some_data Map(String, String),
create_date DateTime64(3, 'Europe/Moscow')
)
ENGINE = ReplacingMergeTree
PARTITION BY toYYYYMMDD(create_date) ORDER BY (some_data);
```
суть такая:
пришла запись с уже имеющимся идентификатором
легла сверху с новой create_date, но some_data неизменны.
дальше я полагаю что ReplacingMergeTree должен будет схлопнуть 2 строки в одну, автоматом удалив из старой партиции данные.
Другимо словами - перепрыгнет ли запись в новую партицию?
Нужно это затем чтобы ежедневно заливать данные и раз в месяц дропать старые партиции (даные по которым не было изменений)
Нет, они лягут в разные партиции
Можете тут посмотреть https://gist.github.com/den-crane/0e9e2347546f88a83e0aebc8f4165743
то есть мердж на них не подействует?
Откройте GIST там понятно всё.
моё уважение )
Мержи идут в одной партиции, то есть если у вас будет лежать старая запись в старой партиции, а у вас придёт новая запись и она попадёт в новую, то они друг о друге знать не будут. И будут вместе показываться
если вы хотите простыми словами, то воспринимайте партиции не как "ещё один индекс помимо order by", а как отдельные таблицы связанные при выдаче через union all. Это не совсем точная метафора, но если думать так, то все становится на свои места и очевидные ошибки исчезают сами.
Судя по написанному это то что мне и нужно Partition pruning works with (type IN ('tl_segments')) and removes rows with type <> tl_segments and then FINAL finalizes incorrect? rows. То есть новая запись прилетит в другую партицию по дате создания (что корректно) и после FINAL из старой партиции исчезнет ее дубль так как ключ партификации разный а критерих схлопывания(урезания) одинаковый. если не так понял поправь плиз
Обсуждают сегодня