
Gennadiy
12.03.2017
15:31:19
Такое решение задачи очевидно, но может есть уже готовый механизм (Вертика умеет работать с Кафкой "из коробки").
И нет необходимости придумывать свои костыли)

Pavel
12.03.2017
15:31:42
я не слышал про такое
Встает вопрос о том, в каком формата должны быть данные в кафке?
Нужен какой-то контейнер и тип упаковки данных

Google

Pavel
12.03.2017
15:32:50
Текстовое - тормозить будет
Бинарное - потребуется пересборка формата/сериалайзера при правке схемы

Gennadiy
12.03.2017
15:35:33
Будет текстовая (JSON), тк переделывать то что уже взаимодействует с кафка не представляется возможным(

Pavel
12.03.2017
15:36:04
Джейсон в кафку....
"Ну я не знаю"

Gennadiy
12.03.2017
15:36:43
из кафки

Pavel
12.03.2017
15:41:28
мне лично вариант кафки не нравится как таковой
ибо при таком раскладе данные в CH всегда на X секунд запаздывают
и всегда нужно выбирать из двух мест - то, что еще не было уложено в CH и то, что уже уложено
и мержить
а это уже 3 форамта хранения, различных и часто несовместимых между собой

Gennadiy
12.03.2017
15:49:07
Это да...

Pavel
12.03.2017
15:51:29
вдвойне сложнее, когда ты не "типичный data mining"

Google

Pavel
12.03.2017
15:51:44
и у тебя нету этих зукиперов, кафок и прочего
а тупо нужно уложить ивенты в базу

f1yegor
12.03.2017
19:34:26
а какой язык интересует?

Pavel
12.03.2017
19:45:36
язык чего?)

f1yegor
12.03.2017
19:47:04
на каком языке вы хотите выгребать из кафки в кликхаус?

Pavel
12.03.2017
19:47:59
я уже выгребаю, на С++
хотя я отказался от Кафки пока что и заливаю в буфер таблицу, пока данных мало - работает прилично

Vladislav
12.03.2017
20:04:18
Всем привет.
А это разве нормально?
SELECT
number,
if(number > 5, number, NULL) AS ifWithNull,
if(number > 5, number, 0) AS ifWithoutNull
FROM system.numbers
LIMIT 10
┌─number─┬─ifWithNull─┬─ifWithoutNull─┐
│ 0 │ \N │ 0 │
│ 1 │ \N │ 0 │
│ 2 │ \N │ 0 │
│ 3 │ \N │ 0 │
│ 4 │ \N │ 0 │
│ 5 │ \N │ 0 │
│ 6 │ \N │ 6 │
│ 7 │ \N │ 7 │
│ 8 │ \N │ 8 │
│ 9 │ \N │ 9 │
└────────┴────────────┴───────────────┘

Shine
12.03.2017
20:05:39
а nullif такое же выдает? он вроде нормально работал
а так вообще нулы - сырые еще (
сами с нетерпением ждем, когда уже они нормально заработают )
включая nulls last / nulls first

Vladislav
12.03.2017
20:10:15
SELECT
number,
if(number > 5, number, NULL) AS ifWithNull,
if(number > 5, number, 0) AS ifWithoutNull,
nullIf(1, NULL) AS nullIfs
FROM system.numbers
LIMIT 10
┌─number─┬─ifWithNull─┬─ifWithoutNull─┬─nullIfs─┐
│ 0 │ \N │ 0 │ 1 │
│ 1 │ \N │ 0 │ \N │
│ 2 │ \N │ 0 │ \N │
│ 3 │ \N │ 0 │ \N │
│ 4 │ \N │ 0 │ \N │
│ 5 │ \N │ 0 │ \N │
│ 6 │ \N │ 6 │ \N │
│ 7 │ \N │ 7 │ \N │
│ 8 │ \N │ 8 │ \N │
│ 9 │ \N │ 9 │ \N │
└────────┴────────────┴───────────────┴─────────┘
Не очень понимаю логику nullIf...

Shine
12.03.2017
20:39:52
в вашем кейсе сработает вот так
multiIf(number > 5, NULL, number) AS ifWithNull

Timur
13.03.2017
08:45:08
@garikanet Чем вызвано требование "Пользователь с правами не readonly" для smi2/clickhouse-frontend?

Igor
13.03.2017
09:03:53
принудительная отправка параметра в каждом запросе - max_rowsresult
для того чтобы случайно не получить результат в 50М строк
дополнительно ещё пару параметров передаётся, а если userRO то переназначить их нельзя => ошибка
С обновление я выложу правки - чтобы можно было с RO работать

Google

George
13.03.2017
09:59:06
Через
ALTER TABLE ADD COLUMN name
можно ли добавить колонку в поле
Nested, если обращаться через точку?

Timur
13.03.2017
10:18:15

Dmitry
13.03.2017
10:19:24
можно поставить readonly=2
можно будет переопределять настройки, но нельзя модифицировать данные

Timur
13.03.2017
10:29:57

Алексей
13.03.2017
10:38:17
а тут есть ребята которые пишут smi2/clickhouse-frontend ?

Igor
13.03.2017
10:56:06
да)

Алексей
13.03.2017
10:57:24
а может знаете proxy режим в планах есть ?

Геннадий
13.03.2017
11:07:03

Алексей
13.03.2017
11:09:07
нее. я немного про другое.
я хотел бы что бы фронтенд общение с кликхаусом вел сам. сейчас же он стучится с веб браузера. но у меня нет и не будет возможности использовать его в таком режиме :(

Andrey
13.03.2017
11:15:05
А зачем вам это если не секрет? Чтоб данные авторизации не публиковать?

Алексей
13.03.2017
11:17:44
нет у меня просто кликхауз в сети до которой доступа по порту 8123 нет и не может быть

Andrey
13.03.2017
11:18:13
а iptables? прокинуть порт нельзя?

Алексей
13.03.2017
11:18:19
можно конечно запилить ssh прокси и любые другие извращения, но не хочется

Andrey
13.03.2017
11:18:32
контроля над шлюзом нет?

Алексей
13.03.2017
11:18:44
графана молодец. она делет запросы от себя.
контроля над vpn шлюзом нету да

Andrey
13.03.2017
11:19:36
если есть доступ есть хоть по какому то порту, то можно сделать

Алексей
13.03.2017
11:20:00
есть по 22 и по 443
на обоих что логично висят демоны

Google

Igor
13.03.2017
11:20:30

Алексей
13.03.2017
11:20:32
ну и вопрос не в следать костылем а в сделать как надо

Andrey
13.03.2017
11:21:05
ну если 443 есть то proxy_pass и все готово

Алексей
13.03.2017
11:23:20
Андрей, спасибо это вариант понятен и прост. однако на мой вгзляд выглядит костылем. мой вопрос был исключительно про корректную реализаицию когда nginx по дороге нету.

Andrey
13.03.2017
11:24:25
Тут скорее проблема с вашей стороны) Т.е. если бы ничего не висело на 443 порту, то можно было бы поменять порт в конфиге clickhouse и никакого nginx не было бы.
если хочется работы aka grafana, то nginx вполне вписывается на место графановского бекенда

Алексей
13.03.2017
11:26:22
ок. ответ понял. не горит вовсе.

Igor
13.03.2017
11:29:34
а может знаете proxy режим в планах есть ?
Да, я планирую, точнее уже делаю серверную версию, что будет :
- Автоматическая маршрутизация запроса между MySQL / CH - т/е gui будет уметь работать с mysql ( возможность добавить любую другую sqlLike базу )
- Шаринг запроса + результата
- Дашбординг
- LDAP auth
- Хранение истории всех запросов на сервере
- Работа с кластером CH
Но срок когда "оно" будет +- в конце весны/начало лета в мечтах:)))
Если интересно вот мой kanban/roadmap: https://tree.taiga.io/project/isublimity-chg/kanban

Алексей
13.03.2017
11:30:33
@garikanet спасибо! здорово.
как я говорю не горит вовсе и как делать обертки понятно. но хочется без оберток.

Roman
13.03.2017
11:35:37
похоже на новую графану)

prll
13.03.2017
11:54:17
кстати clickhouse теперь умеет быть https сервером, но надо немного шаманства с сертификатами

Pavel
13.03.2017
11:56:00
когда ждать http2? :)

prll
13.03.2017
11:56:35
как только он в poco появится ;)
а зачем он нужен ?

Pavel
13.03.2017
11:56:55
боюсь, что только для галочки

nikoinlove
13.03.2017
11:57:10
слоу-poco

Pavel
13.03.2017
11:57:12
хотя встроенное сжатие может быть полезно, наверное, при активном обмене запросами

Igor
13.03.2017
11:59:44
так сжатие и так есть
https://github.com/yandex/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00302_http_compression.sh

Google

Pavel
13.03.2017
12:00:33
да я не вижу смысла, признаться
это ж не кастомер фейсинг, пофигу что там летает :)

Andrey
13.03.2017
12:41:17
а куда сертификаты класть для https?

Igor
13.03.2017
12:43:21
да куда угодно
в конфиге же указать можно
https://github.com/yandex/ClickHouse/blob/1af6311a9974fbbd7e5c5c9d14dd69cb9ee34686/dbms/src/Server/config.xml
по умолчанию server.crt и server.key, видимо, в той же папке, где и config.xml серверный


Andrey
13.03.2017
13:36:57
Добрый день.
Пробовал фичу параллельного исполнения запроса между репликами - не удалось получить прирост производительности по сравнению с вариантом без параллелизма.
При этом ключ сэмплирования - случайное UInt16 и сэмплированные запросы идут быстрее обратно пропорционально доле сэмпла (для сэмпла 0.1 запрос в 10 раз быстрее, чем по всем данным).
Есть ли рекомендованная конфигурация, чтобы и репликацию включить, и запрос полноценно параллелился между репликами?
P.S. Если я верно понял, при выполнении запросов вида SELECT sum(metric), dimensions... FROM fact group by dimensions... по Distributed таблице, он сначала агрегируется на шардах, входящих в таблицу, а затем результаты агрегируются на ноде, на которой находится Distributed таблица.
Создалось впечатление, что распараллеливание по репликам работает иначе (все данные для агрегации поднимаются параллельно с реплик и пересылаются по сети на одну ноду). Есть ли возможность сделать, чтобы работало так же, как и при шардировании?
Плюс ещё вопрос: есть ли способ получить из ClickHouse план исполнения запроса или что-то вроде того?


Alexey
13.03.2017
14:00:03
Добрый день.
Пробовал фичу параллельного исполнения запроса между репликами - не удалось получить прирост производительности по сравнению с вариантом без параллелизма.
При этом ключ сэмплирования - случайное UInt16 и сэмплированные запросы идут быстрее обратно пропорционально доле сэмпла (для сэмпла 0.1 запрос в 10 раз быстрее, чем по всем данным).
Есть ли рекомендованная конфигурация, чтобы и репликацию включить, и запрос полноценно параллелился между репликами?
P.S. Если я верно понял, при выполнении запросов вида SELECT sum(metric), dimensions... FROM fact group by dimensions... по Distributed таблице, он сначала агрегируется на шардах, входящих в таблицу, а затем результаты агрегируются на ноде, на которой находится Distributed таблица.
Создалось впечатление, что распараллеливание по репликам работает иначе (все данные для агрегации поднимаются параллельно с реплик и пересылаются по сети на одну ноду). Есть ли возможность сделать, чтобы работало так же, как и при шардировании?
При распараллеливании по репликам, реплики работают как отдельные шарды, с которых читается соответствующая часть сэмпла данных. То есть, ускорение должно быть таким же как при сэмплировании (за исключением деталей - передача большего количества данных по сети, суммирование случайных задержек при использовании большого количества серверов). Было бы интересно узнать, почему в вашем случае это не так. Надо больше подробностей.
Вопрос - а сколько сейчас шардов и реплик?


Andrey
13.03.2017
14:01:01

Alexey
13.03.2017
14:01:36

Andrey
13.03.2017
14:04:14


Renat
13.03.2017
14:06:52
Добрый день.
Пробовал фичу параллельного исполнения запроса между репликами - не удалось получить прирост производительности по сравнению с вариантом без параллелизма.
При этом ключ сэмплирования - случайное UInt16 и сэмплированные запросы идут быстрее обратно пропорционально доле сэмпла (для сэмпла 0.1 запрос в 10 раз быстрее, чем по всем данным).
Есть ли рекомендованная конфигурация, чтобы и репликацию включить, и запрос полноценно параллелился между репликами?
P.S. Если я верно понял, при выполнении запросов вида SELECT sum(metric), dimensions... FROM fact group by dimensions... по Distributed таблице, он сначала агрегируется на шардах, входящих в таблицу, а затем результаты агрегируются на ноде, на которой находится Distributed таблица.
Создалось впечатление, что распараллеливание по репликам работает иначе (все данные для агрегации поднимаются параллельно с реплик и пересылаются по сети на одну ноду). Есть ли возможность сделать, чтобы работало так же, как и при шардировании?
Возможно с каждой реплики/шарда получается очень большой промежуточный результат. Если все данные по вашему group by доступны на одной ноде, то попробуйте переписать запрос с distributed_group_by_no_merge


Dmitriy
13.03.2017
14:51:59
Привет. А можите направить меня как лучше в кластере удалять по месяцам?

Aleksey
13.03.2017
14:59:10
Добрый!
Как будет обрабатываться вот такой запрос
select description,price from goods where price>50
если я правильно понимаю то сначала КХ достанет столбец price в память и найдет записи где ценник больше 50 и только потом достанет соотвествующие куски из столбца description.... Или оба столбца будут сразу подниматься в память? (предполагаю что эти столбцы не входят в индекс и description тектовый с количеством знаков от 50 до 150 символов)... Или другими словами поддерживает ли КХ late materialization?

Vladislav
13.03.2017
15:01:58
в кх есть where, а есть prewhere
в документации описано было, как работают

Aleksey
13.03.2017
15:05:11

hamper ?
13.03.2017
16:33:13
А на кх какая лицензия? А то я в документации что-то не нашел.

Andrey
13.03.2017
16:34:16
apache 2
https://github.com/yandex/ClickHouse/blob/master/LICENSE