
Alexander
30.03.2018
11:24:53
в доках написано, что запросы типа ALTER TABLE ATTACH реплицируются

Anton
30.03.2018
11:25:24
А данные в detach являлись результатом предыдущей репликации?

Wolf
30.03.2018
11:25:35
а как они у вас могут быть разными ?

Alexander
30.03.2018
11:27:05
нет, это были данные из ранее не реплицируемой таблицы

Google

Anton
30.03.2018
11:27:28
А, понятно

Alexander
30.03.2018
11:28:49
чуть позже проверю свои докадки на другой таблице

Dima
30.03.2018
12:05:47
Привет
После обновления до 54370 возникла проблема. При подобном запросе:
SELECT uniq(session_id), field
FROM table
WHERE date = today()-1
AND (session_id, timestamp) in (SELECT session_id, timestmp FROM table)
AND field = 0
GROUP BY field
Выводит ноль строк, при том, что без "AND field=0" есть в выводе строки с field = 0.
Кто подскажет как пофиксить без костылей в запросе?

Tima
30.03.2018
12:23:46

Dima
30.03.2018
12:26:12

Tima
30.03.2018
12:26:39
Что такое одинарная вставка?

Dima
30.03.2018
12:27:19
Я имел ввиду фильтр по одному значению, а не по паре значений. Неправильно выразился.

Vasilij
30.03.2018
12:34:35
Вставил в ReplicatedMergeTree таблицу небольшую пачку записей (500), с использованием кворума, данные сразу оказались на двух других репликах. Потом вручную из клиента одной из реплик удалил партицию с ними (без использования кворума, и без изменения дефолтного replication_alter_partitions_sync), таблица стала пустой. Проверил - на остальных репликах ALTER ... DROP PARTITION ... доехал и отработал. Однако, при попыте чтения из этой, первой, реплики (c select_sequential_consistency=1), кидается исключение:
Replica doesn't have part .... which was successfully written to other replicas. Send query to another replica or disable 'select_sequential_consistency'
Не знает ли кто, где я налажал, и как лечить такое? Помогло в итоге только дропнуть всю таблицу и создать заново, но что было бы, если бы она была не пуста?

Tima
30.03.2018
12:37:02

Dima
30.03.2018
12:38:04

Kirill
30.03.2018
12:38:12

Tima
30.03.2018
12:41:13

Google

Tima
30.03.2018
12:42:41


Dima
30.03.2018
12:46:18
вот воспроизведение баги
CREATE TABLE trololo
(
date Date,
timestamp DateTime,
a String,
b Int32
)
ENGINE = MergeTree(date, (date, timestamp), 8192);
INSERT INTO trololo VALUES
('2018-03-28', '2018-03-28 18:09:31', '5ee21b937bd45fb31', 1);
SELECT *
FROM trololo
WHERE (a, timestamp) IN
(
SELECT
a,
timestamp
FROM trololo
)
┌───────date─┬───────────timestamp─┬─a─────────────────┬─b─┐
│ 2018-03-28 │ 2018-03-28 18:09:31 │ 5ee21b937bd45fb31 │ 1 │
└────────────┴─────────────────────┴───────────────────┴───┘
1 rows in set. Elapsed: 0.005 sec.
SELECT *
FROM trololo
WHERE ((a, timestamp) IN
(
SELECT
a,
timestamp
FROM trololo
)) AND (b = 1)
Ok.
0 rows in set. Elapsed: 0.006 sec.
Окей, спасибо

Konstantin
30.03.2018
13:01:36
Окей, спасибо
а на какой версии у вас этот запрос работал нормально?

Dima
30.03.2018
13:02:54
54245

Denis
30.03.2018
13:03:41
Явная бага и в 1.1.54371 тоже
workaround
SELECT *
FROM trololo
WHERE concat(a, toString(timestamp)) IN
(
SELECT concat(a, toString(timestamp))
FROM trololo
)
причем проблема на TinyLog не воспроизводится, наверное только с *MergeTree из-за новой функциональности in (select) умеет использовать индекс.
добавил https://github.com/yandex/ClickHouse/issues/2147

Konstantin
30.03.2018
13:09:33
54245
на 54362 такое же поведение

Kirill
30.03.2018
14:29:05
"Пятничное" вдруг кому-нибудь интересно https://www.youtube.com/watch?v=2SUBRE6wGiA&list=PLSE8ODhjZXjY0GMWN4X8FIkYNfiu8_Wl9 , а так в CMU Database Group вообще очень много полезного

Vyacheslav
30.03.2018
14:33:58
influx не работоспособен в принципе
он просто гробит данные, не выполняет правильно запросы
не надо его вообще трогать, он говно

Kirill
30.03.2018
14:37:12
Ну, у нас InfluxDB работает достаточно неплохо, не в этом суть, там совсем о другом

Vyacheslav
30.03.2018
14:38:08
у меня все работает (с) типичный программист
а у меня через полгода инфлюкс падает и не стартует. часть данных при этом оказывается проебана (после того как с помощью какой-то матери его все же удается запустить)

Андрей Михайлович
30.03.2018
14:43:36
Господа, как можно в нашем обществе столь крепко выражаться? Извольте сдерживаться, сударь!

Pavel Tyavin
30.03.2018
14:54:00

Roman
30.03.2018
14:54:24
Подскажите как сделать перешардирование с добавлением нового шарда!

Mike
30.03.2018
15:20:28

Kirill
30.03.2018
15:37:25

Google

Vyacheslav
30.03.2018
15:39:50
кликхаус, это кажется очевидно

sha-bang
30.03.2018
16:52:50
Приветстую
Не подскажете где можно взять rpm zookeeper версии 3.4.11?
под Centos7

Alexey
30.03.2018
17:07:13
есть подвижки?
По EXPLAIN/ANALYZE никаких подвижек, делаем другие задачи.

Alexander
30.03.2018
18:07:47

sha-bang
30.03.2018
18:08:12
чтобы одинаковые версии были

Wolf
30.03.2018
18:08:33
Ну логично было бы поднимать их на одной оси

sha-bang
30.03.2018
18:09:01
я тут нашел вроде инструкцию https://github.com/skottler/zookeeper-rpms
буду пробовать

Wolf
30.03.2018
18:09:47
ну суппортить свои пакеты очень геморно, на одних серверах само обновится, на других надо самому собирать

Alexander
30.03.2018
18:11:16
rpm репозиториев с 3.4.11 не встречал, везде 3.4.6 и ниже
попробуйте сами собрать, или поискать готовый rpm

sha-bang
30.03.2018
18:19:30
оГа, хорошо. Спасибо

Dmitriy
30.03.2018
18:22:30
Подскажите, пожалуйста, где можно смотреть change log’и по версиям CH

prll
30.03.2018
18:27:18
https://github.com/yandex/ClickHouse/blob/master/CHANGELOG_RU.md

Dmitriy
30.03.2018
18:28:30
Благодарю:)

?
30.03.2018
18:40:02
подскажите бест практики в такой ситуации:
есть что-то типа своей метрики/логов, где пишется подобное:
IP, UserID (хеш от IP+UserAgent+пары параметров), ViewID - уникален для каждого нового запроса (просмотра страницы)
пример таблицы
127.0.0.1 | 123 | 546546
127.0.0.1 | 123 | 678678
127.0.0.1 | 123 | 890890
127.0.0.2 | 234 | 112112
127.0.0.2 | 234 | 333444
127.0.0.2 | 345 | 999777 (другой пользователь с того же IP)
127.0.0.2 | 345 | 888333
мне надо считать различную статистику причем как по ип, так и по пользователям и по просмотрам.
возможно ли обойтись как-то движком MergeTree? или лучше другой движок?
как вообще с этим лучше всего работать? есть что дополнительно почитать?

Andrey
30.03.2018
18:44:25

Google

Wolf
30.03.2018
18:46:32
дату еще добавить и будет ок )

?
30.03.2018
18:50:12
ну вот если мне нужно выбрать UserAgent только по уникальным UserID это как будет выглядеть?

Wolf
30.03.2018
18:54:38
Так у них наверно юзерагент одинаковый чем гроуп бай не устраивает?

strange
30.03.2018
18:56:33
Так-то да

?
30.03.2018
18:59:02
щас попробую тестовые запросы погонять, спасибо

Vasiliy
30.03.2018
20:19:31
Всем доброй ночи )
CREATE MATERIALIZED VIEW requests_graph
ENGINE = MergeTree(request_date, (request_time, request_uri), 8192)
AS SELECT
request_date,
toStartOfHour(request_time) as request_time,
request_uri,
AVG(response_time) AS average_response_time,
MIN(response_time) AS min_response_time,
MAX(response_time) AS max_response_time,
COUNT(*) as request_count
FROM requests
GROUP BY request_uri, request_time, request_date;
Почему при вставке в requests, SELECT * FROM requests_graph показывает вовсе не AVG/MIN/MAX а одинаковые response_time?
Причем requests_graph должен сильно компактным получиться с объединением по часам, вроде как
Но если посмотреть на его размер - он вдвое больше requests o_O
Или подождать, он потом когда-нибудь домержит? )

Denis
30.03.2018
20:42:59
Всем доброй ночи )
ОК. У нас обед.
По моему вам надо использовать AggregatingMergeTree
В вашем варианте новая строка вставляется в MV на каждый инсерт(новую строку) в requests.

Vasiliy
30.03.2018
20:45:42
Пробую, с AggregatingMergeTree точно так же
Понятно, что SELECT из такой MV должен быть с группировкой тоже, чтоб домержил, но смущает то что у него размер большой и пока не показывал смерженный результат с обычным SELECT
OPTIMIZE тоже не меняет поведения

Denis
30.03.2018
21:04:54
AggregatingMergeTree ....выполняет объединение состояний агрегатных функций, хранимых в таблице, для строчек с одинаковым значением первичного ключа.
т.е. как минимум ключ должен быть toStartOfHour.... AggregatingMergeTree(request_date, ( request_date, toStartOfHour(request_time), request_uri)

Alex
30.03.2018
21:07:01
Вам в AggregatingMergeTree нужно хранить не результаты агрегатных функций, а их состояния. То есть например не avg(response_time), а avgState(response_time). И доагрегировать с помощью avgMerge(state).
Ну и первичный ключ правильно подобрать, как выше советуют.

Denis
30.03.2018
21:08:49
кстати хороший пример (очень понятный, по крайней мере мне), надо его запилить и добавить в документацию

Google

Vasiliy
30.03.2018
21:09:14
request_time там есть в ключах, с этим все хорошо ) я понял почему не работал SELECT
как только загрузил реальные данные, в миллион строк все стало мержиться и аггрегироваться )

Denis
30.03.2018
21:10:36
про ключ request_time != toStartOfHour(request_time)

Vasiliy
30.03.2018
21:10:59
toStartOfHour(request_time) AS request_time
там вот так же )

Denis
30.03.2018
22:03:55
а ну как-то так должно быть gist.github.com/den-crane/6eff375752a236a456e1b3dc2ca7db62

Alexey
31.03.2018
13:47:26
Коллеги, что-то потерялся я...
Как по документации понять, где определяются те или иные параметры/конфиги и можно ли их устанавливать налету глобально для всего сервера
интересуют параметры вроде
input_format_allow_errors_num

Petr
31.03.2018
18:23:12
Привет, а select ы тоже как и insert лучше пачками делать или по одному нормально?

Alex
31.03.2018
18:24:39
селекты пачками? это как?

Petr
31.03.2018
18:29:57
ну да не пачками, массивом или по одному

Wolf
31.03.2018
18:31:57
Это сомнительно

Daniel
31.03.2018
18:39:23
Кстати Wolf изучали ли роли нод Observers в Zookeeper? Подходят ли они как-то к использованию с CH?

Wolf
31.03.2018
18:41:53
Ещё нет, выше писали что вроде как да