@clickhouse_ru

Страница 669 из 723
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
Я так понимаю по 9000 порту
8123 - R-коннекторы не умеют по нативному протоколу

Google
Alexey
21.09.2018
13:38:05
8123 http

Michael
21.09.2018
13:39:42
У питона несколько драйверов, только один по нативному протоколу ходит
Я поставил clickhouse_driver, в документации были примеры обращения по 9000 порту

Kirill
21.09.2018
13:42:06
Я поставил clickhouse_driver, в документации были примеры обращения по 9000 порту
ОК, значит умеет. В users.xml можно не прописывать разрешенные IP, в этом случае можно будет с любого подключаться

КХ слушает нужный вам интерфейс?

Kirill
21.09.2018
13:43:07
Ага

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

Я по https хожу из PBI в CH
Это у меня тоже будет, но пока делаю доставку данных из прокладки

Kirill
21.09.2018
13:45:52
И config.xml я не трогаю вообще?
Трогайте если не хотите чтоб КХ слушал только 127,0,0,1

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

Michael
21.09.2018
13:50:26
<listen_host>::</listen_host> - слушать все интерфейсы
User default is not allowed to connect from address

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
Просто делаете JOIN, а что у вас не получается?
ноды говорят что не находят локальную таблицу

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
Почему? При настройке local обе таблицы будут заменены на локальные при отправке на шарды.
в смысле, можно set distributed_product_mode = 'local' select a from (select a,id from tableX all inner join (select a,id from tableY) using id) ясно, я не знал что local это сделает

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
только контролирует , данные тянутся напрямую прямо в виде файлов

вероятно даже по хттп

Евгений
21.09.2018
17:10:32
данные в зукипер не едут, ибо он это не переживет.
т.е. Zookeeper "сообщает" реплике А2, откуда она сама должна по сети достать из А1 нужные данные?

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 │ └───┴────┴─────┴──────┘ но на самом деле, так делать нельзя, мы левую таблицу качаем на локальную ноду, это убийство на проде,по уму надо наоборот, правую засылать на все и там джойнить.

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

Google
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
Нет. Попробую

а toDate(MIN(timestamp)) пробовал?
А как подебажить такое?

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), ....

Denis
22.09.2018
14:00:48
а нельзя сделать запрос не через min() а найти первую строчку с messageId? они же у меня отсортированы по дате
any возвращает первую строчку, только она не минимальная, а та до которой какой-то из n потоков дотянулся в кеше линукса. и в индексе ведь тоже нет всех строк(messageid), он разрежен, и насколько я понимаю обрабатывается по блокам непоследовательно, многопоточно и все равно потом читать в колонки таблицы.

?
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
ага, спасибо

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

?
22.09.2018
16:42:27
а в чем вопрос? limit/offset?))
блин, я offset как-то упустил из виду вообще. спасибо огромное.

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 ждать устанешь

Дмитрий
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-ти минуткам в зависимости от выбранного разрешения. В результате запроса на каждый интервал были бы агреггированные значения за интервал.

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 │ └────────┴──────┴────────┴─────┘

Страница 669 из 723