
Michael
21.09.2018
13:36:12
Не, у меня пока задача все это по tcp собирать через прокладку
Я так понимаю по 9000 порту

Alexey
21.09.2018
13:37:05
Мы писали свое API на Go которое обращается к ClickHouse через TCP 9000

Kirill
21.09.2018
13:37:45

Google

Alexey
21.09.2018
13:38:05
8123 http

Kirill
21.09.2018
13:38:33

Michael
21.09.2018
13:39:42

Kirill
21.09.2018
13:42:06
КХ слушает нужный вам интерфейс?

Michael
21.09.2018
13:43:01

Kirill
21.09.2018
13:43:07
Ага

Иван
21.09.2018
13:43:28

Michael
21.09.2018
13:44:07
Ага
И config.xml я не трогаю вообще?

Kirill
21.09.2018
13:45:52
<listen_host>::</listen_host> - слушать все интерфейсы

Michael
21.09.2018
13:50:26

Google

Michael
21.09.2018
13:50:41
Получается, что все же надо вернуть привязку к адресу?
Да, вернул, все заработало. Всем большое спасибо)

Konstantin
21.09.2018
14:34:38
подскажите, как коректно выполнить JOIN локальной и распределенной таблиц?
или это не реализуемо?

Mikhail
21.09.2018
15:31:55
Привет. Движок SummingMergeTree суммирует значения только внутри партиций? Final эквивалентен group by с суммой или не совсем?

Kirill
21.09.2018
16:47:01

Konstantin
21.09.2018
16:47:48

Kirill
21.09.2018
16:47:58

Konstantin
21.09.2018
16:50:35
Просто делаете JOIN, а что у вас не получается?
Received exception from server (version 18.12.14):
Code: 60. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Received from 172.18.0.3:9000. DB::Exception: Table default.test doesn't exist
таблица default.test лежит на 1 ноде с которой выполняется запрос


Denis
21.09.2018
16:51:36
Received exception from server (version 18.12.14):
Code: 60. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Received from 172.18.0.3:9000. DB::Exception: Table default.test doesn't exist
таблица default.test лежит на 1 ноде с которой выполняется запрос
просто еще надо скобки ( )
на двух нодах
CREATE TABLE tableX_ ( id Int64, a Int64 )
ENGINE = ReplicatedMergeTree ('/clickhouse/{cluster}/tables/{shard}/tableX_','{replica}') PARTITION BY tuple() order by tuple();
CREATE TABLE tableX as tableX_ ENGINE = Distributed (segmented_mirrored,currentDatabase(),'tableX_',rand ());
на первой insert into tableX_ values(1,1);
на второй insert into tableX_ values(2,2);
на первой
CREATE TABLE tableA ( id Int64, a Int64 ) ENGINE=MergeTree PARTITION BY tuple() order by tuple();
insert into tableA values(1,1);
insert into tableA values(2,2);
select a from (select a,id from tableX) all inner join (select a,id from tableA) using id
┌─a─┐
│ 1 │
└───┘
┌─a─┐
│ 2 │
└───┘


Евгений
21.09.2018
17:07:42
Добрый день!
Товарищи, подскажите, пожалуйста: как взаимодействует Zookeeper с Clickhouse в плане передачи данных от одной реплики к другой?
Например: в шарде две реплики: А1 и А2
На А1 стоит один zookeeper Z
Данные запихиваются в А1
Правильно ли я понимаю, что пачка данных прилетает в A1, она же (в исходном виде) летит в Z, а затем А2 её с Z в том же исходном виде забирает? Или сами данные не передаются и А2 забирает с А1 напрямую, при этом Z (Zookeeper) только контролирует репликацию

Wolf
21.09.2018
17:08:20
только контролирует , данные тянутся напрямую прямо в виде файлов
вероятно даже по хттп

Konstantin
21.09.2018
17:09:11
просто еще надо скобки ( )
на двух нодах
CREATE TABLE tableX_ ( id Int64, a Int64 )
ENGINE = ReplicatedMergeTree ('/clickhouse/{cluster}/tables/{shard}/tableX_','{replica}') PARTITION BY tuple() order by tuple();
CREATE TABLE tableX as tableX_ ENGINE = Distributed (segmented_mirrored,currentDatabase(),'tableX_',rand ());
на первой insert into tableX_ values(1,1);
на второй insert into tableX_ values(2,2);
на первой
CREATE TABLE tableA ( id Int64, a Int64 ) ENGINE=MergeTree PARTITION BY tuple() order by tuple();
insert into tableA values(1,1);
insert into tableA values(2,2);
select a from (select a,id from tableX) all inner join (select a,id from tableA) using id
┌─a─┐
│ 1 │
└───┘
┌─a─┐
│ 2 │
└───┘
спасибо, попробовал c USING - работает, не работает для конструкции вида:
select A from table_a_distrib ta ANY LEFT JOIN table_b_local tb ON ta.id = tb.id

papa
21.09.2018
17:09:46

Евгений
21.09.2018
17:10:32

Denis
21.09.2018
17:12:06
спасибо, попробовал c USING - работает, не работает для конструкции вида:
select A from table_a_distrib ta ANY LEFT JOIN table_b_local tb ON ta.id = tb.id
это другая проблема
select a,id, X_a, X_id from (select a X_a ,id X_id from tableX) ANY LEFT JOIN tableA t ON X_id = t.id
┌─a─┬─id─┬─X_a─┬─X_id─┐
│ 1 │ 1 │ 1 │ 1 │
└───┴────┴─────┴──────┘
┌─a─┬─id─┬─X_a─┬─X_id─┐
│ 2 │ 2 │ 2 │ 2 │
└───┴────┴─────┴──────┘
но на самом деле, так делать нельзя, мы левую таблицу качаем на локальную ноду, это убийство на проде,по уму надо наоборот, правую засылать на все и там джойнить.

Ivan
21.09.2018
17:20:37

Евгений
21.09.2018
17:28:08
Спасибо большое всем за ответы!

Google

Tatiana
21.09.2018
17:40:23

Wolf
21.09.2018
17:47:17

G
21.09.2018
17:50:34
Посоветуетй плиз как лучше дропнуть данные в таблице в CH 1.1.54385?
В кластере

Wolf
21.09.2018
17:50:52
drop table
create table
on cluster

G
21.09.2018
17:51:53
Так, чето я спутал. TRUNCATE нет

Wolf
21.09.2018
17:52:48
дроп криэйт отлично работает он кластер

G
21.09.2018
17:53:08
Ок спасибо

Vitaliy
21.09.2018
17:55:16
народ, подскажите как можно откусить субдомен в домена?
пример: zoe.ns.cloudflare.com -> ns.cloudflare.com

Саша
21.09.2018
18:30:19

Vitaliy
21.09.2018
18:43:18
я уже впилил регексп....

Vitaly
22.09.2018
08:44:46
привет!
а почему вот это запрос ищет по всей таблице?
SELECT
messageId,
MIN(date) AS date
FROM errors_replicated_index
WHERE (project = 'web3') AND (messageId IN 750895502580084983)
GROUP BY messageId
date - ключ партицирования
индекс состоит из (project, messageId, timestamp, uid),
меняю MIN(date) AS date на MIN(timestamp) тоже самое

Yuran
22.09.2018
10:07:55
не должен по всей, по идее
но вот по всем партициям — да

Vitaly
22.09.2018
10:08:22
а как сделать такой запрос быстрым?
найду первую дату по двум параметрам из индекса, messageId может быть несколько

Google

Yuran
22.09.2018
10:08:58
конкретно этот — вероятно, вам партиционирование не нужно

Vitaly
22.09.2018
10:09:37
но у меня все значения в первой партиции лежат
зачем он в другие ходит?)
есть подозрение, что project - очень большой. из-за этого
если указываю маленький, находит очень быстро

Ivan
22.09.2018
10:39:45
зачем он в другие ходит?)
ты же как раз хочешь узнать в каких партициях есть указанный messageId, а так как всё в параллель, то никакого бинарного поиска или чего-то подобного не происходит

Vitaly
22.09.2018
10:41:01
А почему есть разница? Я указываю другой проект и другой messageId. И уже не сотни миллионов строк, а меньше миллиона
Можно как-то улучшить запрос?
Ну и с другой стороны. У меня же данные отсортированы(индекс) кажется, что не нужно все данные перелопачивать 5секунд что бы первое вхождение найти

Ivan
22.09.2018
10:46:48
а попробуй IN на проверку на равенство заменить

Vitaly
22.09.2018
10:47:13
Пробовал. Тоже самое

Ivan
22.09.2018
10:49:59
а toDate(MIN(timestamp)) пробовал?

Vitaly
22.09.2018
10:51:14
Нет. Попробую

Denis
22.09.2018
13:14:21
а как сделать такой запрос быстрым?
если точность не нужна то min() заменить на any()
и можно попробовать добавить project в group by
SELECT
project,
messageId,
MIN(date) AS date
FROM errors_replicated_index
WHERE (project = 'web3') AND (messageId IN 750895502580084983)
GROUP BY project, messageId
но вообще в КХ пока нет этой оптимизации и он честно делает сортироку / ищет min не используя sortkey
ну и если очень надо и есть лишние ресурсы можно построить aggregating mv в котором будет messageid, min(date), max(date), avg(date), ....

Vitaly
22.09.2018
13:40:15
а нельзя сделать запрос не через min()
а найти первую строчку с messageId? они же у меня отсортированы по дате

Denis
22.09.2018
14:00:48

?
22.09.2018
15:04:45
имеел ли смысл делать первичный ключ (DateStamp, TimeStamp) на движке MergeTree если потом будет выборка по датам и сортировка по времени событий?

Wolf
22.09.2018
15:08:18
имеет

Google

Wolf
22.09.2018
15:08:38
дату наверно не имеет смылса в него включать если дата включ партицирования

?
22.09.2018
15:09:26
ага, спасибо
а есть какие-нить идеи, как в КХ организовать пэйджинг? чтобы вот сырые логи порциями просматривать

Vitaly
22.09.2018
16:40:54

?
22.09.2018
16:42:27

Vitaly
22.09.2018
16:44:09


Denis
22.09.2018
16:47:37
сейчас явно никаких оптимизаций нет
select min(a) from testsort
1 rows in set. Elapsed: 0.332 sec. Processed 100.00 million rows, 800.00 MB (301.42 million rows/s., 2.41 GB/s.)
select a from testsort order by a limit 1;
1 rows in set. Elapsed: 0.359 sec. Processed 100.00 million rows, 800.00 MB (278.38 million rows/s., 2.23 GB/s.)
КХ вообще не предназначен для пейджинга и листания логов ну и
select a from testsort order by a limit 1 offset 9000000;
1 rows in set. Elapsed: 2.067 sec. Processed 100.00 million rows, 800.00 MB (48.37 million rows/s., 386.94 MB/s.)
select a from testsort where a>=9000000 and a<9000001 order by a limit 1;
1 rows in set. Elapsed: 0.002 sec. Processed 8.19 thousand rows, 65.54 KB (5.39 million rows/s., 43.13 MB/s.)
offset limit без order by будут рандомный мусор выдавать, а order by ждать устанешь


Vitaly
22.09.2018
17:14:50

Дмитрий
22.09.2018
17:18:25
Господа, а есть какое-нибудь актуальное решение для экспорта логов nginx в ch? Плагин для logstash походу забросили.

Alexey
22.09.2018
19:03:23
Добрый вечер, как примерно бы выглядел запрос который считает аггрегации по N интервалам, например select count(), sum(), argMin(), argMax ... from ... group by а дальше идет список интервалов, например, по часам, минутам, дням, месяцам, 5-ти минуткам в зависимости от выбранного разрешения. В результате запроса на каждый интервал были бы агреггированные значения за интервал.

Tima
22.09.2018
19:09:05
Добрый вечер, как примерно бы выглядел запрос который считает аггрегации по N интервалам, например select count(), sum(), argMin(), argMax ... from ... group by а дальше идет список интервалов, например, по часам, минутам, дням, месяцам, 5-ти минуткам в зависимости от выбранного разрешения. В результате запроса на каждый интервал были бы агреггированные значения за интервал.
На каждый интверал запрос вида
select date, count(), sum(), argMin(), argMax ... from ... group by date
, где date - дата, округленная до нужного интервала

molo4ko
22.09.2018
19:43:25
кто-то пробовал собирать с относительно свежего мастера на маке?
ld: library not found for -lLLVM
что можно сделать?

Denis
22.09.2018
19:52:20
create table xrollup(metric Int64, b date, v Int64 ) engine=MergeTree partition by tuple() order by tuple();
insert into xrollup values (1,'2018-01-01', 1), (1,'2018-01-02', 1), (1,'2018-02-01', 1), (1,'2017-03-01', 1);
insert into xrollup values (2,'2018-01-01', 1), (2,'2018-02-02', 1);
SELECT metric, toYear(b) y, toYYYYMM(b) m, SUM(v) AS val
FROM xrollup
GROUP BY metric, y, m with ROLLUP
ORDER BY metric, y, m
┌─metric─┬────y─┬──────m─┬─val─┐
│ 0 │ 0 │ 0 │ 6 │ всего по всем метрикам
│ 1 │ 0 │ 0 │ 4 │ всего по метрике 1
│ 1 │ 2017 │ 0 │ 1 │ всего по метрике 1 за 2017
│ 1 │ 2017 │ 201703 │ 1 │ всего по метрике 1 за март 2017
│ 1 │ 2018 │ 0 │ 3 │
│ 1 │ 2018 │ 201801 │ 2 │
│ 1 │ 2018 │ 201802 │ 1 │
│ 2 │ 0 │ 0 │ 2 │
│ 2 │ 2018 │ 0 │ 2 │
│ 2 │ 2018 │ 201801 │ 1 │
│ 2 │ 2018 │ 201802 │ 1 │
└────────┴──────┴────────┴─────┘