
Anatoly
02.01.2017
14:03:22

Anton
02.01.2017
14:22:30
кем принят? В ООН международных языков побольше
Людьми принят. Большое количество носителей в качестве как родного, так и второго языка в куче стран. Его активно преподают в школах в качестве второго. В том числе и в нашей с вами (сюрприз).
Так же является официальным языком в международных корпоративных коммуникациях. Программный код пишется на (сюрприз) английском языке. Ну и т.п. Продолжать смысла не вижу.

Darafei
02.01.2017
14:25:41
я тоже хочу понегодовать. на моём родном белорусском доки нет! :)

Андрей Михайлович
02.01.2017
14:25:58
Комплекс яндекса на тему "мы старше гугль на неделю" плюс "мы можем, а другие нет". Все ведут доку на двух и более языках и тут приходит Яндекс с докой, актуальной только на одном.

Google

Igor
02.01.2017
14:26:40

Андрей Михайлович
02.01.2017
14:27:48
Ссылки пользователей. Самому проверять нет сейчас нужды. Один раз настроил - отдал и забыл.

Darafei
02.01.2017
14:28:37
нет нужды - нет проблемы. :)

Igor
02.01.2017
14:29:02

Maxim
02.01.2017
14:29:51
у меня как-то был коллега-перлоед, воинственно не знающий английского
на все ссылки на доки посылал к абаме и яростно плевался
как такие программистами становятся?..

Igor
02.01.2017
14:30:16
*шутка про перл*

Андрей Михайлович
02.01.2017
14:30:50
Элементарно становятся. Как все.

Darafei
02.01.2017
14:32:16
как такие программистами становятся?..
у нас целая проблема, мало кого из россии нанять выходит - никто английского не знает даже на уровне "понимаю устную речь и могу ответить с размахиваниями руками"

Андрей Михайлович
02.01.2017
14:32:27
Я вот английский изучал по докам и фильмам. Мне его не преподавали.
Читать и говорить могу. Но это мало что значит. Ибо напрягаться всё еще приходится.

Maxim
02.01.2017
14:34:35
всегда есть опция "нанять преподавателя", или там "найти нормальные курсы"
ладно, не будем оффтопик разводить

Slach
02.01.2017
14:44:25
Толик Лично мной ) если тебе так интересно хотя мне и не нравится. Просто мне нужно сегригировать тех кто знает русский и всех остальных ) а с остальными как то надо общаться and this stupid simpky barbarian language is ideal choice for conversation problem solving

Shine
04.01.2017
15:37:45
Ребят, а кто активно юзает докер? сравнивали различия в производительности кликхауса в докере и без него ? Есть воообще какая-то разница ?

Google

Maksim
04.01.2017
15:38:31
дежавю, с месяц назад кажется обсуждали подобное здесь

Igor
04.01.2017
15:38:48
зависит от того, какой хост
если линукс, то у контейнеров очень маленький оверхед, насколько я знаю
если винда-макось, то там один хрен все в виртуалке крутится (а в случае с новым докером и макосью с hxyve производительность, емнип, даже хуже, чем в virtualbox'е)

Shine
04.01.2017
15:40:40

Fike
04.01.2017
16:23:37
В линуксе это такие же процессы, как и любые другие, просто закрытые от внешнего мира в своих неймспейсах +- capabilities. Я не уверен, что там вообще можно говорить об оверхеде, а если и есть, то по сравнению с приложением весьма незаметный. Там совсем другие штуки вылезают, engineering.linkedin, например, недавно рассказывал, как системные треды сборщика мусора jvm (в кликхаусе конкретно такой пример должен быть неприменим, насколько понимаю) выжирали отведенную процессорную квоту и оставляли само приложение ни с чем.

f1yegor
04.01.2017
16:52:12
а правильно я понимаю что в этом выражении я должен явно перечислять столбцы из правой таблицы, чтобы отобразить их во внешнем select? по-умолчанию они не будут доступны
SELECT <right-table-columns>, *
FROM
(
SELECT *
FROM table1
WHERE $mainCond
) ALL LEFT JOIN (
SELECT <some-columns>
FROM table2
WHERE $mainCond
) USING (pk_id)

Igor
04.01.2017
16:52:29
да (
это жопа, конечно
хотя если есть способ - я тоже буду рад услышать

f1yegor
04.01.2017
16:56:18
ну как сказать, я пока писал запросы максимум с 3 таблицами в join, с 4ым придется еще немного поднапрячься

Igor
04.01.2017
16:57:09
у меня как-то было три уровня вложенности с 5 таблицами (привет UNION ALL еще)
как я дьявола не вызвал - не знаю

f1yegor
04.01.2017
17:07:54
but i'm not sure what clickhouse applies first with a join
will it first filter left table and then filter right table and then join?

Fike
04.01.2017
17:09:21
Performs joins with data from the subquery. At the beginning of query execution, the subquery specified after JOIN is run, and its result is saved in memory. Then it is read from the "left" table specified in the FROM clause, and while it is being read, for each of the read rows from the "left" table, rows are selected from the subquery results table (the "right" table) that meet the condition for matching the values of the columns specified in USING.
оно?


Vladimir
04.01.2017
17:13:26
В линуксе это такие же процессы, как и любые другие, просто закрытые от внешнего мира в своих неймспейсах +- capabilities. Я не уверен, что там вообще можно говорить об оверхеде, а если и есть, то по сравнению с приложением весьма незаметный. Там совсем другие штуки вылезают, engineering.linkedin, например, недавно рассказывал, как системные треды сборщика мусора jvm (в кликхаусе конкретно такой пример должен быть неприменим, насколько понимаю) выжирали отведенную процессорную квоту и оставляли само приложение ни с чем.
Нет ничего бесплатного. Цгруппы и неймспейсы имеют оверхед в пару процентов обычно

Fike
04.01.2017
17:13:42
там же все и так выполняется в корневом нейспейсе

Vladimir
04.01.2017
17:13:58
Виртуальная сеть тоже
Бридж имеет оверхед

Google

Vladimir
04.01.2017
17:14:19
Нат
Неймспейсы, цгруппы. Все его имеет

f1yegor
04.01.2017
17:14:37

Fike
04.01.2017
17:22:43
Я не спец по cgroups, но, насколько понимаю, они либо работают, либо нет для всей машины разом. Поэтому сетевые расходы, конечно, будут, но - если я правильно понимаю - остальное не влияет вообще никак, потому что процесс #1 запускается ровно в тех же условиях, что и внутриконтейнерные

f1yegor
04.01.2017
17:23:48
мне тоже кажется что основной оверхед на сеть, и на дисковые плагины, если не используется mount volumes

Fike
04.01.2017
17:25:37
Ну да, еще COW-систему собирать и поддерживать, но в большинстве случаев больше одного раза файлы из родительских слоев не читаются, а в записи участвует только один слой.

Shine
05.01.2017
12:23:42
ага, у меня тоже 3 таблицы для джойнов - вчера пришлось извратиться + юнион олы )
ну и групп эррей в некоторых задачах выручал, а так без multiple join жить тяжко :)

evervoid
05.01.2017
15:26:44
всем привет! не подскажете, есть ли возможность схлопнуть строки по первичному ключу при вставке? смотрел CollapsingMergeTree, но он показался довольно странным

Igor
05.01.2017
15:27:04
ReplacingMergeTree?
он недокументирован, правда

evervoid
05.01.2017
15:28:20
окей, возможно, а можно где-нибудь про это почитать, кроме исходников?)

Igor
05.01.2017
15:29:20
ща поищу

evervoid
05.01.2017
15:36:48
все, сам нашел:
https://github.com/yandex/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00325_replacing_merge_tree.sql
надо optimize table делать руками видимо, что грустно, но хоть что-то :) спасибо за наводку!

Igor
05.01.2017
15:37:18
сорри, отвлекли :(
optimize table вроде необязательно руками, если терпит
он сам периодически делается

evervoid
05.01.2017
15:40:10
ещё вопрос:
"Для реплицируемых таблиц запрос OPTIMIZE применяется только к нереплицируемым данным (эти данные присутствуют только после преобразования нереплицируемой таблицы в реплицируемую). Если такие отсутствуют, то запрос ничего не делает." - то есть если я сделаю репликацию таблицы с ReplacingMergeTree, то optimize будет бесполезен и строки не будут схлопываться?

Alexey
05.01.2017
15:40:48

evervoid
05.01.2017
15:41:00
спасибо большое!

Igor
05.01.2017
15:41:44
о, давай я доку поправлю?
вообще эту фразу снести и написать что "OPTIMIZE применяется к реплицированным данным тоже"?

Google

Alexey
05.01.2017
15:42:05

Igor
05.01.2017
15:42:08
спасибо!

evervoid
05.01.2017
15:51:53
а если ключ это кортеж из нескольких колонок, возможно ли в этом случае использование движка ReplacingMergeTree, или он пока только для одной колонки работает?

Alexey
05.01.2017
15:52:07
Будет работать.

Roman
06.01.2017
17:01:55
Плагин для Grafana для работы с КХ как источником https://github.com/Vertamedia/clickhouse-grafana (увидел ссылку в сообщении google groups) #grafana

Alexey
06.01.2017
17:05:12
Спасибо, очень интересно! Даже использует функцию runningDifference :) Надо будет у себя попробовать...


Боб
06.01.2017
18:51:56
Привет.
Пробую пользоваться кликхаус - пробую перенести туда анализ логов вместо анализа файлов.
Как первую итерацию хочу просто вынуть все строки за интервал дат и скормить их существующему алгоритму анализа.
Из https://clickhouse.yandex/reference_ru.html#SELECT понял что запросы вида
select * from log where EventDate=today()-1
должны выполняться потоково, не занимая оперативки.
Тем не менее после выкачивания 90 (девяносто) МБ логов я получаю в очередной строке ошибку:
Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 962.54 MiB (attempt to allocate chunk of 16777216 bytes), maximum: 960.00 MiB: (while reading column UserAgent): (while reading from part /opt/clickhouse//data/prod/traffic/20170105_20170106_381032_393636_8/ from mark 1125 to 1133), e.what() = DB::Exception
Запрос делаю по http, через GET-запрос.
Что я делаю не так?


Alexey
06.01.2017
18:56:28
Запрос выполняется потоково, с использованием O(1) оперативки. Но это количество оперативки может быть достаточно большим - оно зависит от размера одного блока - единицы обработки данных, и от количества потоков. По-умолчанию, этот размер достаточно большой - 65536 строк. Это рассчитано на ситуацию, когда все значения мелкие.
Но в вашем случае, строчки лога могут быть крупными, и тогда блоки обработки данных будут слишком большими. Размер блока можно изменить настройкой max_block_size. Пример (в интерактивном режиме): SET max_block_size = 8192. Или можно указать это в параметре URL.
max_block_size не может быть меньше, чем index_granularity, заданная в таблице.
Также можно уменьшить количество потоков: max_threads.


Боб
06.01.2017
19:16:20
да, через go-клиента я получал как раз 65536 строк. Потом уже попробовал простой запрос.
Сейчас попробую поменять размеры блока.
Что интересно - если поменять EventDate=today()-1 на where EventDate=toDate('2017-01-05'), то проблема не возникает - Сейчас выкачал уже 390 МБ логов и продолжает качать.

Alexey
06.01.2017
19:17:20
> EventDate=today()-1 на where EventDate=toDate('2017-01-05')
Разница с этим не связана, такие выражения идентичны.

Боб
06.01.2017
19:21:20
угу, щас продолжаю пробовать - в обоих случаях то получается скачать сразу много логов, то меньше сотни мегабайтов.
пошел смотреть доки проблоки и потоки

Alexey
06.01.2017
19:22:31
Нам надо будет сделать размер блока адаптивным, чтобы пользователь об этом не беспокоился.

Боб
06.01.2017
19:26:56
оказывается max_block_size я поменять не могу - пользователь с режимом только чтение задавать настройки не может.

Alexey
06.01.2017
19:27:29
Значит надо поменять для профиля пользователя - см. users.xml.

Боб
06.01.2017
19:30:12
Да, передам админу. Спасибо, Алексей.
А при сортировках по столбцу, не входящему в индекс база подгружает в память все значения только этого столбца для сортировки или всех выбираемых столбцов?

Alexey
06.01.2017
19:32:51
Если кроме сортировки есть также небольшой LIMIT, то в оперативке будет одновременно немного строк (несколько больше LIMIT).
Если же нет, то весь результат, который необходимо отсортировать, будет в оперативке, перед отдачей клиенту.
Для больших объёмов, есть возможность включить внешнюю сортировку на диске (которая весьма неэффективна).

Боб
06.01.2017
19:32:53
Сейчас счетчики рассчитаны на получение строк в хронологическом порядке, т.е. мне надо что-то вроде ORDER BY Timestamp или на худой конец EventDate (это обязательное поле с датой. Как я понял по этому полю происходит разделение на кусочки), а в пределах суток я уже попробую отсортировать на стороне клиента.
а EventDate индексом считается?
ограничений нету - нужно все строки анализировать.

Google

Alexey
06.01.2017
19:34:58
Желательно указать условие условие на ключ в WHERE. Иначе независимо от сортировки, будет прочитано больше строк, чем нужно...
EventDate - это "недоиндекс" - он позволяет выбирать только нужные куски, но не более того. Куски крупные и их немного.

Боб
06.01.2017
19:38:41
по уже существующей таблице можно узнать какие столбцы входят в первичный ключ?

Alexey
06.01.2017
19:39:04
Можно - написать SHOW CREATE TABLE t.
Там будет в конце ENGINE. А у этого ENGINE, один из аргументов (как правило, кортеж) - первичный ключ.

Боб
06.01.2017
19:42:35
да, нашел.
И последний вопрос (а то мне уже стыдно вас мучать) - можно ли проводить выборку "предыдущей" строки при агрегировании.
Например нужно понять что вернулся старый пользователь.
пишу еще, случайно отправилось

Igor
06.01.2017
19:43:41
предыдущая строка - да, runningDifference вроде

Боб
06.01.2017
19:43:54
Я делаю select userid,max(timestamp) from traffic groupby userid.
И мне нужно выбрать еще одно поле - по смыслу что-то вроде max-1 timestamp

Igor
06.01.2017
19:44:07
или только изначально отсортировать надо как-то в подзапросе

Alexey
06.01.2017
19:48:25

Боб
06.01.2017
19:49:51
про NOT IN - тоже про такой способ думал. А внутри оно как работать будет - для каждого пользователя снова всю таблицу сканировать или это за один проход всё сделается?

Alexey
06.01.2017
19:50:41
Будет два раза сканировать.
Также, если timestamp-ов мало, можно воспользоваться агрегатной функцией groupArray и функцией arraySort или arrayReverseSort от её результата; а потом взять первые два элемента.

Igor
06.01.2017
19:53:02
ой, кстати, а сложно сделать функцию, возвращающую только уникальные значения массива?

Alexey
06.01.2017
19:53:22
Такая уже есть - arrayUniq.

Igor
06.01.2017
19:53:32
хм, неужто проглядел :О
спасибо!

Alexey
06.01.2017
19:54:29
Она тоже не документирована...
Впрочем, в этой функции ничего сложного нет - она работает.

Igor
06.01.2017
19:54:41
да, ща исправим