
Константин
20.12.2017
07:01:42
не удается даже запустить сервер

Павел Максимов
20.12.2017
07:14:35

Kirill
20.12.2017
07:17:37
которая существует только на этой ноде?
Если она нереплицируемая то должно быть достаточно удалить файлы таблицы в /var/lib/clickhouse/data/ваша_схема/таблица и метаданные /var/lib/clickhouse/metadata/ваша_схема/таблица
По партициям можно тут https://github.com/yandex/ClickHouse/blob/master/docs/ru/table_engines/custom_partitioning_key.md

Google

Павел Максимов
20.12.2017
07:19:59

Max
20.12.2017
07:27:58
Коллеги, привет. Подскажите есть для кликхауса нечто подобное pgbouncer'у в postgres? чтобы ставить на паузу входящие запроса во время мейнтейнса. Или как это лучше организовать?

Kirill
20.12.2017
07:35:41
Есть chproxy, но, возможно, это не совсем то. Мы на время смены версий/альтеров и прочего просто отключаем запись в шард, после чего по одной машине апдейтим
https://github.com/Vertamedia/chproxy
А так у нас лоадбалансинг и фейловер, воркеры сами найдут рабочую машину, так что выключение не особо критично

LeiDruid
20.12.2017
07:38:04
Мы haproxy юзаем

Mykolai
20.12.2017
07:49:29
Привет. В документации сказано что "В таблицу, содержащую столбцы типа AggregateFunction невозможно вставить строчку обычным запросом INSERT". Я нашел вариант как сделать почти обычный INSERT. https://github.com/yandex/ClickHouse/issues/756
INSERT INTO agg_stats (event_date, company_id, clicks, views) VALUES ('2017-12-01', 1, arrayReduce('sumState', [toUInt32(234)]), arrayReduce('sumState', [toUInt32(1)]))
Насколько плохо таким способом постоянно из приложения писать в таблицу с полями AggregateFunction?

Vladimir
20.12.2017
07:56:03
Всем привет. Какие есть эффективные способы делать пагинацию? Ведь обычный limit с сортировкой не работает на больших объемах, фильтруя даже за день.

Константин
20.12.2017
08:02:33
скажите, detach partition - реплицируемая команда?

papa
20.12.2017
08:03:26

Vladimir
20.12.2017
08:07:52

papa
20.12.2017
08:08:39
до некоторых пределов она вполне работает, у нас люди пачками по 100к строк выкачивают достаточно длинные ответы
возможно зависит от конкретной ситуации.

Google

Vladimir
20.12.2017
08:10:50
Спасибо

Константин
20.12.2017
08:21:12
скажите, как из бавится от такой ошибки при копировании данных?
Memory limit (for query) exceeded: would use 9.40 GiB (attempt to allocate chunk of 134217728 bytes), maximum: 9.31 GiB.

papa
20.12.2017
08:22:21
строки тяжелые?

Константин
20.12.2017
08:25:13
много данных очень
таблица весит 145Гб
но я пытаюсь только за один месяц данные выбрать
может быть можно как-то скопировать партицию из одной таблицы в аналогичную?

Cargeh
20.12.2017
08:27:11
Константин если у вас не с group by проблема, а какой-то другой аггрегацией (sort, join, distinct), то можно почитать про настройки max_bytes_before_external...

Константин
20.12.2017
08:28:36
да, у меня груп бай используется

papa
20.12.2017
08:28:57
вы копируете данные с group by?

Vladimir
20.12.2017
08:37:37
А вот есть к примеру 146 миллионов агрегированных разных значений за день. Как мне можно вытащить их по 1000 на страницу? Кто-нибудь с таким сталкивался?

papa
20.12.2017
08:40:46
запрос с order by .. limit 1000 сколько работает?
и как у вас вообще group by с таким выходом отработал?

pavel
20.12.2017
08:55:29

Vladimir
20.12.2017
08:56:48

Kirill
20.12.2017
09:00:01

Vladimir
20.12.2017
09:02:26

Kirill
20.12.2017
09:03:24
Для реалтайма у нас суммирующие матвьюхи для последнего дня

Google

pavel
20.12.2017
09:16:00
Повторю вопрос.
Есть ReplicatedMergeTree таблица t1. Хосты A и B - на них её реплики.
Нужно сделать MV для t1.
Хотел просто создать MV на каждом хосте: думал INSERT INTO t1 на хосте A привезёт блок данных на B, а там сработает триггер и данные вставятся в тамошний MV. Выше сказали что так оно не работает. Хотя это не логично.
Пытаюсь понять логику.
Надо что, создать MV на движке ReplicatedMergeTree?
Тогда путь данных будетA:t1 -> B:t1 и параллельно A:MV -> B:MV ?
То есть B:MV никак не триггерится появлением данных в B:t1?
Т.е. происходит вот что:
1) insert into A:t1
2) trigger A:MV (данные льются в A:MV)
3) на хосте B сервер понимает что надо скачать кусок A:t1 -> B:t1
4) на хосте B сервер понимает что надо скачать кусок A:MV -> B:MV, никакого триггера на B не срабатывает?


Aleksey
20.12.2017
09:32:34
Подскажите, пожалуйста, какой статус у версии 1.1.54318?
Здесь она отмечена как релизная:
https://github.com/yandex/ClickHouse/blob/master/CHANGELOG.md
Но в чейнджлоге в ветке stable последний релиз - 1.1.54304
https://github.com/yandex/ClickHouse/blob/stable/CHANGELOG.md
Это просто чейнджлог в ветке не обновили?

Kirill
20.12.2017
09:34:10


Alexey
20.12.2017
09:34:49

Kirill
20.12.2017
09:35:02

Alexey
20.12.2017
09:35:19
если на B будет реплицированная MV, то в нее приедут данные из A:MV

pavel
20.12.2017
09:35:39

Alexey
20.12.2017
09:36:03
именно
я так тоже сначала не понимал

pavel
20.12.2017
09:40:40
А в ZooKeeper физически что хранится? Не сами же данные, а какие-то позиции реплика-логов или чего-то такого?
Я так понимаю просто перечисления блоков. Блоки сольются - инфа про старые блоки = фтопку, запишется инфа про новые.
Или запишется некая команда "слей такие-то блоки" и сервер B независимо сделает ту же операцию, не скачивая данных с A?

Alexey
20.12.2017
09:41:47
ну как я понимаю, зукипер физически реплицирует, а не логически
дальше не копал

pavel
20.12.2017
09:42:47
Немного оффтоп, а в чём фишка юзать именно ZooKeeper, почему не какой-нибудь другой простейший key=value? Запилили бы некий режим в clickhouse-server, который умеет key=value и юзали бы его в качестве зоокипера.

Aleksey
20.12.2017
09:42:57

Kirill
20.12.2017
09:45:01
Лучше переехать, но в 54318 обнаружены довольно серьёзные ошибки с репликацией (впрочем, кажется, они присутствуют и в 54310). Сейчас готовим фиксы.

Alexey
20.12.2017
09:46:44
Немного оффтоп, а в чём фишка юзать именно ZooKeeper, почему не какой-нибудь другой простейший key=value? Запилили бы некий режим в clickhouse-server, который умеет key=value и юзали бы его в качестве зоокипера.
запилите :) там же не просто переброска данных, реплики сами умеют понимать, что данных у них не хватают, сами подсасывают что надо, восстаналиваются... тут недавно гифка была, "сложно б..ть, сложно", вот ее сюда

Kirill
20.12.2017
09:48:03
Кстати да, @ztlpn что за проблемы с репликацией ? Просто мы как пару недель на 54318 и нас пока не зацепило, но т.к. скоро рождественские каникулы не очень хочется чтоб что-то внезапно накрылось )

pavel
20.12.2017
09:48:04
@Shegloff ну я так понимаю, каждая реплика просто раз в секунду долбится в zookeeper и говорит "давай новости". Тот ей список актуальных блоков. Реплика смотрит - оба, а вот этого блока у меня ещё нет, пойду стяну с других.

Alexey
20.12.2017
09:48:54
может быть оно так и есть, я не в курсе просто

Google

Alexey
20.12.2017
09:49:40
я когда не настроил автоочистку в зукипере, там были сотнит гигов, вряд ли это просто номера блоков

Anton
20.12.2017
09:53:24
Хм, а эти "проблемы" не приводят к "дублированию " и "потере" данных даже при переливке данных внутри КХ?
Мы уже третий день на крайней версии пытаемся понять куда исчезают данные
Причём количество потерь прямо пропорционально скорости вставки

Дмитрий
20.12.2017
09:56:07
А ваши потери в detached не падают случаем?

Anton
20.12.2017
09:57:20
Ну вот сейчас очередной раз экспериментируем со структурой таблицы посмотрим
у нас объём около 8 миллиардов строк, теряется от 10 миллионов до 50 тысяч
https://github.com/yandex/ClickHouse/issues/1504 я похоже тоже наблюдал

Alex
20.12.2017
09:58:16

Anton
20.12.2017
09:58:55
Похоже именно на это мы наткнулись
и сидим мы на 1.1.54318

Alex
20.12.2017
10:00:49
Фикс на этой неделе постараемся зарелизить (до каникул уж точно :))

Anton
20.12.2017
10:01:12

Kirill
20.12.2017
10:03:45
@ztlpn А почему так бывает? Есть какие-то условия чтоб не влететь на них ?

Alex
20.12.2017
10:06:53
Если ответ от ZK затупит, то может случиться. Обычный race condition.

Kirill
20.12.2017
10:08:41
Тогда странно что нас не заафектило, у нас редко, но бывают проблемы с ZK


Alex
20.12.2017
10:20:59
@Shegloff ну я так понимаю, каждая реплика просто раз в секунду долбится в zookeeper и говорит "давай новости". Тот ей список актуальных блоков. Реплика смотрит - оба, а вот этого блока у меня ещё нет, пойду стяну с других.
Примерно так и происходит. В ZooKeeper хранится информация о наборе кусков на репликах (собственно сами имена кусков и чексуммы, данные естественно не хранятся) и очередь заданий на репликацию вида "скачай новый кусок", "сделай мерж вот такого набора кусков", на которую подписываются реплики. Ситуация осложняется тем, что иногда выгоднее скачать сразу покрывающий кусок, а не маленький, и не мержить самому, а скачать готовый кусок с реплики (но не всегда). Поллинга там нет, так как в ZK есть механизм вотчей - можно подписываться на изменения по ключам и получать уведомления.
Почему именно ZK - это сторадж, который даёт сильные гарантии (http://zookeeper.apache.org/doc/current/zookeeperOver.html#Guarantees), необходимые для координации распределённых процесов. Например, какая-нибудь монга таких гарантий не предоставляет. Разумеется, ZK не один такой, просто он один из самых старых и battle-tested.


Alex
20.12.2017
10:22:00
я надеюсь вы запилите другие движки типа etcd/consul
тем более есть уже библиотеки типа libkv

Google

Alex
20.12.2017
10:23:38
просто для запуска в том же kubernetes ( где есть etcd уже по дефолту) станет сильно легче, а то сейчас надо городить кластер zookeeper сначала

Vsevolod
20.12.2017
10:23:52
ага, на го
хипсторы вообще долбанулись со своими странными языками
с этим невозможно жить

Alex
20.12.2017
10:25:08
а zookeeper на ява

Vladimir
20.12.2017
10:25:13

Alex
20.12.2017
10:25:36
вопрос не в технологии под капотом, а в том что etcd пилят постоянно и качество его растет

Alex
20.12.2017
10:25:37

Kirill
20.12.2017
10:26:15

Константин
20.12.2017
10:27:07
Скажите, такой вопрос: у нас сейчас стоит версия КХ - без возможности указания ключа партиционирования, если мы обновим все ноды, можно ли будет у существующих таблиц - сменить ключ партиционирования?

Kirill
20.12.2017
10:27:29

Alex
20.12.2017
10:35:01
тем более есть уже библиотеки типа libkv
Libkv на го, поэтому нам её будет сложно использовать :) Ну и когда используешь абстрактную обёртку над стораджами, к багам в стораджах добавляются баги в обёртке и становится в 2 раза веселее. К ZK у меня лично чуть больше доверия, достаточно сравнить https://aphyr.com/posts/291-call-me-maybe-zookeeper и https://aphyr.com/posts/316-call-me-maybe-etcd-and-consul, хотя сейчас наверняка большинство багов у них уже поправлено. В общем, какой сервис распределённой координации использовать это старый флейм и мы про него помним и помним, что не всем ZK удобен.

Alex
20.12.2017
10:36:13
я понимаю что это процесс долгий, но вдруг вы потихоньку подпиливаете внутренние интерфейсы в сторону их унификации чтоб потом можно было поменять storage
по крайней мере без zoo шаблоны для быстрого развертывания в кластерах станут сильно проще


Rudenko
20.12.2017
11:11:06
Добрый день , есть забавная задача.
Вот сама таблица
CREATE TABLE IF NOT EXISTS trade_history (
EventDate Date,
Timestamp UInt64,
Exchange String,
Pair1 String,
Pair2 String,
Price Float64,
Amount Float64,
Time DateTime
) ENGINE = MergeTree(EventDate, (Exchange, Timestamp, Pair1, Pair2, Price, Amount, Time), 8192);
К ней есть запрос типа
SELECT
MAX(Price), MIN(Price), SUM(Amount), Pair1, Pair2
FROM
trade_history
WHERE
(EventDate >= '2017-11-23' AND EventDate <= '2017-11-30')
AND
(Timestamp >= 1511447283790628020 AND Timestamp <= 1512052083790628020)
GROUP BY toStartOfHour(Time), Pair1, Pair2
Вопрос как получить первый Price и последний Price к каждой группе toStartOfHour(Time), Pair1, Pair2
Надо построить график OHLCV(Японские свечи).
Для этого надо 5 параметров
O - Open(Первый Price в временном промежутке)
H - High(Самый высокий Price за весь промежуток)
L - Low (Самый низкий Price за временной промежуток)
C - Close (Последний Price за временной промежуток)
V - Volume (Сума всех Amount)
Хотелось бы сделать все в один запрос чтоб не гонять дата сет в 1.5 ккк записей.


Vladimir
20.12.2017
11:14:56
Первую можно как-то так: where rowNumberInAllBlocks() = 1 order by time
Добрый день , есть забавная задача.
Вот сама таблица
CREATE TABLE IF NOT EXISTS trade_history (
EventDate Date,
Timestamp UInt64,
Exchange String,
Pair1 String,
Pair2 String,
Price Float64,
Amount Float64,
Time DateTime
) ENGINE = MergeTree(EventDate, (Exchange, Timestamp, Pair1, Pair2, Price, Amount, Time), 8192);
К ней есть запрос типа
SELECT
MAX(Price), MIN(Price), SUM(Amount), Pair1, Pair2
FROM
trade_history
WHERE
(EventDate >= '2017-11-23' AND EventDate <= '2017-11-30')
AND
(Timestamp >= 1511447283790628020 AND Timestamp <= 1512052083790628020)
GROUP BY toStartOfHour(Time), Pair1, Pair2
Вопрос как получить первый Price и последний Price к каждой группе toStartOfHour(Time), Pair1, Pair2
Надо построить график OHLCV(Японские свечи).
Для этого надо 5 параметров
O - Open(Первый Price в временном промежутке)
H - High(Самый высокий Price за весь промежуток)
L - Low (Самый низкий Price за временной промежуток)
C - Close (Последний Price за временной промежуток)
V - Volume (Сума всех Amount)
Хотелось бы сделать все в один запрос чтоб не гонять дата сет в 1.5 ккк записей.
А ещё вот эту функцию посмотрите: https://clickhouse.yandex/docs/ru/single/#argmax-arg-val