
Рулон
28.07.2017
06:32:34
Доброе утро! Вoпрос с движком "memory" а что произойдет если таблица перестанет влезать в память?

Aleksander
28.07.2017
06:33:49

Petr
28.07.2017
10:23:43
Привет, в MergeTree (<столбец с датой>, (<стобцы для индексирования...>, <столбец с датой>), 8192) я правильно понял?

Диана
28.07.2017
10:30:36
Движок принимает параметры: имя столбца типа Date, содержащего дату; выражение для семплирования (не обязательно); кортеж, определяющий первичный ключ таблицы; гранулированность индекса. Пример:
Пример без поддержки сэмплирования:
MergeTree(EventDate, (CounterID, EventDate), 8192)
Пример с поддержкой сэмплирования:
MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192)

Google

Alexey
28.07.2017
10:59:31

Alexey
28.07.2017
11:03:56

Alexey
28.07.2017
11:06:02
спасибо

Kirill
28.07.2017
11:31:50
У меня вопрос о том как правильно сделать "cancel" для уже выполняющегося запроса по native протоколу, сейчас я шлю Cancel (3) после чего закрываю соединение,
раньше нам этого было достаточно, но теперь хочется оставлять соединение для переиспользования. Проблема в том, что если я посылаю просто Cancel то все следующие запросы не будут работать,
т.к. сервер будет ругаться на то что прилетел неизвестный пакет, отсюда и вопрос как правильно выполнять запрос что писать и что пытаться вычитать от сервера на запрос Cancel,
могу ли я просто выполнить запрос Cancel если в данный момент никакой запрос в данном соединении не выполняется ?


Alexey
28.07.2017
11:47:50
Нужно отправить Cancel, а затем прочитать все оставшиеся данные как обычно (должно довольно быстро прилететь EndOfStream, но при распределённой обработке, сервер пытается по-хорошему (без закрытия соединений) отменить все вложенные запросы).
> могу ли я просто выполнить запрос Cancel если в данный момент никакой запрос в данном соединении не выполняется
Это навскидку не помню, можно посмотреть.

Kirill
28.07.2017
11:52:53
Спасибо

Oleksandr
28.07.2017
13:27:18
такой вопрос по поводу ReplicatedReplacingMergeTree — в доке его нет, на самом деле оно есть, но фича "выбрать последнее по ver" вроде как не работает
1) действительно ли не работает, или это я дурак?
2) если не работает, как добиться нужной фунциональности? Например, перед запросом можно делать "where id in (<find_last_id>)", но мб это не самое шустрое решение

Vladislav
28.07.2017
13:31:56
Пользуемся им, OPTIMIZE FINAL точно работает... Version вроде тоже работали. А под условия запроса точно последняя версия подпадает?
Кстати, Алексей говорил, что официально ReplicatedReplacingMergeTree поддерживается и вроде даже его документируют в ближайшее время :)

Alexey
28.07.2017
13:39:40

Oleksandr
28.07.2017
13:42:41

Google

Alexey
28.07.2017
13:44:23
Обычно нет необходимости самостоятельно вызывать OPTIMIZE.

Oleksandr
28.07.2017
13:47:44

sha-bang
28.07.2017
16:29:08
Приветствую всех!
Не подскажете как выполнить запрос через HTTP интерфес с использованием внешних словарей?
Есть вот такой запрос
select dictGetString('api_keys','key', number) as k from system.numbers where k <> '' limit 33;
Он отлично работает в нативном клиенте.
А вот через HTTP не хочет
GET: query=select%20dictGetString('api_keys'%2C'key'%2C%20number)%20as%20k%20from%20system.numbers%20where%20%20%20k%20%3C%3E%20%22%22%20limit%2033%20FORMAT%
RESP:Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 86: "" limit 33 FORMAT JSON , expected identifier, e.what() = DB::Exception

Alexey
28.07.2017
16:57:53
Скорее всего, возникла путаница при кодировании URL.
В этом случае намного удобнее отправлять запрос POST-ом, а не через параметр URL.

Ivan
28.07.2017
17:36:12
Может есть у кого какой-то пример, как сгенерировать RowBinary. Хорошо если на java/scala
нашел, спасибо
https://github.com/yandex/clickhouse-jdbc/blob/master/src/main/java/ru/yandex/clickhouse/util/ClickHouseRowBinaryStream.java

Dmitry
28.07.2017
20:05:20

Pika
28.07.2017
23:45:05
Скажите, а гарантируется, что при выполнение SELECT groupArray(col1), groupArray(col2) FROM events элементы двух массивов будут находится в том же соответствии как они лежат в clickhouse?

Alexey
29.07.2017
00:47:30
При выполнении запроса, порядок передачи значений в разные агрегатные функции будет одинаковым.
Но при разных выполнениях запроса, значения могут прийти в другом порядке.

prll
29.07.2017
01:16:43
Сборочные проблемы с слишком большим расходом памяти при компиляции и ошибкам на gcc7 поправлены.

Alexey
29.07.2017
01:39:30
Замечательно :)

Vlad
29.07.2017
05:48:40
Всем привет!
А почему clickhouse возвращает символ экранирования с одинарной кавычкой?
vp@b590:~$ echo "SELECT '\''" | curl 'http://localhost:8123/?' —data-binary @-
\'
vp@b590:~$ clickhouse-client
ClickHouse client version 1.1.54245.
Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.54245.
:) SELECT '\''
SELECT '\''
┌─\'\\\'\'─┐
│ \' │
└──────┘
1 rows in set. Elapsed: 0.003 sec.
:) exit
Bye.

Pika
29.07.2017
09:09:28

f1yegor
29.07.2017
21:39:26
https://github.com/facebook/zstd

Alexey
29.07.2017
21:48:13

f1yegor
29.07.2017
21:49:10
так и помнилось что он уже есть. новость протухла?


Alexey
29.07.2017
21:53:40
Всем привет!
А почему clickhouse возвращает символ экранирования с одинарной кавычкой?
vp@b590:~$ echo "SELECT '\''" | curl 'http://localhost:8123/?' —data-binary @-
\'
vp@b590:~$ clickhouse-client
ClickHouse client version 1.1.54245.
Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.54245.
:) SELECT '\''
SELECT '\''
┌─\'\\\'\'─┐
│ \' │
└──────┘
1 rows in set. Elapsed: 0.003 sec.
:) exit
Bye.
Экранирование зависит от выбранного формата данных. Например, в формате TabSeparated данные экранируются, а в TabSeparatedRaw - нет.
По-умолчанию в клиенте в интерактивном режиме используется формат PrettyCompact. Именно он выводит данные в красивых табличках. В нём данные тоже экранируются. Это сделано для того, чтобы их было легче видеть - когда в данных присутствуют переводы строк или, например, нулевые байты.
Хотя тот факт, что даже при выводе в виде красивых табличек в клиенте, используется экранирование, может противоречить опыту использования, например, MySQL клиента, который не экранирует данные в аналогичном случае.
При этом, правила экранирования общие для форматов TabSeparated, Values, Pretty. Например, одинарная кавычка экранируется и при выводе в TabSeparated формате, хотя это было бы не обязательно.
Чтобы посмотреть данные без экранирования, добавьте в конец запроса FORMAT TabSeparatedRaw.


f1yegor
29.07.2017
21:56:42
https://twitter.com/ifesdjeen/status/890994748353327104

Google

Alexey
29.07.2017
21:58:51
ZStandard использовался в ClickHouse начиная с версии 0.x, ещё до того, как Yan Collet перешёл на работу в Facebook. В том числе, репортили баги.

Vladimir
29.07.2017
21:59:50

f1yegor
29.07.2017
22:00:09
сорри (

Alexey
29.07.2017
22:00:41
сорри (
Хорошая штука и лишнее внимание к ней не помешает :)

f1yegor
29.07.2017
22:05:50
небольшая exposure кх к golang девелоперам https://www.meetup.com/golang-amsterdam/events/241741582/
упомянул кх рассказывая про clickhouse_exporter

Alexey
29.07.2017
22:06:51
Интересно, сейчас посмотрим...

f1yegor
30.07.2017
01:38:10
ну на самом деле ничего интересного, но несу в массы)

Andrey
30.07.2017
09:44:13
В мастере починено dbms/src/Common/Collator.cpp:12:36: error: unknown option after ‘#pragma GCC diagnostic’ kind [-Werror=pragmas]
#pragma GCC diagnostic ignored "-Wunused-private-field"
А в stable нет

Aleksander
30.07.2017
10:45:17
Коллеги, а сколько нужно КХ памяти выделять? =) Наблюдаю такую картину : делаю миграцию данных из монги в кх. Дал тачке 8 гб, в какой-то момент кх ужрался 8гб и стал тормозить, вот сейчас дал 20 гб, жду, что же будет
Мигрирую в таблу с ReplacingMergeTree

Aleksander
30.07.2017
10:57:53
Мигрировало примерно 1 млн записей из 25.

Alex
30.07.2017
11:04:22
а как миграция реализована?

Aleksander
30.07.2017
11:07:15
Джава приложение на другой виртуалке
Сейчас смотрю конфиги, где-то в интернетах вычитал, что по дефолту макс память выставлена в 10гб

Alexey
30.07.2017
11:10:02
не так важно на каком языке приложение миграции и на VM или HW оно запущено
больше интересует:
* сколько потоков
* какие батчи
и т.п.

Aleksander
30.07.2017
11:10:48
1 поток, выгребает в память по 20000 записей и инсертит в кх

Alexey
30.07.2017
11:10:59
одним батчем?

Google

Aleksander
30.07.2017
11:11:41
Не могу сказать, что это батч. Это последовательнй цикл инсертов

Alexey
30.07.2017
11:11:59
т.е. делается 20 К инсертов?

Aleksander
30.07.2017
11:12:08
верно

Alexey
30.07.2017
11:12:10
для 20К строк

Admin
ERROR: S client not available

Aleksander
30.07.2017
11:12:16
Да

Alexey
30.07.2017
11:12:17
но это же антипатерн

Aleksander
30.07.2017
11:12:32
Я сделал это за 5 минут =)

Alexey
30.07.2017
11:12:36
потом CH захлебнется делать мержы
ну рекомендую потратить еще какое-то время и сделать так, чтоб одним инсертом вставлялось много строк
начни вот с этих 20K

Aleksander
30.07.2017
11:13:25
Ок, но есть же предел в пожирании памяти?
Он работал довольно быстро и так. Но ужирался памятью через полчаса и тормозил

Alexey
30.07.2017
11:14:33
в логах что-то было подозрительное?
придел какой-то есть
но 8г это конечно не тот объем под который заточены дефолт конфиги CH, как я понял

Aleksander
30.07.2017
11:16:12
Пока подозрительного ничего не видел. Но походу от моих перераспределений памяти, сдохла монга. И все сломалось =)
Ладно - пойду оптимизирую на батчи. И почитаю про настройки памяти в кх
@lexa_work а что необходимо для того, чтобы оно работало в батче? Просто передать n инсертов разделенных ;?

Alexey
30.07.2017
11:22:16
один инсерт с множеством VALUES

Google

Aleksander
30.07.2017
11:22:33
Понял, спс
@lexa_work побыстрее стало намного с батчем
вообще космос
спасибо

Alexey
30.07.2017
12:03:09
Это спасибо разработчикам за такую бомбу

Aleksander
30.07.2017
12:05:26
Ну, если бы ты не настоял, я бы 29 часов мигрировал бы думая, что и так сойдет
Сейчас скажу сколько мне сэкономило времени, как запущу

f1yegor
30.07.2017
12:08:35
в контексте баз данных. это
же не на один день

Aleksander
30.07.2017
12:09:45
Попробую изучить более детально, и если все-таки не смогу ничего сделать - еще раз напишу =)

f1yegor
30.07.2017
12:11:22
для скала я порекомендовал бы наш батчер https://github.com/crobox/clickhouse-scala-client, но на джава код может выглядеть достаточно коряво

Aleksander
30.07.2017
12:11:51
У меня майбатис. Он тоже умеет батчить =)
f1yegor я посмотрю, спасибо. У меня одно приложений на скале со спарком