
Pavel
19.06.2017
09:22:28
как минимум - я бы мог использовать их для IPv6 и манипуляции с ними, FixedString, конечно, работает, но нэтивный да еще и числовой тип с потенциальной возможность увеличения компрессии... мммм! :)

Igor
19.06.2017
09:50:09
Привет! подскажите плиз как правильнее работать с праймари ключами, когда необходимо делать запросы по непересекающимся критериям.
например есть большая таблица фактов, там среди прочих есть колонки clientId, applicationId, country.
1/3 запросов будет делать фильтровать по clientId, 1/3 запросов будет делать group by applicationId, 1/3 будет фильтровать/группировать по полю country.
Можно создать композитный (clientId, applicationId, country), но вроде как он ускорит только первый тип запросов.
Вопроса два:
1. Влияет ли наличие поля в праймари ключе на выполнение запросов с group by?
2. В приведенном выше кейсе, какой из способов создания праймари ключа выбрать?


Andrey
19.06.2017
09:58:55
Привет! подскажите плиз как правильнее работать с праймари ключами, когда необходимо делать запросы по непересекающимся критериям.
например есть большая таблица фактов, там среди прочих есть колонки clientId, applicationId, country.
1/3 запросов будет делать фильтровать по clientId, 1/3 запросов будет делать group by applicationId, 1/3 будет фильтровать/группировать по полю country.
Можно создать композитный (clientId, applicationId, country), но вроде как он ускорит только первый тип запросов.
Вопроса два:
1. Влияет ли наличие поля в праймари ключе на выполнение запросов с group by?
2. В приведенном выше кейсе, какой из способов создания праймари ключа выбрать?
Вот есть подробное описание от Алексея. Думаю будет полезно: https://groups.google.com/d/msg/clickhouse/eUrsP30VtSU/p4-pxgdXAgAJ


Igor
19.06.2017
10:04:01
да, вопрос появился как раз после прочтения. т.е. непонятно что делать когда есть 2-3 разных поля, по каждому из которых может производиться фильтрация (которая затраивает лишь это поле и не трогает два других)

Google

Yury
19.06.2017
10:13:33
2-3 таблицы?

Oleg
19.06.2017
10:13:59
или + mat view с другим набором ключей

Igor
19.06.2017
10:18:22
о, спасибо, слона то я и не приметил

Oleg
19.06.2017
10:20:11
решение впрочем не оч удобное, жаль нет вторичных индексов

Aleksandr
19.06.2017
11:01:42
Eсть ли NaN для Int типов? Или NaN есть только для Float?

Igor
19.06.2017
11:07:12
@pavel_odintsov Павел, а как ты сейчас ipv6 айпишки хранишь, просто как String?

Pavel
19.06.2017
11:11:14
FixedString16
просто string будет сильно неоптимально AFAIK :(

Vitaliy
19.06.2017
12:09:48

Igor
19.06.2017
12:10:55

Александр
19.06.2017
12:38:58
Ребят, через tcp драйвер можно
set max_memory_usage
ставить?

Kirill
19.06.2017
12:55:47
через гошный можно

Александр
19.06.2017
13:52:34
Я его проставил, но похоже на весь кластер не распространилась настройка

Google

Александр
19.06.2017
13:53:06
Так как при обращении к ditributed таблице другие сервера прекращают выполнение из-за памяти

Александр
19.06.2017
14:05:47
А в КХ как то можно получить значение колонки предыдущей строки в блоке?
Например у меня такая логика: если column = 1, то вернуть 0, если нет, то посчитать runningDifference(column2), но при условии что у предыдущей строки column != 2 например

Alexander
19.06.2017
14:06:01
Вопрос: а какие-то энджины с индексами но без даты - планируются или врядли?

Александр
19.06.2017
14:06:47
Хотя я догадываюсь как можно. Применить sequenceMatch с нужными правилами и если match = 1, то делал runningDifference
Нет, не получится так сделать, к сожалению ( Это же блин агрегатная функция (

Roman
19.06.2017
14:10:46
Всем привет! Подскажите, есть ли возможность подсчитать процентное значение столбца от общей суммы?

papa
19.06.2017
14:11:51

Александр
19.06.2017
14:13:17
Хорошая мысль, сейчас попробую :)

Roman
19.06.2017
14:13:41
это можно сделать вроде
select countIf(condition) / (select count() from ...) from ... group by...

papa
19.06.2017
14:14:41
это можно сделать как sumIf(x,y)/sum(x)
а, от общей суммы. да, встроенного нормализатора нет.
а в стандартном sql это как выглядит? наверно сработал бы count() / count() over (partition by 42), если бы он был.

Roman
19.06.2017
14:44:40

Александр
19.06.2017
14:48:50
Блин, этот баг с оптимизацией запроса просто не дает спокойно жить (
Простой запрос не работает

Alex
19.06.2017
14:57:24
сорри(

Vladimir
19.06.2017
14:59:18

Alexander
19.06.2017
15:18:56
Вопрос: в документации часто упоминается пример с userId. Вопрос: как в вашем случае реализован вывод , если нужно имя пользователя?: это словарь или join по другой таблице или может словарь во внешней базе?

Google

Alexander
19.06.2017
15:19:42
Так как отличий от маркет-дата по сути никаких в данном случае.

Александр
19.06.2017
15:19:53

papa
19.06.2017
15:20:12
в нашем случае нет имени пользователя.

Vladimir
19.06.2017
15:21:22

Alexander
19.06.2017
15:21:56

Vladimir
19.06.2017
15:22:56
Внешняя база?
Да. Так как КХ только только планирует внедрить updateable словари то у нас сделано в Postgres.

Alexander
19.06.2017
15:24:27
И, в отсутствии этого посещают мысли или самому пытаться реализовать или , как сейчас, приходится экспериментировать странными способами

Vladimir
19.06.2017
15:25:33
написал в личку)

Alexander
19.06.2017
15:25:44
А именно: сохраняю строки, но в словарь загружаю из view на основании выборки

Maksim
19.06.2017
16:15:36
у меня быстрый вопрос. Я решил воспользоваться прогрессом возвращаемым в HTTP хедерах
< X-ClickHouse-Progress: {"read_rows":"214418","read_bytes":"25670058","total_rows":"327680"}
< X-ClickHouse-Progress: {"read_rows":"222610","read_bytes":"25686442","total_rows":"327680"}
я правильно понимаю, что read_rows*100 / total_rows это примерно процент выполнения запроса?

Igor
19.06.2017
16:16:33
да

Maksim
19.06.2017
16:18:23
спасибо
ща сделаем круто в интерфейсе

Igor
19.06.2017
16:32:31

Maksim
19.06.2017
16:37:55
А как в яваскрипте получить поток хедеров

Александр
19.06.2017
16:40:01

Maksim
19.06.2017
16:46:16
Ну так это вопрос о том как в табиксе получить прогресс

Google

Alexander
19.06.2017
16:49:32
Так, а как отсюда вот правильно руками собрать кликхаус? https://github.com/yandex/ClickHouse

Igor
19.06.2017
16:49:47
там build.md лежит рядом
в docs/, кажется

Alexander
19.06.2017
16:50:49
а, ништяк, спасибо. почитаю. а то я чот сбилдил, а что - сам не понял

Igor
19.06.2017
16:52:16
ну если сбилдил, то где-то в dbms должен валяться теперь бинарник clickhouse, который по умолчанию запускается как сервер
если прокинуть ему опцию --client или сделать симлинк и назвать clickhouse-client - станет клиентом

Alexander
19.06.2017
16:54:01
@iamigor да я даже деб пакет вроде собрал, сейчас попробую развернуть по серверам взамен версии с багой

Alexander
19.06.2017
16:55:56
Оу, оу, это классная идея прикрутить пользователю прогресс-бар.
Правда вроде иногда он сбрасывается если подзапрос.

Maksim
19.06.2017
17:00:56
Ага

Egor
19.06.2017
17:30:27
всем привет. как правильно юзать <remote_servers incl="clickhouse_remote_servers" /> через инклюд?
надо создать clickhouse_remote_servers.xml, и он подхватится7
?

Igor
19.06.2017
17:31:46
файлик создать
да

Egor
19.06.2017
17:33:19
че-то не хочет
2017.06.19 17:33:35.028015 [ 2 ] <Debug> ConfigReloader: Loading config `/etc/clickhouse-server/config.xml'
2017.06.19 17:33:35.029582 [ 2 ] <Warning> ConfigProcessor: Include not found: clickhouse_remote_servers

Igor
19.06.2017
17:35:40
<!-- If element has 'incl' attribute, then for it's value will be used corresponding substitution from another file.
By default, path to file with substitutions is /etc/metrika.xml. It could be changed in config in 'include_from' element.
Values for substitutions are specified in /yandex/name_of_substitution elements in that file.
-->
https://github.com/yandex/ClickHouse/blob/86a3fcaec40521c5c6aa7b7850d96b6ec64b6243/doc/reference/ru/configuration_files.rst

Egor
19.06.2017
17:39:29
к сожалению нифига не понял, даже в русском варианте

Google

Egor
19.06.2017
17:39:57
каким боком здесь /yandex/

papa
19.06.2017
18:07:33
это дефолтное имя корневого элемента xml
конфига.

Alexey
19.06.2017
18:20:51
Нужно добавить в документацию пример со структурой директорий и файлами.

Alexander
19.06.2017
21:43:25
А как rowbinary обрабатывает default поля - надо обязательно указать или можно игнорировать?

Alexey
19.06.2017
21:50:50
Также, как и другие форматы. Можно указать меньше столбцов в INSERT INTO table (columns...). Тогда нужно отправлять данные только для указанных столбцов, а значения остальных будут вычислены при вставке.

Alexander
19.06.2017
21:58:11
Не понимаю как он понимает чему binary соответствует. Если только длину блока сравнивать с разными размерами. А если два default ...

Maksim
19.06.2017
22:38:02
@milovidov_an Добрый день, скажите столкнулись с проблемой. как её можно решить
626 млн записей read. 255 сек....

papa
19.06.2017
22:49:48
а сколько должно быть

Maksim
19.06.2017
22:55:05
если сделать select count(*) за даты которые я сканю выходит 300 млн. почему 626 млн сканит не понятно

papa
19.06.2017
22:57:40
у вас за полчаса стало больше на 250М. значит 84Гб это за неделю. значит у вас 1кrps, и события по 130б. вряд ли по этому скриншоту получится наванговать большее.

Maksim
19.06.2017
23:00:05
@orantius ну на основе этих данных строим отчет. но данные приходят за 250 сек и пост обработка еще пару минут. как быть? и я так и не понял почему фулл скан идет. подсчитывает на 300 млн записей. а запросом на sum сканит 600+
select
eventDate,
toString(country) as country,
toString(region) as region,
toString(city) as city,
toString(gender) as gender,
age as group_age,
SUM(requests_count) AS requests
from
`audience_statistic_segments
where
`eventDate` between '2017-05-21' and '2017-06-19'
group by
eventDate,
`country`,
`region`,
`city`,
`gender`,
`group_age
order by
eventDate asc,
`country` asc,
`region` asc,
`city` asc,
`gender` asc,
`group_age` asc

papa
19.06.2017
23:04:06
а c count() запрос такой же?

Maksim
19.06.2017
23:05:16
select
count(*)
from
`audience_statistic_segments`
where
`eventDate` between '2017-05-21' and '2017-06-19'