Я новичок в cassandra, и я пытаюсь создать новый столбец, содержимое которого основано на другом столбце.
Точнее, чего я хочу добиться, начиная со следующей таблицы:
Я хочу обновить получение таблицы:
Я пытаюсь что-то вроде этого, после добавления столбца C, update table set columnC = columnA+1 ;
но это дало мне ошибку
Поддерживаются только выражения вида X = X -.
Так что я попытался
update table set columnC = columnA ;
но даже это выдало мне ошибку
нет жизнеспособной альтернативы на входе ';' (обновить набор таблиц columnC=[columnA];)
Грамматика CQL не поддерживает этот тип операций, поскольку она не масштабируется.
Представьте, если бы у вас были миллиарды и миллиарды разделов на сотнях узлов. Для такой операции потребуется полное сканирование таблицы. И если бы у вас были миллионы одновременных пользователей, было бы трудно сделать обновления идемпотентными, поскольку разделы/строки не блокируются между моментом, когда вы читаете значение в столбце A и записываете его в столбец C.
Вам нужно будет написать для него приложение ETL, предпочтительно в Spark, чтобы оно могло эффективно перебирать разделы/строки. Ваше здоровье!
К сожалению, это невозможно с CQL. Это то, что должно быть сделано на уровне приложения.