с последующим заполнением историческими данными? Искал лучшие практики, но ничего не нашел толком.
Объясню подробнее ситуацию. Есть одна колонка, в которой хранится огромный JSON с разными данными, который хорошо сжат. По мере необходимости, когда определенные данные становятся часто используемыми, чтобы не выполнять JSONExtract каждый раз, потому что он работает долго, из этих данных делается отдельная колонка, у которой DEFAULT значение это JSONExtract нужных данных.
Так вот, если просто добавить так колонку, то исторические данные, которые уже раньше присутствовали в этом JSON-е по сути не запишутся физически на диск, и запросы все так же будут отрабатывать долго. Для решения этой проблемы я выполняю OPTIMIZE FINAL, но по мере роста таблицы, этот оптимайз выполняется все дольше и дольше. Второй вариант, это делать INSERT INTO new_table SELECT * FROM source_table, так данные тоже физически запишутся, но выполняется все так же очень долго, плюс надо иметь всегда места в два раза больше чем занимают таблица.
Из доков кликхауса, читал что в бекграунде кликхаус вроде как должен заполнять такие колонки данными сам в бекграунде. Для эксперимента я сделал такую колонку, и ничего не оптимайзил. За неделю ничего так и не поменялось.
Подскажите кто и как поступает в таких ситуациях.
alter table update col = col where 1
Ты просто гений! 💪
Обсуждают сегодня