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

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

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

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

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

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

Спасибо!

10 ответов

12 просмотров

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

Данные будут недоступны сразу, диск почистится через 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- Автор вопроса

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

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

А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
57
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Карта сайта