184 похожих чатов

Ребят привет. При записи строки в кликхауз она попадает сразу

в нужную партицию, или это уже происходит в фоновом режиме? Хочется использовать do_not_merge_across_partitions_select_final для запросов с FINAL, но не понимаю будут ли дубли в том случае если записанная строка не сразу попадает в нужную партицию.

16 ответов

13 просмотров

строка может быть только в одной партиции, вставляется сразу в правильную партицию

Sergey- Автор вопроса
Konstantin Ilchenko
строка может быть только в одной партиции, вставля...

То есть при использовании ReplacingMergeTree и партицированием по дате можно все SELECT-запросы писать c FINAL + do_not_merge_across_partitions_select_final и быть уверенным, что в результате не будет две версии одной строки, верно?

Sergey
То есть при использовании ReplacingMergeTree и пар...

вы вручную вызываете optimize final на старых партициях?

Sergey- Автор вопроса
Konstantin Ilchenko
вы вручную вызываете optimize final на старых парт...

Вопрос в том надо ли его вызывать. То есть если новая версия строки записывается в ту же партицию (партицирование по дате и дата не изменилась), то выходит, что do_not_merge_across_partitions_select_final будет достаточен так как есть гарантия, что обе версии строки в одной партиции и optimize не нужен. Пытаюсь понять верно ли это.

Sergey
Вопрос в том надо ли его вызывать. То есть если но...

не верно, у вас в старой партиции могут быть дубли и пока вы не вызвали optimize final на старой партиции нет никаких гарантий что дублей нет https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-final-clause-speed/ So it can work in the following way: Daily partitioning After day end + some time interval during which you can get some updates - for example at 3am / 6am you do OPTIMIZE TABLE xxx PARTITION 'prev_day' FINAL In that case using that FINAL with do_not_merge_across_partitions_select_final will be cheap.

Sergey- Автор вопроса
Konstantin Ilchenko
не верно, у вас в старой партиции могут быть дубли...

Давайте еще раз: Я делаю таблицу: CREATE TABLE repl_tbl ( `id` UInt32, `name` String, `verion` UInt16, `dt` DateTime ) ENGINE = ReplacingMergeTree(version) PARTITION BY toMonday(dt) ORDER BY id; Так как PARTITION BY toMonday(dt) это дает мне гарантию, что новая версия строки если НЕ изменить dt будет записана в ту же партицию, где находится предыдущая версия строки. Следовательно если я делаю запрос с do_not_merge_across_partitions_select_final: SELECT * FROM test FINAL SETTINGS do_not_merge_across_partitions_select_final = 1; То у мене исключается вероятность дублей так как дубли могут быть только в рамках ОДНОЙ партиции (потому что dt не меняется). Следовательно OPTIMIZE не требуется. Где я ошибся?

Sergey
Давайте еще раз: Я делаю таблицу: CREATE TABLE r...

Если гарантируется, что запись с одним и тем же id будет иметь один и тот же dt, то вы не ошиблись нигде. А если записи с одним и тем же id могут лечь в разные партиции, то именно здесь и ошиблись.

Sergey
Давайте еще раз: Я делаю таблицу: CREATE TABLE r...

да, дублей не будет, просто эта настройка do_not_merge_across_partitions_select_final не до конца раскроет потенциал по скорости)

В фоновом режиме

Sergey- Автор вопроса
Константин
В фоновом режиме

То есть меня обманули?) все таки OPTIMIZE обязателен перед запросом, чтобы дублей точно не было?

Sergey
То есть меня обманули?) все таки OPTIMIZE обязател...

optimize не гарантирует, что дублей точно не будет )

Sergey
То есть меня обманули?) все таки OPTIMIZE обязател...

Я не знаю, что вам наговорили. Но при вставке создаётся отдельный кусок данных, а потом он сливается в более большой кусок данных и т.д.

ivan
optimize не гарантирует, что дублей точно не будет...

FINAL OPTIMTIZE DEDUPLICATED гарантирует что удалит все дубли

Sergey- Автор вопроса
Sergey
Давайте еще раз: Я делаю таблицу: CREATE TABLE r...

Вот я подробно расписал что я пытаюсь понять. Кусок это кусок, я про партицию узнаю

Константин
FINAL OPTIMTIZE DEDUPLICATED гарантирует что удали...

как такое можно гарантировать в системе без блокировок чтений / вставок? пока Clickhouse мерджит строки в выбранных на начало запроса партах, спокойно может прилететь новый парт с дубликатом

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Добрый день, чат. Мне в очередь из других RabbitMQ по shovel валятся метрики в формате текста для Prometheus. Помогите пожалуйста подружить RabbitMQ и Prometheus, чтобы он (...
Aleksey
4
Карта сайта