Size: a a a

ClickHouse не тормозит

2020 August 26

❌ Constantine ❌ in ClickHouse не тормозит
Andrey Bobelev
select * from system.settings where name like ‘setting_name’
там нет такого параметра как max_server_memory_usage_to_ram_ratio
источник

❌ Constantine ❌ in ClickHouse не тормозит
Есть файл /var/lib/clickhouse/preprocessed_configs/config.xml и там установлено нужно значение. Хоть бы в доке что ли писали что динамически подружается, что нет… ясности мало..
источник

OZ

Olga Zh in ClickHouse не тормозит
Привет всем. Считаю воронки на логах в КХ. Есть ли удобный способ сегментирования  пользователей для воронок? То ли про вью читать, то ли предварительные какие-то запросы делать - не понимаю куда копать. Задача стандартная, наверняка же есть удобное и быстрое решение?
источник

S

Slach in ClickHouse не тормозит
Olga Zh
Привет всем. Считаю воронки на логах в КХ. Есть ли удобный способ сегментирования  пользователей для воронок? То ли про вью читать, то ли предварительные какие-то запросы делать - не понимаю куда копать. Задача стандартная, наверняка же есть удобное и быстрое решение?
под сегментированием что подразумевается?
GROUP BY
это не сегментирование?


воронки как считаете через windowFunnel ?
https://clickhouse.tech/docs/en/sql-reference/aggregate-functions/parametric-functions/#windowfunnel
источник

VS

Vladyslav Sakun in ClickHouse не тормозит
❌ Constantine ❌
Есть файл /var/lib/clickhouse/preprocessed_configs/config.xml и там установлено нужно значение. Хоть бы в доке что ли писали что динамически подружается, что нет… ясности мало..
источник

A(

Andrew (backEnd) in ClickHouse не тормозит
Slawka
Среднюю между двумя,?
Можно пример
у меня агрегированные данные.
Таблица упрощенно такая
CREATE TABLE `DateFrom` DateTime, `DateTo` DateTime, `UserID` UInt64) ENGINE = MergeTree() PARTITION BY toYYYYMM(DateFrom) ORDER BY (DateFrom, UserID) SETTINGS index_granularity = 8192


Разницу могу посчитать вот так
select min(dateFrom) as _from, max(dateTo) as _to, dateDiff('minute', _from, _to) as _diff GROUP BY UserID


Ну и среднее в секундах разве что
SELECT avg(_diff) FROM (select min(dateFrom) as _from, max(dateTo) as _to, dateDiff('minute', _from, _to) as _diff GROUP BY UserID) LIMIT 1


Почти то, что хотел
источник

❌ Constantine ❌ in ClickHouse не тормозит
спс. да, я помню что сервер должен автоподгружать конфиг, но я уже сталкивался с тем, что нужна перезагрузка. возможно это был просто баг в какой то версии.
источник

OZ

Olga Zh in ClickHouse не тормозит
Slach
под сегментированием что подразумевается?
GROUP BY
это не сегментирование?


воронки как считаете через windowFunnel ?
https://clickhouse.tech/docs/en/sql-reference/aggregate-functions/parametric-functions/#windowfunnel
воронки считаю группировкой в массивы и фильтрацией. Сегментация  в моем вопросе - это когда я считаю воронку не для всех пользователей, а для тех, кто, скажем, подписан на определенные услуги, или только что добавлен, или использует какое-то определенное оборудование - то есть когда я по логам же предварительно определяю набор идентификаторов пользователей, по которым нужно считать воронку
источник

S

Slach in ClickHouse не тормозит
Olga Zh
воронки считаю группировкой в массивы и фильтрацией. Сегментация  в моем вопросе - это когда я считаю воронку не для всех пользователей, а для тех, кто, скажем, подписан на определенные услуги, или только что добавлен, или использует какое-то определенное оборудование - то есть когда я по логам же предварительно определяю набор идентификаторов пользователей, по которым нужно считать воронку
советую делать для такого временные таблицы с нужными событиями и условиями
а потом по ним считать...

иначе вы непримернно захотите JOIN
а на больших данных JOIN даже в ClickHouse пока нормально не работает
источник

OZ

Olga Zh in ClickHouse не тормозит
Slach
советую делать для такого временные таблицы с нужными событиями и условиями
а потом по ним считать...

иначе вы непримернно захотите JOIN
а на больших данных JOIN даже в ClickHouse пока нормально не работает
вот я и думаю про временные таблицы, но пока не могу решиться.. именно таблицы? не вью?
источник

S

Slach in ClickHouse не тормозит
Olga Zh
вот я и думаю про временные таблицы, но пока не могу решиться.. именно таблицы? не вью?
MATERIALIZED VIEW в clickhouse это триггер на INSERT
то есть при вставке блока в родительскую таблицу
этот блок обрабатывается по правилам SELECT из MV
оно просто может не получиться по логике данных у вас
типа вставка данных есть. а условие для попадания данных в сегмент наступит позже

но есть сильное подозрение что если вы считаете воронку
то вы должны использовать windowFunnel
и у вас должны быть отдельные колонки в таблице событий по которым можно группировать...

тогда быстро будет
источник

OZ

Olga Zh in ClickHouse не тормозит
Slach
MATERIALIZED VIEW в clickhouse это триггер на INSERT
то есть при вставке блока в родительскую таблицу
этот блок обрабатывается по правилам SELECT из MV
оно просто может не получиться по логике данных у вас
типа вставка данных есть. а условие для попадания данных в сегмент наступит позже

но есть сильное подозрение что если вы считаете воронку
то вы должны использовать windowFunnel
и у вас должны быть отдельные колонки в таблице событий по которым можно группировать...

тогда быстро будет
да, вью тогда не подойдет, попробую временные таблицы. windowFunnel я тоже посмотрю, пока не использовала. Когда воронки простые, и есть колонки для группировки, то все получается. Когда цепочка событий длинная, и связь событий идет по разным полям, то у меня не получается. Я подумала, что можно начать с конца (там покупки, то есть событий мало) - взять пользователей с покупкой, и строить цепочки только для них. Но это join..  Спасибо большое, почитаю и про windowFunnel и таблицы попробую.
источник

EG

Edgard Gomes in ClickHouse не тормозит
Всем, привет! Уже отчаялся найти ответ на вопрос.
https://stackoverflow.com/questions/63581648/clickhouse-left-join-with-partial-match-or-subselect
Есть 1 таблица, в ней колонка Url:
https://domain.com/cat/page1.html
https://domain.com/cat/page2.html
https://domain2.com/page.html

Есть 2я таблица, в ней колонки UrlPart и UrlGroupName
domain.com/cat | DomainCats
domain2.com | Domain2

Нужно каким-то образом получить следующее:
https://domain.com/cat/page1.html | DomainCats
https://domain.com/cat/page2.html | DomainCats
https://domain2.com/page.html | Domain2

Пробовал:
all left join - не подходит, т.к. ему нужно точное совпадение, like не работает
correlated subquery - не подходит, т.к. нельзя использовать колонки для фильтра из outer query
костыль (2я таблица маленькая) - groupArray(2.колонка1) - далее через arrayFirstIndex попытка найти (x-> url like x) и т.п. - но и тут должна быть константа…

Фантазия на этом иссякла. Что можно придумать?
источник

S

Slach in ClickHouse не тормозит
Edgard Gomes
Всем, привет! Уже отчаялся найти ответ на вопрос.
https://stackoverflow.com/questions/63581648/clickhouse-left-join-with-partial-match-or-subselect
Есть 1 таблица, в ней колонка Url:
https://domain.com/cat/page1.html
https://domain.com/cat/page2.html
https://domain2.com/page.html

Есть 2я таблица, в ней колонки UrlPart и UrlGroupName
domain.com/cat | DomainCats
domain2.com | Domain2

Нужно каким-то образом получить следующее:
https://domain.com/cat/page1.html | DomainCats
https://domain.com/cat/page2.html | DomainCats
https://domain2.com/page.html | Domain2

Пробовал:
all left join - не подходит, т.к. ему нужно точное совпадение, like не работает
correlated subquery - не подходит, т.к. нельзя использовать колонки для фильтра из outer query
костыль (2я таблица маленькая) - groupArray(2.колонка1) - далее через arrayFirstIndex попытка найти (x-> url like x) и т.п. - но и тут должна быть константа…

Фантазия на этом иссякла. Что можно придумать?
UrlGroupName
можно при вставке вычислять на стороне приложения?
если да. то пишите сразу при вставке
источник

IV

Ilya Vishnevsky in ClickHouse не тормозит
Александр Есин
вопрос по этой же теме: а срабатывает ли триггер мат. вью на событие реплицирования? Т.е. если у меня есть Replicated таблица, я делаю инсерт на одном узле, данные реплицируются на другой узел, в этот момент на другом узле выполнится действие определенное в мат. вью?
У меня такой же вопрос)
И если все-таки мат вью отрабатывает на всех репликах, мы можем быть уверены, что запись будет идемпотентной и не приведёт к дублированию данных ?
источник

EG

Edgard Gomes in ClickHouse не тормозит
Slach
UrlGroupName
можно при вставке вычислять на стороне приложения?
если да. то пишите сразу при вставке
К сожалению нет, таблицы независимые. Одна (1я наполняется в результате парсинга), вторая - пополняется пользователями в произвольный момент времени.
Пока решаем программно - выгружаем, затем ообрабатываем питоном и дальше уже схлопываем данные как надо. Я просто надеялся, что есть какой-то способ обойтись исключительно средствами clickhouse
источник

DA

Dmitriy Antonenko in ClickHouse не тормозит
Переслано от Dmitriy Antonenko
Здравствуйте, столкнулись с такой проблемой, что при инсерте данных в реплику некоторые записи не схлопываюся , но при запросе в шард, все хорошо

пример создания и тд.
https://gist.github.com/BrokenEngineerDev/08247416569dd6724da2bcab8de0af3b
источник

VS

Vladyslav Sakun in ClickHouse не тормозит
Dmitriy Antonenko
Переслано от Dmitriy Antonenko
Здравствуйте, столкнулись с такой проблемой, что при инсерте данных в реплику некоторые записи не схлопываюся , но при запросе в шард, все хорошо

пример создания и тд.
https://gist.github.com/BrokenEngineerDev/08247416569dd6724da2bcab8de0af3b
Вы о каком схлоповании говорите?
источник

S

Slach in ClickHouse не тормозит
Vladyslav Sakun
Вы о каком схлоповании говорите?
он говорит про replace по version
источник

VS

Vladyslav Sakun in ClickHouse не тормозит
Slach
он говорит про replace по version
Это я и так понял, меня интересовало схлопование в фоне или при выборке с агрегацией
источник