
Oleh
12.10.2017
12:50:24
не нашел такого в документации, сейчас попробую
unknown JOIN strictness (must be ANY or ALL)

Alexey
12.10.2017
12:52:18

Google

Alexey
12.10.2017
12:55:01

Mike
12.10.2017
12:55:13

Alexey
12.10.2017
12:56:10

Nikolai
12.10.2017
12:57:15

Mike
12.10.2017
12:57:57

Alexey
12.10.2017
12:58:16

vladimir
12.10.2017
12:58:33
Алексей, в КХ нет никаких встроенных способов выполнять сложные запросы в несколько потоков? Возможно оно из коробки умеет дробить запрос на N подзапросов и выполнять их параллельно. а результат склевивать?

Alexey
12.10.2017
12:58:39

vladimir
12.10.2017
12:59:40
а можно как то регулировать количество этих потоков?

Alexey
12.10.2017
12:59:43

Google

Oleh
12.10.2017
13:08:29

Mike
12.10.2017
13:08:59

Igor
12.10.2017
13:11:25


Alexey
12.10.2017
13:27:43
Привет!
Ты тут?
Вопрос про треды актуален
Я выставил 58 тредов и запустил выполнение тяжелого запроса, он выполнился за 22сек.
изменид количество тредов на 14, запустил этот же запрос отработал за 23 сек
Тут.
Сейчас отвечу в общем чате.
По-умолчанию количество потоков выбирается как количество ядер без учёта hyper-threading. Для большинства запросов это предел, после которого увеличение количества потоков даёт лишь небольшой прирост. Можно посмотреть текущее значение настройки в таблице system.settings.
https://www.percona.com/blog/2017/09/13/massive-parallel-log-processing-clickhouse/


vladimir
12.10.2017
13:37:25
Алексей, у меня 28 ядер + 28 гипертрейдинг ( количество тредов по умолчанию в базе 28). При выставлении количества тредов 14/58 запросы отрабатывают так же как и при 28 тредах. Общая нагрузка на CPU на данный момент ~15%.
а я хочу нагрузку в 90% на CPU
но чтобы запросы отрабатывали не за 22сек а за 4
мне поднимать несколько инстансов КХ в контейнерах на одном сервере, бить данные на шарды и гонять все запросы через подобный кластер?

Amelia
12.10.2017
13:49:58

Alexey
12.10.2017
13:50:05
Оптимально должно быть примерно при 28 ядрах.
Запрос может масштабироваться менее чем линейно, если:
- большая часть времени уходит на передачу данных по сети;
- большая часть времени уходит на сортировку (которая плохо масштабируется).
- создание хэш-таблиц в IN или JOIN (их создание всегда делается в один поток, хотя последующее выполнение JOIN/фильтрации распараллеливается)
Чтобы выяснить, что именно плохо распараллеливается, можно понаблюдать, что именно делает запрос в те моменты времени, когда он использует не всё CPU.
Несколько шардов ClickHouse на одном сервере - не поможет, но может помешать, так как взаимодействие между шардами всегда более тяжёлое, чем внутри процесса.

vladimir
12.10.2017
14:07:42
Алексей, у нас "тяжелый запрос" это 970 значений которые передаются в IN

Google

vladimir
12.10.2017
14:09:43
и это как бы совсем не много чтобы КХ думал над ним 22сек

papa
12.10.2017
14:11:51

Igor
12.10.2017
14:16:31


Alexey
12.10.2017
14:53:41

Igor
12.10.2017
14:56:46

Sergei
12.10.2017
15:07:40
Подскажите пожалуйста, вложенный запрос типа
SELECT a, b from ( SELECT a, b FROM t)
всегда в памяти будет лежать или КХ умеет такие в складывать во временные файлы?

Irina
12.10.2017
15:12:16
Подскажите, пожалуйста, по внутренним словарям. Хочу подключить гео базу, но информации о континентах и федеральных округах нет. Можно ли пропустить эти типы регионов при создании иерархий?
Решился вопрос, спасибо

Alexey
12.10.2017
15:35:56
Опубликованы презентации с последнего митапа:
https://twitter.com/ClickHouseDB/status/918499427597332481


Sergei
12.10.2017
17:21:13
Такой запрос будет выполнен с потоковой отправкой данных на клиента - будет израсходовано O(1) памяти.
Добрый вечер
вот сделал небольшой синтетический тест, т.к. нужно посчитать последовательности подряд идущих событий, но обнаружилась одна неприятная вещь. КХ хочет 34G на выполнение запроса, которому ну 10М должно хватать заглаза.
SELECT z.2 AS strike, count(*) AS count FROM (SELECT arrayPopFront(arrayMap((a, b) -> (a.1, a.2 - t[(b - 1)].2), arrayPushFront(arrayFilter(t -> (t.2 != 0), arrayMap((a, b) -> if(a != x[(b + 1)], (a, b), (0, 0)), x, arrayEnumerate(x))), (0, toUInt32(0))) AS t, arrayEnumerate(t))) AS z from (select arrayMap(a -> intHash32(a) % 2, range(150000)) as x)) ARRAY JOIN z GROUP BY z.2
такое ощущение, что на вызов каждой лямбды создается копия массива

Konstantin
12.10.2017
17:42:01
а такой запрос:
select userid, UUIDStringToNum(userid) from stat.stream_log limit 1000
вообще чудеса делает:
":) PuTTYPuTTYPuTTYPuTTYSegmentation fault"

Michal
12.10.2017
17:47:16


Alexey
12.10.2017
17:56:48
Добрый вечер
вот сделал небольшой синтетический тест, т.к. нужно посчитать последовательности подряд идущих событий, но обнаружилась одна неприятная вещь. КХ хочет 34G на выполнение запроса, которому ну 10М должно хватать заглаза.
SELECT z.2 AS strike, count(*) AS count FROM (SELECT arrayPopFront(arrayMap((a, b) -> (a.1, a.2 - t[(b - 1)].2), arrayPushFront(arrayFilter(t -> (t.2 != 0), arrayMap((a, b) -> if(a != x[(b + 1)], (a, b), (0, 0)), x, arrayEnumerate(x))), (0, toUInt32(0))) AS t, arrayEnumerate(t))) AS z from (select arrayMap(a -> intHash32(a) % 2, range(150000)) as x)) ARRAY JOIN z GROUP BY z.2
такое ощущение, что на вызов каждой лямбды создается копия массива
А вот этот запрос уже не будет выполняться потоково. Функции высшего порядка размножают значения по количеству элементов массива, и в результате в оперативке получаются блоки большого размера.
Попробуйте две вещи:
1. Уменьшить max_block_size. По-умолчанию значение 65536, соответсвенно, постепенно пробуйте значения 8192, 1024 и т. п.
2. Если же оперативки не хватает при GROUP BY, то можете включить агрегацию во внешней памяти.
Это нормально. После преобразования в бинарный вид, получаются какие-то байты, которые плохо отображаются в терминале. Для чтения глазами этот бинарный вид плохо подходит.


Konstantin
12.10.2017
17:58:12

Alexey
12.10.2017
17:58:12

Google

Alexey
12.10.2017
17:58:23

Konstantin
12.10.2017
17:58:34
спасибо)

Alexey
12.10.2017
17:58:48

Sergei
12.10.2017
18:00:35

Alexey
12.10.2017
18:03:17
В запросе есть GROUP BY, поэтому он не выполняется потоково - создаются промежуточные состояния для GROUP BY. Хотя я не разглядывал ваш запрос подробнее, поэтому про всякие операции с массивами не могу прокомментировать.

Dmitriy
12.10.2017
18:15:54
Извените не удержался)

Paul
12.10.2017
18:18:33
только в России могут сделать онлайн-ассистента, который острить учится раньше, чем заводить будильник

Konstantin
12.10.2017
18:47:52
пытаюсь в Power BI черед ODBC сделать запрос, ровно через 30 секунд вылетает timeout
при этом в браузере запрос выполняется нормально
можно както повлиять на этот таймаут со стороны КХ или это проблема драйвера и power bi?

Alexey
12.10.2017
19:15:03
В самом ClickHouse таймаут на сетевое взаимодействие по-умолчанию 5 минут. Конечно можно подкрутить, но это не имеет отношения к делу.

Konstantin
12.10.2017
19:16:13
точнее не по логу а по show processlist

Andrey
12.10.2017
19:17:03
А это не самого powerbi таймаут?

Konstantin
12.10.2017
19:17:50
вот хз, когда к mysql обращаюсь вроде нет такого ограничения

Alexey
12.10.2017
19:20:14
Надо ещё посмотреть на наличие таймаута в коде ODBC драйвера.

Konstantin
12.10.2017
19:21:35

Google

Nikolai
12.10.2017
19:27:44
очень похоже :)

Alexey
12.10.2017
19:43:50
Да. Напишите разработчику в issues, что таймаут должен быть настраиваемым.

Konstantin
12.10.2017
19:47:06
Уже

Igor
12.10.2017
22:40:20
Обновил beta.tabix.io
Кто может, и кто испытывает проблемы - погоняйте|по тестируйте - на тормоза и мемлики)
Бонус : plotly добавил 3D
https://twitter.com/tabix_io/status/918606140027654144?s=17
Changelog:
https://github.com/smi2/tabix.ui/blob/beta/manual/docs/Changelog.md
PlotLy example: https://github.com/smi2/tabix.ui/blob/beta/manual/docs/draw/Draw_Plotly.md


Алексей
13.10.2017
06:38:02
день добрый!
подскажите, пожалуйста, есть ли более подробное описание функций для работы с временем/датами?
в текущей версии документации не совсем прозрачно
например: https://clickhouse.yandex/docs/ru/functions/date_time_functions.html#totime
toTime
Переводит дату-с-временем на некоторую фиксированную дату, сохраняя при этом время.
что такое "некоторая фиксированная дата"? где и как она устанавливается?
toRelativeYearNum
Переводит дату-с-временем или дату в номер года, начиная с некоторого фиксированного момента в прошлом.
что такое "начиная с некоторого фиксированного момента в прошлом"? что это за момент? как он устанавливается? в чём отличие от просто toYear?

Konstantin
13.10.2017
06:57:52

Igor
13.10.2017
06:59:22
В консоле нет ошибок типа :
POST .... net::ERR_CONNECTION_REFUSED

Александр
13.10.2017
07:29:06
Я такое применяю когда у меня есть дата эвента и продолжительность, что бы потом разложить эвент на несколько дней с открытым временем и закрытым, исходя из продолжительности


Алексей
13.10.2017
07:35:27

Konstantin
13.10.2017
07:41:30
SELECT timeSlots(toDateTime('2012-01-01 12:20:00'), 600)
Received exception from server:
Code: 43. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Illegal type UInt16 of second argument of function timeSlots. Must be UInt32..
Это нормально, что КХ хочет чтобы я второй аргумент дал ему не как 600, а toUInt32(600) ?))

Александр
13.10.2017
07:41:50
Прошу прощения, невнимательно прочитал название функции ( да, toDateTime делает то, что я описал