
Nataliya
21.03.2017
17:23:41
Планируем чуть позже.

Dig
21.03.2017
17:24:11
Спасибо.
Будем ждать?

Vitaliy
21.03.2017
17:38:44

Google

Nataliya
21.03.2017
18:44:55
Поможете с анонсированием? :)
в Киеве

Andrey
21.03.2017
18:46:25
Мы поможем)

Nataliya
21.03.2017
19:00:22
Здорово. Собираем чемоданы :)

Denys
21.03.2017
20:47:40
Отлично, Харьков уже спит на чемоданах)

Vitaliy
21.03.2017
22:03:08
Давайте в Харькове

Andrey
21.03.2017
22:19:58
Подскажите, а MATERIALIZED VIEW на движке AggregatingMergeTree содержит аггрегированные данные сразу после insert в таблицу на которую смотрит, или должно пройти какое то время?

Alexander
21.03.2017
22:55:57
По идее -- сразу. Операция атомарная с insert.

Andrey
21.03.2017
23:07:22
Я чет если много данных заливаю сразу, результаты не сходятся.

Konstantin
22.03.2017
01:09:21

Dmitriy
22.03.2017
07:57:56

Vladislav
22.03.2017
08:12:13
А в СПб?)

Dmitry
22.03.2017
08:13:35

Google

Andrey
22.03.2017
08:20:48
Ну т.е. я делаю запрос с count и group by в таблицу сырых данных, а потом доагрегирующий запрос в view агрегатов. И данные не сходятся.
Причем это как то зависит от обьема. Когда мало данных заливаю, все ок.

Nikita
22.03.2017
10:17:26
если иногда (совсем редко) хочется вытаскивать данные с пагинацией сортированные, скажем по дате-времени (больше чем одна запись в секунду), то какие варианты есть получить детерминированные результаты? в голову ничего не приходит, кроме как добавить еще одно поле-счетчик для всех строк.

Eugene
22.03.2017
10:55:11
Подскажите, какие есть варианты импорта данных из сишных скриптов ? Виндовая платформа, си обычный, не шарп.

Andrey
22.03.2017
10:58:41
выхлоп в TSV и импорт через клиент. А вообще зависит от данных.

Igor
22.03.2017
11:01:28

Eugene
22.03.2017
11:02:27

Andrey
22.03.2017
11:03:41
от языка то не особо зависит. Если только вы не планируете в КХ класть прямо готовые партиции в его формате

Eugene
22.03.2017
11:06:03

Pavel
22.03.2017
11:41:44
@ewgeniyk такое есть и для С++ и для го
в чем проблема?
и что такое сишные скрипты?

Eugene
22.03.2017
11:48:51
и что такое сишные скрипты?
есть программный комплекс, написанный на си, в котором есть модуль, оперирующий массивом данных, которые надо записать в ClickHouse

Pavel
22.03.2017
11:49:21
https://github.com/artpaul/clickhouse-cpp ?

Eugene
22.03.2017
11:49:24
в чем проблема?
Проблема в том, что я не знаю этого решения и поэтому спросил у того кто а) его знает и б) может на него навести

Pavel
22.03.2017
11:49:51
но это С++
CH написан на нем и я не уверен, что стоит ожидать версии на чистом С от авторов (исправьте, если я не прав)

Google

Vladislav
22.03.2017
13:27:07
привет. а данные между репликами сразу переливаются? переезжаем из одного сервера кликхауса в кластер, сделали 3 шарда по 2 реплики (связь 1-2, 3-4, 5-6). создал везде таблицы test, на 1-м сервере distributed-таблицу. вставил по одной строке в 1, 2, 3 ноды. теперь при селекте вижу то 1 запись, то 2. получается, что между 3-й и 4-й нодами данные не перелились?

Igor
22.03.2017
13:27:18
не сразу
Вот ещё - репликация асинхронная мульти-мастер, то есть на реплике может не быть свежих данных.

Vladislav
22.03.2017
13:29:03
спасибо. а как в таком случае добиться селекта свежих данных из distributed-таблицы?

Igor
22.03.2017
13:37:20
никак, полагаю
делать селект не из distributed таблицы, а из mergetree (или какой там) таблицы на сервере, на который инсертятся данные

Vladislav
22.03.2017
13:38:48
ясно, спасибо.

Alex
22.03.2017
13:42:43
Сейчас можно мониторить отставание реплик, например получая информацию из http://localhost:8123/replicas_status?verbose=1
Если у вас одна строчка долго реплицируется, возможно что-то не в порядке с конфигурацией
В будущем планируем сделать отстреливание сильно отстающих реплик

Andrey
22.03.2017
13:48:08
Всем добрый день.
Спрошу повторно, может кто подскажет.
Создаю таблицу, и MATERIALIZED VIEW с движком AggregatingMergeTree следящее за ней.
Заливаю данные.
Делаю селект из вьюхи с доагрегацией и селект из таблицы сырых данных. Результаты агрегатов не сходятся. Причем если залить данных не много, то все ок.
В какую сторону смотреть?

Vladislav
22.03.2017
13:50:58
около 5 минут ждал пока не долилось. конфиг похож на тот, который в документации, только добавлен еще 1 шард.
Если у вас одна строчка долго реплицируется, возможно что-то не в порядке с конфигурацией

Alex
22.03.2017
13:52:12
А в логах есть какие-нибудь ошибки?

Alexander
22.03.2017
13:57:04


Andrey
22.03.2017
13:57:49
Не знаю как телеграм отнесется к форматированию. Но попробуем)
/*
Создаем таблицу
*/
CREATE TABLE events
(
user_id Int64,
event_id Int64,
event_date Date
)
ENGINE = MergeTree(event_date, (user_id), 8192);
/*
Создаем MATERIALIZED VIEW следящее за таблицей events
*/
CREATE MATERIALIZED VIEW events_agg
ENGINE = AggregatingMergeTree(event_date, (event_id, user_id), 8192)
AS SELECT
event_date,
event_id,
user_id,
countState(event_id) AS count_of_events
FROM events
GROUP BY event_id, user_id, event_date;
Заливаю данные
Затем 2 запроса для сверки
/*
Делаем выборку из таблцы сырых данных.
я получаю результат:
┌─event_date─┬─event_id─┬─user_id─┬─count(event_id)─┐
│ 2016-02-09 │ 3402641 │ 2136 │ 7 │
└────────────┴──────────┴─────────┴─────────────────┘
*/
SELECT
event_date,
event_id,
user_id,
count(event_id)
FROM events
where event_id = 3402641 and event_date = '2016-02-09' and user_id = 2136
GROUP BY event_id, user_id, event_date;

Google

Andrey
22.03.2017
13:58:46
/*
Делаем выборку из VIEW с аггрегатами
0 rows in set. Elapsed: 0.004 sec. Processed 24.58 thousand rows, 1.02 MB (5.66 million rows/s., 234.94 MB/s.)
*/
SELECT
event_date,
event_id,
user_id,
countMerge(count_of_events)
FROM events_agg
where event_id = 3402641 and event_date = '2016-02-09' and user_id = 2136
GROUP BY event_id, user_id, event_date;

Alexander
22.03.2017
14:19:01
ENGINE = MergeTree(event_date, (user_id), 8192);
event_id не потерялся?
Но вообще-то странно выглядит. Такой именно сценарий мы не пробовали, но SummingMergeTree работает без нареканий

evervoid
22.03.2017
14:28:55
Всем привет.
Пытаемся вставить достаточно большую пачку в кликхаус, через http. Ругается ошибкой:
Code: 36, e.displayText() = DB::Exception: Element of set in IN or VALUES is not a constant expression: toDate, e.what() = DB::Exception
В каком случае это может быть?

Andrey
22.03.2017
14:30:07

Fike
22.03.2017
14:30:24
это не та же проблема?
Так и есть. Обычно INSERT предназначен для вставки готовых данных в заданном формате и не умеет выполнять выражения (такие как toDate(now()) или то же самое - today()). В качестве исключения, возможность выполнять выражения, была добавлена в формат Values. Но эта возможность добавлена в очень ограниченном виде. Во-первых, производительность вставки будет очень низкой. Во-вторых, она работает в пределах размера данных, помещающихся в буфер (~1 МБ), и в случае большего размера, выдаётся недостаточно хорошая диагностика - именно это вы наблюдаете.
Поэтому я предлагаю всё-таки указывать конкретное значение даты в виде '2017-03-19'.

evervoid
22.03.2017
14:31:59
Понятно, спасибо.

Fike
22.03.2017
14:32:46
Если что, это прямо из этого же чата сообщение - можно поиском найти, я помню, что там была более обширная дискуссия

evervoid
22.03.2017
14:35:02
Вообще, мы пытаемся вставить toDate от таймстемпа, а можно ли вообще не делать этого преобразования, а сразу таймстемп вставлять в Date поле?

Alexey
22.03.2017
14:37:15
Надо объявить в таблице примерно так: date Date DEFAULT toDate(timestamp)
и затем при INSERT в списке полей INSERT INTO t (c1, c2, ...) VALUES не указывать этот столбец. Тогда для него значение будет вычисляться при вставке само.

evervoid
22.03.2017
14:42:48
Спасибо!

Oleg
22.03.2017
14:46:23
Подскажите, пожалуйста, подобное поведение ch с Date и DateTime норма, или будет меняться?
При вставке значений '1970-01-01' и '1970-01-01 00:00:00' соответственно, ch их в селектах выдаёт как '0000-00-00' и '0000-00-00 00:00:00', а самое противное, их же функция max() выдаёт.


Igor
22.03.2017
14:52:01
Подскажите, пожалуйста, подобное поведение ch с Date и DateTime норма, или будет меняться?
При вставке значений '1970-01-01' и '1970-01-01 00:00:00' соответственно, ch их в селектах выдаёт как '0000-00-00' и '0000-00-00 00:00:00', а самое противное, их же функция max() выдаёт.
в доке описано в т.ч. то, что может поменяться
> Date представлены как UInt16, содержащий количество дней, прошедших с 1970-01-01 в качестве значения.
> Позволяет хранить значения от чуть больше, чем начала unix-эпохи до верхнего порога, определяющегося константой на этапе компиляции (сейчас - до 2038 года, но может быть расширено до 2106 года).
> DateTime представлены как UInt32, содержащий unix timestamp в качестве значения.


Oleg
22.03.2017
15:05:57
спасибо, на слова "чуть больше" я внимания не обратил :) Посмотрел: 1970-01-02 нормально сохраняется, 1970-01-01 03:00:01 тоже. В общем, получается что при импорте в ch надо даты править принудительно, если в старой базе они нелевые были
+3 видимо питерский часовой пояс

Sergey
22.03.2017
16:06:27
Как заставить ReplacingMergeTree схлопывать данные?

Igor
22.03.2017
16:10:51
они сами схлопываются, если хочется именно заставить - можно прогнать OPTIMIZE
или сделать запрос с FINAL (будет очень медленно выполняться)

Google

Sergey
22.03.2017
16:14:35

Igor
22.03.2017
16:16:07
> ReplacingMergeTree
> Слияние происходят в фоне, в неизвестный момент времени, на который вы не можете ориентироваться.
> Некоторая часть данных может так и остаться необработанной. Хотя вы можете вызвать внеочередное слияние с помощью запроса OPTIMIZE, на это не стоит рассчитывать, так как запрос OPTIMIZE приводит к чтению и записи большого объёма данных.
> Таким образом, ReplacingMergeTree подходит для фоновой чистки дублирующихся данных в целях экономии места, но не даёт гарантий отсутствия дубликатов.

prll
22.03.2017
16:49:43

Andrey
22.03.2017
19:16:29

Vitaliy
22.03.2017
21:57:23
Пробовали ли этот алгоритм вместо siphash https://github.com/Cyan4973/xxHash ?

Alexey
22.03.2017
23:22:56
SipHash является криптографической хэш-функцией, а xxHash - нет. Таким образом, сравнение некорректно. xxHash относится к тому же классу, что и, например, CityHash, и его производительность примерно в 10 раз выше, чем SipHash.

Sergey
23.03.2017
07:48:39


Dmitriy
23.03.2017
08:15:38
сегодня наблюдал картину. очень слабый сервер 1ГБ рам и 1 Ядро
при инсерте данных, данных исертятся через интернет. в пике видел 112Мбит.
СH падает вот с таким сообщением.
2017.03.23 04:06:57.542078 [ 24 ] <Debug> default.events_jan_tv11 (Data): Removing part 20170201_20170201_8592_8592_0
2017.03.23 04:06:57.561428 [ 24 ] <Debug> default.events_jan_tv11 (Data): Removing part 20170201_20170201_8594_8594_0
2017.03.23 04:07:48.955882 [ 15 ] <Trace> TCPConnectionFactory: TCP Request. Address: :39883
2017.03.23 04:07:48.955958 [ 15 ] <Debug> TCPHandler: Connected ClickHouse client version 1.1.54164, user: default.
2017.03.23 04:07:49.808577 [ 15 ] <Debug> executeQuery: (from:39883) INSERT INTO default.events_jan_tv11 format Native
2017.03.23 04:07:54.361222 [ 15 ] <Trace> default.events_jan_tv11 (Data): Renaming tmp_20170202_20170202_8609_8609_0.
2017.03.23 04:07:57.157735 [ 15 ] <Trace> default.events_jan_tv11 (Data): Renaming tmp_20170202_20170202_8611_8611_0.
2017.03.23 04:07:59.579247 [ 15 ] <Trace> default.events_jan_tv11 (Data): Renaming tmp_20170202_20170202_8613_8613_0.
Killed
запускал прямо из консили. Притензий не имею, добавим РАМа и посмотрим что будет. Это наверное следует рассматривать как информацию о том как посупать не нужно


Andrey
23.03.2017
08:16:33
ООМ Killer пришел?

Виктор
23.03.2017
08:17:06
Видимо да
При желании можно выставить ограничения по памяти, в том числе и менее 1 gb
Тогда падать не должен

Vladimir
23.03.2017
08:17:55


Dmitriy
23.03.2017
08:18:52
root@qsg:/etc/clickhouse-server# dmesg -T
[Tue Mar 21 15:36:02 2017] Out of memory in UB 10599: OOM killed process 521 (clickhouse-serv) score 0 vm:2111360kB, rss:1025832kB, swap:456676kB
[Thu Mar 23 03:54:15 2017] Out of memory in UB 10599: OOM killed process 22388 (clickhouse-serv) score 0 vm:1519488kB, rss:512880kB, swap:514324kB
[Thu Mar 23 04:16:43 2017] Out of memory in UB 10599: OOM killed process 22706 (clickhouse-serv) score 0 vm:1557376kB, rss:505656kB, swap:501556kB