решил использовать ReplasingMergeTree для таблицы. навесил его на поле date_update (время записи) чтобы сохранял самые актуальные, при этом отсортировал по внутренним id, так вот ситуация в чем. для того чтобы избежать в селектах старых данных(дубляж) решил воспользоваться методом добавления поля sign но не использовать его как непосредственную таблицу по версионности а юзать его как доп параметр при вычислении суммы т.е. sum(amount*sign) и должно было получиться следующее. у меня допустим появился дубляж данных в 3-х строках. с одним id, и при вычислении он бы просуммировал все 3, но 1 из них имеет поле sign=-1 а значит вычтет себя из суммы, что по факту невилирует 2 записи и оставит результат 1-ой записи.
НО какого-то лешего получается иное... при вставке полей с -1 я вообще не вижу... после вставки получается так что остаются 2 записи с полями sign = 1 и сумма получается в 2 раза больше необходимой... подскажите где я свернул "не туда"?
а как вы понимаете что строка дубляж и ей надо -1 выставить?
это на стороне внешнего сервиса, на питоне тяну запрос и проверяю перед вставкой его id если нахожу, то весь объект затягиваю и ставлю сигн -1 плюс новый объект на вствку, иначе только новый.
так если вы уже такое построили, зачем вам реплейсинг?
вообще сперва была чистая логика для реплейсинга, но был дубляж. поставил файнал в запрос.... и чет сегодня в пн встал... и думаю а на кой он мне.. потом могут проблемы возникнуть в времени запроса)
есть еще limit by, argmax
с лимитами так и не разобрался как нормально вытянуть, пытался, но в моем случае не удалось это сделать хотя возможно я дундук просто)
limit 1 by попробуйте еще Ну и если у вас не вставляется с -1 в вашей логике, то видимо проблема с вставкой
сейчас переделал чутка вставку. вставил не в одном запросе 2 объекта в 2-х отдельных и вроде как начали записываться -1 но вышло ещ1 хуже.... осталось 2 записи -1 и 1 где -1 старая а 1 новая которая должна быть итоговой
так у вас при вставке была дедупликация, видимо
а вы sign добавляли в order by? иначе replacing будет стирать все записи с -1
нет без, видимо потому он это и делал...:)
Обсуждают сегодня