@clickhouse_ru

Страница 225 из 723
Kirill
04.08.2017
10:53:17
ограничение по кол-ву передаваемых данных
там, вроде, нет особых ограничений

Виктор
04.08.2017
12:13:09
Добрый день, ребят можете кто-нибудь помочь как можно узнать статистику по таблице? Вроде того какая колонка больше всего занимает или где запрос тормозит

papa
04.08.2017
12:17:48
select * from system.columns where table = ?

Виктор
04.08.2017
12:20:56
спасибо больоше :)

Google
Диана
04.08.2017
12:33:57
кто-то сталкивался с проблемой, что нужно сложить стринговые айдишники (цифры и буквы) более компактно?

а то уж больно много места отжирают

papa
04.08.2017
12:35:02
фиксированной длины?

Виктор
04.08.2017
12:35:10
Стринговые в плане строка в которой шестнадцатеричные числа

ага

Для примера: 57cc2540558c52333c563a5c

papa
04.08.2017
12:36:21
fixedstring(16)

Vsevolod
04.08.2017
12:36:55
я бы в какой int128 перевел

Виктор
04.08.2017
12:36:56
А не подскажешь пожалйуста чем этот способ лучше?

Vsevolod
04.08.2017
12:37:03
или как он там, uuid

Виктор
04.08.2017
12:37:25
А разве есть такой тип? Я вродде только смотрел. Возможно я что-тто упустил

Fike
04.08.2017
12:37:29
на два инта64 должно биться

Vsevolod
04.08.2017
12:37:44
я видел как минимум pull request с ним

Google
Виктор
04.08.2017
12:38:34
я сейчас поиском по документации прошел и нет такого типа(

Диана
04.08.2017
12:38:44
не задокументировали еще

Виктор
04.08.2017
12:40:23
В любом случае спасибо! Будем пробовать)

Vladimir
04.08.2017
12:42:15
К вопросу что выгоднее int (*1000 например) или float ┌─table────┬─name──┬─type───┬─data_compressed_bytes─┬─data_uncompressed_bytes─┬─marks_bytes─┬──compression_rate─┐ │ measures │ value │ UInt64 │ 929445698 │ 5363178392 │ 1309648 │ 5.770297719964271 │ └──────────────────────┴───────┴────────┴───────────────────────┴─────────────────────────┴─────────────┴───────┘ ┌─table────┬─name──┬─type────┬─data_compressed_bytes─┬─data_uncompressed_bytes─┬─marks_bytes─┬──compression_rate─┐ │ measures │ value │ Float32 │ 2518338746 │ 6651819960 │ 3248576 │ 2.641352348076846 │ └──────────┴───────┴─────────┴───────────────────────┴─────────────────────────┴─────────────┴───────────────────┘

Fike
04.08.2017
12:42:38
если у вас хэш, то его вывод на самом деле просто набор байтов, и ничего лучше чем перевести в fixedstring, переведя обратно в реальные байты, нельзя придумать

Vladimir
04.08.2017
12:43:33
Я бы сказал что компрессия работает отлично и пофиг что использовать или нужно мерять на выших данных. Но однозначно советовать предостерегся бы

Constantine
04.08.2017
12:43:57
,3,000-+

Виктор
04.08.2017
13:04:28
спасибо! Будем пробовать и эксперементировать, если кому интересны будут результаты то потом опишем :)

Vladimir
04.08.2017
13:31:07
Плясали час

Потом все снес нафиг и в N раз все сначала начал Единственное что изменил это поменял в конфиге ip на hostname (Александр Ярославцев посоветовал за что ему большое спасибо, объяснить ни он ни я толком не можем, но вроде помогло, тьфутьфутьфу) 3 часа прошло, залило 5 млрд данных Все синхронно пока, очередь на вставку не растет Ошибок нет Parts пляшкт вокруг ubuntu@pprod-spm-ch-3:~$ for i in seq 3 6; do curl 'pprod-spm-ch-'$i'.us.sematext.com:8123?query=select+count(*)+from+system.parts;'; done; 5843 6111 5713 5910 ЗЫ: Вернул timestamp в первичный ключ (без него тоска по запросам, не вижу преград почему он должен мешать). Пишу опять в распределенную таблицу, 2 шарды 2 реплики 4 сервера

ubuntu@pprod-spm-ch-3:~$ for i in seq 3 6; do curl 'pprod-spm-ch-'$i.us.sematext.com':8123?query=select+count(*)+from+default.Measures_Distributed;'; done; 5339916169 5339916169 5339916169 5339916169



Растущее потребление процессора при небольшом падении скорости вставки как я понимаю мержи. И это клево ибо объяснимо

Александр
04.08.2017
13:44:45
Слава богу работает :) Возможно где то в кишках самого КХ есть трабл с хостнеймами. Он возможно берет хостнейм самой машины, а в конфиге кластера прописаны айпишники, но при просмотре таблицы clusters если мне не изменяет память показываются локальные хостнеймы...короче каша там какая то :) Так что лучше использовать хостнеймы вместо айпишек

У меня были проблемы с репликацией и именно это помогло

Vladimir
04.08.2017
13:47:17
(offtop надо Ленина с пальцем добавить в телеграмм, заморскии этот человек зачем-то тут добавлен)

Combot
04.08.2017
13:49:08
combot.org/chat/-1001080295593

combot.org/chat/-1001080295593

Kostya
04.08.2017
15:36:27
Немного нестандартный вопрос: можно ли как-то ограничить использование диска по скорости при выполнении запросов? В голову приходит только ionice для сервера и опция --max_threads у клиента. Есть ли ещё какие-то настройки, которые можно покрутить?

Google
Ilya
04.08.2017
16:02:58
Вопрос по arrayJoin. Есть таблица bar с полем foo типа Array(FixedString(16)). Селект вида "SELECT notEmpty(foo) ? arrayJoin(foo) : toFixedString('', 16) FROM bar" приводит к "<Error> executeQuery: Code: 368, e.displayText() = DB::Exception: Bad cast from type N2DB12ColumnStringE to N2DB17ColumnFixedStringE" на сервере. Версия 1.1.54245. Есть какие-либо другие варианты как сделать так, чтобы при использовании arrayJoin() можно было получить хотя бы одну запись в селекте, если массив foo пустой?

При этом клиент отваливается со своим исключением - Exception on client: Code: 89. DB::Exception: Unknown compression method: 105: while receiving packet from clickhouse-server:9000, 172.17.0.3

Vladislav
04.08.2017
16:38:26
Всем привет. А никто не занимется разработкой модуля clickhouse для rsyslog?

Появилась мысля, собирать access логи с всех серверов в кликхаус

Vladimir
04.08.2017
16:43:12
Появилась мысля, собирать access логи с всех серверов в кликхаус
А для чего если. Есть ведь например тот же graylog

Vladislav
04.08.2017
16:49:47
Наверное лень тратить время на инсталляцию\изучение грейлога. =)

Александр
04.08.2017
16:57:22
Andrey
04.08.2017
16:58:06
Ставится докер за "5 минут"
Не все любят смузи)

Александр
04.08.2017
16:58:39
Ну блин )

Roman
04.08.2017
17:32:32
Появилась мысля, собирать access логи с всех серверов в кликхаус
мы собираем так логи через rsyslogd. Он пересылает на сервис, который уже пишет логи в КХ

ну и таким же способом собираются логи с других приложений

Vladislav
04.08.2017
17:33:10
Сервис самописный?

Roman
04.08.2017
17:36:03
да, 200 строчек на го

Alexey
04.08.2017
18:01:17
Пришел с прогулки, поломалась вставка,через 2 часа куча такого посыпалось 2017.08.03 19:15:38.688909 [ 187 ] <Error> InterserverIOHTTPHandler: Code: 221, e.displayText() = DB::Exception: No interserver IO endpoint named DataPartsExchange:/clickhouse/tables/01/measures/replicas/2, e.what() = DB::Exception, Stack trace: 2017.08.03 19:15:38.702824 [ 340 ] <Error> DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 33, e.displayText() = DB::Exception: Cannot read all data, e.what() = DB::Exception, Stack trace: 2017.08.03 19:15:38.967668 [ 600 ] <Error> InterserverIOHTTPHandler: Code: 221, e.displayText() = DB::Exception: No interserver IO endpoint named DataPartsExchange:/clickhouse/tables/01/measures/replicas/2, e.what() = DB::Exception, Stack trace:
Сейчас прочитал полностью ваши сообщения за сегодня. "No interserver IO endpoint" - это говорит о том, что соединение идёт не с репликой, а с каким-то другим сервером. Как будто перепутаны адреса. Для разбирательства надо смотреть полную конфигурацию кластера - какие есть серверы, с какими адресами, какие реплики на них созданы. Есть ли на сервере, где выводится такой лог, реплика с именем ноды /clickhouse/tables/01/measures/replicas/2 ? Если нет, то можно ли догадаться, почему на неё идёт запрос? Реплики анонсируют свои адреса, по которым к ним могут обращаться другие реплики, в ZK в ноде .../host. Туда прописывается FQDN сервера, такой как он сам это определяет (аналогично результату команды hostname -f). Возможно, если что-то не так с конфигурацией сети, это приведёт к подобным эффектам.

Для примера: 57cc2540558c52333c563a5c
Да, FixedString(16) - лучший вариант. Главное не хранить в обычном String в текстовом виде.

Alexey
04.08.2017
18:21:09
И вопрос, замена где именно. Варианты: 1. В interserver_http_host: <!-- Hostname that is used by other replicas to request this server. If not specified, than it is determined analoguous to 'hostname -f' command. This setting could be used to switch replication to another network interface. --> <!-- <interserver_http_host>example.yandex.ru</interserver_http_host> --> (обычно его не требуется менять вообще, по-умолчанию берётся FQDN) 2. В конфигурации кластера для Distributed таблиц в секции remote_servers (влияет только на работу Distributed таблиц, но не на процесс репликации). 3. Где-то в системе.

Александр
04.08.2017
18:31:37
Вам спасибо, что помогли! Правда тот же вопрос остаётся - когда у вас что-то не так работало, и вы заменили IP-адреса на имена, то где конкретно потребовалась эта замена, и с какими симптомами не работало?
У меня не работала репликация впринципе. В логе были ошибки о том, что нода не найдена (не помню только где именно, в зк или кх логах). Кто-то из команды кх ответил мне и мы разобрались в проблеме, решение помогло!

Google
Admin
ERROR: S client not available

Ilya
04.08.2017
18:33:20
А есть вариант как это сейчас обойти?

Alexey
04.08.2017
18:38:49
Можно преобразовать FixedString в String. Пример: CREATE TABLE test.array_fixedstring (x Array(FixedString(16))) ENGINE = Memory INSERT INTO test.array_fixedstring VALUES (['hello', 'world']) SELECT notEmpty(x) ? arrayJoin(x) : toFixedString('', 16) FROM test.array_fixedstring - не работает. SELECT notEmpty(x) ? arrayJoin(arrayMap(a -> toString(a), x)) : '' FROM test.array_fixedstring - работает.

У меня не работала репликация впринципе. В логе были ошибки о том, что нода не найдена (не помню только где именно, в зк или кх логах). Кто-то из команды кх ответил мне и мы разобрались в проблеме, решение помогло!
Если нода не найдена - значит всё не работает сразу. А у Владимира кейс, что работало, а потом перестало. Может быть изменилась конфигурация сети?

Александр
04.08.2017
18:41:27
Если нода не найдена - значит всё не работает сразу. А у Владимира кейс, что работало, а потом перестало. Может быть изменилась конфигурация сети?
Мы с ним общались днем, на обном сервере все ок работало, потом он поднял кластер и начались проблемы, причем он пытался сделать кросс-репликацию, которая у него не завелась

Вобщем после конфигурации кластера с хостнеймами вместо ip адресов проблема вроде решилась. По крайней мере он больше не говорил о проблемах

Dmitriy
04.08.2017
18:46:17
Привет всем. хотел два вопроса задать - есть таблица в которой 20 полей поиск идет по одному полю, из этой таблице нужно только 3 поля будет ли идти поиск быстрее если таблицу сократить до 3 полей, включая поле по которому идет поиск? я правильно понимаю что чуда не произойдет и скорость поиска будет такой же? - насколько быстрее будет проходить запрос если данные поместить в РАМ? Спасибо

Alexander
04.08.2017
18:50:24
Alexey
04.08.2017
18:53:47
> - насколько быстрее будет проходить запрос если данные поместить в РАМ? Как правило, существенно быстрее. В общем случае зависит от сложности запроса и от производительности дисковой подсистемы. Вручную помещать данные в оперативку обычно не требуется, так как используется page cache, что позволяет иметь "горячие" данные в оперативке.

Dmitriy
04.08.2017
18:55:59
Спасибо.

Alexander
04.08.2017
18:58:28
А можно вопрос по исходникам? Из MergeTreeReader можно где-то извлечь номер строки? С ходу не так просто оказывается как представлялось, так как похоже, что если seek, то надо считать. Хотел чтобы каждый Block имел номер начальной строки.

Alexey
04.08.2017
19:10:51
С одной стороны надо учитывать, что строки постоянно переупорядочиваются при слияниях. Это ограничивает применимость номера строки, хотя польза всё-равно есть для некоторых приложений. Также вопрос, нужен ли именно номер, или только некоторое значение, которое соответствует порядку строк. Второе проще. Совсем простым способом добавить номер строки в MergeTreeReader не получится, но в принципе, добавить не так уж сложно. Нужно всего лишь прокинуть туда минимальный номер строки в каждом part-е, который вычислять из размера меньших по порядку part-ов.

Alexander
04.08.2017
19:17:04
Я думал что это всё учтено в read_rows_after_current_mark, но похоже нет.

Александр
04.08.2017
19:17:13
Для манипуляций именно в КХ, не на уроне приложения

Alexey
04.08.2017
19:17:52
Это можно получить так: SELECT rowNumberInAllBlocks(), * FROM (your query)

Alexander
04.08.2017
19:18:09
Для манипуляций именно в КХ, не на уроне приложения
Те номер строки в readImpl ? Это именно то что я добиваюсь.

Google
Александр
04.08.2017
19:18:23
Это можно получить так: SELECT rowNumberInAllBlocks(), * FROM (your query)
оО я думал, что эта функция по другому работает. Результат детерменирован?

Я имею ввиду, что при распределенном чтении, номер строки будет всегда одинаковый при одинаковом результате?

Те номер строки в readImpl ? Это именно то что я добиваюсь.
Да, у меня были кейсы, когда в процессе агрегации мне нужно было использовать номер строки именно в результирующем наборе данных. Не номер строки где то в БД целиком, типа 231, 444, 572, а именно 1,2,3 и т.д.

Если в результате будет 100 строк, то нумерация должна быть от 1 до 100

Alexander
04.08.2017
19:21:55
Номер строки в блоке - это по сути range от 0-32k на каждый блок? (кроме краёв). Тогда если это + начальную строку блока, то будет то что надо.

Александр
04.08.2017
19:21:55
Я полагаю это можно очень просто добавить, но моих навыков в cpp недостаточно :) Поэтому остается либо ждать, либо все таки начинать разбираться и потом присылать PR

Александр
04.08.2017
19:24:26
Использовать в процессе агрегации номер строки, который получился бы в результате, нет возможности.
Имеется ввиду другое. Например select avg, rowNumber() from (select avg(value) as avg from table group by column)

Типа как то так. И на выходе я например получаю avg rowNumber() 12 1 33 2 23 3 77 4

Но я думаю, будет не совсем честно делать такую функцию, которая работает только поверх агрегации

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