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

Привет. Подскажите кто и как добавляет новые колонки в таблицах

с последующим заполнением историческими данными? Искал лучшие практики, но ничего не нашел толком.

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

Из доков кликхауса, читал что в бекграунде кликхаус вроде как должен заполнять такие колонки данными сам в бекграунде. Для эксперимента я сделал такую колонку, и ничего не оптимайзил. За неделю ничего так и не поменялось.

Подскажите кто и как поступает в таких ситуациях.

2 ответов

8 просмотров

alter table update col = col where 1

L-de Funes Автор вопроса

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

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

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
доброго времени. db, dw и прочие исполняются при трансляции или при выполнении программы?
lutayyy
10
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
например asm AT&T ... label: .string "hi" ... # not error lea label(%rip), %rax # error ( not compile ) mov %rip, %rax # not error mov (%rip), %rax из форумов прочитал чт...
Simple Sorcerer
6
Почему никто не подсказал, что можно объявить свои типы данных, в которых меньше полей, чем в отданном джейсоне, и добавлять их по необходимости?
Strange Rabbit
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Есть предложения, как подобное можно упростить?
Hemul GM
12
Карта сайта