основе данных из строки? например сконкатенировать поля или просто скопировать значение из другого поля.
да, можно ALTER TABLE db.table ADD COLUMN new_column LowCardinality(String) MATERIALIZED concat(column1, column2); для новых данных будет вычислять значение в момент вставки для старых данных будет вычислять значения в момент background merge можно OPTIMIZE TABLE db.table FINAL потом попробовать сделать но если таблица небольшая (единицы гигабайт)
Спасибо! А если явно указывать значение при вставке - материализованное представление использоваться будет?
это не материализованное представление это MATERIALIZED колонка кстати глянул доку последнюю уже не уверен что будет работать попробуйте
понял, спасибо. не, MATERIALIZED COLUMN это не то что нужно.
это именно то что вы описали когда надо чтобы значение одной колонки вычислялось из данных других колонок
ок, виноват, неправильная постановка вопроса получилась. Правильно ли понимаю, чтобы иметь возможность указывать значение при вставке вместо materialized, должно быть DEFAULT concat(column1, column2)? и произойдет аналогично описанному Вами ранее со старыми/новыми данными.
DEFAULT будет срабатывать только для новых вставляемых данных если в списке вставляемых хостов новая колонка отсутствует для старых придется делать мутацию ALTER TABLE ... ON CLUSTER ... UPDATE ... SETTINGS mutations_sync=2;
помимо этого, при селекте для старых будет на лету считаться. Так что мутировать данные не обязательно...
ADD COLUMN new_column LowCardinality(String) default concat(column1, column2);
Обсуждают сегодня