@clickhouse_ru

Страница 245 из 723
Александр
29.08.2017
21:16:49
select count() from learners limit 1 by learnerId вызывает такую же ошибку. Запрос вида select count(learnerId) from learners limit 1 by learnerId не спасает ситуацию.

Alexey
29.08.2017
21:17:26
Минимальный пример: SELECT x FROM (SELECT 1 AS x, 2 AS y) LIMIT 1 BY y

Александр
29.08.2017
21:19:13
Я просто не знаю подробностей проблемы, поэтому играюсь с запросами, мало ли )

Alexey
29.08.2017
21:19:46
Это хорошо. Примеры полезные для разбирательств.

Google
Alexey
29.08.2017
21:22:00
По большей части нет. Сегодня вечером выложили на один кластер. На остальные кластеры только завтра. Фактически у нас ноды растут с такой скоростью, что есть запас по крайней мере в несколько дней/неделю.

Dmitriy
29.08.2017
21:29:51
после рестарта не поднимается ? 2017.08.30 00:28:12.256343 [ 1 ] <Error> Application: DB::Exception: Cannot create table from metadata file /opt/clickhouse/metadata/model//history_model_result_sharded.sql, error: DB::Exception: The local set of parts of table history_model_result_sharded doesn't look like the set of parts in ZooKeeper. There are 0 unexpected parts (0 of them is not just-written), 0 unexpectedly merged parts, 0 missing obsolete parts, 85 missing parts, stack trace:

Igor
29.08.2017
21:34:54
@milovidov_an Подскажи пожалуйста, если таблица которую удалили - через DROP TABLE ... осталась в ZK ... может на нодах почистить meta о ней ?

Александр
29.08.2017
21:36:42
Подскажите, а таблица с множеством Nested колонок и кол-вом значений в каждой Nested колонке от 1 до 300, но с маленьким кол-вом строк в самой таблице, до 250 000 это не сильно убьет производительность? Просто есть мысль симулировать update данных через ReplacingMergeTree. В общей сложности планируется в таблицу затолкать около 50 колонок из которых примерно 10 будут Nested.

Есть смысл вообще экспериментировать или нет? )

Dmitriy
29.08.2017
21:46:18
помогло убить файлик /opt/clickhouse/metadata/model//history_model_result_sharded.sql

Igor
29.08.2017
21:52:59
Для истории чата: При ошибки, удаляли таблицу через DROP TABLE ... на каждой ноде и получили ошибку при рестарте CH Application: DB::Exception: Cannot create table from metadata file The local set of parts of table MYTABLE doesn't look like the set of parts in ZooKeeper. There are 0 unexpected parts Обычно достаточно флага force restore data - см. В документации. или Попробуйте перенести файл /opt/clickhouse/metadata/model//MYTABLE.sql, в /tmp/ и перезапустить ноду

Andrey
30.08.2017
06:45:12
Всем привет. Помогите решить задачу в рамках СН. Есть таблица по покупкам. В ней есть колонки order_id, order_datetime, client_id. Необходимо для каждой строки покупки посчитать количество совершенных покупок клиентом до момента текущей покупки. Раньше мы в MySQL имели агрегационную таблицу, где для кажой покупки клиента, подсчитывалось количество покупок ранее сделанное им же. Не хочется делать какие-то агрегации в СН, ведь как раз от них мы и хотели отказаться с переходом аналитики на СН. Помогите, пожалуйста

Alexander
30.08.2017
06:47:34
А в чем вопрос?

Вместо агрегационной таблицы, вы просто делайте запрос, которым все посчитаете

Andrey
30.08.2017
06:49:22
Вместо агрегационной таблицы, вы просто делайте запрос, которым все посчитаете
Перечитал всю документацию от и до, не могу я составить такой запрос. Просьба подсказать, в какую сторону копать

Google
Andrey
30.08.2017
06:50:39
До этого все сложные выборки получалось делать, но вот для этого случая прям затык, в PG это можно было бы решить оконными функциями

Alexander
30.08.2017
06:51:17
А чем устривает тривиальное select count(*) from orders_table where client_id=X

Александр
30.08.2017
06:51:48
Там окно

Alexander
30.08.2017
06:51:59
А зачем оно там?

Andrey
30.08.2017
06:52:03
Этот запрос посчитает покупки за все время, а мне надо на момент каждой покупки.

Александр
30.08.2017
06:52:05
Нужно считать все покупки до момента текущей покупки

Alexander
30.08.2017
06:53:00
Так текущая покупка -- она же последняя

все остальные до нее

Александр
30.08.2017
06:53:31
У меня похожий кейс, только с нормальным распределением. Нужно было считать отклонение и среднее по тем данным, что были до определенного момента, что бы наверняка сказать возможно такое вхождение на фоне результатов или нет.

Так текущая покупка -- она же последняя
Не совсем. Есть 10 покупок. 1 числа, 2 числа, 3 числа и т.д. За первое число будет 0 за второе число будет 1 за третье число будет 2 и т.д.

Тот запрос что вы предложили посчитает все и везде будет 10

Alexander
30.08.2017
06:55:03
Ну понятно, что каждая покупка увеличивает счетчик на один. Но это же и так понятно, зачем запрос делать?

Alexander
30.08.2017
06:55:41
Имеет смысл на текущий момент, текущую покупку, а в этом случае чистый count()

Старый
30.08.2017
06:56:51
У меня похожий кейс, только с нормальным распределением. Нужно было считать отклонение и среднее по тем данным, что были до определенного момента, что бы наверняка сказать возможно такое вхождение на фоне результатов или нет.
а как тебе такой кейс, 11 часовый поясов, 85 субьектов где каждый день продаются лекарства, носки, трусы, штаны тп, и каждая продажа должна быть в базе,и в олапе....

?я иногда читаю тз, и думаю, какие больные хотят это всё в 1 базу

Старый
30.08.2017
06:58:20
Вполне себе нормальный кейс
причём от всех, от ларька до сетей

Google
Александр
30.08.2017
06:58:24
У нас похожая ситуация. Хотят все и сразу, приходится извращаться )

Старый
30.08.2017
06:59:22
сейчас вот решают что будут брать, вертику, яндекскликхаус или клоудеру

Александр
30.08.2017
06:59:55
Как в итоге решили?
К сожалению в КХ нет оконных функций и такой запрос написать ну нельзя в рамках кх. Может быть функции в самом кх учитывают порядок данных и время, но результат я не проверял. Вынесли это дело в фоновые агрегаторы.

Alexander
30.08.2017
07:00:18
Я кажется понял. Андрей хочет кумулятивный счетчик (хотя в таком виде он мне и не понятен, интереснее суммы накапливать). В лоб это не делается, нужно развернуть данные в "косынку" (то есть к каждому ордеру цеплять отдельным запросом всю историю)

Andrey
30.08.2017
07:00:22
Ну понятно, что каждая покупка увеличивает счетчик на один. Но это же и так понятно, зачем запрос делать?
Нужно строить график за 10 лет. Т.е. нужно перебрать все покупки и для каждой покупки сделать count только до момента текущей покупки. "До текущего момента времени" - не знаю как сделать в СН

Andrey
30.08.2017
07:01:06
Да )
да)

Александр
30.08.2017
07:01:59
Я забыл...

Andrey
30.08.2017
07:03:58
Можно попробовать джоин с фильтром по дате и группировкой по заказу и джоинить это добро к основному запросу
не совсем понял, джоин в СН могу сделать по какому-то одному условию. Нарпимер по дате, но это ничего не дает

Александр
30.08.2017
07:04:00
В кх же нет join on )

Andrey
30.08.2017
07:04:10
ага)

Александр
30.08.2017
07:04:20
Покс писал примерный запрос, вспомнил, что не сработает

Andrey
30.08.2017
07:04:24
нельзя доп. условие для джойна написать

Alexander
30.08.2017
07:04:39
select order_id, count(*), sum(prev_amount) from orders all inner join (select order_id, order_time prev_time, order_amount prev_amount from orders) using (order_id) where prev_time < order_time group by order_id;

Примерно в этом направлении

Александр
30.08.2017
07:05:57
Да, как то так получается

Uncel
30.08.2017
07:11:51
Кликхаус умеет работать со статическими huge pages? (2m/1g)

Vasiliy
30.08.2017
07:57:04
Добрый день, только начал изучать ClickHouse, какой Engine посоветуете для хранения кликов с возможностью суммирования по часам/дням/месяцам?

Google
Oleh
30.08.2017
08:08:50
ReplicatedMergeTree?

Tima
30.08.2017
08:10:36
ReplicatedMergeTree?
Просто MergeTree. Советую прочесть ВСЮ документацию, она не такая большая

f1yegor
30.08.2017
09:19:16
изменений не было чтобы поддерживать статистику запроса в HTTP header?

интересует "rows_before_limit_at_least": 3, "statistics": { "elapsed": 0.001121035, "rows_read": 3, "bytes_read": 645 } из JSON format, но не используя его

я думаю это что-то такое https://github.com/yandex/ClickHouse/issues/208

Alexander
30.08.2017
09:34:50
В release notes было, или мне показалось

Sergei
30.08.2017
11:01:09
Добрый день! подскажите пожалуйста, есть ли php коннектор с поддержкой сессий

Vladislav
30.08.2017
11:16:04
Мы поменяли на одном из кластеров. Работает, сжимает...
А что при изменении происходит со старыми данными? их нужно переливать заново, чтобы они сжались по-новому?

Igor
30.08.2017
11:20:24
Добрый день! подскажите пожалуйста, есть ли php коннектор с поддержкой сессий
можете попробовать https://github.com/smi2/phpClickHouse/blob/master/README.md#use-session_id-with-clickhouse

Kirill
30.08.2017
12:10:06
А есть какие-то примерные сроки когда появится релиз с фиксом удаления партиций в зукипере или тестовая сборка (v1.1.54284) в пакетах ?

Dig
30.08.2017
12:13:51
Много узлов в log накапливается, если одна из реплик долго находится в неактивном состоянии. Эти ноды сохраняются для того, чтобы эта реплика могла подняться и синхронизироваться. То есть, если у вас было несколько реплик, а потом один из серверов просто перестал работать, то до поднятия упавшей реплики, будут накапливаться ноды. Если реплика упала навсегда, то её придётся удалить из ZK вручную. (Это одна из неудобных особенностей. С изменениями в версии 1.1.54276 это не связано.) Вы пытаетесь сделать это в некотором интерфейсе, но он кидает исключение. Потому что не может получить большой список нод. Это проблема того интерфейса, с помощью которого вы пытаетесь удалить ноды. Чтобы всё-таки всё по-нормальному сделать, придётся воспользоваться каким-то другим интерфейсом. Через zkCli.sh получается? На крайний случай у нас есть специальная программа, которая может быстро удалить список нод... Если понадобится - расскажем, как воспользоваться.
Алексей, это как раз нас случай. Было три реплики. Один сервер остановили, а удалить ноду из ZK забыли. Через zkCli.sh не получается удалить, падает и при delete и при ls с путем /log. Как можно воспользоваться вашей специальной программой, чтобы удалить ненужные ноды? Спасибо.

Александр
30.08.2017
12:17:54
А кто-то может подсказать по <expression>rand64()</expression> внутри словаря? Есть дата рождения, нужно вычислить возраст пользователя. Можно как то написать expression что бы из даты рождения вычислять возраст при запросе?

Есть аналогичная ситуация со стажем. Есть дата когда сотрудник устроился на работу, нужно считать стаж в днях например.

Ilyas
30.08.2017
12:44:44
Есть аналогичная ситуация со стажем. Есть дата когда сотрудник устроился на работу, нужно считать стаж в днях например.
SELECT toRelativeDayNum(toDate('2017-08-30')) - toRelativeDayNum(toDate('2017-08-29')) AS experienceInDays ┌─experienceInDays─┐ │ 1 │ └──────────────────┘

Grigoriy
30.08.2017
12:56:03
Всем привет! Есть вопрос по настройке репликации. Имеется работающая реплика на 4 ноды. Есть задача заменить одну из нод на другую. Как это правильней делается? Есть какие-то подводные камни?

Maksim
30.08.2017
13:27:49
подскажите пожалуйста. Я хочу сгруппировать сессии по их длительностям. Сейчас вырисовывается такая конструкция: if(duration < 30, 30, if(duration < 120, 120, if(duration < 360, 360, if(duration < 3600, 3600, if(..... if(duration < 86400, 86400, 90000)....)))

это вообще правильный подход?

вот по такому if хочется сделать group by

Google
Igor
30.08.2017
13:30:41
может по CEILING(duration/30) подойдет?

Maksim
30.08.2017
13:34:11
о, наверное совсестить CEILING и логарифм

у меня потому что сессии от 5 секунд до 10 дней бывают

Kirill
30.08.2017
13:42:34
там только 1.1.54283

Grigoriy
30.08.2017
13:51:32
есть у кого нибудь опыт замены реплицируемых нод?

Igor
30.08.2017
13:53:55
там только 1.1.54283
Репозиторий testing deb http://repo.yandex.ru/clickhouse/trusty testing main

aptitude show clickhouse-server-base -> Version: 1.1.54284

Kirill
30.08.2017
13:55:31
ОК

Alexey
30.08.2017
14:37:23
Подскажите, а таблица с множеством Nested колонок и кол-вом значений в каждой Nested колонке от 1 до 300, но с маленьким кол-вом строк в самой таблице, до 250 000 это не сильно убьет производительность? Просто есть мысль симулировать update данных через ReplacingMergeTree. В общей сложности планируется в таблицу затолкать около 50 колонок из которых примерно 10 будут Nested.
Сильно тормозить не будет, но в целом для 250 000 строк использование ClickHouse неоправдано. Также есть вариант - развернуть массивы и писать в плоскую таблицу; для обновления писать новые строки, а старые не трогать; для получения последних данных использовать агрегатные функции argMax и тому подобное. Для маленького числа строк Ок.

Александр
30.08.2017
14:42:24
Сильно тормозить не будет, но в целом для 250 000 строк использование ClickHouse неоправдано. Также есть вариант - развернуть массивы и писать в плоскую таблицу; для обновления писать новые строки, а старые не трогать; для получения последних данных использовать агрегатные функции argMax и тому подобное. Для маленького числа строк Ок.
У нас КХ используется для хранения исходных данных по которым мы считаем факты, а те запросы которые мы строим для агрегации просто умирают в MySQL и Postgres. Postgres показывает результаты лучше MySQL в разы, но все равно не достаточно. У нас есть например набор сущностей и время потраченное пользователем на сущность. В среднем 300 сущностей и 300 строк на пользователя с таймингами. Далее по каждой сущности нужно построить отчет по фроду, т.е. понять кто из пользователей слишком быстро прошел сущность или слишком медленно. MySQL такой запрос обрабатывает 40 секунд...

Alexey
30.08.2017
14:44:06
Всем привет. Помогите решить задачу в рамках СН. Есть таблица по покупкам. В ней есть колонки order_id, order_datetime, client_id. Необходимо для каждой строки покупки посчитать количество совершенных покупок клиентом до момента текущей покупки. Раньше мы в MySQL имели агрегационную таблицу, где для кажой покупки клиента, подсчитывалось количество покупок ранее сделанное им же. Не хочется делать какие-то агрегации в СН, ведь как раз от них мы и хотели отказаться с переходом аналитики на СН. Помогите, пожалуйста
Полностью в рамках ClickHouse решить это сложно. Идеальный вариант - если при каждой покупке, вы уже знаете предыдущее количество покупок (из отдельной базы, например), и затем пишете в лог в ClickHouse это общее количество отдельным столбцом. Тогда у вас в таблице будут строчки на каждую покупку, которые также содержат информацию об общем количестве предыдущих покупок. В Яндекс.Метрике так сделано для истории посетителей. В таблице с визитами, для каждого визита есть ещё столбцы, содержащие информацию о накопленной истории.

Александр
30.08.2017
14:44:07
Написал прототип билдера запросов, который аналогично строит отчеты по данным в MySQL и КХ считает это добро за 0.003 секунды в Vagrant с 2-я ядрами и 4 гигами оперативы, а MySQL на продакшен сервере с таким справляется за 300мс. И это только один из показателей которые мы считаем за один запрос в API, а за один запрос мы можем выбирать до 10 разных показателей.

Страница 245 из 723