уникальности значений в КХ? У меня такой кейс, что бывает очень много уникальных значений (сотни миллионов), и мне нужно сгруппировать их как-то, но ценность предоставляют только те, которых больше чем 100 (или что-то около того), но таких не много. То есть вот пример запроса:
SELECT value, count() FROM t GROUP BY value LIMIT 50;
и данные у меня вот такие выходят:
value, count()
v1, 2
v2, 349340
v3, 4
v4, 1
v5, 3939
v6, 1
...
v9999999, 3
v100000000, 6
то есть я бы хотел узнать кол-во только v2 и v5, но для этого нужно все значения сгруппировывать и КХ разумеется это не может сделать (фильтры я конечно же использую, там где могу). Может есть какие-то инструменты или интересные мысли как с таким можно обойтись на неприличных объемах данных?
SELECT value, count() c FROM t GROUP BY value having c>100 LIMIT 50;
но так же не сработает, все равно придется все миллионы сначала сгруппировать, а потом уже отфильтровать по ">100" ? То есть КХ сделает тот же самый объем работы, что если бы и я кодом так фильтровал
я тогда не понял вопрос видимо. новый ответ: Вам надо просто хранить в SummingMergeTree готовые count , тогда почти не надо группировать
нее, почему не надо группировать, так как кардинальность высокая, будет не 100 миллионов записей, а 90 миллионов, если я мат вью навешаю на таблицу. Это же не решит проблему, а лишь задублирует данные. Может в таких случаях SAMPLE секция как-то помочь?
sample позволит как бы работать с рандомным 1% Я бы просто переливал записи у которых cnt >100 в отдельную таблицу кроном
Обсуждают сегодня