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

Всем привет! Подскажите пожалуйста, насколько удаление партиции синхронная операция? Задача сделать etl

идемпотентным. Думаю делать это с помощью:
- alter table drop partition tuple(20230701)
- insert into select where day = '2023-07-01'

Насколько безопасно и правильно, делать именно так?

Потому что раньше я делал alter table delete и натыкался на дубли, и все остальное.
т.е. на момент выполнения insert'а, предыдущие строки уже будут гарантированно помечены/удалены, и не появятся в качестве дублей, если я в insert'е вставлю ровно их же?
Смутило, что в доке написано, что процесс дропа партиции занимает 10 минут

Может, нужно сначала сделать detach партиции, а потом ее удалить? Но как это будет дружить с тем, что инсертом будет создана новая партиция с таким же имененм?

Спасибо!

10 ответов

27 просмотров

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

Данные будут недоступны сразу, диск почистится через 10 минут. Мы примерно так и делаем, только вставка во временную таблицу и если инсерт отработал делаем attach или replace partition в зависимости от логики. Если вставка в distributed или replicated то могут быть дополнительные ньюансы

Vitalik- Автор вопроса
Konstantin Ilchenko
Данные будут недоступны сразу, диск почистится чер...

блин. вставляю в дистрибьютед, а под ним репликейтед мердж три 🥲

Vitalik- Автор вопроса
Konstantin Ilchenko
Данные будут недоступны сразу, диск почистится чер...

Если не трудно, можешь пожалуйста подсказать, можно ли обойти эти нюансы? Например, так, как я описал в своем сообщении выше, или мб по-другому? Потому что: - insert into temp_table - detach from main_table & attach from temp_table / replace partition in main_table from temp_table выглядит гораздо лучше и надежнее, чем: - drop partition - insert into main_table

Vitalik
Если не трудно, можешь пожалуйста подсказать, можн...

Примерный флоу в наших etl/dbt, позволяет перезапускать идемпотентно с любого места - настраиваем insert_distributed_sync = 1 - create table if not exists tmp AS main - truncate table tmp on cluster '' - insert into tmp - system sync replica on cluster 'cluster' tmp - раньше в этом месте ещё вставляли sleep(30) для надёжности, сейчас вроде и без этого ок - alter table main replace partition 'partition' on cluster 'cluster' from tmp если мы с нуля данные генерим за день например или attach partition если надо дописать новые данные - drop table tmp on cluster

Vitalik- Автор вопроса

и так и так бывает, зависит от шардироавния, если есть фиксированный ключ то делаем на шардах всё есть ещё настройка parallel_distributed_insert_select которая позволяет делать запросы к distributed, но процессинг будет на шардах, чтобы быстрее всё работало

Vitalik- Автор вопроса
Konstantin Ilchenko
и так и так бывает, зависит от шардироавния, если ...

Угу, понял. Получается, если например, у меня три шарда: x, y, z Сейчас там в main данные: x: 1, 4 y: 2, 5 z: 3, 6 И если я сделаю tmp as main (main при этом дистрибьютед) То при вставке в tmp, функция распределит данные по шардам точно так же, как если бы я вставлял сразу в main? т.е. insert into tmp распределит данные: x: 7 y: 8 z: 9 и уже можно будет без опасений аттачить эту партицию к main

Vitalik
Угу, понял. Получается, если например, у меня три...

если через distributed вставлять да только надо будет создавать две таблицы соответственно tmp - Distributed tmp_local - ReplicatedMergeTree

Vitalik- Автор вопроса

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта