- 01 November 2018 (261 messages)
-
Всем привет. Подскажите пожалуйста, есть ли смысл делать больше одной шарды на каждую машину ?
-
я имею ввиду, кроме как для репликации
-
где-то попадались тесты производительности (не уверен, что по CH, но принципы должны быть общие).
там удалось достичь большей производителоьсти запуская 2 экземпляра на машину (машина NUMA с двумя CPU) -
Нет
-
Cпасибо, так и думал. Т.к. запросы на локальную таблицу, по моим наблюдение , отлично паралелятся и загружают систему.
-
Если у вас их не один то нет проблем с утилизацией
-
Любой порядок ? А почему не порядок Primary Key ?
-
Потому что несколько потоков обрабатывают запрос
-
-
Разве КХ учитывает numa?
-
если ты имеешь ввиду использовать специфискеские операторы numa - то думаю нет, но это не точно
-
ну в целом я вижу что он отлично утилизирует все ядра без исключения если есть чем
-
привет.
выполнил delete where, чтобы перелить кусок данных. все прошло успешно, переливаю данные – ошибок нет, но в таблицах они не появляются.
кто-нибудь сталкивался? версия последняя, лью в ReplicatedMergeTree через Distributed. -
как вы переливаете данные через delete ?
-
-
-
-
переливаю = удаляю, потом заливаю новые
-
Всем привет.
кто-нибудь сталкивался с кейсом перегона партиций между одинаковыми таблицами, но с разным индексом?
через freeze/attach получаю ошибку
[2018-11-01 12:56:35] Code: 4, e.displayText() = DB::Exception: Index file /var/lib/clickhouse/data/default/test_table_shard5/detached/20180914_20180930_31_31_0/primary.idx is unexpectedly long, e.what() = DB::Exceptio
можно это как-то провернуть без insert select? -
Ну если теже самые то вам ответили уже а если новые то надо смотреть
-
Увы не получится
-
спасибо, похоже на это. почему-то я думал о 100 строках, а не блоках.
-
-
очень жаль=(
придется прикидывать сколько будут перегоняться партиции по несколько Tb и как сервера будут утилиться.
спасибо за ответ. Сами сталкивались с таким? -
Коллеги, добрый день. Вопрос небольшой - как КХ с гипертредингом работает? Или лучше его отключить, если железо выделено только для него?
-
По опыту работы с другими ресурсами - гипертрединг зло
-
все ок с ним
-
даже боюсь спросить, какой опыт ?)
-
HyperThreading дает прирост, если тип нагрузки разный в разных тредах, или если очень много случайных хождений в память
-
не подскажете. постоянно пишутся такие записи в логи
2018.11.01 10:43:54.883644 [ 23 ] <Warning> default.table (StorageReplicatedMergeTree): Part 20181018_20181018_255528_255528_0 is covered by 20181018_20181018_255006_255528_103 but should be merged into 20181018_20181018_255528_255533_1. This shouldn't happen often.
2018.11.01 10:43:55.078847 [ 23 ] <Error> default.table (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 49, e.displayText() = DB::Exception: Part 20181018_20181018_255528_258283_109 intersects previous part 20181018_20181018_255006_255528_103 (state Committed). It is a bug., e.what() = DB::Exception, Stack trace: -
nginx к пример
-
что может быть не так?
-
на том же PHP включение HT увеличивало qps, который выдерживает сервер, примерно на 50%
-
у меня на nginx отключение его давало прирост до 30% в rps
-
Не совсем так. Во-первых, таким способом можно утилизировать все сервера при запросах в Distributed таблицы, даже если в запросе не используется сэмплирование. Потом, с более мелкими шардами проще будет переносить часть данных на другие сервера. Про NUMA внятного ответа тоже как-то не услышал.
-
а если просто выставить воркеров по числу физических ядер и прибить гвоздями через taskset, то тоже с HT хуже?
-
по идее, в этом случае не должно быть разницы с действительно отключенным HT
-
Разае есть такие операторы?
-
С NUMA прикол например в том, что если один тред хочет выделить памяти больше, чем есть на его NUMA-узле, то его ждет сюрприз
-
сто лет не имел проблем с гипер тредингом , тем более с нгинксом, и в кх включен никаких проблем
-
плюс в целом обращение через шареную память к другим NUMA-узлам примерно на 30% медленней, чем к своей памяти (числа зависят от реализации)
-
но КХ вроде по умолчанию умный и использует при выполнении запроса не больше половины доступных ядер :)
-
NUMA - это отдельный разговор да, просто вопрос больше в бенчмарке наверное
-
мы синтетикой гоняли nginx и пришли к выводу (да и не только мы) что трединг лучше выключить
-
я подумал, возможно и тут без него потенциально можно выжать больше чем с тредингом
-
-
Да, я это и имел в виду, когда говорил про половину ядер :)
-
вообще, NUMA должна прямо очень больно ощущаться на 4-процессорной машине, и в намного меньшей степени — на двухпроцессорной
-
но про какой-либо учет топологии памяти в планировщике КХ я не слышал
-
-
не транзакционная вставка. MV - "pre-insert" триггер
-
Именно pre, не post? если он не сработает - что будет с исходным запросом?
-
-
при ошибке вставки во вьюшку исходный запрос не откатится?
-
-
нет :)
-
у нас так данные дублировались при ошибке вставки в мат вью
-
вернее даже при исполнении селекта в мат вью
-
это шедевр! Спасибо большое за информацию
-
печально. Я тут выше когда-то жаловался на разницу во вьюшках, все с репликацией. появляются потери данных во вьюшках при ошибках работы с ZK. Часть таких мест исправляли летом, но, видимо, не все исправили.
-
Лучше крон
-
чем мат вью
-
хотя и тут гарантий не будет
-
но более контролируемо
-
Есть смысл кому-то сообщать детали по работе с ZK, по ошибкам? Кажется, вот тут дочинили не все:
> Исправлена возможность потери данных при вставке в Replicated таблицы в случае получения ошибки Session expired (потеря данных может быть обнаружена по метрике ReplicatedDataLoss). Ошибка возникла в версии 1.1.54378. #2939 #2949 #2964 -
-
-
-
подключаю таблицы из Potgres как внешние словари
мне нужно каждое поле из таблицы описать в <Structure> или CH сам разберется что по чем? -
как вариант, не перегоняйте, переименуйте старую таблицу, накройте обе таблицы merge таблицей.
-
-
ClickHouse Meetup в Амстердаме, 15 ноября: https://events.yandex.com/events/meetings/15-11-2018/Link
Join the ClickHouse Meetup in Amsterdam on 15th of November. Come and learn about ClickHouse, our open source high-performance column-oriented database management system at a meetup on November 15, 2018 at the Andaz Hotel, at Prinsengracht 587 in Amsterdam.
-
None
-
Не сделали? тоже нужен)
-
а в России вообще бывают митапы по CH?
-
не, мне не хватает времени и знаний
-
Да, предыдущий был в Санкт-Петербурге в августе, а следующий, скорее всего, будет в Москве.
-
класс, а мск когда примерно?
-
Декабрь или февраль.
-
спасибо
-
Нет, не учитывают. Это технически сложно. ОС старается, чтобы использование page cache было максимальное прозрачным.
-
нужно из ext dict загружать значения типа bool
вот что говриться в документации по поводу этого типа
https://clickhouse.yandex/docs/en/data_types/boolean/
как сделать ограничение {0,1}? -
Здравствуйте. А реально с помощью мутации UPDATE убавить три часа во всей колонке типа DateTime?
-
Можно использовать expression:
https://clickhouse.yandex/docs/ru/query_language/dicts/external_dicts_dict_structure/#dicts-external_dicts_dict_structure
для того, чтобы сделать ограничение на стороне источника. -
Можно. Но только если это поле не входит в ключ таблицы.
SET t = t - INTERVAL 3 HOUR -
спасибо! Сейчас гляну, вроде не входит
-
в целом да если она не входит в ключ партицирования и в индекс
-
Если входит, то сервер просто не разрешит.
-
-
В ClickHouse нет такой возможности. Тем не менее, можно использовать tc для этого.
-
столкнулся после очередного апгрейда CH с проблемой загрузки https-словарей:
2018.11.01 15:54:06.896909 [ 150 ] {} <Error> ExternalDictionaries: Failed reloading 'hub_city' external dictionary: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = SSL Exception: error:14007086:SSL routines:CONNECT_CR_CERT:certificate verify failed, e.what() = SSL Exception
Конфиг оставался старым, без указания секции openssl. Добавил openssl->client с дефолтовыми настройками из умолчательного конфига - пока ничего не изменилось. Может есть какое-то стандартное направление, куда копать? -
да, в ходит в индекс к сожалению. Ну ладно, будем функцией убавлять во время запросов.
-
Всем привет.
Может кто сталкивался сервер не видит партицию(не переносит в detached при соотв запросе), но и при запросе не читает данные из партиции. Как можно вылечить? или что необходимо смотреть? -
а сертификат валидный ?
-
посмотреьт логи кх
-
конечно. Ситуация пока исправилась только отключением проверки в openssl->client->verificationMode.
-
в логах по этому поводу ничего не увидел, поэтому тут и спросил
-
в обоих ?
-
да
-
странно конечно а вообще парт в системной таблице партов он видит ?
-
а что вы до этого с ним сделали?
-
в ерор логах то lock файл заблочен дргим инстансом, но как писал Алексей это не критично, когда будет возможность рестартануть сервер разберусь
-
как глянуть
-
ну селект систем партс
-
ничего, но есть подозрение что это произошло когда принудительно инстанс убивал, когда проблемы были
-
а какие проблемы то ?
-
в систем партс нету =(
-
-
проблема была в том что инстанс сожрал все ресурсы машины
-
а вот смотрите, я пытаюсь сделать UNION ALL на две таблицы, одна из которых отличается на три колонки, я пытаюсь добавить их так
(SELECT *, toInt64(0) as resdur, toString('') as reslog, toUInt64( 0) as VisibleID FROM ...
типы колонок подсмотрел во второй таблице так
SELECT toTypeName( resdur) , toTypeName(reslog) , toTypeName(VisibleID) FROM
и вот он мне выдает такую ошибку
There is no supertype for types UInt64, String because some of them are String/FixedString and some of them are not
что я делаю не так? -
UNION ALL работает по позициям столбцов в запросах, не по именам.
-
-
Всем привет!
Подскажите, пожалуйста, столкнулся с проблемой, что удаление партиции занимает много времени. В таблице порядка 140М записей. Сильно ли влияет на скорость удаления то, что в этот момент идут запросы на чтение. И можно ли ускорить этот процесс если сначала отсоединять партицию? -
Удаление партиции просто ждёт запросы на чтение.
-
хм... понятно. Спасибо!
-
-
Это единственный способ
-
Joined.
-
Joined.
-
-
-
-
-
-
-
-
Если я добавил новую колонку, насколько болезненный апдейт этой колонки по первичному ключу? В теории хотелось бы батчем дописать значения новых колонок, без изменения существующих данных для других колонок.
-
где тут картинка была?!?
-
а в ключ нельзя добавить колонок новых же
-
Так, мне в ключ не нужно
-
успокойтесь зайдите в яндекс картинки там есть на любой вкус
-
а вам апдейтнуть а не добавить новую
-
так у вас данные других колонок и не будет менять
-
В SQL это будет UPDATE table SET column = value Where PK = something
-
ALTER … UPDATE ...
-
а не просто UPDATE
-
Это подчёркивает, что операция UPDATE в КХ очень дорогая
-
Ок
-
Но это update для строчек где нет значений у этой колонки в принципе
-
Тут нет строчек
-
-
Там всё то же самое, можно и WHERE и что хотите 🙂
-
Нашел. Все же пишется в профиль
-
https://github.com/yandex/ClickHouse/issues/3472
переписан будет весь файл (парт) -
Всем привет!
В доке, в разделе Движки таблиц -> Интеграции, сказано, что есть движок MySQL и он "... позволяет выполнять SELECT запросы над данными, хранящимися на удалённом MySQL сервере."
А есть ли что-то подобное для PostgreSQL?
https://clickhouse.yandex/docs/ru/operations/table_engines/mysql/ -
odbc
-
-
-
спасибо!
-
Совсем новый, но проверенный капперский дневник с высокой проходимостью ставок!
Всем очень советуем!ShelbyBet▪️Авторский канал каппера со стажем. ▪️Поднимаемся на ставках. ▪️Даю только то, на что ставлю сам. ▪️Всем добра, мои дорогие бандиты! Связь со мной: @shelby_alex
-
Партишн с обновляемой колонкой, только он будет задет, так ведь ?
-
Есть ли возможность выполнить пачку alter update в батче. По сути я хочу записать данные в колонку, где для данного диапазона ключей никаких значений нет
-
вся ОДНА колонка, за октябрь, может лежать у вас в файле размером 200ГБ, то что вы обновляте поле одной строку ПУСТОЕ (что это вообще?), ничего не значит, будут перезаписаны 200ГБ.
-
одним alter обновляйте.
-
Привет всем. Подскажите если у меня в таблице timestamp а я партицирую по часам timestamp/3600000 и если необходимо брать минуты timestamp/60000 то будет ли скорость намного ниже? И как вы решаете вопросы если нужны отчёты по минутам часам и и дням в этом случае
-
если будет партиций больше 200, все встанет, все партиционируют помесячно.
-
В плане встанет?)
-
Что именно всё ? Если все запросы обращаются к 10 партициям максимум ?
-
То есть если больше 200 директорий в data то каюк?)
-
работать не будет. ЦПУ будет жрать, а работать не будет.
-
Странно.
-
-
все стараются чтобы запрос ходил в минимальное число партиций.
-
Товарищ эксперт, по какой технической причине "встанет всё"?
-
например у вас есть кастомер, а запросы одного кастомера затрагивают только его партиции, когда кастомер уходит, очень удобно дропнуть все его партиции.
-
Странно. То есть партиции только для бекапа?) окей. Тогда вопрос зачем тогда партицирование ещё нужно?
-
надо домерживать, и сортировать результат из сотен партиций
-
Если один запрос обращаться к сотне
-
берете и делаете тест и убеждаетесь что две партиции в select хуже чем одна, далее делаете выводы.
-
-
Вообще говоря, непонятно, зачем.
-
-
Есть два апдейта с разными условиями, какой будет синтаксис:
-
Ну есть у меня миллион партиций, а в запросах я буду затрагивать по одной. Почему все должно вставать?
-
Делаете тест с одной партицией размера 10х и одной партицией размера х. И ? В чём проблема если сегментов 1000 ?
-
-
В доагрегации, например.
-
Спасибо за комментарий, тоесть данных за два года или один запрос затрагивает 700 разделов?
-
-
-
Должно быть таки дольше, чем если бы было 100 партиций...
-
в этом случае не должно. Т.е. запрос будет читать данные у вас за час?
-
-
-
партицированием может быть не только по времени
-
будет работать, но возможно запрос охватывающий все партиции за два года работает 4 мин. вместо 1.
-
А если не секрет на этом периоде какая агрегация в запросах? По дням или часам?
-
-
-
-
-
ALTER TABLE t UPDATE col1 = expr1 WHERE predicate1, UPDATE col2 = expr2 WHERE predicate2, ...
Только не увлекайтесь, сильно много таких апдейтов тоже делать не надо (до 100 где-то будет нормально работать). Если есть какая-то таблица, из которой берутся новые значения, лучше не городить 100500 апдейтов, а например словарь сделать и из него обновлять. -
См выше
-
Если бы не по полю сортировки выбирали, все бы встало, нужно было бы доагрегировать.
-
Я правильно понимаю что запрос по айди и так или иначе достает малый объем данных ? Мне кажется что запросы агрегации на партицированных таблицах (при условии что запрос к одной партиции) должны летать
-
Есть задача, сделать энричмент данных. Я так понимаю наиболее ClickHouse way это словари ?
-
-
делать энричмент перед выставкой в нашей архитектуре значит ещё раз писать в кафку тоесть ещё больше брокеров...
-
Завтра вам пару селектов кину :)
-
Будет интересно.
-
Тут должна быть кнопка подписаться на сообщения этого парня. Большое спасибо.
-
ClickHouse-way это всё-таки делать энричмент батчей перед вставкой. UPDATE + словарь это такой хак, призванный заменить функциональность UPDATE FROM. Он неудобный, хотя бы потому что словарь неудобно каждый раз пересоздавать. Но однократно его применть можно.
-
Если есть словарь - то можно джойнить с ним, апдейт не нужен. Я видел есть энжены для внешних баз, я так понимаю словарь может быть в редисе и с ним джойнить ?
-
-
Да, словарь может слишком большой получиться и тогда захочется результаты лукапов "материализовать" в таблицу. Есть движки для внешних баз: MySQL, ODBC и соответствующие словари. Redis пока напрямую не поддерживается, но можно например сделать HTTP-обёртку + HTTP-словарь.
-
Вчитался, у нас нет селектов не по полю сортировки😁я доступы отбираю за такое. Только если доп.условие
-
Joined.
-
-
И неудивительно, у вас бы и правда все встало. Попробуйте, отппишитесь)
-
Тоже интересно. По идее не должно встать.
-
-
Всем привет!
Столкнулся со следующей проблемой: при попытке создать таблицу с двухсторонней связью(https://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html One-to-many + backpopulates) из SQLAlchemy ORM. Вот код схемы: https://gist.github.com/tonko22/40fe8823810d6cd681223a004cbfab01, а ошибка картинков ниже.Hello guysHello guys. GitHub Gist: instantly share code, notes, and snippets.
-
-
Всем привет, подскажите как использовать яндекс кх в облаке с табиксом? я про сертификат, как его подрубить к табиксу?
-
яндекс клауд который
-
А у яблока есть поддержка в телеграм-чатиках?
-
А Clickhouse-copier?
-
-
-
Мы используем в продакшене для ограничения запросов аналитиков на кластере с одновременной нагрузкой от интерактивных запросов.
-
Понятно, будем более-менее спокойны) А как приоритеты работают относительно destributed таблиц над replicatedmt?
-
-
Настройки запроса пробрасываются на все удалённые серверы, участвующие в обработке запроса.
-
-
Я правильно понимаю что первичный ключ заставляет КХ сортировать данные при слиянии сегментов mergeTree или использовать сортированные множества ? Насколько это влияет на производительность записи ? Предварительная сортировка сильно помогает скорости записи ?
-
Кликхаус сортирует строки перед вставкой, если будете вставлять уже отсортированные - должно быть быстрее.
Но на мой взгляд это странная замена шила на мыло. Тк в любом случае сортировку будет делать или кликхаус, или какой-то ваш софт. -
Нагрузка на проц на другой машине
-
LMS деревья изначально были созданы для работы с HDD, для того чтобы избежать random disk IO при записи, я так понимаю кликхаус тоже. Не выглядит ли логичным для работы на SSD использовать какой-то движок без постоянных слияний и write amplification ?
-
iops тоже не бесконечный, упирались в него внезапно на амазоне без lsm
-
bump
-
А на Амазоне ssd часто разогревать надо, это как повезёт. Кстати.
-
-
что такое ssd в Амазоне? EBS или NVME в сервере?
-
ebs ssd, там опция при создании, на чём делать ebs
-
ок. Просто я подумал про ssd в сервере.
-
-
Кого можно поспрашивать по архитектуре ?
-
Архитектуре чего? Исходники же открыты. В Яндексе делали СУБД под HDD, вот и выбрали LSM.
-
Я вот читаю )
-
Кстати да, такой же вопрос! А работают ли в кликхаусе двусторонние связи?
-
Мне кажется что если написать движок для таблиц, на основе LMDB (one LMDB file per column). Можно будет подменить реализацию таким образом чтобы писать всегда в один файл, и не делать мержей.
-
И LMDB будет лучше для SSD
-
Я пока не понял какой именно интерфейс нужно реализовать
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
А насколько "много" данных можно будет туда записать в единицу времени?
-
С этим у LMDB не очень ))
-
-
Но разделение данных по колонкам должно сильно помочь
-
-
Они и сечас разделены или мы о разном?
-
Да, но наверно слияния не тут реализовано.
-
Не делать так
-
Вот тут смотрите https://github.com/yandex/ClickHouse/blob/master/dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.cppClickHouse/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Как же связь реализовать ?
-
Да раздельно, но LMDB однопоточная запись, поэтому распараллеливание по колонкам даст ему серьёзный буст
-
Никак, денормализуете и пишите все в одну таблицу или используете словари
-
Ну запишите, а доставать потом как, нужно иметь какой-то механизм доступа (индексы и все такое), а если не одну колонку, а две и более вытаскивать, а чтение распараллелить? Получается просто избавиться от мержей в MergeTree не получится и придется писать свой движок. насколько он будет лучше на чтение/запись?
-
LMDB - copy on write persistent B-tree
-
Очень интересные бенчмарки, я сам немного игрался - но очень плохой драйвер для Java был на тот момент.
-
Joined.
-
Всем привет.
А это норм поведение?
SELECT DISTINCT utm_campaign
FROM Stats
WHERE date >= (today() - 10)
GROUP BY utm_campaign
ORDER BY count() DESC
LIMIT 5
┌─utm_campaign─┐
│ 4510 │
│ 4825 │
│ 3237 │
│ 3549 │
│ 3261 │
└──────────────┘
5 rows in set. Elapsed: 4.706 sec. Processed 3.20 billion rows, 47.74 GB (680.72 million rows/s., 10.15 GB/s.)
SELECT topK(5)(utm_campaign)
FROM Stats
WHERE date >= (today() - 10)
┌─topK(5)(utm_campaign)──────────────┐
│ ['4510','2876','517','286','3008'] │
└────────────────────────────────────┘
1 rows in set. Elapsed: 6.638 sec. Processed 3.20 billion rows, 47.74 GB (482.56 million rows/s., 7.19 GB/s.)
В чем тогда смысл topK? если он медленее distrinct order by - 02 November 2018 (143 messages)
-
как минимум рядом можно каких-нибудь ещё агрегатов заодно посчитать
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
-
-
Joined.
-
:) select uniq(ip) from DB.Table
SELECT uniq(ip)
FROM DB.Table
┌─uniq(ip)─┐
│ 26451956 │
└──────────┘
1 rows in set. Elapsed: 145.463 sec. Processed 31.05 billion rows, 248.39 GB (213.44 million rows/s., 1.71 GB/s.)
Ну такое. Не быстро, но и не встало :) -
Joined.
-
А если uniqExact?
Тут распределение данных играет большую роль, ну и ~3мин все-таки, а если количество уникальных ip за месяц?
От юзкейса же зависит. -
-
:) select uniqExact(ip) from DB.Table where date between '2018-09-01' and '2018-09-30'
SELECT uniqExact(ip)
FROM DB.Table
WHERE (date >= '2018-09-01') AND (date <= '2018-09-30')
┌─uniqExact(ip)─┐
│ 18916283 │
└───────────────┘
1 rows in set. Elapsed: 19.083 sec. Processed 4.14 billion rows, 41.39 GB (216.90 million rows/s., 2.17 GB/s.) -
-
-
-
а что вы имели ввиду под "все встало"?)
-
-
-
-
-
Вот что говорят
-
надо все тестить, у меня сейчас две копии этой таблицы, одна с месячными партициями, другая, из которой эти селекты, суточные. Посуточный вариант работает намного лучше в нашем случае. Как я и говорил, большинство селектов за последние 3-4 дня, но и по id за все время тоже все быстро работает
-
Мне теперь интересно довести до вот такого состояния.
-
-
как-то не очень хочется ронять кластер-то 😉
-
Хочется понять, почему он может упасть )
-
-
-
Так можно и одну партицию убить.
-
-
-
Это понятно. Вы под свой ворклоад сделали такую структуру, что все работает.
Просто я был уверен, что много партиций плохо, потому что вот так и вот так загрузится проц
А у вас все нормально. Вот и просыпается исследовательское любопытство -
-
-
А поле ip это String или, скажем, FixedString(16)?
-
-
-
-
-
Ахах
Спасибо большое за потраченное время
Не только кластера, но и ваше:) -
-
-
За два года таки прилично, мне кажется
-
-
-
Joined.
-
-
-
А, вот этого я не понял
Очень полезный у вас юзкейс -
Ну как бы не обломится подождать 40 сек вместо 20, с учетом того, что его годовые селекты ручные и редкие
-
-
Спасибо. И все таки хочется услышать от ребят для чего же нужны партиции). Играет ли роль как партицировать - месяц или день на скорость выборки. Или же партицирование - это просто на какие куски делить данные . Тогда вопрос - а как же тогда составной ключ партицирования? Понятно что если партицировать слишком мелко - тогда мержи будут подвешивать систему.
-
Чтобы удобно хранить и делать супер быстрые выборки с ограничением по ключу партицирования
-
ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/name', 'replica1', Sign)
PARTITION BY (toMonday(StartDate), EventType)
ORDER BY (CounterID, StartDate, intHash32(UserID))
SAMPLE BY intHash32(UserID)
из оф доки - то есть партицирование идет по дате и типу событий, а ключик содержит 3 столбца. Как в этом случае будет SELECT eсли в нем будет присутствовать toMonday(StartDate), EventType и например CounterID. Сначала выберется нужная партиция а потом будет произведен анализ данных по ключу? -
Да
-
😊 спасибо. Похоже на правду, иначе смысла в партицировании не было бы
-
Чаще всего это просто дата, а в первичном ключе дата с часами и запросы с временными ограничениями выбирают очень маленькое количество данных
-
В первое время все запросы были настолько быстрыми, что мне казалось это не правда, но расхождение с дороги запросами меньше чем на пару процентов говорили что оно и в правду такое быстрое
-
-
не знаю как проще, ноя бы регуляркой резал
-
спасибо, я что-то спросил и зря,
URLPathHierarchy(concat('http://a.ru', file)) получил, что нужно -
ну вооот
-
Даже в телеграм со своим спамом полезли. В святая святых.
-
-
а это модератор почистил или тут что то стоит для автоматизации?
-
Подскажите, при апгрейде 18.12.14 -> 18.14.10 перестала
работать вот такая конструкция с JOIN'ами:
SELECT c.iccid , s.START_DATE
FROM
billing.account a
LEFT JOIN billing.subscription s ON
a.id = s.ACCOUNT_ID
LEFT JOIN billing.service e ON
s.id = e.SUBSCRIPTION_ID
LEFT JOIN customers.data c ON
c.imsi = e.IMSI
WHERE c.partid ='TEST'
Как так? -
Что пишет? Телепаты в отпуске
-
-
КХ не поддерживал больше одного JOIN в рамках одного SELECT. И сейчас не поддерживает. Может у вас подзапросы потерялись?
-
На время выборки влияет -КХ сначала смотрит по мин/макс ключа партиционирования в какие партиции идти. Мержи идут только в рамках партиции. Если у вас партиция по месяцу и в первичном ключе первой идет дата, то, для уменьшения латенси, проще уменьшить гранулярность индекса, но, разници особой с партициями по дням не сильно много будет. Партиция - еденица хранения в таблице, для них есть ряд операций обслуживания: удалить, переместить, присоеденить ... если этим удобнее пользоваться с каким-то отличным от месяца ключем - велкам в кастомные. Множество партиция достаточно плохо могут влиять на производительность селекта и вообще сервера так как сильно больще нужно делать дисковых операций, сильно больше файлов индексов, "засечек" и прочего что при старте нужно в память поднять, а потом при селектах там смотреть. + сильно больше нужно будет регистрировать в ZK
-
Проверил на актуальной версии - потери есть, тикет https://github.com/yandex/ClickHouse/issues/3529Data loss in materialized views with ZooKeeper errors · Issue #3529 · yandex/ClickHouse
Looks like fixes "ZK Session expired" in #2939 #2949 #2964 are not enough. Found discrepancy between original table and view. Error logs on both replicas for this view for affecte...
-
Joined.
-
коллеги, доброго дня! Вопрос - с чем может быть связана ошибка: ServerErrorHandler: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Not found: http_port
на сервере включен HTTPS -
если я правильно понял документацию - прописывание в конфиге HTTP порта отключит HTTPS
-
сам спросил - сам ответил. Ошибка возникает, если попытаться подключится по HTTP на native-порт
-
Joined.
-
Joined.
-
Всем привет. Кто подскажет как добавить колонку альтером, в самое начало таблицы? Т.е. перед первой колонкой
-
вроде запрещено? Note that there is no way to add a column to the beginning of a table
-
Вот да, я думал может кто нашел способ извратиться :)
-
CREATE TABLE AS SELECT ...
-
данные так быстро переливаются, что можно не парится и пересоздать таблицу
-
От объема данных зависит
-
Проще и быстрее в коде поддержать желаемый порядок колонок
-
подключаю внешний словарь из Postgres
когда создаю только 2 колонки, запрос отрабатывает 10s и создает, когда хочу создать 4 – отваливается на 7s по таймауту
<Error> ExternalDictionaries: Failed reloading 'MY_DICT' external dictionary: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = No message received, e.what() = No message received -
-
-
-
-
-
-
Нет
-
Реплицируемая?
-
-
Если не в конец добавить колонок то можно, если совсем поменять то нужно переливать
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
-
-
то есть все-таки через ALTER TABLE.. ADD COLUMN.. MODIFY PRIMARY KEY можно частично менять структуру индекса?
-
спасибо
-
-
-
-
-
-
воу. в доках не нашел, потому и попросил помощи. Спасибо. На будущеее учту, Сейчас insert from select делается, довольно шустро
-
Кстати, порекламирую функциональность, которая сейчас в разработке - возможность задавать отдельный "ключ сортировки", который может отличаться от первичного ключа (первичный ключ должен быть его префиксом). Идея такая: в ключе сортировки должны присутствовать все dimensions (и строки с разным ключом сортировки не схлопываются), а первичный ключ это небольшой префикс ключа сортировки, который помогает не читать всю таблицу. При добавлении нового дименшена он одновременно добавляется в ключ сортировки (но не первичный ключ) - это дешёвая операция, так как затрагивает только метаданные.
-
-
-
-
-
-
yandex/ClickHouse was tagged: v18.14.12-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v18.14.12-stable
Release notes:
v18.14.12-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Не очень понятно, чем особенно отличается первичный ключ.
-
Это будет очень круто, жаль, что не попадаешь. Вообще у нас тут погода еще пока "ничего", можно митап придумать )
-
Вот пример из одной из презентаций: https://yandex.github.io/clickhouse-presentations/highload2017/#36 - SummingMergeTree, в первичном ключе огромная колбаса из колонок, которую ещё и постоянно надо расширять. При этом для того, чтобы ограничить диапазон строк, нужный для построения отчёта, эти колонки не помогают. А можно было бы в первичном ключе оставить какой-нибудь (OrderID, EventDate, CampaignID) - бОльшая гранулированность не нужна. А при добавлении новой колонки-дименшена добавлять её в "ключ сортировки", тогда записи с разными её значениями не будут суммироваться, и можно будет по ней делать отчёты.
-
Просто это еще один термин. У вас ведь нет "первичного ключа", вот я его называл "ключ сортировки", а теперь это будет что-то другое.
Лучше, Имхо, тогда подошли бы "ключ сортировки" и "ключ индексирования" -
Пример понятен, спасибо:)
-
С точки зрения терминологии эта фича, конечно, полная катастрофа :)
-
-
-
-
Если начнут падать ошибки - значит нельзя 😂
-
С этим надо что-то делать, уже и сейчас путаница
-
сперва к локал , а потом удалить дистрибьютед и создать заново , так как к дистрибьтед нельзя добавлять колонки
-
Я попробовал и получилось
-
-
ну раньше не работало
-
по крайней мере в ддл
-
-
дистрибьютед таблицы ?
-
-
хз , завтра на тестовом стенде попробую , помню точно что не работало поэтому в сценарии пересоздание ее используем
-
-
ну лишний ручной головняк
-
-
-
Там в ченжлоге что-то было про это .
По- моему, делали -
Joined.
-
- 03 November 2018 (74 messages)
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
-
На highload будут два разработчика из моей команды.
-
-
-
Со мной, как раз я его заявил. И ещё постараюсь на митапе Кирилла тоже участвовать.
-
-
Joined.
-
Привет всем!
Мы пытаемся внедрить Clickhouse на нашей фирме и пока в полном восторге от performance. Но есть одна проблема с важным типом запросов для нас. Нам нужно агрегировать строки и потом фильтровать результат, отбрасывая группы с малыми суммами (что мы делаем с помощью HAVING). Проблема возникает, когда промежуточный результат (до фильтрации) не влезает в память на одной машине. Clickhouse отказывается выполнять запрос, хотя финальный результат после фильтрации должен влезать в память. Можно ли как-то эти грабли обойти? Запрос выглядит примерно так: SELECT a,b,c,d,SUM(Count) cnt
FROM mytable
GROUP BY a,b,c,d
HAVING cnt > 100
Заранее спасибо! -
у вас в принципе столько памяти на тачке нет или ограничение CH паникует?
-
-
bytes_before_external_group_by
-
-
Ошибка такая: Code: 241, e.displayText() = DB::Exception: Received from clickhouse-06.service.tmo.dns.teralytics.net:9000, 10.92.115.16. DB::Exception: Memory limit (for query) exceeded: would use 2.33 GiB (attempt to allocate chunk of 491520 bytes), maximum: 2.33 GiB., e.what() = DB::Exception
-
А скок данных у вас?
-
Всего 700 миллионов строк
-
Но будет расти
-
-
Так сделайте мат вьюху и не нужно будет ничего считать и после фильтровать.
-
Ну это мы наверно сможем подкрутить, но когда данные будут расти опять будем нарываться на те же грабли.
-
С Вьюхой не надо будет столько ресурсов постоянно.
-
Там дело в том что комбинации колонок a,b,c,d пользователь может свободно выбирать. Слишком много mat view придется создать
-
-
Я думал, может запрос как-то можно переписать
-
Тогда пробуйте крутить max_bytes_before_external_group_by, ну и ресурсов хоть чуть чуть добавьте, ch крутой, но все же не магический.)
-
А если на каждый столбец сделать sum? А далее в выборке уже суммировать sums, по выбранным a,b,c
-
Те в вьюхе иметь столбцы a,b,c suma, sumb, sumc. Когда нужно показать a,b sum, то считать a,b suma+sumb
-
А не, там чего то в sum count.. Так что соорри за оффтоп
-
а такая штука не спасет?
SELECT any(a),any(b),any(c),any(d),cityHash64(concat(a,'/',b,'/',c,'/',d)) hash, SUM(Count) cnt FROM mytable GROUP BY hash HAVING cnt > 100
или даже
SELECT any(a),any(b),any(c),any(d),cityHash64(concat(a,'/',b,'/',c,'/',d)) hash, SUM(Count) cnt FROM mytable
WHERE hash IN ( SELECT hash FROM ( SELECT cityHash64(concat(a,'/',b,'/',c,'/',d)) hash, SUM(Count) cnt FROM mytable GROUP BY hash HAVING cnt > 100 ))
GROUP BY hash -
Типа запаковать несколько колонок в хеш,
-
Но из него же потом не достать значения
-
-
Тут проблема, как я понимаю, в том что фильтрация с HAVING слишком поздно происходит
-
А понимаю
-
Это конечно заказ, но надо попробовать
-
И результат будет неточный из-за коллизий
-
Тьфу, не заказ а хак хотел написать
-
-
Ага
-
-
Я еще думал, может ли это быть связано с тем, какие колонки в индекс добавлены.
-
Это влияет на сортировку
-
А на фильтрацию?
-
Если бы все колонки были в индексе, мог бы clickhouse раньше применить HAVING фильтрацию?
-
Чтобы не надо было так много держать в памяти?
-
Как ты применишь хэвинг фильтрацию, когда ещё не все данные посчитались подумай
-
Да наверное никак
-
Но индекс мог бы теоретически помочь понять, будет ли ещё что-то добавляться в какие-то группы
-
И если нет, то сразу выбросить их
-
-
-
-
Нет без HAVING он конечно тоже не сработает. Я бы сильно удивился, по крайней мере
-
Зачем
-
Что-то мне кажется, что вариантов никаких, если у вас данные еще и расти будут
-
-
Если вам кроме sum ничего больше не надо, можно попробовать разбить селект на несколько, а потом соединить результаты
-
Надо
-
-
Так у вас as select, откуда кх узнать какой движок выбрать?
-
-
Я понимаю. Мне интересно было если можно как-то еще через QL создать клон таблицы. В документации ничего другого не нашел.
-
-
-
-
Глупый вопрос: а SELECT с лимитом гарантировано вернёт столько строк, сколько запрошено если в базе они есть? Не может вернуть меньше?
-
Хм. Канает. Спасибо.
-
Подскажите, у ноды кластера можно сменить IP? Через смену в config - все ок будет?
-
Подскажите, а реплицируемым таблицам таким образом можно PK менять? нужно поменять местами столбцы в РК, ничего не добавлять/удалять.
Если реплика одна пока. То есть таблица ReplicatedMergeTree, но по факту у неё копий нет.
Есть надежда, что "не поддерживается" по причине того, что имеющиеся реплики могут рассинхронизироваться. Но если реплик нет и таблица ReplicatedMergeTree в одном экземпляре - то, может, всё же можно? - 04 November 2018 (17 messages)
-
Не, создайте новую и перелейте селект инсерт
-
Местами в любом случае не поменять сейчас, так как это изменит порядок сортировки на который "все" завязано. Ограничение реплик в том, что они метаданные в ЗК хранят, а тот альтер вообще никак это не учитывает.
-
Это было бы хорошо:)
-
Joined.
-
можно ли вставлять комментарии в текст запроса?
-
насколько помню да, некоторые это в системах мониторинга используют, чтобы разделать запросы
-
Можно. Я диву дался, когда запрос отработал :) Единственное - не помню как это сделал
-
Joined.
-
-- line text
/* text */ -
-
С переименованием проблем нет, но нужно иметь ввиду, что путь в ZooKeeper останется старым, и изменить его никак нельзя.
-
Это значит, что если в будущем будут добавляться реплики, нужно создавать их явно указывая путь в зукипере, соответствующий имени таблицы на старых репликах до переименования?
-
-
Путь в ZooKeeper определяете вы сами при создании первой реплики. Остальные реплики создаются с тем же путём. Типично, что путь содержит имя таблицы. Тогда после переименования таблицы, в пути в ZooKeeper останется старое имя, и с этим ничего нельзя сделать. При добавлении новой реплики, указывается это же старое имя.
-
-
-
Joined.
- 05 November 2018 (158 messages)
-
Подтверждаю, в соседнем чате присутствует (Pro Telecom), ботов заворачивает при входе
-
-
-
Ну есть Materialized field, есть материальные вьюшки.
-
Ну и в самом insert вы тоже можете конвертить
-
если таких штук в таблице много, возможно есть смысл сделать мат. вью, иначе - лучше в инсерте
-
-
советую вам отказыватся от всякого рода оберток при работе с КХ
-
больше боли чем профита будет
-
лучше используйте https://clickhouse.yandex/docs/en/interfaces/http_interface/
-
если понимать, что умеет tool, и для чего он, то почему бы и не воспользоваться удобными вещами? или все нужно самим писать всегда
-
Потому что так вам нужно знать только одну штуку - кликхаус, а так вам надо будет разбиратся кроме этого как к ниму еще прикрутить. Темболее у КХ есть очень много кастомных штук, которые прийдется каким-то образом дружить, чем собственно @ifoton уже и занимается
-
Joined.
-
Даже в исп. jdbc драйвера, который стандратней некуда уже, возникает такая куча непонятных проблем, что я даже от него отказался
-
-
На моих данных разница была на порядок.
-
-
-
-
https://pocoproject.org/docs/Poco.Net.SSLManager.html
verificationMode - none не работает? -
-
Да, что-то вроде
<client>
<verificationMode>none</verificationMode>
<invalidCertificateHandler>
<name>AcceptCertificateHandler</name>
</invalidCertificateHandler>
</client> -
-
А зачем? Если у вас самоподписанный сертификат то установите его в систему как доверенный и кликхаус будет адекватно его проверять и пропускать.
-
-
у нас система управляется бандой рукожопых безумцев, так что это не вариант
-
-
Коллеги, всем привет.
Какая-то странная ошибка, stats - distributed Table по MergeTree
Запрос:
select event_id,platform from stats where event_id='payment_real' and platform='ok' limit 1
> DB::Exception: Block structure mismatch in UNION stream: different names of columns:
event_id String String(size = 0), platform String String(size = 0)
platform String String(size = 0), event_id String String(size = 0). -
наверное, нужно так:
<client>
<openSSL>
<client>
<verificationMode>none</verificationMode>
<invalidCertificateHandler>
<name>AcceptCertificateHandler</name>
</invalidCertificateHandler>
</client>
</openSSL>
</client> -
-
проверь что все колонки в таблицах, на которые смотрит distributed, содержат одинаковые колонки и в одинаковом порядке
-
18.14.11, 2018-10-29
Исправлена ошибка Block structure mismatch in UNION stream: different number of columns в запросах с LIMIT. #2156 -
А, точно, хорошо что работает )
-
Ага, спасибо. Действительно совпало с моим обновлением схемы, думал я накосячил.... Обновил ноды в кластере - все ок
-
Очень смущало, что select * from ... limit 1 работало
-
-
Кто нибудь сталкивался с проблемой расчета сум?
Суть есть поле amount *.xxxx (4 знака после запятой) тип Float64 сумма этих чисел получается с какимто нереальным хвостом что приводит к большим расхождениям=( (round(Y, 4) не подходит=( ) -
Храните в базе целые числа, умноженные на 10000. После суммирования делите на 10000 - не будет потерь точности
-
Интересует причана потяри точности
-
Дело сложнее это выявилось на том примере который написал
-
>(round(Y, 4) не подходит=( )
почему?
Есть тип Decimal -
Так хвост может быть больше
-
-
серьезно? )
-
Что может вылечить?
-
Абсолютно
-
всем привет
-
Использовать int64 или decimal вместо float64
-
как понять, что происходит с одной из нод кластера?
-
вырубилась нода
-
вернули в строй
-
2018.11.05 16:34:01.365959 [ 15 ] <Error> metrics.server_metrics (Data): Found part /mnt/dbdisk/clickhouse//data/metrics/server_metrics/20181105_20181105_681025556_681025556_0
2018.11.05 16:34:01.365966 [ 15 ] <Error> metrics.server_metrics (Data): Found part /mnt/dbdisk/clickhouse//data/metrics/server_metrics/20181105_20181105_681021788_681021788_0
2018.11.05 16:34:01.365973 [ 15 ] <Error> metrics.server_metrics (Data): Found part /mnt/dbdisk/clickhouse//data/metrics/server_metrics/20181105_20181105_681023038_681023038_0 -
в лог тоннами льется такая инфа
-
ClickHouse client version 1.1.54164.
Connecting to 127.0.0.1:9000.
Code: 210. DB::NetException: Connection refused: (127.0.0.1:9000) -
Посмотреть показания мониторинга и проверить логи :)
-
я уже написал, что в логах
-
я не понимаю, что происходит
-
и почему нода не отвечает
-
Так написано же, что не может законектится.
-
я не прошу перевести, что написано, спасибо с анлийским у меня нет проблем
-
я прошу разработчик объяснить, что происходит с нодой
-
Стратует, с партициями по дням для этого требуется какое-то время
-
Вы не написали примера.
Потеря теоритически может быть если очень быть если складывать очень, ну очень большие числа, с маленькими. -
Все числа не имеют огромных значений
-
-
-
Хотя фактическое значение суммы 12.7776
-
максимальное значение
-
-
-
Это я уже понял
-
Что нужно знать про арифметику с плавающей запятой
В далекие времена, для IT-индустрии это 70-е годы прошлого века, ученые-математики (так раньше назывались программисты) сражались как Дон-Кихоты в неравном бою...
-
Видимо только Decimal спасет=(
-
храните все как целые числа умножайте на нужное количество знаков после запятой
-
знаков может быть больше
-
ну так умножте на заведомо большее число. Мы например деньги храним умноженные на 1кк
-
Кликхаус считывает данные после рестарта. См. https://github.com/yandex/ClickHouse/blob/98c2ed582cd974882e2eec5573fb2dffa1ecb44b/dbms/src/Storages/StorageMergeTree.cpp . Нужно немного подождать, пока он дочитает все данные. Если у вас много таких строк в логах, то, скорее всего, вы шлете слишком много отдельных инсерт-запросов. кликхаус это не любит. Попробуйте объединить инсерт запросы в более крупныеyandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Это больше похоже на это https://github.com/yandex/ClickHouse/blob/eb535c4b9b8252a785460cb60c7bfbdb386ec4cc/dbms/src/Storages/MergeTree/MergeTreeData.cpp#L516yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
т.к. уровень лога не тот
-
Похоже на то, что такое сыпется при восстановлении поломаного part
-
Видимо так и придется делать=( Но это прямо костыль
-
Лет 15 назад в сбербанковской базе рубли хранились умноженные на 10000. Хватало.
-
ну не сильно элегантно, согласен.
-
это основной рабочий вариант там где нет типа деньги
-
???
select toDecimal128('0.25',38)+toDecimal128('0.25',38)
┌─plus(toDecimal128('0.25', 38), toDecimal128('0.25', 38))─┐
│ 0.50000000000000000000000000000000000000 │
└──────────────────────────────────────────────────────────┘ -
-
-1.53764733841876984180947473102331183104
-
Стало еще интреснее
-
=))))
-
Хотя 12.7776=)))
-
Я понял что поменять правда данные придется перезаливать но это не страшно=)))
-
Завтра буду эксперементировать=)
-
это наверняка у вас в клиенте
что с
select toString(toDecimal128('0.25',38)+toDecimal128('0.25',38)) -
=)
-
-
Если бы=(
-
-
ну и все правильно, попробуйте понять что такое float и что 1/4 например бесконечная периодическая дробь в binary
-
чем вам round у флоат не угодил?
decimal и float это две стороны одной медали и там и тут жопа -
Можно Power BI попробывать, бесплатно для персонального использования.
-
А в какой версии clickhouse появилась оптимизация с фильтрацией подзапроса с условием where из надзапроcа?
-
Добрый день, что у Кликхаус с консистентностью Materialized View при вставке в таблицу-донор?
-
Вы про prewhere?
-
Ничего
-
И второй вопрос: есть набор колонок по которым нужен быстрый поиск, при этом кажется естественно их все в "ключ сортировки" положить - но порядок по одному набору колонок никак не коррелирует с другой. Не лучше ли тут завести materialized view в котором был бы другой набор колонок в "ключе сортировки"
-
Да. Именно для этого они и созданы
-
в общем-то ни в какой, не доделано. И выключили 18.14.10, 2018-10-23
enable_optimize_predicate_expression выключена по умолчанию. -
Для view https://github.com/yandex/ClickHouse/blob/master/CHANGELOG_RU.md#clickhouse-release-181213-2018-09-10, но оно поломано было, в мастере поправили
-
Нет, про автоматическую оптимизацию select * from (select * from tbl) where a = 1;
-
Можно сделать "универсальный" индекс, например по времени
-
Нет такой
-
-
Ок
-
Допустим, но могу ли я быть уверен в том что данные попавшие в таблицу попадут в MV ? Это всё работает в стиле eventual consistency ? Или всё же есть шанс "потерять" часть данных ? Так что в таблице доноре они есть - а в вьюхе нет?
-
Не можете, т.к. они вставляются post-insert. В моем ,например, случае, когда идут милионы событий в час, не критично если при сбое, пропадет несколько тысяч
-
Нет, данные могут разьехаться
-
да есть оно
set enable_optimize_predicate_expression = 1;
select count() from (select * from part_test prewhere V>1000) where A=700;
1 rows in set. Elapsed: 0.053 sec. Processed 10.15 million rows, 162.40 MB (189.79 million rows/s., 3.04 GB/s.)
set enable_optimize_predicate_expression = 0;
select count() from (select * from part_test prewhere V>1000) where A=700;
^C
23%Cancelling query.
Ok.
Query was cancelled.
0 rows in set. Elapsed: 68.444 sec. Processed 2.33 billion rows, 37.22 GB (33.99 million rows/s., 543.82 MB/s.) -
enable_optimize_predicate_expression не про view, оно "переписывает" запрос, view частный случай
-
Ага, нашел, спасибо
-
Joined.
-
Подскажите как поддерживать консистентность вручную ?
-
сама таблица тоже не гарантирует консистентность и атомарность инсерт, какая разница-то?
-
Никак, мы пишем в копии таблиц, проверяем что все сходиться и потом перемещаем партиции (раз в сутки), для реалтайма просто вьюхи, не сильно критично что что-то поедет
-
-
Вроде помню, что можно было делать PARTITION BY (), сейчас попробовал - не получается
-
киньте плз пример
-
-
нет, я имею в виду именно пустой синтаксис
-
by tuple()
-
но можно опустить весь partition by, будет то же самое
-
да!
-
ага
-
кстати, на последней версии вот эта простыня, которая вылазит, если неправильно таблицу создаешь, все еще дает указания в старом формате
-
вот эта
https://github.com/yandex/ClickHouse/blob/master/dbms/src/Storages/MergeTree/registerStorageMergeTree.cpp#L229yandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
PR сделайте ;)
-
угу
-
хаха, понадобилось заснуть на 60 сек.
select sleep(3) from numbers(20) settings max_block_size = 1 -
а есть ли какой-то умный способ сделать нечто типа корреляционного анализа: у нас есть набор массивов [x1, x2... xn] , [y1, y2, ... yn] и нужно понять, сколько таких массивов, где есть символ X, но нет символа Y, где есть символ Y, но нет символа X, и где есть оба символа
-
-
-
Joined.
-
Вам обратный индекс нужен
-
Может кто подсказать, в зукипере для КХ стали появляться постоянные сообщения:
2018-11-05 20:06:25,261 - INFO [ProcessThread(sid:1 cport:-1)::PrepRequestProcessor@598] - Got user-level KeeperException when processing sessionid:0x166e52f8b090001 type:multi cxid:0x1d2b01 zxid:0x1b00160522 txntype:-1 reqpath:n/a aborting remaining multi ops. Error Path
Перезапуск не помогает, может кто уже сталкивался? -
@den_crane может, помните, мы обсуждали как-то, что кросс-репликация не очень хорошо вписывается в модель использования кх и вы сказали, что много кто держит параллельно-реплицируемые кластеры. А как в таком случае обрабатывается выход машины из строя?
-
Joined.
-
-
я не это сказал (никто особо не экономит и не парится что запрос выполняется на половине(трети) нод, когда запросов одновременно 2, это уже не проблема), но это не важно, в чем вопрос?
предположим есть 3 железки с 6(3*2) виртуалками.
node1 : shard1_0, shard3_1
node2: shard2_0, shard1_1
node3: shard3_0, shard2_1
селекты идут к трем железкам, т.е. да придется сделать дистрибьютид таблицу чтобы ходила в только в shard0 (для максимальной производительности), и еще одну резервную дистрибьютид чтобы ходила во все, например в другой базе данных, т.е. называться эта дистрибьютид таблица будет также например.
умерла node2: shard2_0, shard1_1, есть shard2_1 и shard1_0, делаем фолбек на другое соединение, а там прописана другая бд, и там другая дистрибьютид которая ходит в 6 КХ (в 4 потому что 2 померло). -
>придется сделать дистрибьютид таблицу чтобы ходила в только в shard0
а как это сделать? кластер сконфигурировать второй? -
да, конечно.
-
ага, понял
-
кластеров же много может быть, у меня каждая нода КХ -- член 5 кластеров (есть например таблицы дублированные на все ноды кластера, без шардов)
-
это я вспомнил просто этот разговор, к тому, что вы еще раньше говорили
>просто у всех нормальные реплики, знаю товарищей у которых цать шардов * 3 реплики. -
прочитал как “никто не кросс-реплицирует”
-
ну ок, путаница какая-то. Я вам рассказывал что никто не делает кросс-реплицию, у всех все просто, запрос выполняется половиной железок. В этом случае все просто
4 железки 2*2, дистрибьютид накрывает все 4, в случае выхода из строя любой ноды, дистрибьютид таблица все сделает сама, просто будет ходить(писать) в живой шард. -
1) Кросс-репликация двойную нагрузку на запись и мерж создает. Поэтому если система много пишет, то лучше ее избегать.
2) В кросс-репликации не работает распределенный DDL -
А если держать два набора (например, 6 машин, по 3 в кластере с параллельной репликацией и еще один изо всех 6 машин)?
Назовем эти кластеры А, Б и АБ. Тогда я пишу только в А (с фейловером на Б, затем на АБ, или сразу на АБ - неважно), читаю из А и Б, при этом могу в Б позволять какие угодно запросы, даже рискуя вылететь по ООМ и т.д.? -
Хотя мне @den_crane открыл глаза, что независимо от того, что где лежит, я всегда смогу наделать подходящих кластеров
-
так все и делают. Пишем в одном месте, стараемся читать из другого, и у меня например автоматически это получается, потому что есть параметр nearest_hostname и я хосты называю аккуратно.
пишем
host0-1 --- shard0
host0-2 --- shard1
host0-3 --- shard2
(читаем)
host1-1 --- shard0
host1-2 --- shard1
host1-3 --- shard2 - 06 November 2018 (187 messages)
-
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
-
-
-
-
-
Есть
SELECT dateDiff('year', toDate('2017-12-31'), toDate('2016-01-01'))
https://github.com/yandex/ClickHouse/search?l=SQL&q=DATEyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
-
Добрый день, коллеги. А clickhouse поддерживает синтаксис соотнесенных подзапросов, где можно делать подзапросы, полагаясь на внешнюю таблицу?
http://www.quizful.net/post/sql-subqueries - как пример в обычном sqlSQL ПодзапросыПодзапросы, внутренние или вложенные запросы – есть не что иное, как запрос внутри запроса. Обычно, подзапрос (subquery) используется в конструкции WHERE. В статье рассказывается об использовании подзапросов, приводятся примеры на SQL, а также рассказывается о некоторых нюансах использования подзапросов.
-
В КХ нельзя сделать "Соотнесенный подзапрос"
-
Привет. А в версии 18.14.12-stable есть какие-то известные грабли?
Читая этот канал, заметил что иногда в новом релизе что-нибудь отваливается и не все стабильные релизы созданы равными... -
Может сегодня кто подскажет по ошибке?, вылезает постоянно ошибка в зукипере:
2018-11-06 09:58:28,266 - INFO [ProcessThread(sid:1 cport:-1)::PrepRequestProcessor@598] - Got user-level KeeperException when processing sessionid:0x166e52f8b090006 type:multi cxid:0x9408a zxid:0x1b0133103f txntype:-1 reqpath:n/a aborting remaining multi ops. Error Path:/clickhouse/tables/sh02/nginx_01/replicas/replica_2/parts/20181106_192217_192507_59 Error:KeeperErrorCode = NodeExists for /clickhouse/tables/sh02/nginx_01/replicas/replica_2/parts/20181106_192217_192507_59 -
интересно, а планируется ли поддержка этого в roadmap?
-
-
-
можете пояснить, про что вы говорите
-
-
WHERE p.product_id IN ( SELECT ...
-
Если я правильно понял, конечно...
-
-
-
-
Сходил-таки по ссылке. Лично у меня графана получает список для графиков top5 ровно так, как указано в примере для студентов.
-
А вот соотнесённых - разве что действительно через join...
-
я понял вашу мысль
-
-
-
Joined.
-
Joined.
-
Joined.
-
индексов нет, коррелированный подзапрос будет работать жутко медленно, а словари делают это жутко быстро.
-
эм, а что-то подобное реализуемо в сабже?
-
-
Привет. Вопрос про ключ шардирования. Есть таблица с индексом по (date, user_id). Нагрузка от каждого юзера приходит очень разная, при этом их не сильно много, распределение по юзеру будет неравномерным. Как сделать шардирование, чтобы оно ускорило выполнение запросов для конкретного юзера: то есть данные одного юзера были размазаны по шардам. Что делать: шардировать по дате или подмешивать какой-то случайный элемент в ключ шардирования? Как это сделать правильно?
-
Что такое шардирование? В КХ под этим понимают размазывание по разным нодам и наоборот надо стараться что бы данные одного юзера лежали как можно ближе желательно на одной ноде.
И сколько юзеров? Десять или миллиард? Ничего подмешивать не надо, это наоборот ухудшит. -
-
-
Сколько у вас нод КХ? Что такое шардирование в вашем понимании?
-
-
а как данные заливаются / шардируются?
-
-
Добрый день, скажите пожалуйста в последних версиях ClickHouse уже появился нормальный update и delete ?
-
нормального никогда не будет ,а так да уже есть давненько
-
и delete и update ?
-
да
-
Спасибо !
-
https://clickhouse.yandex/docs/ru/query_language/alter/ раздел мутации
-
Благодарю !
-
Запросы всегда охватывает данные одного пользователя? Я бы попробовал order by user_id, date. А шардировал бы или рандомом или по пользователю.
-
Добрый день. Есть типичный вопрос новичка. Делаем небольшую базу для аналитики. На 1 ноде нормально все поднялось в связке fluentd, zoo, kafka, CH. Хотим поднять на второй ноде сделать реплику. правильно ли я понимаю что на 2й ноде надо поднять zoo+CH, а на 1й указать в настройках адрес zoo со второй ноды?
-
Фильтр по дате присутствует всегда, по юзеру в большинстве случаев
-
тогда я бы точно попробовал order by user_id, date
-
А у вас "главный"zoo где должен быть? На какой ноде? Вы же понимаете, что в общем случае нужно нечетное кол-во zoo-инстансов?
-
нет , если балуетесь используйте один зукипер
-
то есть достаточно подключить 2ю ноду к тому же zoo, который на 1й ноде? и реплики должны работать? Про отказоустойчивость сейчас не говорим
-
понял, спасибо!
-
Да
-
репликация работает на уровне таблиц, каждая таблица реплицирует саму себя как написано в ddl, обмениваясь информацией через зукипер с такой же таблицей. Сам КХ про репликацию ничего не знает и делать ничего не будет.
-
всем спасибо, будем пробовать
-
Можете и на одном сервере попробовать, в КХ можно сделать реплику на тойже машине )
-
не, для внутренних задач хочу 1 ноду, куда будт приходить данные. На второй реплика. И тяжелые запросы будут делать на реплике
-
Да, всё так. Только для репликации нужно чтобы ноды КХ видели друг друга по 9005-му порту (репликация работает по отдельному http-порту)
-
это хорошее уточнение, спасибо
-
9009
-
+1. Извиняюсь, это у меня такой порт для репликации. По умолчанию - 9009. Спасибо
-
а в логах КХ что?
-
Довольно много сообщений, корреляцию между событиями пока не удалось выявить. Данные сообщения в зукипере появляются для совершенно разных таблиц с репликацией.
-
поищите в логах КХ 20181106_192217_192507_59
-
Joined.
-
по аналогичному номеру, но более свежой ошибке в зукипере:
2018.11.06 14:32:59.538339 [ 81 ] {} <Information> replica_1..inner.nginx_v01 (StorageReplicatedMergeTree): The part /clickhouse/tables/sh03/nginx_v01/replicas/replica_2/parts/20181106_283974_284971_259 on a replica suddenly appeared, will recheck checksums -
-
Приветствую. Подскажите пожалуйста, можно ли как то для словаря сделать более сложный запрос? А именно с join
-
Сейчас лог в режиме info, видимо необходим trace. это единственная строчка с этим номером ("0181106_283974_284971_259").
-
или придется использовать 2 словаря для этого?
-
что то типа: dictgetstring(name, attr, dictgetint64(name, attr, column)) ?
-
есть движок, который представляет словать как обычную таблицу https://clickhouse.yandex/docs/ru/operations/table_engines/dictionary/
-
и потом получается делать join внутри запроса в КХ?
-
-
хм, может плохо выразился
-
мне нужно что бы словарь обращался к mysql не по select column from table where id=X а например select a.column from table b join table2 a on a.id = b.table2_id where b.id=X
-
-
Включил trace, по аналогичной ошибке нашел сообщения на двух узлах: https://pastebin.com/QryXkJ9v
-
так похоже у вас словарь с ключом tuple , используйте complex словари
будет getdict ( dict, attr, (55555,'ooo')) -
Настроена кросс репликация если что. Один шард на двух узлах c default базой replica_1 и replica_2. Ошибки стали появляться лишь в птяницу, до этого без ошибок. В пятницу перезапускали пару узлов, при этом зукипер останавливался, данные переносились в другую папку и зукипер запускался вновь.
-
Тут написано, что две реплики выполняли мерж, и когда первая закончила, она неожиданно обнаружила уже готовый парт.
Видимо, скачала со второй. Про это тоже в логе сообщения должны быть -
Это весь греп. Я так понимаю, это вполне возможная и нормальная ситуцация. Почему тогда не нравится зукиперу?
-
добрый вечер, коллеги.
кто сталкивался с кейсом даунгрейда кх?
есть ли бестпрактис и гарантия, что все заведется обратно?
мне нужно обновиться с 1.1.54343 до 18.14.12 и хочется быть уверенным, что в случае проблем можно будет откатиться -
нет, поле в КХ одно
-
view в mysql зло 🙂 особенно на 10млн+ строк в мускуле , как минимум в 5.5 было так, в 5.7 не тестировал вьюхи
-
ClickHouse release 18.4.0, 2018-07-28
Настройка use_minimalistic_checksums_in_zookeeper таблиц семейства ReplicatedMergeTree включена по-умолчанию. Эта настройка была добавлена в версии 1.1.54378, 2018-04-16. Установка версий, более старых, чем 1.1.54378, становится невозможной. -
какой бред
-
Привет, какой самый быстрый способ изменить ключ сортировки? create table select from? дамп и обратная заливка?
-
Привет! Сделали запрос drop table на distributed таблицу, и он перешел в background. Можно ли его форсированно выполнить или отменить?
-
>create table select from
insert ... select -
он выполнится когда закончатся длинные select к distributed
-
А если таких select нет?
-
одна из черепашек врет.
-
Нашли, правда есть
-
Действительно, кильнули select, и дроп прошёл. Спасибо!
-
Joined.
-
Ребята, подскажите плиз, а есть ли разница в работе по скорости между
WHERE eventType IN 1
и
WHERE eventType = 1 -
нет, это будет одно и тоже, CH перепишет это в where equals(eventType,1)
-
Спасибо
-
Спасибо! Правда опять уткнулся в 900K строк в секунду
-
вообще-то это неплохо и даже очень хороший результат.
-
ага, тоже подметил
-
-
-
Меня несколько смутило, что чтение с дисков, не более 50MB/s(iowait по нулям), со сброшенными кэшами
-
Joined.
-
ну покрутите,
max_block_size = 1000000
max_threads = 1(,16,32,64),
<parts_to_delay_insert>300</parts_to_delay_insert>
<parts_to_throw_insert>600</parts_to_throw_insert> -
давное не работал со словарями типа ip_trie, раньше вот такой запрос ошибкой не заканчивался:
SELECT dictGetString('ip', 'geoname', tuple(IPv4StringToNum('127.0.0.1')))
Received exception from server (version 18.12.14):
Code: 53. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Key type at position 0 does not match, expected String, found UInt32.
что я сломал?) -
-
<attribute>
<name>geoname_id</name>
<type>String</type>
<null_value></null_value>
</attribute> -
-
-
это конечно хорошо, но как быть с документацией?
-
-
Joined.
-
Joined.
-
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
Подскажите как можно запрос переделать чтобы по всем p пробежаться. Смысл такой - нужно найти все значения который максимально близко к началу часа для каждого p.
SELECT
timestamp,
toUInt32(timestamp/3600000) as time,
p
FROM book
WHERE p = 'BBB' AND timestamp >= 1540641600000 AND timestamp <= 1540663200000
AND timestamp IN (
select max(timestamp)
from book
where p = 'BBB' AND timestamp >= 1540641600000 AND timestamp <= 1540663200000
group by toUInt32(timestamp/3600000)
) -
Joined.
-
Уточните, что такое максимально близкое? И причем тут начало часа для p?
Что такое 1540641600000 и 1540663200000 в запросе?
Будет проще, если приведёте численый пример -
Видимо
-
имелся ввиду toStartOfHour
-
Но вообще, действительно, задачу хотелось бы всё ж уточнить
-
есть поле timestamp = unix time. Не важно. Пусть будет поле DateTime, Есть столбец p например. Нужно для каждого его значения найти строку с временем максимально близким к началу часа или если про unix time это делить на 3600*1000 значения.
-
это просто промежуток времени.
-
Joined.
-
Например A 10 20:50; A 11 20:51; A 22 4:05; A 23 4:01; B 1 10:05; B 4 10:06. B 5 10:59. Результат должен выдать A 10 20:50; A 23 4:01; B 1 10:05
-
Ну вычтите из него начало часа и сделайте максимум и group by p.
-
B 1 10:05, полагаю
-
-
блин не так написал.
-
-
Так как для каждого P и для каждого значения часа. Поэтому там и IN в начале
-
-
-
-
-
я делал так, но что то не срослось
select anyLast(timestamp),anyLast(p),any(bp),any(bv), anyLast(position) from book where timestamp>=1540814400000 and timestamp<=1540900802000 and modulo(timestamp, 3600000) <=2000 group by p,intDiv(timestamp,3600000) order by intDiv(timestamp,3600000); -
-
-
-
Joined.
-
-
p - наверное не нужно. timestamp - скорее надо max
-
-
-
Здесь коллега упомянул полезную функцию)
-
Joined.
-
-
Joined.
-
SELECT *
FROM test173
┌─p─┬───────────────────t─┐
│ A │ 2018-11-07 00:35:23 │
│ A │ 2018-11-07 00:14:23 │
│ B │ 2018-11-07 00:18:23 │
│ B │ 2018-11-07 00:04:23 │
└───┴─────────────────────┘
SELECT
p,
min(t) AS min_time
FROM test173
GROUP BY
toStartOfHour(t),
p
┌─p─┬────────────min_time─┐
│ A │ 2018-11-07 00:14:23 │
│ B │ 2018-11-07 00:04:23 │
└───┴─────────────────────┘ -
Я всё-таки старался обходить прямое составление запроса :)
А зачем подзапрос нужен? -
-
-
Надеюсь, это было полезное упражнение, раз уж вы за него взялись)
-
😂
-
а не проще
select * from (
select 'A' p, toDateTime('2018-11-07 00:35:23') t union all
select 'A' p, toDateTime('2018-11-07 00:14:23') t union all
select 'B' p, toDateTime('2018-11-07 00:18:23') t union all
select 'B' p, toDateTime('2018-11-07 00:04:23') t)
order by p, t-toStartOfHour(t)
limit 1 by p
A 2018-11-07 00:14:23
B 2018-11-07 00:04:23 -
ну и если для каждого часа то
select p, t, toStartOfHour(t) h from (
select 'A' p, toDateTime('2018-11-07 00:35:23') t union all
select 'A' p, toDateTime('2018-11-07 00:14:23') t union all
select 'A' p, toDateTime('2018-11-07 12:14:23') t union all
select 'A' p, toDateTime('2018-11-07 12:35:23') t union all
select 'B' p, toDateTime('2018-11-07 00:18:23') t union all
select 'B' p, toDateTime('2018-11-07 00:04:23') t)
order by p, h, t-toStartOfHour(t)
limit 1 by p,h
A 2018-11-07 00:14:23 2018-11-07 00:00:00
A 2018-11-07 12:14:23 2018-11-07 12:00:00
B 2018-11-07 00:04:23 2018-11-07 00:00:00 -
А чем проще? Имхо, это гораздо менее читаемо. Быстрее будет работать?
-
если с отредактированным вариантом если сравнить то да -- менее читаемо.
но в общем limit by позволяет выбрать все поля из таблицы для искомой записи, т.е. если полей будет например больше чем p и t. -
Никогда так и не встречал нормального юзкейса для limit by
А order by зачем? -
limit без order by выберет что угодно, а не ближайший к началу часа.
-
-
если есть коррелированный подзапрос с лимитом, то его иногда можно переписать через джойн и limit by
-
возможно, спасибо)
-
ну вот попробуйте выбрать за один заход в таблицу (ВСЕ ПОЛЯ), нужны строки с мин. t для каждого p
select * from (
select 1 p, 1 t, 'zzz' x, 4 y union all
select 1 p, 2 t, 'xxx' x, 5 y union all
select 2 p, 2 t, 'yyy' x, 6 )
order by p, t
limit 1 by p
1 1 zzz 4
2 2 yyy 6 -
и особенно если нужно первых 5, в каждой группе (p)
-
-
да, но argMin придется для каждого поля написать и посчитать.
-
-
-
ну вот так будет
select p, V.1, V.2, V.3 from (
select p, argMin((t,x,y),t) V from (
select 1 p, 1 t, 'zzz' x, 4 y union all select 1 p, 2 t, 'xxx' x, 5 y union all select 2 p, 2 t, 'yyy' x, 6 )
group by p)
1 1 zzz 4
2 2 yyy 6 -
argMin в разы быстрее чем order by + limit by
https://gist.github.com/den-crane/fcc95468f37e40f9ff2a22cf3e250c0f -
- 07 November 2018 (120 messages)
-
Joined.
-
Что и понятно, тк надо все упорядочить сначала во втором варианте
-
-
Joined.
-
Коллеги, подскажите плиз, при обновлении на 18.14.12 получаю " <Error> Application: DB::Exception: Cannot create table from metadata file /var/lib/clickhouse/metadata/dnl//hosts.sql, error: DB::Exception: ODBCBridgeHelper: clickhouse-odbc-bridge is not responding, stack trace" - это какая-то ошибки сборки под центось ? 18.14.11 - нормально завелась
-
Joined.
-
А можно trace увидеть?
-
-
-
На тестовом стенде на 18.14.12 не вылезло, в продакшн - вылезло. Разницы нет никакой, конфиги идентичны. Если найду закономерность- напишу. Но это сборка по центос - может быть что-то с init.d скриптами
-
-
Нашел, что уже мой вопрос обсуждался, подскажите, вам удалось решить задачу с вставкой nested json?
-
-
спасибо. а случайно не знаешь, можно ли положить всё сообщение из топика кафки в отдельный столбец КХ?
-
неа
-
А можно чуть больше подробностей - какой именно CentOS (сборки для 6-го и 7-го различаются), как именно удается воспроизвести?
-
Посмотрю, что именно происходит, и было бы совсем хорошо, если бы удалось воспроизвести локально
-
Здравствуйте. Подскажите пожалуйта есть ли функция, которая может вернуть предыдущю строку относительно текущей? Я нашел только runningDifference, которая возвращает дельты между текущей и предыдущей записью для каждой записи, но мне необходима другая операция, а не вычитание.
-
Приходилось собирать в массивы (groupArray), применять операцию (arrayMap), разворачивать обратно (ARRAY JOIN)
-
ого. Хардкорненько. Учитывая, что у меня еще есть и nested attributes, которые тоже являются массивами, то прийдется знатно помудохаться.
-
проще сделать на уровне своей программы, наверное.
-
-
-
-
Владимир Бородин на HighLoad++ 2018
В инфраструктуре Яндекса довольно давно существует платформа вычислительных ресурсов, на которой работает большинство stateless-сервисов компании. Давно есть и единый Map Reduce, и хорошее объектное хранилище, но относительно недавно не было инфраструктуры для хранения того, что обычно кладут в базы данных. В докладе речь пойдёт о том, как мы сначала построили инфраструктуру Database as a Service для собственных сервисов, а теперь масштабируем для внешних пользователей.
-
-
явно будут, у них ±3 доклада
-
-
-
-
-
Подскажите плиз, может есть какието очевидные вещи в запросе которые можно оптимизировать?
SELECT
adId AS adId,
sellerId AS sellerId,
if(isFinite(sumIf(cpc, eventType = 1) / sum(eventType IN 1)), sumIf(cpc, eventType = 1) / sum(eventType IN 1), 0) AS AvgCPC,
sum(eventType IN 1) AS Clicks,
if(isFinite(sum(eventType IN (3, 4)) / sum(eventType IN 1)), sum(eventType IN (3, 4)) / sum(eventType IN 1), 0) AS EngagementCTR,
sum(eventType IN (3, 4)) AS Engagements,
sum(eventType IN 2) AS Impressions,
quantile(0.9)(rankScore) AS RankScore90pct,
ifNull(countDistinct(if(eventType IN 2, sessionId, NULL)), 0) AS SessionsWithImpressions,
ifNull(countDistinct(if(eventType IN 3, sessionId, NULL)), 0) AS SessionsWithWebsiteClicks,
sumIf(cpc, eventType = 1) AS Spent,
if(isFinite(sum(eventType IN 1) / sum(eventType IN 2)), sum(eventType IN 1) / sum(eventType IN 2), 0) AS ViewCTR
FROM
(
SELECT
adId,
cpc,
eventType,
rankScore,
sellerId,
sessionId,
timestamp
FROM d_events
WHERE (tenant = 3) AND (date >= (toDate('2018-11-06') - 1)) AND ((toDate('2018-11-06') + 1) >= date)
)
WHERE (toDate(timestamp, 'Europe/Amsterdam') >= '2018-11-06') AND ('2018-11-06' >= toDate(timestamp, 'Europe/Amsterdam'))
GROUP BY
adId,
sellerId
LIMIT 0, 20 -
Возможно ли както закешировать значения sum(eventType IN 1) в пределах запроса?
-
-
что вы имеете ввиду? не понял вас
-
-
что если вы берете limit и не пишете order by, то в общем случае у вас два одинаковых запроса по одинаковым данным выдают разные ответы. иногда это не то что хотелось бы получить.
-
Вы имеете ввиду Group By ?
-
-
limit выдает рандомную строку без order by.
group by не упорядочивает строки
КХ обрабатыватывает запрос многопоточно, limit выдаст просто первую строку которую вернет один из потоков
select n from (select number n from numbers(100000) order by rand())
group by n
limit 1
----
88975
select n from (select number n from numbers(100000) order by rand())
group by n
order by n
limit 1
----
0 -
Joined.
-
🙂 select n from (select number n from numbers(100000) order by rand()) group by n limit 3
SELECT n
FROM
(
SELECT number AS n
FROM numbers(100000)
ORDER BY rand() ASC
)
GROUP BY n
LIMIT 3
┌─────n─┐
│ 0 │
│ 89828 │
│ 46085 │
└───────┘
3 rows in set. Elapsed: 0.022 sec. Processed 131.07 thousand rows, 1.05 MB (6.00 million rows/s., 48.00 MB/s.)
🙂 select n from (select number n from numbers(100000) order by rand()) group by n limit 3
SELECT n
FROM
(
SELECT number AS n
FROM numbers(100000)
ORDER BY rand() ASC
)
GROUP BY n
LIMIT 3
┌─────n─┐
│ 0 │
│ 89828 │
│ 46085 │
└───────┘
3 rows in set. Elapsed: 0.021 sec. Processed 131.07 thousand rows, 1.05 MB (6.26 million rows/s., 50.10 MB/s.)
все время одинаковые результаты получаю -
вы неудачник
-
это просто демонстрация и в общем-то понятно почему одинаковые результаты, но это явно не то что хотелось.
-
Секция LIMIT
LIMIT m позволяет выбрать из результата первые m строк. LIMIT n, m позволяет выбрать из результата первые m строк после пропуска первых n строк.
n и m должны быть неотрицательными целыми числами.
При отсутствии секции ORDER BY, однозначно сортирующей результат, результат может быть произвольным и может являться недетерминированным. -
я все равно не понял как это относиться к моему вопросу, но спасибо вам за ответы =)
-
в моем вопросе limit просто для примера
-
когда я вижу
GROUP BY
adId,
sellerId
LIMIT 0, 20
я сразу исправляю на
GROUP BY
adId,
sellerId
ORDER BY
adId,
sellerId
LIMIT 0, 20 -
Понял, спасибо, я в курсе =)
-
про sum(eventType IN 1)
вам папакарл ответил что можно но не нужно
но вообще вот
select (sum(1) as X) * 1000, X+1 -
Joined.
-
а вот за это спасибо!
-
-
-
-
@kshvakov оказался в непонятной ситуации.
В соединение клик хаусу указал алтернативные хосты, но не указал стратегию, думая что по умолчанию используется рандом.
Но соединение не устанавливалось, пока конкретно in_order не указал как стратегию. -
Версия кликхауса 18.14.10
-
а раньше когда была версия кликхауса более старая, я не указывал стратегию, и у меня подключалось рандомно
-
получается сейчас стратегию балансировки обязательно конкретно нужно указывать, верно ?
-
ClickHouse release 18.14.11, 2018-10-29
Исправления ошибок:
Исправлена ошибка Block structure mismatch in UNION stream: different number of columns в запросах с LIMIT. -
-
-
-
подскажите пример чарта, как поднять кластер КХ в kubernetes
-
Посмотрю какая версия сейчас стоит
-
-
```
select * from book where timestamp>=1540814400000 and timestamp<=1540900802000 and (p,timestamp) IN ( select p, argMin(timestamp,timestamp) from book where timestamp>=1540814400000 and timestamp<=1540900802000 group by p,intDiv(timestamp,3600000));
```
вопрос такого плана - можно ли как то добиться партицированием или ключами повышение скорости поиска. Сейчас скорость поиска 46 с за день - за два 94 - линейная зависимость -
или для каждого случая аггрегации нужно свою таблицу мутить?
-
вы понимаете зачем у меня тупл?
-
Вам же писали более аккуратный вариант. Попробуйте сначала его.
Для хотя бы попытки ответа на вопрос надо знать, что у вас за запросы, какой ордер бай -
попробуйте осознать argMin((t,x,y),t)
-
-
нет... конечно же не понимаю...)) Ну е-мое....
-
надо себя заставить написать ()
-
Секунду. наверное да)
-
Вот вариант скидывали.
-
да. Это вариант на подзапрос. Он есть. Все правильно
-
Таки я его у вас не вижу.
-
таки вот оно - select p, min(timestamp,timestamp) from book where timestamp>=1540814400000 and timestamp<=1540900802000 group by p,intDiv(timestamp,3600000)
-
-
оно. В моем случае оно
-
-
Да. Партицирование по timestamp/3600000 . PARTITION BY toUInt32((timestamp / 1000) / 3600) ORDER BY timestamp SETTINGS index_granularity = 8192
-
-
-
так как есть множество записей с одинаковым значение ключе p и timestamp. Соответственно мне надо их всех и выбрать. если я поставлю tuple в argMin - то вернется одна, если я поставлю any - то вернется одна any, если поставлю anyLast - то вернется одна последняя. А вот all я не знаю есть вообще такая штука. То есть по идее это что то вроде join только я не знаю сколько он съест
-
-
ок. А как лучше сначала по времени а потом по P или наоборот.?
-
-
Да, будет директор Облака, а также руководитель разработки dbaas и, наверное, ещё люди.
-
попробую перелить таблицу с другим order. Посмотрю что получится.
-
@milovidov_an, можно ли собрать все строки с заданным значением нескольких полей как-то еще, кроме надзапроса?
-
Агрегатная функция groupArray.
-
-
Ну да, можно еще group array и array join.
-
Спасибо!
-
Сейчас гляну, заранее спасибо
-
но судя по всему groupArray собирает в памяти намного больше чем с подзапросами. Ну тут наверное либо скорость либо память
-
Неочевидно насчет памяти. То, что он соберет -- и есть результат вашего запроса, если я правильно понимаю задачу
-
Неочевидно - но предыдущий запрос укладывается в лимиты, этот не укладывается по памяти я имею ввиду
-
-
Будем знать, что так
-
Это всё-таки другая бага была, исправлена буквально на днях: https://github.com/yandex/ClickHouse/issues/3162
Она уже в мастере, как скоро фикс оказывается обычно в релизе? на 18.14.12 ещё повторяетсяBlock structure mismatch in MergingSorted stream #3162Clickhouse server version 18.12.17 Query to distributed table sometimes fails with error: 2018.09.18 13:39:41.251273 [ 1108366 ] {efbabc85-def6-4747-9443-c302558e8793} executeQuery: Code: 171, e.displayText() = DB::Exception: Blo...
-
-
-
Joined.
-
Коллеги, приветствую! Подскажите, есть ли возможность отфильтровать данные по дате с учетом таймзоны? есть поле и Date и Datetime, сейчас на бэкэнде идет формирование запроса к Datetime со сдвигом, например с 21:00 одного дня до 21:00 другого дня, но это адски неудобное решение .. может что посоветуете?
-
а в чем вопрос-то?
select * from (
select 'UTC' tz, toDateTime('2018-01-01 00:00:00', 'UTC') dt union all
select 'Europe/Moscow',toDateTime('2018-01-01 00:00:00', 'Europe/Moscow'))
where dt >= toDateTime('2018-01-01 00:00:00', 'UTC')
UTC 2018-01-01 00:00:00 -
но словарь, который создаётся для столбца с типом LowCardinality, входит в базу? вопрос связан с тем, есть ли какая-то особеность в резервном копировании (freeze) таблицы, в которой используется этот тип данных
-
-
Да, словарь там же, где и данные. При копировании директории, он тоже скопируется.
-
Эта возможность сейчас всё ещё имеет экспериментальный статус.
-
-
https://events.yandex.ru/lib/talks/6166/ вот тут объяснено, вроде меньше данных не будет, groupby будет быстрееLink
Приглашаем технических специалистов на ClickHouse Meetup. ClickHouse была разработана в Яндексе для нужд Метрики, но почти сразу стала использоваться для решения самых разных задач. Эта система работает быстрее всех известных нам СУБД и легко обрабатывает петабайты данных. Разработчики системы расскажут о новых функциях и планах, а пользователи — о собственном опыте. Вы сможете также пообщаться с представителями индустрии, которые уже используют нашу СУБД в своих проектах.
-
Доброго всем вечера! Ребят прошу совета. Есть кластер из 8 шардов, хотим сократить количество нод до 4, какой верный алгоритм без потери данных разрулить это?
-
detach, копируем на другой шард, там attach
-
Спасибо! А копировать каким образом? При помощи clickhouse-copier?
-
scp / ftp
-
Joined.
-
Joined.
- 08 November 2018 (142 messages)
-
Joined.
-
Joined.
-
Joined.
-
воу воу
-
-
Это где?
-
И первый терабайт бесплатно
-
Вроде нету у них чатика. Только у платного саппорта есть в телеге
-
Вы пропустили спам-картинку :)
-
Теперь непонятно) без картинки
-
Ну вот да
-
Это не саппорт, это дилеры у нас в стране, да и то, нет там поддержки, только маркетинг
-
Я в своё время зарегался, чтобы скачать community edition, так мне в течении получаса позвонили. И стали расспрашивать, кто я, зачем мне вертика, куплю ли я
-
это да, могут, хотя скачать можно и без реги 😬
-
Всем привет! Надеюсь, не нарушу правила чатика.
В международное маркетинговое агентство ищу удаленного разработчика, перед которым будут стоять интересные задачи, связанные с highload.
Подробности здесь: https://docs.google.com/document/d/14f9ctV716BgCZvWIT-l1OVxKVHFLKQRajYCgkDMQFyA/edit
Благодарю за внимание. Буду признательна за рекомендации.FS-developer_SМы – международное маркетинговое агентство. Специализируемся на лидогенерации, привлечении целевых пользователей и покупателей. Отлично умеем работать с целевой аудиторией, что обеспечивается в том числе in-house инструментами для аналитики и сегментации трафика. Ищем в команду удаленного фуллст...
-
Два года назад нельзя было
-
-
Joined.
-
Joined.
-
Joined.
-
-
Joined.
-
Joined.
-
Joined.
-
-
Joined.
-
Joined.
-
Joined.
-
-
Joined.
-
-
Joined.
-
Joined.
-
-
-
Joined.
-
герои 3 ?)
-
-
ClickHeroes 😎
-
астрологи обьявили неделю спамеров, количество спамеров увеличилось в два раза
-
Joined.
-
Joined.
-
в кх есть массив тип данных?
-
по нему можно группировать ?
-
Joined.
-
-
Joined.
-
Парни а как посчитать uniq(some) но чтоб туда попадали только поля которые больше 0 (some > 0) например?
-
Есть 2 таблицы. Первая ids array(1, 2, 3) и вторая id = 1, нужно заджоинить 2 таблицы id in ids
-
uniqIf
-
Массивы через Array join, но я бы 2 раза подумал, а надо ли) храните все в одной таблице пока это возможно.
-
Да, можно
-
version 18.12.13
наткнулся на странноватое поведение, stream_flush_interval_ms отрабатывало все как надо по дефолту, после пересоздания матвью и консумера из кафки, и последующего рестарта кх – все вроде работает, но сбрасывает буфера через секунд 20-30. как можно починить? -
Спасибо!
-
судя по поведению эта переменная вообще не отрабатывает, ориентируется только на размер блока
-
Можно.
-
uniqIf(some, some > 0)
-
См. функцию has.
-
-
обновил на последнюю версию – те же симптомы. по минуте может отрабатывать. как лечить?
-
Joined.
-
подскажите как таблица развернуть горизонтально
исходная таблица
user;status;count
user1;100;1
user1;200;3
user1;300;2
user2;100;1
user2;200;3
user2;300;2
ожидаемый результат
user;status100;status200;status300
user1;1;3;2
user2;1;3;2 -
можно ли хранить внешние словари не в оперативной памяти?
https://clickhouse.yandex/docs/en/query_language/dicts/external_dicts_dict_layout/#dicts-external_dicts_dict_layout-hashed
из документации понятно только что flat, hashed and complex_key_hashed хранятся полностью в RAM -
можно например select user, groupArray(number) from table group by user
-
там порядок может быть любой, мне такое не подойдет
-
не понял какой другой порядок?
user2;300;2
user1;100;1
user1;300;2
user2;100;1
user2;200;3
user1;200;3
? такой например -
я просто не допонял, меня вот такая констукция устроит, спасибо за ответ
select user, groupArray(status), groupArray(count) from table group by user -
yandex/ClickHouse was tagged: v18.14.13-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v18.14.13-stable
Release notes:
v18.14.13-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
я в c++ вообще не очень, но чет даже в коде репозитория не вижу использования этой переменной в том качестве, в котором оно предполагается.
оно вообще работает? :) -
В последних релизах настройки Кафки в settings перенесли, можно посмотреть как оно теперь работает.
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
-
Вот тут https://github.com/yandex/ClickHouse/blob/master/dbms/src/Storages/Kafka/StorageKafka.cpp поищите поyandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
-
вот block_size есть, а stream_flush_interval_ms только тут
https://github.com/yandex/ClickHouse/blob/6aec41a2bddeeb2fcaf528e7059e3d3f94ee0f6e/dbms/src/Storages/Kafka/StorageKafka.cpp#L524
и limits.max_execution_time дальше вроде как используется только для ограничения по длительности запросаyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Кликхаус дешевле!
-
-
-
факт
-
-
и каждый раз новые ощущения, это главное )
-
И "приготовить" можно как хочешь.
-
-
-
И ... Можно весь рабочий день и ночь
-
При использовании JDBC драйвера для ClickHouse периодически получаем ошибку message: Unexpected packet Hello received from client
-
на трех версиях кликхауса попробовали
-
не понимаем в чем дело
-
иногда работает иногда нет
-
-
-
Joined.
-
@kshvakov @Krashuevina две проблемы. По одной на каждого из вас.
При использовании встроенного балансировщика с такими параметрами
click_house_conn = "tcp://10.10.60.23:9000?username=agent&password=megAPassword&database=data&alt_hosts=10.10.60.24:9000&connection_open_strategy=in_order"
Мы периодически отлавливаем ошибку: message: Unexpected packet Hello received from client.
Как только удаляем все после названия базы в строке подключения, подключаясь только на одну ноду, ошибки нет вообще.
=========
Периодически дергая селект в кликхаусе с помощью jdbc из postgresql , мы получаем ошибку:
jdbc-bridge is not running. Please, start it manually (еще скриншот для вас Александр) -
-
Прошу посмотрите пожалуйста, я уверен вы сможете что-нибудь сказать умное по этому поводу
-
Привет!
Такой вопрос про запись в из файла.
Есть файлик, в котором разделитель "," и null как пустая строка
И В строковый тип данных записывается пустота как null, а вот в числовой - нет
и падает с такой ошибкой
",,,,,,,,,," is not like Float32
можно ли как-то указать формат null отличный от \N? Или мб есть какой-то другой способ записывать пустоту как null?
Не хотелось бы во всем файле пустые значения заменять на \N -
пока нет. есть пул-реквест на возможность указывать default значения в источниках данных (допускающих пустые значения), но он слишком много всего меняет, пока не добавили. Ожидается, что для этих колонок можно будет задать default-ы и они применятся
-
-
https://clickhouse.yandex/docs/ru/data_types/nullable/ "Почти всегда использование Nullable снижает производительность, учитывайте это при проектировании своих баз."
-
-
не встречал, но это не сложно сделать самому с помощью https://github.com/timescale/tsbsGitHub - timescale/tsbs: Time Series Benchmark Suite, a tool for comparing and evaluating databases for time series data
Time Series Benchmark Suite, a tool for comparing and evaluating databases for time series data - GitHub - timescale/tsbs: Time Series Benchmark Suite, a tool for comparing and evaluating databases...
-
всем привет. наливаю реплику с 0. вот такое в логах: (ReplicatedMergeTreeQueue): Not executing log entry for part 20181101_20181107_0_2781_174 because another log entry for the same part is being processed. This shouldn't happen often.
как я понимаю мерджи остановились и данные не приезжают. подскажите что-нить пожалуйста! -
-
-
Привет, продублируй в личку чтоб я не забыл, у меня сейчас нет компьютера под рукой чтоб посмотреть
-
Недавно было сравнение от @alexanderzaitsev с использованием официальных бенчмарков Timescale (у них висит pull request с добавлением поддержки ClickHouse в бенчмарке).
Попрошу его скинуть ссылку. -
-
Сравнивали как раз при помощи tsbs. На следующей неделе опубликуем
-
Хорошо, спасибо 🙂
-
-
для сравнения можно еще ознакомиться со статьей https://medium.com/@valyala/when-size-matters-benchmarking-victoriametrics-vs-timescale-and-influxdb-6035811952d4When size matters — benchmarking VictoriaMetrics vs Timescale and InfluxDB
Recently Timescale published Time Series Benchmark Suite (TSBS) — a framework for TSDB benchmarking. Let’s give it a try.
-
Здорово!
-
было бы интересно посмотреть сравнение ch и timescaledb на нодах 4-8-16гб рамы, да
-
Как принято говорить "печально"
-
Joined.
-
-
Joined.
-
Спасибо!
-
🥇🏆🍻🥂
-
👍👍👍
-
-
-
Это значит, что в ZooKeeper осталась запись о таблице, потому что были удалены не все её реплики.
-
Посмотрите в ноде путь_к_таблице/replicas.
-
Если какой-то сервер исчез и не будет восстановлен, то запись о реплике потребуется удалить из ZK самостоятельно.
-
-
-
is ch faster than tc?
-
Мало ли кто не в курсе =)
https://t.me/HighLoadTalks/18122Kirill Shvakov in Чат конференции HighLoad++Очень много вопросов о ClickHouse, завтра будет митап где мы попробуем рассказать как легче войти в "технологию", расскажем о плюсах/минусах и как эти особенности использовать во благо себе, митап крайний и, надеюсь, границ по времени жестких нет. И вот теперь вопрос пользователям, слушателям или тем кто только собирается заиспользовать КХ: кидайте сюда или в личку свои вопросы/проблемы, а завтра мы попробуем их наглядно порешать, либо предложить пути решения проблем. В том числе попробуем, если интересно, развернуть кластер с репликами и шардами в LXC, но это по времени затратно и можно это сделать в обед, пинганите меня если интересно и я сделаю howto и найдем место и поиграемся в кластера )
-
Очень много вопросов о ClickHouse, завтра будет митап где мы попробуем рассказать как легче войти в "технологию", расскажем о плюсах/минусах и как эти особенности использовать во благо себе, митап крайний и, надеюсь, границ по времени жестких нет.
И вот теперь вопрос пользователям, слушателям или тем кто только собирается заиспользовать КХ: кидайте сюда или в личку свои вопросы/проблемы, а завтра мы попробуем их наглядно порешать, либо предложить пути решения проблем. В том числе попробуем, если интересно, развернуть кластер с репликами и шардами в LXC, но это по времени затратно и можно это сделать в обед, пинганите меня если интересно и я сделаю howto и найдем место и поиграемся в кластера ) -
запись будет?
-
Я линк дал на чат. Спроси там.
-
лол, я не заметил, что это в другой чат. Думал, на сообщение в этом же.. сорри за оффтоп
-
Без проблем =)
-
-
А Кирилл тут же есть... Наверное, можно и тут дёрнуть =)
-
О... =))
-
-
Я не знаю точно, но в статье + нашел аналогичное на сайте tc, упоминается что нет компрессии, что для big data (не говоря просто о скорости чтения) - довольно важно.
-
-
Спасибо за уточнение. У меня задачка с биржи льется поток orders & trades нужно сохранять, вот думаю какую базу лучше использовать
TimescaleDB or ClickHouse какие pros & cons получу от каждой
Если кто то сталкивался, подскажите куда копать -
У меня и на работе и дома для pet-проекта аналогичная задача. Но так как на работе нет ограничений по железу - там много решений, однако для дома, и траффик не такой большой, и 2-4gb памяти и диск хотел бы ужать, из-за этих ограничений не уверен что туда ch подойдёт (из-за помяти). А tc по диску вот не подходит оказывается.
- 09 November 2018 (164 messages)
-
-
Вкратце — на легких миллисекундных запросах с высокой локальностью данных (выборка по конкретному чему-то) tc будет несколько быстрее, на более тяжелых агрегациях (статистика для много чего-то) — ch будет сильно быстрее.
-
Посмотреть бы на запросы. Сильно тяжёлые уже не так важно сколько. Интересно от простых до одной группировки например.
-
Вот список запросов: https://github.com/timescale/tsbs#appendix-i-query-typesGitHub - timescale/tsbs: Time Series Benchmark Suite, a tool for comparing and evaluating databases for time series data
Time Series Benchmark Suite, a tool for comparing and evaluating databases for time series data - GitHub - timescale/tsbs: Time Series Benchmark Suite, a tool for comparing and evaluating databases...
-
TC быстрее на single groupby — там серднее время выполнения единицы или десятки миллисекунд. Так что оно не так важно
CH быстрее на double groupby и high cpu — там среднее выполнение запросов измеряется секундами или десятками секунд, поэтому сильно заметно -
TC сильно быстрее на lastpoint и group by order by limit — CH не умеет эффективно это выполнять.
-
Получается tc довольно быстрый.
-
В сравнении с InfluxDB — да, быстрый. В сравнении с CH — ну вот смотря для чего. Мне кажется, что если запрос выполняется 30 или 40 миллисекунд — это не так важно. А 10 или 50 секунд (не милли) — это уже существенно.
-
Довольно ключевая вещь для timeseries(финансовых), имхо
-
Да. Тут однозначно TC выигрывает (разница в порядки). Во всех остальных — CH по совокупности лучше
-
Ну вот 5 или 15 на простых тоже существенно. Так что без полной картины я не особо могу обсуждать.
-
Light queries, time in ms
Test Name ClickHouse TimescaleDB InfluxDB
single-groupby-1-1-1 13,67 4,39 2,6
single-groupby-1-1-12 14,97 38,35 13,84
single-groupby-5-1-1 22,46 4,72 6,72
single-groupby-5-1-12 24,24 41,49 55,84
cpu-max-all-1 37,51 45,02 59,12
high-cpu-1 18,69 36,14 20,07
single-groupby-1-8-1 37,51 23,98 8,24
single-groupby-5-8-1 72,73 24,65 31,07
Heavy queries, time in s
Test Name ClickHouse TimescaleDB InfluxDB
groupby-orderby-limit 2,2014 0,08289 67,9422
double-groupby-1 2,40525 31,48191 8,02475
lastpoint 4,62182 0,60388 2,24293
double-groupby-5 6,59089 41,52558 37,9129
double-groupby-all 12,57339 52,95058 76,19916
high-cpu-all 11,04427 17,33342 80,75683 -
-
-
-
Как-то так это выглядит
-
В PR можно посмотреть запросы: https://github.com/timescale/tsbs/pull/26Add a feature ClickHouse database support by sunsingerus · Pull Request #26 · timescale/tsbs
ClickHouse can be tested along with all other DBses. ClickHouse implementation is based on TimescaleDB.
-
-
Joined.
-
Joined.
-
Спрашивай, если еще актуально.
-
-
-
Нет
-
спасибо
-
И слава богу!
-
кто-нибудь пользуется кликхаусом для сбора nginx/apache/email логов? хочется elk заменить очень, не очень понятно какой лог шиппер взять
-
+
-
Fluentd+kafka
-
16000 строк в секунду обрабатывает
-
У меня пока в проекте - смотрю в сторону clicktail
-
я хотел fluentbit и без кафки попробовать, напрямую в ch, было бы супер минималистично - но по форматам данных не сходится
-
Ставя кафку, ставится zoo
-
не хочется джаву заводить для мелких деплойментов
-
Клик с репликацией тоже будет требовать zoo
-
Правильно ли я понимаю, что версия zoo /zookeeper-3.4.13.jar от 15 июля не подойдет для репликации?
-
и нужен именно 3.4.5+ ?
-
13>5
-
хотя... я похоже не проснулся -_-
-
пятница
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
а размеры данных на диске ch vs timescaledb какие получились?
-
CH - 3G
Timescale - 26G
Influx - 458M. Видимо, использует всякий delta или double delta encoding -
В CH обещают добавить дельты очень скоро
-
👍
-
-
-
toMonday
-
а каков хештег)
-
-
-
Joined.
-
Joined.
-
-
-
-
Joined.
-
-
-
Вот фичереквест https://github.com/yandex/ClickHouse/issues/838Feature request: add ability to apply delta or delta-of-delta encoding to numeric columns before compression · Issue #838 · yandex/ClickHouse
Clickhouse fits well for time-series DB from the performance point of view. But the compression ratio for the data stored in such databases may be further improved. Tables in time-series DBs usuall...
-
Date и целочисленные типы.
-
Пока ждали добавления дельтакодинга, создали собственную tsdb, используя "фишки" кликхауса - https://medium.com/devopslinks/victoriametrics-creating-the-best-remote-storage-for-prometheus-5d92d66787ac :) В кх кроме дельта кодинга не хватает индексов по произвольным лейблам для временных рядов, как в прометеусеVictoriaMetrics — creating the best remote storage for Prometheus
The first public announcement of VictoriaMetrics — the best remote storage for Prometheus
-
Круто! Хотя еще круче и полезнее было бы допилить КХ, а не создавать новую tsdb )
-
-
-
Как любит говорить Майкл Стоунбрейкер — One size does not fit all.
-
Joined.
-
Всем привет!
Кто нибудь использует update в продакшен? -
Привкт! Подскажите, если имеешь много данных, столбцы которых встречаются в ивентах не всегда везде - следует создавать изначально много таблиц под каждый типа данных, либо одну таблицу, но с nullable столбцами
-
второй вариант более кх-вей
-
-
Спасибо! а столбец со временем у нас с точностью до милисекунд - использовать как DateTime не выйдет. Придется использовать его как строку. Грозит ли это чем то плохим?
-
а что если иметь столбец DateTime, плюс UInt16 с миллисекундами?
-
О, спасибо!
-
Лучше одной колонкой UInt64 с таймстемпом в миллисекундах
-
А как partitioning key сформулировать?
-
Оффтопик по хайлоаду - митап в 17 будет же? А где?
-
Joined.
-
Владивосток
-
-
-
-
Он не катит, начиная с какого-то количества инсертов в единицу времени. Но, впрочем, у меня до этого не доходит пока что.
-
partition by A/1000/3600/24/7/4
-
кафка как вариант, хотя тоже не без претензий
-
это да, и самая раздражающая - неработающий stream_flush_interval_ms
-
вы тоже на него наткнулись? я вчера прям удивился
-
да, пока сделали «ход конём» - на уровне сервера ставим max_block_size в мелкое значение (100 по-моему)
так запись идёт быстрее более-менее
но чтение при этом тоже страдает
поэтому в читателях при коннекте сессионно возвращаем в дефолт
а-ля
if _, err := connect.Exec("SET max_block_size=65536"); err != nil {
return nil, err
}
думаю, как допилим основную функциональность, вернёмся к этому и может созреем до PR-а и фикса этого всего -
-
-
Joined.
-
-
насколько я понял (читая переписку в тикетах) проблема в том что невозможно со стороны читающего сфлашить недочитаннный блок(max_block_size), и там неясно что вообще делать.
-
теперь уже можно для кафка таблицы, не?
-
да, я тут про это как раз
> хотя в ченьжлоге видел, что блок сайз теперь можно делать и потаблично
> но это тоже такое, полумера, кмк -
я чет даже issue по этому поводу не нашел, в код полез
-
-
https://github.com/yandex/ClickHouse/issues/2169
https://github.com/yandex/ClickHouse/issues/2508
https://github.com/yandex/ClickHouse/issues/2382ClickHouse Kafka Performance Issue · Issue #2169 · yandex/ClickHouseFollowing the example from the documentation: https://clickhouse.yandex/docs/en/table_engines/kafka/ I created a table with Kafka Engine and a materialized view that pushes data to a MergeTree tabl...
-
спасибо, видимо под вечер уже глюки начались
-
Подскажите, какой тип указывать для поля, если я там JSON хранить будут? тупо string?
-
Joined.
-
string
-
👍
-
Joined.
-
Joined.
-
привет всем. есть табличка документов с колонками source string, topics array(string). есть два вопроса :)
1. будет ли этот запрос менее прожорлив по памяти, чем аналогичный запрос с подзапросом и arrayJoin'ом
select domain, groupUniqArrayArray(topics)
from documents
group by domain
2. нужно написать запрос выше так, чтобы в итоговом массиве порядок элементов соответствовал частоте появления элементов. т.е., если короче, отсортировать топики по популярности. возможно ли это? -
ну или мб можно рядом с массивом топиков положить ещё одну колонку, в которой каждый элемент будет обозначать частоту появления топика
-
1. Зависит от того. насколько "длинные" у вас массивы
2. Есть функция arraySort -
1. запрос с arrayJoin сваливается по памяти. какова вероятность, что свалится и запрос с groupUniqArrayArray?
2. спасибо :) -
При вызове определенного метода расчета много раз подряд, память забивается с 3 гигабайт до 28 гигабайт в течении секунд 30. Потом, после обработки всех вызовов, в течении 5 минут освобождает память до 6 гигабайт. То есть забивается очень быстро, а освобождает не так быстро.
-
Это нормально
-
После того как занятым остается 6 гигабайт, минут 10 проходит до 4 гигабайт
-
так долго освобождать
-
почему нельзя быстрее ?)
-
А куда торопиться
-
-
Мы нагрузочное проверяли, 30 вызовов в секунду. 24 гигабайта сьело за 10 секунд
-
-
Это даже не нагрузочное 30рпс на мелких запросах
-
КликХаус не тормозит - пока что он падает
-
где падает? не срабатывают лимиты по памяти?
-
На сервере 48 Гб памяти, настройки на пользователя по памяти дефолтные
-
Все запросы выполняються из под одного пользователя
-
-
Сервер
-
Память растет пока не закончится
-
Потом сервер падает
-
-
через arrayMap можно попробовать
SELECT arrayMap(x -> toString(x), [1, 2, 3]); -
как можно превратить [1,2,3], [4,5,6] в три строки:
1|4
2|5
3|6 -
?
-
т.е. имеем одну строку, получаем три
-
да так работает, спасибо =)
-
-
select xx,yy from (select [1,2,3] as x, [4,5,6] as y) array join x as xx,y as yy
-
спасибо
-
Joined.
-
SELECT
replaceRegexpOne(q, '(.*),(.*)', '\\1') AS q1,
replaceRegexpOne(q, '(.*),(.*)', '\\2') AS q2
FROM
(
SELECT arrayJoin(arrayMap(x -> concat(toString(arr1[indexOf(arr2, x)]), ',', toString(x)), arr2)) AS q
FROM
(
SELECT
[1, 2, 3] AS arr1,
[4, 5, 6] AS arr2
)
)
┌─q1─┬─q2─┐
│ 1 │ 4 │
│ 2 │ 5 │
│ 3 │ 6 │
└────┴────┘
😂😂😂 -
а если обратная ситуация, собрать эти три строки в два массива, но с сохранением порядка? т.е. нужно гарантировать, что получится именно [1,2,3], [4,5,6], а не [1,3,2], [6,5,4]
-
но ведь можно arrayMap сразу на два массива натравить
-
groupArray так и работает.
-
о, правда? мне казалось, что наоборот указано, что порядок может быть любым...
-
Составляет массив из значений аргумента. Значения в массив могут быть добавлены в любом (недетерминированном) порядке.
видимо, речь про то, что порядок может быть любым, но зависимость между элеементами двух массивов сохранится? -
Сорян...
-
да, должно работать.
-
угу, работает. большое спасибо :)
-
Подскажите где про детали работы engine типа Log можно почитать .
-
-
в документации мало? https://clickhouse.yandex/docs/ru/operations/table_engines/log/
-
Joined.
-
Выложена презентация с HighLoad++:
https://yadi.sk/d/ZXT2sd59-GqKHw
Также есть на GitHub:
https://github.com/yandex/clickhouse-presentations/tree/master/highload2018
Видео: https://youtu.be/hkcOmILykas?t=10961
(сам ещё не смотрел)Алексей Миловидов, Анализ производительности запросов в ClickHouse, v1.zipView and download from Yandex.Disk
-
Joined.
-
Joined.
-
Спасибо, я как раз по какой-то непонятной причине его пропустил
-
-
2048 мемберов группы, между прочим
-
R language and Statistical data analysis
Язык программирования R, статистика и машинное обучение/data mining
За спам и флуд -- бан
Публикация вакансий по согласованию с админами
https://t.me/rlang_ruR (язык программирования)Язык программирования R, статистика и машинное обучение / data mining !!! README: https://github.com/r-lang-group-ru/group-rules/blob/master/README.md#how-to-ask-a-good-question
-
-
Число же
-
-
привет всем. а кто ловил ошибку
Column count in parameter table (5) doesn't match column count in schema (28) - 10 November 2018 (45 messages)
-
-
-
Бекапьте по дням
-
Joined.
-
А что высматривать в консоли, если не коннектит табикс?
-
База смотрит в интернет, и даже отдает 200 ок из браузера
-
-
схемы в sql файл и потом в кх через клиента с мультиквери
-
-
https сделать для начала и на табиксе и на кх. Современные браузеры шибко умные и сильно не любят смеси http и https.
-
ну там if not exist на всякий случай
-
на табиксе висит сертификат, но он вроде протух. я пытался в апаче вообще отключить https, но он все равно редиректит на https, почему-то
-
Вобщем, либо везде работающий https, либо везде http.
-
Как вариант - включить в кх опцию для табикса на /
-
Сделал везде http, поехало, спасибо
-
-
Не могу переключить бранч на stable, собирая CH на macOS.
Сделал:
git clone --recursive --depth=10 https://github.com/yandex/ClickHouse.git
cd ClickHouse/
git checkout stableClickHouse/ClickHouseClickHouse is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
на git checkout stable получаю pathspec 'stable' did not match any file(s) known to git.
git branch показывает только master
git tag молчит -
что я делаю не так?
-
Благодарю, шикарнейший доклад!
-
--depth <depth>
Create a shallow clone with a history truncated to the specified number of commits. Implies --single-branch
А откуда взяли depth? -
-
Убрал из документации.
-
пытаюсь так и в таблицах пусто
docker exec -ti -u 0 ch /usr/bin/clickhouse --client --multiline --multiquery "CREATE TABLE a1 ( timestamp UInt64, datetime DateTime) PARTITION BY YYYYMM(datetime) ORDER BY (datetime) SETTINGS index_granularity = 8192" -
Спасибо. Читала, но есть непонятные места. Например.этот mark файл хранит пары (rows,offset). Это понятно. Ты.е когда CH пишет пачку строк, то он берет количество строк, которое уже было записано. Прибавляет к нему количество строк в пачке и вычисляет где они закончатся и тем самым получает пару ( rows, offset). Если бы был одни файл данных, то все было бы понятно. Но у нас их может быть много ( под каждую колонку) .
-
Например у меня 2 колонки. В одной тип int, а в другой строка. Каждая строка по 1024 байт ровно. Какое будет смещение после 2х вставок по 100 строк
-
mrk файл в таблице типа Log хранит смещения сразу для всех файлов с данными.
-
Это не совсем понятно. Там в каждой строчке есть имя файла или там у всех файлов с данными одно смещение. Например в mrk файле я вижу строку (1000,20000) и у меня 10 колонок. Значит ли это что в каждом из файлов с данными мне нужно спать 1000 строку по смещению 20000
-
@milovidov_an спасибо за доклад на HL
-
Файлы с данными можно перечислить в определённом порядке. В mrk файл для каждой засечки записываются смещения в байтах в каждом из файлов с данными в этом порядке (они разные).
-
Вам нужно знать структуру засечек для лучшего понимания (просто так) или чтобы восстановить повреждённую Log таблицу?
-
Для понимая. Теперь понятно. Если у меня 5 колонок,то для каждого конкретного rows будет 5 записей с разными offset? . В документации говорится, что это позволяет читать данные в несколько потоков. Значит ли это, что при любой возможности CH будет запускать несколько потоков операционной системы?
-
> для каждого конкретного rows будет 5 записей с разными offset
Да.
> Значит ли это, что при любой возможности CH будет запускать несколько потоков операционной системы?
Определяется настройкой max_threads. -
Замечу, что MergeTree таблицы лучше (более равномерно) распараллеливают обработку запроса. А также лучше сжимают данные (за счёт сортировки по первичному ключу). И более оптимально формируют сжатые блоки.
-
Спасибо за ответ.а локи на каком уровне ? Один лок на всю таблицу? .т.е когда и пишу в таблицу, то берется lock на все время записи и другие сессии будут ждать?
-
Да, для таблицы типа Log используется один RWLock.
-
-
а вот подскажите по такому моменту.
у меня кафка одним инстансом работает, из кх матвью подключен, при небольших объемах данных – все норм.
с флушем по таймеру понятно – оно не работает пока.
но вот тут еще какая ситуация – я делаю микро-нагрузочное тестирование и отсылаю данные рейтом 200 rps на протяжении 5 минут.
в этот момент вижу по логам кх, что он просто перестает обновлять матвью, нету запросов к кафке.
2018.11.10 17:30:12.549668 [ 21 ] {} <Debug> StorageKafka (myKafka): Started streaming to 1 attached views
спустя пять минут
2018.11.10 17:35:14.552367 [ 34 ] {} <Debug> StorageKafka (myKafka): Started streaming to 1 attached views
это сама кафка ему не дает подключаться в момент нагрузки или что происходит вообще? -
ну и в кафке видно, что консумер замер
-
-
-
Joined.
-
У меня одна таблица для доступа из кафки, другая Матвью в базу. Провисов не видел, 16к запросов в сек делается...
-
-
Да
- 11 November 2018 (140 messages)
-
-
-
У меня есть маленький вопрос про LowCardinality. Мы сейчас булем пробовать метрики перенести на КХ и очень хочется попробовать его, так как угикальных String названий метрик не особо много, вопрос собственно больше в том как его аккуратно прокинуть в createWithNumericBasedType чтоб можно было использовать с sumMap (на сколько я помню он ,LowCardinality, должен был хэшть строку) и, соответственно в Nested (xxxMap) структурах для SummingMergeTree ?
-
Ну, у девушки, наверное, большие глаза.
-
-
@kshvakov, хотелось бы уточнить по работе агента мониторинга для Telegraf. обнаружил, что запрос с User Agent Golang SQL Driver во время запуска проверки, которая совпала с командой удаления таблицы, вроде как заблокировалась сама и заблокировала процесс удаления.
Такое вообще возможно, может, известный баг?
Запросы такие висели, после их убийства Kill query дроп смог пройти.
│ 1 │ default │ 852900a5-469d-490c-9c62-e4dc4b46fbb9 │ 127.0.0.1 │ 47528 │ default │ 852900a5-469d-490c-9c62-e4dc4b46fbb9 │ 127.0.0.1 │ 47528 │ 1 │ btc-all-41│ btc-all-41 │ Golang SQLDriver │ 1 │ 1 │ 54213 │ 0 │ │ │ 259.285041557 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 122944 │ 127040 │
SELECT
database,
table,
SUM(bytes) AS bytes,
COUNT(*) AS parts,
SUM(rows) AS rows
FROM system.parts
WHERE active = 1
GROUP BY
database, table
ORDER BY
database, table │
У нас в клиентах под запросы Go нет, все на питоне, - только агент для telegraf на go. -
Всем привет.
А что значит ошибка?
2018.11.11 12:38:05.541864 [ 20 ] {} <Warning> stats (ReplicatedMergeTreeRestartingThread): ZooKeeper session has expired. Switching to a new session.
2018.11.11 12:38:05.541950 [ 20 ] {} <Error> zkutil::EphemeralNodeHolder::~EphemeralNodeHolder(): Code: 999, e.displayText() = Coordination::Exception: Session expired (Session expired), e.what() = Coordination::Exception, Stack trace: -
а у вас какая версия кх?
-
18.14.9
-
Посреди ночи упал кластер. В начале были ошибки too many parts
-
теперь эта валиться со всех баз
-
и ничего не работает
-
однозначно была проблема на зукипере
-
на зукипере нагрузка была высокая
-
даже нагрузки и высокого летенси достаточно, чтобы кликхаус начал тормозитьи заблокировал таблицы, это снежный ком, решается снятием нагрузки с зукиперов... и ждать, пока рассосётся. можно рестартануть сервисы кликхауса ещё. тоже помочь должно, но это только после решения проблем с зК.
-
-
parts_to_throw_insert
parts_to_delay_insert
и если хотите чтобы инсерты пошли, можете повысить эти значения -
-
-
-
-
соседи…
-
Когда серверр начинает упираться в железо, диск проц сеть
-
Сейчас уже ошибок с too many parts нет
-
2018.11.11 12:38:05.541864 [ 20 ] {} <Warning> stats (ReplicatedMergeTreeRestartingThread): ZooKeeper session has expired. Switching to a new session.
2018.11.11 12:38:05.541950 [ 20 ] {} <Error> zkutil::EphemeralNodeHolder::~EphemeralNodeHolder(): Code: 999, e.displayText() = Coordination::Exception: Session expired (Session expired), e.what() = Coordination::Exception, Stack trace: -
у вас на openvz зукипер что-ли?
-
Тлько эти рекурсивно по всем базам
-
lxc
-
-
выкидывайте его оттуда, только виртуализация с provisioned ресурсами!
-
-
-
Joined.
-
как думаете, это как-то можно поковырять глубже? хочу понять в ком проблема – в кх или в кафке.
консольный кафка клиент отдает норм, кх ходить не хочет, просто не делает Started streaming to 1 attached views в период "высокой" нагрузки. ну она реально не высокая, ресурсы на машинах свободны. -
Я смогу скинуть свои конфиги, но уже завтра. Сейчас нет доступа
-
да, спасибо, я стукну, если не разберусь к тому моменту
-
-
-
https://clickhouse.yandex/docs/en/operations/table_engines/kafka/
тут неполная дока в этом моменте?
DETACH TABLE consumer;
ATTACH MATERIALIZED VIEW consumer; -
в общем, решилось все только после пересоздания консумера из кафки и матвью.
остальные все действия – ребуты кх, зукипера и кафки, аттачи/детачи, не принесли результата. -
не, не решилось, минут 10 отработало нормально и опять то же поведение 🤦♂️
-
Разгрузили сервер, пробуем рестартовать, но кх не поднимается.
У зукипера в логе:
2018-11-11 15:09:34,068 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@942] - Client attempting to establish new session at /10.75.0.83:37776 2018-11-11 15:09:34,287 - INFO [CommitProcessor:12:ZooKeeperServer@687] - Established session 0xc6702a6362c0048 with negotiated timeout 40000 for client /10.75.0.83:37776 -
Привет, нет, такого не должно быть. Я позже посмотрю и отпишусь.
-
Ок!
-
Вопрос, насколько безопасно удалять данные в зукипере?
-
КХ восстановит их?
-
-
2018.11.11 15:43:55.387072 [ 25 ] {} <Error> table(ReplicatedMergeTreeRestartingThread): Couldn't start replication: DB::Exception, DB::Exception: Replica /clickhouse/tables/db/1/Statistics/replicas/ch10.local appears to be already active. If you're sure it's not, try again in a minute or remove znode /clickhouse/tables/db/1/Statistics/replicas/ch10.local/is_active manually, stack trace:
-
Упал утром кластер, лежит до сих пор
-
Летят ошибки session expired
-
Разгрузили до нуля сервера с зукипером, проблема не уходит
-
Теперь вот такик ошибки
-
2018-11-11 15:45:29,056 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@595] - Got user-level KeeperException when processing sessionid:0xa6702b14d380000 type:multi cxid:0xcae zxid:0xb70000fa42 txntype:-1 reqpath:n/a aborting remaining multi ops. Error Path:/clickhouse/tables/db/1/table/replicas/ch10.local/is_active Error:KeeperErrorCode = NodeExists for /clickhouse/tables/db/1/db/replicas/ch10.local/is_active в логах zk
-
-
-
А можно вообще все снести?
-
нельзя
-
ch10 :) optimize table db.Stats; OPTIMIZE TABLE db.Stats Received exception from server (version 18.14.9): Code: 254. DB::Exception: Received from localhost:9000, ::1. DB::Exception: No active replicas. 0 rows in set. Elapsed: 0.001 sec.
-
До снятия нагрузки было так:
ch12 :) optimize table db.Stats; OPTIMIZE TABLE db.Stats Received exception from server (version 18.14.9): Code: 999. DB::Exception: Received from localhost:9000, ::1. Coordination::Exception. Coordination::Exception: Session expired (Session expired). 0 rows in set. Elapsed: 0.053 sec. -
-
-
Перенесли зк на другие серверы. Не помогло
2018.11.11 16:42:53.535827 [ 29 ] {} <Error> zkutil::EphemeralNodeHolder::~EphemeralNodeHolder(): Code: 999, e.displayText() = Coordination::Exception: Session expired (Session expired), e.what() = Coordination::Exception, Stack trace: -
Как перенесли, опишите процесс
-
Lxc контейнеры перенесли на пустые серверы
-
OPTIMIZE TABLE db.Stats Received exception from server (version 18.14.9): Code: 999. DB::Exception: Received from localhost:9000, ::1. Coordination::Exception. Coordination::Exception: Session expired (Session expired). 0 rows in set. Elapsed: 0.051 sec.
-
Нагрузки нет, все серверы ничего не делают.
Только ошибку с session expired кидают раз в пару минут -
ну у вас лажа в зукипере просто видимо )
-
-
Лидер есть
-
-
Нет
-
В логах зк ошибки
2018-11-11 17:04:20,010 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b1002a 2018-11-11 17:04:40,001 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b1002b, timeout of 40000ms exceeded -
-
-
Как это проверить/исправить?
-
смотрите логи зукипера
-
2018.11.11 16:42:53.535827 [ 29 ] {} <Error> zkutil::EphemeralNodeHolder::~EphemeralNodeHolder(): Code: 999, e.displayText() = Coordination::Exception: Session expired (Session expired), e.what() = Coordination::Exception, Stack trace:
-
Кроме ошибки с timeout ничего нет
-
-
-
2018-11-11 17:04:20,010 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b1002a 2018-11-11 17:04:40,001 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b1002b, timeout of 40000ms exceeded 2018-11-11 17:04:40,001 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b1002c, timeout of 40000ms exceeded 2018-11-11 17:04:40,002 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b1002b 2018-11-11 17:04:40,002 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b1002c 2018-11-11 17:05:00,000 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b1002e, timeout of 40000ms exceeded 2018-11-11 17:05:00,001 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b1002d, timeout of 40000ms exceeded 2018-11-11 17:05:00,002 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b1002e 2018-11-11 17:05:00,002 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b1002d 2018-11-11 17:05:20,000 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b1002f, timeout of 40000ms exceeded 2018-11-11 17:05:20,001 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b1002f 2018-11-11 17:05:40,000 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b10030, timeout of 40000ms exceeded 2018-11-11 17:05:40,000 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b10031, timeout of 40000ms exceeded 2018-11-11 17:05:40,001 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b10030 2018-11-11 17:05:40,002 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b10031 2018-11-11 17:06:00,000 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b10033, timeout of 40000ms exceeded 2018-11-11 17:06:00,008 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b10032, timeout of 40000ms exceeded 2018-11-11 17:06:00,009 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b10033 2018-11-11 17:06:00,009 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b10032 2018-11-11 17:06:20,001 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b10035, timeout of 40000ms exceeded 2018-11-11 17:06:20,001 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b10034, timeout of 40000ms exceeded 2018-11-11 17:06:20,002 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b10035 2018-11-11 17:06:20,002 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b10034 2018-11-11 17:06:40,000 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b10036, timeout of 40000ms exceeded 2018-11-11 17:06:40,001 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b10037, timeout of 40000ms exceeded 2018-11-11 17:06:40,001 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b10036 2018-11-11 17:06:40,002 - INFO [ProcessThread(sid:12 cport:-1)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0xa67030ca7b10037
-
-
-
Обновление кх с 18.14.9 до 18.14.13 ничего не изменило
-
Как можно восстановить зукипер? Может грохнуть его и пересоздать все таблицы?
-
Бекап. Дроп. Attach
-
Может где-то что-то забилось и из-за таймаута онтне успевает разгрести?
-
Так же
maxSessionTimeout=600000000
Но в логе
но! 2018-11-11 17:11:40,000 - INFO [SessionTracker:ZooKeeperServer@358] - Expiring session 0xa67030ca7b10054, timeout of 40000ms exceeded -
Такой странный вопрос: а пробовали отдельно сбоку поставить кластер кх + пустой зукипер и там попробовать пересоздать таблицы как надо? ATTACH в существующие таблицы точно работает.
-
И, кстати, подобное наблюдал при переполнении диска у зукипера (восстанавливал его потом из бекапа).
-
-
Нет, но придётся поизвращаться с содержимым /var/lib/clickhouse
-
И придется делать аттач?
-
Т.е. лучше заранее сделать DETACH, SHOW CREATE TABLE и куда-нибудь всё в сторонку оттащить.
-
Потом, когда кх таки заработает с зукипером - пересоздать таблицы и сделать ATTACH
-
В моём случае (реплика 3x) достаточно было сделать это на одном сервере - на остальные среплицировалось.
-
Joined.
-
-
-
В КХ нельзя изменить колонки первичного ключа
-
[Question] Add column to SummingMergeTree table #3054
Hello. As I know I can add a column to an existing SummingMergeTree table using Alter table statement. But is it possible to add this new column to the primary key or to the aggregated columns ? For example I have a table: CREATE TABLE T...
-
Это для нереплицируемых так можно, для реплицируемых метаданные еще и в ZK хранятся
-
А в саом ZK в логах что?
-
это
/var/log/zookeeper/zookeeper.log -
-
Нужны все запросы которые висели, кто-то кого-то ждал, но взаимной блокировки быть недолжно
-
-
-
Реально. Но вы можете только добавить поле в ключ в конце и он не должен поменять физическую сортировку (поле по нему должно быть с дефолтовыми значениями)
-
Пока только перелить данные, но скоро можно будеть через ALTER это делать
-
Да, все так и делаю.
-
-
Нет инструкции
-
-
Я бы посоветовал создать нереплицируемую таблицу такойже структуры рядом, перекинуть туда партиции, поменять ключ там, дропнуть везде реплицируемые и накатить с новой структурой и перенести партиции снова
-
-
-
мы в итоге грохнули zookeeper, и пересоздали все таблицы
-
беда чет
-
Kirill
А подскажите, у меня в одной из таблиц вот такой индекс.
(campaign_id, company_id, creative_id, zone_id, event_datetime)
Если в основном я делаю запросы сперва по event_datetime, а потом уже фильтрую по другим колонкам.
Может же это быть причиной медленных выполнения моих запросов ?
Данных у меня не много примерно 5 лярдов.
полей у меня не много.
┌─name───────────┬─type─────┬─default_type─┬─default_expression─────┐
│ event_date │ Date │ DEFAULT │ toDate(event_datetime) │
│ event_datetime │ DateTime │ │ │
│ company_id │ Int32 │ │ │
│ zone_id │ Int32 │ │ │
│ campaign_id │ Int32 │ │ │
│ creative_id │ Int32 │ │ │
│ domain │ String │ │ │
│ device │ String │ │ │
│ os_type │ String │ │ │
│ browser │ String │ │ │
│ lang │ String │ │ │
│ country_code │ String │ │ │
│ impression_cnt │ Int32 │ DEFAULT │ CAST(0 AS Int32) │
│ click_cnt │ Int32 │ DEFAULT │ CAST(0 AS Int32) │
└────────────────┴──────────┴──────────────┴────────────────────────┘ -
* это зависит от кардинальности в campaign_id, company_id, creative_id, zone_id
* от того как вы пишете where event_datetime
* от того какой период вы пытаетесь охватить запросом
* от кол-ва партиций который оббегает запрос
* от того что вы понимаете под медленно
* от значения настройки optimize_move_to_prewhere -
-
а как партиционирована таблица? по event_date ? надо его тоже всегда писать вам в where тогда
40 быстро, у меня медленно если 15 мин.
в общем как бы информации не хватает, SET send_logs_level='debug' и смотрите что там пишется -
CREATE TABLE xxxx.statistic_by_minutes_4 (
event_date Date DEFAULT toDate(event_datetime),
event_datetime DateTime,
company_id Int32,
zone_id Int32,
campaign_id Int32,
creative_id Int32,
domain String,
device String,
os_type String,
browser String,
lang String,
country_code String,
impression_cnt Int32 DEFAULT CAST(0 AS Int32),
click_cnt Int32 DEFAULT CAST(0 AS Int32)
) ENGINE = ReplicatedMergeTree(
\'/clickhouse/tables/1/xxxx/statistic_by_minutes_4\',
\'ch01-weu.xxx\',
event_date,
(campaign_id, company_id, creative_id, zone_id, event_datetime),
8192
)
event_date - вообще не использую. -
ок, опять, похоже, словил, на другом сервере. и на этот раз kill query ушёл в pending... что-то неладное
-
не используете? у вас партиционировано по нему, допишите его в where посмотрите будет ли разница.
-
параллельно идёт запрос относительно реплицируемой таблицы
rename table loglog.log_2018_05_new to loglog.log_2018_05 -
KILL QUERY WHERE query_id = '5804ab9b-e385-4de2-9c5b-4481a44b7bec' ASYNC
┌─kill_status─┬─query_id─────────────────────────────┬─user────┬─query─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ pending │ 5804ab9b-e385-4de2-9c5b-4481a44b7bec │ default │
SELECT
database,
table,
SUM(bytes) AS bytes,
COUNT(*) AS parts,
SUM(rows) AS rows
FROM system.parts
WHERE active = 1
GROUP BY
database, table
ORDER BY
database, table │
└─────────────┴──────────────────────────────────────┴─────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -
Все норм, они ждут когда завершится rename
-
А rename вообще может быть долгой операцией? Где-то выше Алексей писал, что она очень простая. Плюс в зукипере ничего не меняется.
У нас с десяток серверов в кластере, на 10 rename пройдёт за пару секунд, на каком-то залипает на пару минут. Думал, это проблема. -
Он дожидается седектов которые идут (это как минимум)
-
и возможно rename ждет конца идущих мержей
-
Вот это вероятнее. Просто селектов не было, кроме того, который мониторинг делал
-
добрый вечер. а это нормально что не приходит мерж
http://joxi.ru/l2ZLnopTwXYgZr -
/stat@combot
-
это починил. но в логах какая-то страная ошибка
<Error> ServerErrorHandler: Code: 210, e.displayText() = DB::NetException: Connection reset by peer: while reading from socket (10.0.0.4:50958), e.what() = DB::NetException, Stack trace:
при этом инсерты отрабатывает нормально. и данные появляются -
А что может значит ошибка?
2018.11.11 23:54:11.107117 [ 8 ] {} <Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 214, e.displayText() = DB::Exception: Could not calculate available disk space (statvfs), errno: 2, strerror: No such file or directory, e.what() = DB::Exception, Stack trace: -
Could not calculate available disk spacе
может места нет или не может определить сколько свободно? -
Место есть. Но нагрузка на io большая
-
/stat@combot
- 12 November 2018 (247 messages)
-
-
Joined.
-
-
Joined.
-
Подскажите почему, когда я выбираю все записи select * from table, то получаю ошибку - too many open files. Если я набираю ulimit -n, то вижу сотни тысяч.
-
Если делаю запрос с limit 20, то все нормально
-
-
увеличьте лимит в sysctl.conf и /etc/security/limits.conf
-
Мой select * сколько дополнительных дескрипторов потребляет ? Мне непонятно сколько мне не хватает
-
ну увеличьте на 20 процентов
-
А чтобы для понимания? Сколько дескрипторов на один запрос без условия where требуется ?
-
Смотря сколько партиций/колонок он затрагивает
-
Если для простоты у меня 100 колонок и 10 партиций
-
Каждая колонка внутри партиции = файл?
-
Он откроет 100 *10?
-
Зачем ему все сразу открывать ?
-
Каждая колонка это файл, но нужно понимать что в партиции может быть много партов если по какой-то причине они еще не смержились
-
+ еще файлы засечек на колонку
-
А читать их как?
-
Это, я так понимаю, если все смержено
-
Сначала прочесть одну партицию. Закрыть . Потом другую.
-
Он параллельно читает, может из разных партиций
-
-
а движок у таблицы какой?
-
ReplicatedCollapsingMergeTree
-
Ошибок чтобы не было. Я сомневаюсь, что сразу все дескрипторы на все партиции открываются .смысла в этом нету
-
ну тогда он будет работать в сто раз медленее , и не будет смысла его использовать
-
Количество потоков ограниченно. Я про max_threads .если их всего 15, то дескрипторов,которые используется в данный момент будет только 15. Так?
-
к тому же в каждой партиции обычно несколько партов это еще надо умножить на и х количество
-
наврятли
-
возьмите lsof и посмотрите количество открытых файлов , ну а если хотите теоретические обоснование открытым файлам то почитайте матчасть
-
а ulimit проверяли для рута? А os какая?
-
Добрый день. Есть ли у кого какие статьи под рукой или какая другая информация по zoo. А именно какие параметры в нем мониторить, что бы понимать что ему хорошо
-
-
Joined.
-
Его и надо, по-моему.
-
Joined.
-
-
активный issue висит вроде
-
Yandex ClickHouse Driver · Issue #3332 · metabase/metabase
Metabase is great tool for Visualization and http://clickhouse.yandex is great database for analytics Could anybody add support for https://github.com/yandex/clickhouse-jdbc in Metabase ? ⬇️ Please...
-
да, я в курсе. но думал есть способ, раз здесь его советуют
-
а где советуют? что-то я видимо упустил
-
здесь к примеру
-
-
-
Есть вопрос по zookeeper'у. У нас внезапно закончилось место на нодах зукипера и clickhouse-server перестал работать. После освобождения места на диске zookeeper и clickhouse заработал. Но остался вопрос. Зукипер создает снэпшоты и логи, которые со временем начинают занимать все свободное место на диске. Есть ли встроенный функицонал ротации и чистки логов ? если нет, можно ли самому удалять файлы типа log.39600000032 и snapshot.210002fb66 ?
-
Я просто прочитал на сайте зукипера следующее
-
Сервер ZooKeeper создает файлы моментальных снимков и журналов, но не удаляет их. Политика хранения файлов данных и журналов выполняется за пределами сервера ZooKeeper. Сам сервер нуждается только в последнем полном нечетком снимке и файлах журнала с самого начала этого моментального снимка. Дополнительную информацию об установке политики хранения и обслуживании хранилища ZooKeeper см. В разделе обслуживания этого документа.
-
... Сам сервер нуждается только в последнем полном нечетком снимке и файлах журнала с самого начала этого моментального снимка.....
-
то есть по сути нужны только последний снэпшот и последний лог ?
-
верно ?
-
В примере конфига зукипера из доки есть ротация сих логов с оставлением N последних
-
по сути желательны последний и предпоследний.
-
По-крайней мере, накатить последний лог в случае дизастера может и не получиться.
-
Спасибо большое =) ща посмотрю
-
Joined.
-
Это в файле "log4j.properties" настраивается, верно ?
-
-
zoo.cfg
-
Привет! А подскажите, а есть какой-нибудь пригодный инструмент для визуализации данных из clickhouse? Табикс это жесть, нет никакой возможности централизованно для команды настроить визуализации, каждый сам свои сырые запросы, это не подходит. То есть я хочу, чтобы у меня команда могла смотреть на графики из кликхаус, как это сделать, кто что использует?
-
Там же нет такого
-
У нас сделано:
autopurge.snapRetainCount=6
autopurge.purgeInterval=1
snapCount=1000000 -
Там по-умолчанию нет, а вообще опции есть.
-
у нас пока хватает графаны
-
Я просто здесь смотрю http://zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin.html#The+Log+Directory
-
-
-
Я понял, спасибо)
-
Ну и рекомендуемая версия для зукипера всё ж поновей
-
Благодарю ! =)
-
У нас стоит zookeeper-3.4.13.jar
-
так что подойти должно) всем спасибо еще раз ! 👍
-
ClickHouse plugin for Grafana | Grafana Labs
ClickHouse datasource for Grafana
-
А разве Grafana не про time series data? или там любые можно графики-выборки-запросы делать?
-
Без query cache и при выполнении тяжелых запросов для графиков может стать грустно :(
-
Это да, часть дашбордов грузится секунд по 20. Но я же сказал _пока_ хватает :-)
-
грусть тоска прям. Мне бы что то вроде Metabase.
-
Про оно самое с некоторыми исключениями, но пока именно это и требуется.
-
Посмотрите Redash
-
-
Не пойму за что отвечает данный параметр
Clients can submit requests faster than ZooKeeper can process them, especially if there are a lot of clients. To prevent ZooKeeper from running out of memory due to queued requests, ZooKeeper will throttle clients so that there is no more than globalOutstandingLimit outstanding requests in the system. The default limit is 1,000.ZooKeeper logs transactions to a transaction log. After snapCount transactions are written to a log file a snapshot is started and a new transaction log file is started. The default snapCount is 10,000.
snapCount=3000000 -
На простом языке может кто-нибудь обьяснить ?
-
в чем измеряются эти значения ?
-
-
Joined.
-
Мы юзаем Redash, делает все что вы хотите
-
Спасибо, попробуем его селф хостед вариант
-
Спасибо =)
-
Про логи зукипера
Параметр в zoo.cfg "autopurge.snapRetainCount"
New in 3.4.0: When enabled, ZooKeeper auto purge feature retains the autopurge.snapRetainCount most recent snapshots and the corresponding transaction logs in the dataDir and dataLogDir respectively and deletes the rest. Defaults to 3. Minimum value is 3.
Когда включено, функция автоматической очистки ZooKeeper сохраняет последние снимки autopurge.snapRetainCount и соответствующие журналы транзакций в dataDir и dataLogDir соответственно и удаляет остальные. По умолчанию 3. Минимальное значение равно 3. -
Это то что нужно)
-
логи и снапшоты сами почистились лишние)
-
Если вдруг кто то столкнется с проблемой что из-за падения Zookeeper'a все таблицы становятся read only, решение простое. Просто перезапустите сервера ClickHouse 😃
-
так себе решение, хочется сказать
-
можете ещё сервер предлагать ребутать
-
Коллеги, а подскажите, пожалуйста, есть ли какая-то известная бага/фича/магия связанная с limit ?
Например, такой запрос работает нормально:
select *
from groot3.events
where rocket_date = today()
and message_category = 'client'
and name in ('page_impression', 'section_impression')
Но если добавить в конец limit 10, то всё ломается:
select *
from groot3.events
where rocket_date = today()
and message_category = 'client'
and name in ('page_impression', 'section_impression')
limit 10
и падает с такой ошибкой:
Code: 171, e.displayText() = DB::Exception: Block structure mismatch in UNION stream: different names of columns:
event_hash String String(size = 0) и так далее 2 списка колонок, где есть небольшая разница в последовательности
Это лечится? Как? Версия=18.12.14 -
вроде не требуется перезапуск ClickHouse, когда ZooKeeper отпустило
-
Не в нашем случае
-
Говорят, в 18.14.13 действительно починено
-
хотя для 18.14.11 такое же сообщение было 🙂
-
> Исправлена ошибка Block structure mismatch in UNION stream: different number of columns в запросах с LIMIT. #2156
-
Мы несколько раз перезапускали Zookeeper ноды, но пока не рестартанули ClickHouse проблема не решилась
-
А вот для 18.14.13
> Исправлена ошибка Block structure mismatch in MergingSorted stream. #3162 -
а версия КХ какая?
-
18.14.12 revision 54409
-
Спасибо! Будем обновлятся)
-
Привет! Я видель в каком-то докладе, что есть утилита для генерации тестовых данных на основе настоящих. Можете, пожалуйста, скинуть ссылку на эту утилиту? Или это только в планах?
-
Joined.
-
Joined.
-
Привет,
В КХ сыпется много запросов, после
отправляется в скрипт затем результат вставляется обратно в КХ.
Забирается в среднем по 100 строк, обратно вставляется в среднем 1000. Ежесекундно может прилетать по 10 таких запросов с разных мест. Запросы не тяжелые, в htop видно, что оперативка забивается на 20-30%. На сервер 128гб оперативки. В конфигах стоят ограничения на
max_memory_usage
max_memory_usage_for_all_queries <= 64gib
В какой-то момент CH server стал постоянно падать и выдавать на все запросы следующие ошибки:
https://pastebin.com/3U06RR5h -
https://pastebin.com
офигительная штука для таких вопросов -
Добрый день, пытаюсь запросить около 20 млн записей с кх сервера через golang, используя драйвер github.com/kshvakov/clickhouse. Где-то 1 млн записей выкачивается с нормальной скоростью (4 MБ/c). Потом скорость падает до 100 КБ/c и остается такой до конца. Вот лог драйвера:
[clickhouse][connect=1][rows] <- data: packet=1, columns=43, rows=8192, elapsed=1.106877511s
[clickhouse][connect=1][rows] <- progress: rows=8192, bytes=6762571, total rows=0
[clickhouse][connect=1][rows] <- data: packet=1, columns=43, rows=8192, elapsed=1.170799767s
[clickhouse][connect=1][rows] <- progress: rows=8192, bytes=6092824, total rows=0
[clickhouse][connect=1][rows] <- data: packet=1, columns=43, rows=8192, elapsed=959.585951ms
[clickhouse][connect=1][rows] <- progress: rows=8192, bytes=7328057, total rows=0
[clickhouse][connect=1][rows] <- data: packet=1, columns=43, rows=8192, elapsed=38.558764707s
[clickhouse][connect=1][rows] <- progress: rows=8192, bytes=6649779, total rows=0
[clickhouse][connect=1][rows] <- data: packet=1, columns=43, rows=8192, elapsed=1m22.861005012s
[clickhouse][connect=1][rows] <- progress: rows=8192, bytes=6605601, total rows=0
[clickhouse][connect=1][rows] <- data: packet=1, columns=43, rows=8192, elapsed=1m23.435027637s
[clickhouse][connect=1][rows] <- progress: rows=8192, bytes=6651228, total rows=0
Тот же самый запрос выполняется нормально через clickhouse-client, без просадок по скорости загрузки. Может быть кто-то сталкивался с такой проблемой? -
clickhouse-obfuscator
ClickHouse release 1.1.54388, 2018-06-28 -
спасибо!
-
Он сильно медленный на выкачиваение данных, но деградации быть не должно, по идее.
-
Выставил block_size в 100 млн, перестало тормозить после одного милиона
-
Подскажите пожалуйста в строке
tcp://host1:9000?username=user&password=qwerty&database=clicks&read_timeout=10&write_timeout=20&alt_hosts=host2:9000,host3:9000
read_timeout=10&write_timeout=20 какие значение по умолчанию имеют ? -
Вообщем есть ли смысл их вручную проставлять ?
-
SELECT column1,column2,column3, column4
FROM table1
LIMIT 168370600, 100
запрос и бесмыссленный (без order by), и не жизнесопсобный, КХ не может эффективно скипнуть 168370600. Это не работает. -
Joined.
-
Спасибо, про order by - точно, забыл вписать. На счет того, что КХ не может скипнуть - не знал.
Значит все malloc error'ы из-за такой не жизнеспособной конструкции, правильно понимаю? -
-
скорее всего.
Скорее всего в КХ вообще это не сделать. Пока КХ не умеет для order by использовать sortkey (индекс). -
если за раз не удается, надо найти что-то, например по дням where date between '... ' and '... '
-
-
-
Ребят
-
-
ну а у него в памяти например 15% лежит, и читает он в 48 потоков.
-
почему красным показано использование 47 гигабайт данных ?
-
Желательно так
-
Это виртуальная память
-
я понимаю что виртуальная
-
Вам нужен столбец RSS
-
но столько же не используется типа
-
RES может быть ?
-
Ну в top он называется RSS
-
Видимо в htop это RES
-
Resident Set Size
-
-
в топе он тоже называется RES
-
спасибо)
-
вообще, лучше всего потребление памяти показывает PSS (Proportional Set Size), но обычные тулзы его не показывают
-
https://serverfault.com/questions/740210/htop-res-virt-colors
The red color indicates that the amount of VIRT or RES memory is in the area of gigabytes. The light blue color corresponds to megabytes, and therefore white color means kilobytes.
This is, that the users has instantly a visual information, if he searches for processes, which consume a lot of memory. Notice that, the nice values (NI) are also red, when they differ from 0 for the same reason as above. -
-
Привет.
КХ очень не нравятся кастомные файлы таймзон, настолько что он отказывается стартовать если localtime в системе взят из другой базы - "custom time zone file used".
А почему для него это так критично? -
Можно бить на диапазоны по партициям и по первичному ключу (если знаете, какие значения он может принимать) или просто SAMPLE 1/10 OFFSET N/10 , если таблица поддерживает сэмплирование
-
остальные способы будут заставлять кликхаус читать больше данных (иногда намного больше), чем вы хотите скачать
-
Нужно сообщить клиенту таймзону сервера. Это делается путём пересылки идентификатора таймзоны из базы tzdata. Такой способ с кастомными файлами таймзон не работает.
-
Добрый день.
Существует движок по MergeTree. В документации подробно описано то, что он позволяет
Но есть движок-интеграция Kafka. Как я поняЛ, при его использовании ClickHouse автоматически подключается к Kafka и слушает сообщения. Отсюда вопросы:
- что делать,если я хочу индексацию как в MergeTree?
- Там релизовано записывание данных батчами?
Или я все не так понял? -
не так.
в документации написано:
Чтение сообщения с помощью SELECT не слишком полезно (разве что для отладки), поскольку каждое сообщения может быть прочитано только один раз. Практичнее создавать потоки реального времени с помощью материализованных преставлений. Для этого:
Создайте потребителя Kafka с помощью движка и рассматривайте его как поток данных.
Создайте таблицу с необходимой структурой.
Создайте материализованное представление, которое преобразует данные от движка и помещает их в ранее созданную таблицу.
https://clickhouse.yandex/docs/ru/operations/table_engines/kafka/ -
все, необходимо было сформулировать вопрос, получить в ответ точную цитату из инструкции. Все стало понятно. (не сарказм, так бывает, спасибо)
-
-
Взять имя таблицы в кавычки или в backticks:
DROP TABLE `.inner.omg` -
Joined.
-
Старые версии КХ бывало дропали inner таблицу до MV, и потом доходили до дропа MV и получалась такая проблема. Пофиксить можно по разному:
остановить КХ, удалить каталог базы в каталогах meta и data,
сделать detach MV, создать таблицу .inner.impressions_view, attach, drop MV -
Ребят таблица заглючила, нужно вычистить из zookeeper'a
-
rmr /clickhouse/01/replicas/table_name
эта команда подойдет ? -
@stufently
-
Или rmr все удалит ?
-
а почепму просто drop table не сделать ?
-
потому что в кликхаусе ее нет
-
Replica /clickhouse/tables/01/client_data.upload_customers/replicas/s1-click already exists
-
ну тогда да руками
-
получаем такую ошибку
-
ее на диске тоже нет
-
в зукипере
-
в зукипере есть
-
вот вопрос
-
какой командой удалить ?
-
я не помню точно какая команда ну там либо rm либо rmr я очень давно делал когда только начинал с кх и всякие тесты по крешу проводил
-
там помню хелп можно было в зккли написать
-
и там был список команд
-
да команды есть
-
delete не может удалить
-
говорит диекртория не пуста
-
видимо rmr
-
ну да рмр видимо рекурсивное удаление
-
он удалит надеюсь только одну таблицу ? не весь /clickhouse ?
-
я помню когда удалил тоже была проблема что директория не пуста , и потом использовал какую то рекурсивную команду удаления
-
ну там же просто файловая система по сути
-
ну сделайте бекап зукипера на всякий случай
-
удалит путь который пропишешь в команде не все данные кх
-
Ладно попробую rmr спасибо
-
спасибо)
-
Всем привет!
А есть ли какие-то рекомендации по вставке в clickhouse? Если у меня пока только 1 тачка, то какой клиент лучше использовать, чтобы убедиться в том вставились данные или нет?
Вопросы возникли когда начали пропадать данные при вставке, явно что-то не так делаю. Собственно, вставляю в 50 потоков и в каждом потоке батчами до 100к записей -
Joined.
-
-
-
ну это плохо так вставлять , в го клиент говорит если были проблемы со вставкой , все таки 50 потоков это много для кх на одной тачке если они часто вставляют одновременно
-
в логах ошибки с чтением и записью блоков, правда непонятно связано ли это с таумаутом дисковых операций
-
ну не должно быть ошибок
-
ну посмотрите топ в пиковые нагрузки если нет мониторинга
-
помогло) спасибо)
-
а что значит батчами по 100к ?
100к insert-ов или 100к записей в одном insert? -
100k записей в одном insert
-
а ошибки вообще контроллируются? Все инсерты успешны были?
-
Коллеги, всем привет.
Нам нужно гарантировать запись в clickhouse, но вставка отвечая 200 не сбрасывает на диск.
На HL Алексей Миловидов посоветовал использовать репликацию, так как в процессе идёт запись на диск(я так понял). Вот читаю доки можно настроить insert_quorum.
Правильно я понимаю что при получении 200 на insert уже точно будет fsync на диск? -
Как понять, что insert прошел успешно? Мб подскажете, в питонячьем неофф клиенте insert ничего не возвращает
-
200 вернулось.
-
Значит надо на другой клиент переходить
-
скорее всего вы неправильно поняли, insert_quorum используется чтобы получить ответ что инсерт прошел на нескольких репликах, в этом случае вероятность потери данных после полученного 200 меньше.
-
А что подразумевается под insert на реплику?
-
Значит двести вернули n реплик указанных в инсерткворуме
-
что блок записался больше чем на 1й ноде в replicated* таблицу.
https://clickhouse.yandex/docs/ru/operations/settings/settings/#insert_quorum
это кстати про блок, а не про insert. Сам инсерт неконсинтент и не атомарен. -
А эта таблица лежит где? она будет потеряна в случае перезагрузки сервера?
-
это та самая таблица куда вставка идет. Каждый блок инсерта - это парт - файл, при перезагрузке, незасинканые файлы ( парты ( последние блоки)) потеряются
-
А в какой момент принимается решение сбросить на диск? С какой задержкой, от чего зависит?
-
ну как обычно, это os определяет - если ос ядро линукса то vm.dirty_expire_centisecs vm.dirty_ratio ?
-
Коллеги, а правильно понимаю, что движок MergeTree используется по умолчанию? В доке везде пишут, что при создании МатВью надо обязательно указать движок. При этом у меня в МатВьюхах нет указаны движки и.... работает )
-
Joined.
-
Коллеги, ещё 1н вопрос, будьте любезны.
Есть встроенный движок kafka, он даёт какие-то гарантии консистентного импорта?:) -
-
ну устарела документация, некоторое время назад появилась возможность "TO" -- указать таблицу в которую будет писать MV, поэтому движок у MV теперь обязателен, только если MV сам неявно создает inner таблицу.
-
Ага, спасибо, примерно так и думал... я использую конструкцию как раз с TO.
-
а можно как то посмотреть какой размер у MV?
-
сам MV, это лишь sql файл, а таблица - это обычная таблица
select round(sum(bytes)/1024/1024/1024) size, count(), database,table
from system.parts
where active = 1 and table like '%%'
group by database,table
order by size desc -
SELECT
table,
formatReadableSize(size) AS size,
rows,
days,
formatReadableSize(avgDaySize) AS avgDaySize
FROM
(
SELECT
table,
sum(bytes) AS size,
sum(rows) AS rows,
min(min_date) AS min_date,
max(max_date) AS max_date,
max_date - min_date AS days,
size / (max_date - min_date) AS avgDaySize
FROM system.parts
WHERE active
GROUP BY table
ORDER BY rows DESC
) -
тогда я не совсем понимаю логику... у нас сделано так: есть таблица Kafka. Она подписывается на топик. Т.к. селектить напрямую от туда нельзя, т.к. данные читаются 1 раз - сделал MV_logs, которое из Kafka -> Logs. То есть таблица Logs - это тамблица с сырыми данными. После этого начинаю делать другие MV. Они получаются типа Create MV 'name' to 'table_name' FROM MV_logs. И оно работает. Даже если просто делать select * from MV_LOGS, которое по идее просто должно трансферить данные из кафки - отображаются очень старные данные, которых там не должно быть
-
show create mv_logs
CREATE MATERIALIZED VIEW CDN_LOGS.mv_logs TO CDN_LOGS.Cache_logs ( ) AS SELECT ) AS type FROM CDN_LOGS.Kafka -
-
Пример запроса на любое другое MV CREATE MATERIALIZED VIEW CDN_LOGS.mv_codes TO CDN_LOGS.codes FROM CDN_LOGS.mv_logs
-
потому что не важно откуда делать селект из inner ( MV ) таблицы или из MV, это не имеет отношения к кафке вообще.
-
то есть запрос select * from mv_logs делается из inner таблицы MV ?
-
запросы select from mv_codes и select from codes всегда вернут одно и тоже.
-
я понимаю, что вернут одно и тоже... я хочу понять откуда данные забираются
-
т.к. судя по логике - источником данных должна быть таблица Kafka.
-
данные забирает из кафки таблица engine=kafka ( CDN_LOGS.Kafka ) и пихает в MV, который пихает в CDN_LOGS.codes
-
ClickHouse Community Meetup in Beijing on October 28, 2018
Interest in ClickHouse among Chinese experts is growing rapidly. It was second ClickHouse Meetup in Beijing this year an
-
CREATE MATERIALIZED VIEW mmmm TO store FROM чего_угодно
когда вы делаете запрос к mmmm , фактически делается запрос к store. -
а насколько консистентно он это делает?
-
примерно нинасколько, у менч по крайней мере.
-
-
-
то есть, получается если есть MV CREATE MATERIALIZED VIEW mv_logs TO Cache_logs FROM Kafka, И я делаю запрос, другой MV - CREATE MATERIALIZED VIEW mv_avgreqtime_ts TO avgreqtime_ts FROM mv_logs, то данные будут читаться с Cache_logs, а не с Kafka?
-
так то все очень неплохо работает. и быстро и вроде без видимых дропов данных. Просто мат часть понять
-
в целом, да так и получается... спасибо
-
-
Добрый вечер. Такой вопрос к пользователям Redash.
У меня 10 серверов, реплика 2, 5 шардов. Соответственно локальные таблицы и поверх distributed.
В настройках redash не нашёл способа сделать так, чтобы запросы шли на разные сервера, чтобы не нагружать один «master», который указан в настройках соединения к ClickHouse.
Как вы решаете/обходите эту проблему? -
nginx/chproxy/haproxy
-
Мммм… Спасибо
-
так если таблица уже distributed и распределяет запросы
тогда какая разница кого нагружать? -
Данные все равно через один хост пойдут, нагрузка конечно не такая как если бы он выполнял сам, но если есть простые способы от нее избавиться, то почему нет?
-
Joined.
-
ммм, потому что наверное это преждевременные оптимизации?) сам редаш умный и спокойно кеширует результат ответа, сколько бы юзеров не лазило.
У нас это организовано несколькими дашбордами которые апдейтяться раз в час -
-
тоже думал, как лучше организовать и собирался уже добавить возможность указывать несколько серверов, но в итоге решил использовать chproxy+haproxy
-
Joined.
- 13 November 2018 (202 messages)
-
как тебя удялят, сделает мой день!
-
-
А что было? Если решения нет может и вопрос удалить? :)
-
Неправильно были названы секции.
-
Всем привет. Подскажите пожалуйста, есть ли возможность просчитывать площади полигонов средствами КХ?
-
-
Вопрос про засечки, есть ли разница в оптимальности между двумя вариантами ключа (вымышленный пример)?
1) Порядок столбцов: id, gender, age
2) Порядок столбцов: id, age, gender
При условии, что age и gender имеет одинаковый тип, но gender бывает только 0 или 1 -
-
Всем привет.
А как-то можно получить от самого КХ список detached партиций? Или "смотри листинг папок на диск, Люк"? -
Добрый день
-
мы столкнулись с ошибкой
-
Too many simultaneous queries. Maximum: 100
-
Это ограничение как то можно снять ?
-
Joined.
-
<max_concurrent_queries>100</max_concurrent_queries>
в конфиге? -
У нас в конфигурации хосты повторяются, не видим в этом проблемы
-
-
Joined.
-
Увидел спасибо =)
-
<max_concurrent_queries>100</max_concurrent_queries>
Максимальное количество одновременно обрабатываемых запросов.
До какого значение лучше увеличить ? есть какие то принципиальные логические ограничения ? -
Имеется ввиду например, рекомендация не ставить больше 1000
-
Ладно поставлю 500
-
grafana ?
-
там нет возможности строить нормально аналитические графики
-
Какие аналитические графики вам необходимо строить? почему вы считаете что в Графане для этого нет возможностей?
-
потому что графана для тайм сериес дата и как только я захочу там иметь график из серии "воронка", он будет грузиться неизвестное количество времени.
-
так это проблема не в графане - а в количестве запрашиваемых вами данных, и количестве имеемых вычислительных ресурсов
-
да как угодно, факт в том, что с помощью этого инструмента аналитические графики строить невозможно при разумных потраченных ресурсах.
-
Всем привет, в клике хранятся показы и клики, и есть задача выгружить эти данные за кастномный период, при этом высчитать их в лоб довольно долго(данные за 2 недели считаются порядка 5-7 с). Можно ли как то средсвами клика хранить уже препосчитанные данный за каждый день отдельно и при необходимости их забирать?
-
superset
-
Мы из датасорса ClickHouse, в Графане, показываем графики по входящим логам от продуктовых nginx, поток которых равен ~12Млн строк/мин. У нас все ок, графики есть - за последние сутки отрисовывает ~10сек
-
Вообще-то это как раз пример time series
-
так это потому что тайм сериес дата. Отобразите там график медианы количества операций определенного типа в разрезе когорт юзеров и посмотрите, что произойдет.
-
И, кстати, графана-то как раз нормально большие объёмы переваривает. Вот броузеры...
-
Так это не проблема - подобный запрос построить можно, Графана предоставляет возможность прокивыдвать "Типы операций" и "типы когорт юзеров" в тело запроса. КХ получит этот запрос - обработает его и вернет результат - долго ли он будет его обрабатывать зависит от количества общитываемых данных и ваших мощностей.
Если вам нужны подобные выборки БЫСТРО- то строить их из сырых данных идиотия! Используйте аггрегаторы, и TSDB. -
Графана здесь совершенно непричем!
-
это как микроскопом гвозди забивать. На графане это неудобно. Если уж говорить для обычных SQL, то метабейз в сто раз круче графаны для графиков не про потоки времени. Вся проблемпа только в том, что с кликхаусом у них интеграции нет. "Построить запрос можно" и "это удобное и адекватное решение" - разные вещи.
-
А какой софт для прокидывания в клик таких объемов если не секрет? Кафка и zoo?
-
Мы на go написали свой маленький лог-коллектор - с парсингом и применением кастомных функций. Возможно заопенсорсим
-
А чем метабейз поможет лучше запрос построить? Вы путаете интерфейс и бэкенд.
-
Подскажите, пожалуйста, по поводу "неизвестного момент времени", в который запускается слияние для *MergeTree. Хотя бы порядок цифр интересует, речь о секундах, минутах, часах или возможно больше?
-
-
-
-
Сделай прокси, проще будет
-
-
прокси - nginx c https-бекендом, а не специально написанное приложение.
-
-
если id уникален и не бывает одинаковых id с разным age то достаточно просто id (если это не summing...)
если хочется ускорить запросы без id в where то id первым все портит.
в общем надо делать тесты, надо знать что такое id, но судя по названиям индекс должен быть gender,age,id
Скорее всего ткаой sortkey позволит быстро выполнять любые комбинеции
Where age=
where gender=
Where id=
Where gender= and id=
Where age> and gender= -
Здравствуйте, пытался сделать загрузку в виде kafka -> MergeTree -> SummingMergeTree через 2 MV, в SummingMergeTree данные не попадают, это так и должно быть? Если делать в виде kafka (group1) -> MergeTree + kafka(group2) -> SummingMergeTree, то все ок, но вопрос к оптимальности такого решения
-
каскадироват mv нельзя.
я бы попробовал повесить оба mv на одну кафка таблицу.
Что такое group2? -
group2 - это kafka consumer group id
-
-
работает!
-
Как думаете из-за чего может быть такие спайки на ноде при репликации в часы наибольшей нагрузки
-
трафика там 5 мбит где то
-
-
пропускная способность zoo?
-
иногда нода может решить скачать смерженный кусок с другой ноды, вместо того чтобы мержить локальные
-
схема пока 1 активная база, 1 реплика...
-
зеленое - это входящий траффик на тот хост, куда вы пишете?
-
да входящий на реплику
-
исходящий откуда качается собственно такой же
-
но на "другой" не идут клиентские INSERT?
-
на основной как раз идут инзерты все. На реплику потом все переливается
-
BackgroundPoolTask не упирается в этот момент?
-
а это где посмотреть можно?
-
в таблице system.asynchronous_metrics.
-
select * from system.asynchronous_metrics
SELECT *
FROM system.asynchronous_metrics
┌─metric──────────────────────────────────┬──────value─┐
│ jemalloc.background_thread.run_interval │ 0 │
│ jemalloc.background_thread.num_runs │ 0 │
│ jemalloc.background_thread.num_threads │ 0 │
│ jemalloc.retained │ 1344557056 │
│ jemalloc.mapped │ 4880314368 │
│ jemalloc.resident │ 4736299008 │
│ jemalloc.metadata_thp │ 0 │
│ jemalloc.metadata │ 20982104 │
│ ReplicasMaxQueueSize │ 0 │
│ UncompressedCacheCells │ 0 │
│ MarkCacheFiles │ 222 │
│ Uptime │ 334619 │
│ UncompressedCacheBytes │ 0 │
│ MarkCacheBytes │ 9328 │
│ jemalloc.allocated │ 890980888 │
│ ReplicasMaxInsertsInQueue │ 0 │
│ ReplicasMaxMergesInQueue │ 0 │
│ ReplicasMaxRelativeDelay │ 0 │
│ jemalloc.active │ 907632640 │
│ ReplicasSumQueueSize │ 0 │
│ ReplicasSumInsertsInQueue │ 0 │
│ ReplicasMaxAbsoluteDelay │ 0 │
│ ReplicasSumMergesInQueue │ 0 │
│ MaxPartCountForPartition │ 19 │
└─────────────────────────────────────────┴────────────┘ -
это в данный момент (сейчас нету такой гребенки)
-
нашел
-
BackgroundSchedulePoolTask │ 2 │ Number of active tasks in BackgroundSchedulePool. This pool is used for periodic tasks of ReplicatedMergeTree like cleaning old data parts, altering data parts, replica re-initialization, etc.
-
не в асинхронных метриках, а в просто метриках
-
Наше нагрузочное тестирование (кластер из двух нод):
70 rps - кликхаус падает раз в 5-10 секунд
60 rps - вероятность падения 1 одной ноды в течении 2-ух минут
50 rps - вероятность паделния любой из нод около 20% в течении получаса
45 rpc - очень маленькая вероятность падения ClickHouse в течении часа
каждая нода 10 ядер + 48 Гб RAM
Вдруг кому то интересно (это не селекты, а произведение расчетов) -
Да, ошибся в metrics:
│ BackgroundPoolTask │ 1 │ Number of active tasks in BackgroundProcessingPool (merges, mutations, fetches or replication queue bookkeeping)
У нас был момент при мелких вставках, упирались в этот пул. Он по умолчанию 16 вроде. Увеличили. -
-
а где его увеличить можно? в конфиге клика?
-
в userx.xml в профайле для пользователя, что делает эти операции - по умолчанию default
<background_pool_size>512</background_pool_size> -
Прежде чем менять лучше все же отмониторить ситуацию на момент проблемы.
-
да, это безусловно
-
спасибо, посмотрим
-
-
/stat@combot
-
а select-ы где выполняются? они к distributed таблице?
-
distributed таблиц нет. Селекты только к 1 активной базе, с которой сливается реплика
-
ну я бы почитал логи КХ на обоих серверах, что в этот момент происходит.
-
ошибок и варнингов нету, только дебажные логи
-
Блин я думал это суббота, там кстати до сих пор to be announced для первого доклада
-
Вопрос касался разницы порядка age и gender
Так как gender меняется реже (а такое бывает ровно 1 раз) правильнее ли его ставить раньше
С другой строны gender меняется чаще и фильтр по нему будет продуктивнее (будет фильтроваться меньшее число строк)
Верно ли это рассуждение? -
нашел вот такое
-
stderr.log
%3|1542103714.940|FAIL|ClickHouse 18.14.8#consumer-2| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Receive failed: Disconnected
%3|1542103714.940|ERROR|ClickHouse 18.14.8#consumer-2| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Receive failed: Disconnected -
кафка похоже
-
не видя запросов и не зная что такое id ответить нельзя.
есть запросы вида id= and gender= and age > ?
я бы начал с gender, age
но вообще -- id первым все портит (я предполагаю что есть запросы без where id=) -
Ребята, подскажите пожалуйста, может есть директива которая говорит кликхаусу не использовать кеш? для оценки быстроты выполнения запроса
-
кеш чего? линукса? [ echo 1 > /proc/sys/vm/drop_caches ]
кеш марков? кеш uncompressed? создайте и дропните любую mergetree табли -
Кеш результата запроса
-
нету такого
-
понял, спасибо =)
-
Все же вопрос касался конкретно засечек и способа их хранения. Это вопрос к разработчикам.
Например, если подряд идет много одинаковых данных, влияет ли это каким то образом на засечки или нет. -
ааа, тогда прошу прощения, я не хотел мешать.
-
-
Останови сервер, скопируй папку с базой, переименуй папку, запусти сервер
-
Ну там ещё мету надо и если реплики то тоже не просто все
-
-
-
Ребят, помогите советом. Хочу вывести из нагрузки реплику из шарда, хотел уточнить план действий, для себя составил таким образом:
1) убираю в конфигах с шарда на всех нодах реплику которую нужно потушить; Убираю её же с конфигов зукипера
2) рестартую Кликхаус
3) Тушу сервер
Подскажите если что не так! Спасибо! -
-
А обноленные конфиги кликхаус сервера поднянутся без рестартования clickhouse серверов ?
-
Третьим пунктом идет рестарт
-
то есть изменения в config.xml подтягиваюся на лету ?
-
а зукипер будете вручную чистить? надо дропнуть все replicated таблицы на ней, иначе zk взорвется из-за того что ее реплика будет писать в zk информацию для нее, а забирать некому.
-
нашел в конфиге такую секцию
<resharding>
<task_queue_path>/clickhouse/task_queue</task_queue_path>
</resharding>
непонятного происхождения, и в исходниках кх не грепается - это что-то из старой функциональности? -
Надо дропнуть таблицы чтобы почистились пути в зукипере, что значит убираю ее из конфигов зукипера?
-
А кто прикручивал алертинг к графане? я так понял из коробки там не работает их алертинг и все обещают сделать...
-
-
t.me/clickhouse_ru/73647Denny Crane in ClickHouse не тормозит
да есть оно set enable_optimize_predicate_expression = 1; select count() from (select * from part_test prewhere V>1000) where A=700; 1 rows in set. Elapsed: 0.053 sec. Processed 10.15 million rows, 162.40 MB (189.79 million rows/s., 3.04 GB/s.) set enable_optimize_predicate_expression = 0; select count() from (select * from part_test prewhere V>1000) where A=700; ^C 23%Cancelling query. Ok. Query was cancelled. 0 rows in set. Elapsed: 68.444 sec. Processed 2.33 billion rows, 37.22 GB (33.99 million rows/s., 543.82 MB/s.)
-
а оно в пределах пользовательской сессии работает?
-
enable_optimize_predicate_expression выключено по умолчанию, потому что нашлись баги, и пользоваться ей не рекомендуется.
Просто не пользуйтейсь view вообще. -
-
-
Joined.
-
Joined.
-
Joined.
-
-
или писать запросы вручную или генерить?
-
-
-
-
тут телепат нужен, но предикаты из внешнего запроса вглубь не проталкиваются, это точно.
-
-
Кто-нибудь сталкивался с
Code: 62. DB::Exception: Syntax error (data type): failed at position 1: . Unrecognized token: while receiving packet
?
Происходит при определённых условиях.
1. Выбираю * из таблицы
2. В таблице есть NESTED структуры..
3. Происходит иногда, - можно указать, например, limit 1 и будет ошибка, а на limit 100 не будет ошибки
Таблица на самом деле широкая - внутри NESTED структуры есть LowCardinality(String) и много всего другого -
Конфиг зукипера я имел ввиду то что прописано в zookeeper-servers в секции nodes, у нас несколько реплик прописаны там ( А дропать реплицируемые таблицы в какой момент, в этой схеме? После того как убрать из конфигов шарда и рестарта кликхаус серверов?
-
Там нигде реплики не прописываются
-
Дропать можно в самом начале
-
Было бы прикольно проиндексировать этот чат, выделить вопросы и ответы. И сделать типа stackoverflow, кроме того бот автоматом предложит ответ если таковой имеется в базе. Ведь здесь собралась огромная, бесценная база знаний по теме. И таких групп много где нужен такой бот.
-
Ну тогда сложно будет продавать суппорт по 350 долларов в час
-
-
Спасибо!
-
а не проще всем просто перейти на SO, а этот чат удалить?
-
-
-
я слышал можно микроскопом гвозди забивать.
-
в этом чате 99% интересных вопросов остаются неотвеченными, потому что их никто не увидел из-за потока мусора.
-
На SO куча мусорных ответов, которые здесь как раз фильтруются
-
-
Повторяется, но ответ на них меняется с версией, о чем бот не знает. В этом и преимущество чата -- гарантия актуальности.
-
-
согласен, но ведь ничего не мешает "обновить" ответ
-
этот бот пахнет как стронг ИИ.
-
-
именно
-
Это гораздо более дорогая операция, чем дать новый ответ. Так сказать ALTER UPDATE
-
вы шутите, я надеюсь.
-
Вечер добрый. А кто может подсказать, что за движок "VersionedCollapsingMergeTree"?
-
-
а в чем это проявляется?)
-
И есть ли описание - какие входные параметры при создании таблицы с этим движком? (или те же что и у Collapsing?)
-
Судя по названию, есть некоторое поле version, и коллапсится только с одинаковыми его значениями.
-
Да просто гадать особо не хочется, а потестить хочется)
-
обычный collapsing при мерже строк относящихся к одному ключу считает что более поздние записи более правильные, в случае когда в одном куске оказывается несколько (больше двух) записей с минусом и плюсом, то этот кусок лога кажется интерпретируется как самая первая запись с минусом и самая последняя с плюсом, и по-моему при схлопывании ключа в ничто, т.е. удалении, тоже есть какой-то спецэффект. в версионированном движке эти вещи сделаны более аккуратно.
-
Интересно, спасибо за развернутый ответ. А по созданию - как создавать таблицы (ENGINE) с таким движоком?
-
-
Спасибо!
-
-
Вложеннные селекты в MV не будут работать да?
-
MV выполняет запрос на (over) вставляемом блоке.
зыж: я бы почитал ответ иван иваныча на этот вопрос. -
Привет! Есть ли информация, насколько MV замедляет вставку в таблицу-источник, и что будет, если будет много MV над одной таблицей?
-
Собираюсь вот такую таблицу (ReplicatedMergeTree) создать:
event_date Date DEFAULT toDate(event_datetime)
event_datetime DateTime
zone_id UInt32
campaign_id UInt32
creative_id UInt32
link_id UInt32
creative_type UInt32
impression_cnt Int64
click_cnt Int64
Запросы в основном буду делать по event_datetime, потому как нужна поддержка различных тайм-зонов для клиентов.
Ну и дополнительно буду фильтровать по creative_type, меньше всего будут фильтры по zone_id,campaign_id, а тем более по creative_id и link_id
Подскажите какой лучше всего сделать индекс?
Сегментировать лучше всего наверно по event_date или сократить до YYYYMM ? -
Будет много таблиц и много вставок, в новых версиях вставку можно распараллелить.
-
зачем вам event_date ? и сколько дней будете хранить?
если на пример во многих запросах будет скажем where campaign_id и campaign_id имеет мало возможных значений то
partition by YYYYMM(event_datetime)
order by creative_type, campaign_id, event_datetime
но сказать точно можно только заполнив таблицу похожими данными (с похожим распределением) и прогнав тесты. -
-
это вопрос про партиционирование, партиционировать по дням или по месяцам.
При вечном хранении у вас будет либо 365 либо 12 партиций в год. Я голосую за YYYYMM.
Для вечного хранения я бы не рискнул делать 365 партиций, вот если бы хранили данные месяц (у меня например никаких жестких дисков не хватит хранить год), можно было бы использовать дневные партиции. -
Спасибо!
-
а кто-нибуть знает это нормально распределение партиций?
-
mc [arturch]~ (307 kb) uploaded November 13, 2018 Joxi
made using Joxi.net
-
я думал будет одна запись за месяц
-
это парты, а не партиции
-
сорри, неправильно вырозился. это так и будет? или они должны оптимизироватся и схлопыватся?
-
должны, схлпонутся через бесконечность лет, когда-нибудь.
вы зачем на диск смотрите? есть таблица system.parts -
проще же
select round(sum(bytes)/1024/1024/1024) size,count() parts_count, database,table,partition
from system.parts
where table like '%моя таблица%' and active
group by database,table,partition
order by size desc -
А вот в итоге без event_date не создать таблицу =(
DB::Exception: Date column name must be an unquoted string
По другому же никак ? -
-
вы о чем? запрос покажите
-
CREATE TABLE IF NOT EXISTS xxxxx.link_stat_9 ( event_datetime DateTime, zone_id UInt32, campaign_id UInt32, creative_id UInt32, creative_type UInt8, impression_cnt Int64, click_cnt Int64) ENGINE = ReplicatedMergeTree('\''/clickhouse/tables/2/xxxxx/link_stat_9'\'' ,'\''ch02-weu.xxxxx'\'',toYYYYMM(event_datetime), (creative_type, zone_id, campaign_id, event_datetime), 8192)
-
я же писал
partition by YYYYMM(event_datetime)
order by creative_type, campaign_id, event_datetime -
вот так
CREATE TABLE IF NOT EXISTS link_stat_9 ( event_datetime DateTime, zone_id UInt32, campaign_id UInt32, creative_id UInt32,
creative_type UInt8, impression_cnt Int64, click_cnt Int64)
ENGINE = MergeTree
partition by toYYYYMM(event_datetime)
order by (creative_type, zone_id, campaign_id, event_datetime) -
и вы зря не используете макросы
вот это /clickhouse/tables/2/xxxxx/link_stat_9'\'' ,'\''ch02-weu.xxxxx'\'
вырождается в '/clickhouse/tables/{shard}/link_stat_9','{replica}'
и можно выполнять на любой ноде, ddl везде будет одинаковый -
/clickhouse/tables/ тоже можно выразить через макрос или убрать через zk chroot
-
-
Joined.
-
Joined.
-
Приветствую.
Подскажите, как можно взаимодействовать с ClickHouse из Rust? Или из программ на Cи. -
Я видел пару крейтов, но насколько они живы не щупал.
-
-
-
-
в конце запроса FORMAT TabSeparated
https://clickhouse.yandex/docs/en/interfaces/formats/#tabseparated -
Точно работает, спасибо... Почему-то думал, что оно только для INTO OUTFILE применяется.
-
Joined.
-
Joined.
-
Joined.
-
Joined.
- 14 November 2018 (165 messages)
-
А что значит "падает"? По какой причине?
Если по сигналу (segfault, abort), то будет сообщение в логе (ищите по фрагменту ###). Наличие таких случаев - это баг первого приоритета, надо быстро разбираться.
Если по OOM, то будет сообщение в dmesg. -
Эта утилита называется clickhouse-obfuscator. Она входит идёт вместе с clickhouse-client, отдельно устанавливать нет нужно. Документация прямо по --help.
-
спасибо! очень полезная вещь
-
-
Упирается в память и падает. Сейчас снова провести там же нагрузочное не могу, так как это уже продакшн. Но логи посмотрю, может там есть то о чем вы написали)
-
Joined.
-
добрый, подскажите, можно ли менять clickhouse_compression на лету?
-
А какие есть ещё варианты? А если про raw, то куда смотреть? Сишного драйвера я не нашёл.
-
-
Нет, требуется перезапуск.
-
Для Clickhouse без репликации какие изменения нужны? минус Zookeeper? engine менять с ReplicatedMergeTree на MergeTree не обязательно?
-
Или нереплицируемый кликхаус может спокойно работать с replicated merge tree ?
-
надо менять на мердж три , минус зукипер конечно
-
Если реплика одна, но шардов много, то разве можно без зукипера?
-
а зачем там зукипер ?
-
ничего не репоизируется
-
Можно, но когда захочешь добавить реплики, придётся сношаться с ковнертацией всех таблиц.
-
просто поверх обычного mergetree дистрибьютед таблица
-
Коллеги, добрый день!
Подскажите, как кликхаус относится к параллельным запросам (6-8 одновременно), которые отдают много данных (Около 2Гб)?
У нас в такие моменты кликхаус просто перестает отвечать на запросы, нагрузки на процессор нет, диск тоже, сеть гигабитная, тоже вполне свободна. -
Joined.
-
Joined.
-
-
в такие моменты я просто через clickhouse-client делаю запрос и прогресс бар не двигается, бывает, что отпускает и через минут 10 запрос начинает отрабатывать
-
Joined.
-
А что в SHOW PROCESSLIST?
-
там запросы есть, но значение в колонке read_rows не меняется, и в остальных колонках кроме elapsed тоже не меняется
-
-
-
что имеете ввиду ?
-
-
Joined.
-
?
-
Вычесть их друг из друга
-
SELECT datediff('day', toDate('2018-01-01'), toDate('2018-09-01'))
-
Спаасибо.
-
Товарищи, есть ли знающие люди по движку Kafka? Бьюсь с проблемой уже который час( В общем есть Кафка, в нее попадает JSON. Сделал табличку:
CREATE TABLE default.kafka_queue
(
event_time DateTime,
event_type String,
app_name String,
advertising_id String
) ENGINE = Kafka SETTINGS
kafka_broker_list = 'kafka-stack-docker-compose_kafka1_1:9092',
kafka_topic_list = 'topic1',
kafka_group_name = 'group1',
kafka_format = 'JSONEachRow'
Проблема: Пишу в kafka - из таблицы ничего не вычитывается.
В кафке данные точно есть - консольным клиентом вычитывается все отлично по топику.
В конфиг КХ добавил:
<kafka>
<debug>all</debug>
<auto_offset_reset>smallest</auto_offset_reset>
<security_protocol>plaintext</security_protocol>
</kafka>
</yandex>
Делаю select из таблицы - в логах КХ никаких ошибок нет, только:
<Debug> StorageKafka (kafka_queue): Starting reading 1 streams, 65536 block size
2018.11.14 11:31:21.687047 [ 43 ] {e2c0c4ff-53c1-46ed-bc41-ebaf92dedc2a} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2018.11.14 11:31:21.688144 [ 43 ] {e2c0c4ff-53c1-46ed-bc41-ebaf92dedc2a} <Debug> executeQuery: Query pipeline:
Expression
Expression
Kafka
2018.11.14 11:31:21.688750 [ 43 ] {e2c0c4ff-53c1-46ed-bc41-ebaf92dedc2a} <Trace> StorageKafka (kafka_appsflyer_kos): Creating formatted reader
2018.11.14 11:31:24.186764 [ 43 ] {e2c0c4ff-53c1-46ed-bc41-ebaf92dedc2a} <Trace> StorageKafka (kafka_appsflyer_kos): Committing 0 messages
Т.е. оно как бы вычитало 0 сообщений? Но в логах кафки вообще нет никаких логов когда КХ что-то там пытается.
Когда же из консоли вычитываю - кафка пишет лог что кто-то подключился.
Создается ощущение что КХ до кафки не доходит, но в логах ошибок никаких нет.
Куда посмотреть еще можно? -
Из хоста КХ порт кафки доступен
-
если делать обычный селект из таблицы кафки в кх - данные есть?
-
данные из таблицы кафки читаются только 1 раз
-
нет, вообще данных нет, про 1 раз знаю, проблема в том что вообще ни разу не вычитываются
-
-
пробовал IP - то же самое, хост из контейнера нормально пингуется/telnet'ится по этому имени
-
-
-
-
Я только что создал таблицу направленную "вникуда" - несуществующий хост и порт, заселектил - в логах КХ все идентично ни одной ошибки.
-
В логах кафки косумер даже не создается от КХ, только от консольных клиентов
-
Спасибо, это крайне полезная инфа, сейчас попробую
-
-
здравствуйте, как лучше распарсить строку вида:'ActionType=return_gift|GloryLevel=86|M3PlayedAll=11328|SessionId=3357|TimeSpentInGame=61846|TotalExp=4026758' , т.е. аргументы эта строка и ActionType, а получить надо return_gift
-
т.е. по типу json
-
можно попробовать заменить | на & и скормить функции extractURLParameter()
-
ok, спасибо
-
-
-
Привет, как посмотреть , сколько оперативной памяти жрет внешний словарь?
-
:) select name, bytes_allocated from system.dictionaries;
-
ok, спасибо
-
Joined.
-
через \N
-
Заменять все значения в файле на \N? Oo
-
Всем привет. А кто-нить работает с ClickHouse из Tableau? У меня проблема в следующем. Из Desktop версии табло с моей машины все работает, когда настроил все как писали в статье https://www.altinity.com/blog/2018/7/19/tableau-with-clickhouse
Но далее воркбук гружу на Tableau Server, где те же процедуры из статьи также были выполнены, но никак не хочет подключаться к CH например при Refresh Extract или Live Data Source. Как подружить Tableau Server и ClickHouse?Tableau with ClickHouseClickHouse users often require data to be accessed in a user-friendly way. There is a number of tools that can display big data using visualization effects, charts, filters, etc. Tableau is one of the popular ones. In this article, we will explain how Tableau can be used with ClickHouse data source.
-
-
-
в любой непонятной ситуации я подозреваю selinux, если у вас редхат или центос я бы проверил системный лог. Ну и tcpdump покажет пытается-ли КХ забрать из кафки.
-
@den_crane Все в докерах, хост - macos. TCPdump показывает что КХ соединяется с кафкой, соединение живет пока живет таблица. Но вот заглянув в дамп я не увидел там топика передающегося в кафку. По дампу видно что КХ с кафкой общаются 1 раз в секунду примерно мелкими пакетами, на уровне приложения.
-
вы пробовали в топик много положить? КХ забирает пачками по 65 тыс.
-
этого не пробовал, но там же вроде КХ либо пачку большого размера либо какая есть но по таймауту, разве нет? Попробую ваш вариат.
-
@den_crane Кажется я разобрался, дебаг логи librdkafka сыпятся не в файл а в консоль, а я ее не смотрел.
В логах вот что https://gist.githubusercontent.com/crazyproger/9049201fd9c39fe6e50863927d727441/raw/f2029bd501a8858311a1e7dc3c81c827439618d2/gistfile1.txt
Насколько я понял - clickhouse бутстрапится из кафки и та ему отдает адрес брокера localhost... -
Печально что КХ по-умолчанию ничего не сообщает касательно доступности брокеров и т.д. Только врубать kafka.debug=true.
-
Скажите пожалуйста, надо ли тюнить настройку max_read_buffer_size в ClickHouse? Если у нас рейд из 6 дисков, то надо выставить размер буфера как минимум в 6 Мб, правильно? Особой документации или даже упоминаний в интернете этой настройки я не нашел 🙂
-
Я сделал такой вывод на основе недавнего выступления Алексея Миловидова на хайлоаде: https://youtu.be/hkcOmILykas?t=11929 . Поправьте меня, если я не прав.HighLoad++ 2018. Трансляция, 9 ноября
HighLoad++ 2018 http://www.highload.ru/moscow/2018 -------- Нашли ошибку в видео? Пишите нам на support@ontico.ru
-
это была фраза для программистов, которые пишут приложения. Т.е. когда вы будете писать свою программу и захотите утилизировать диск полностью -- имейте ввиду буфер и многопоточность.
Рейд у вас какой? 0 , 5 , 6, 10 ? хардварный/софтверный? -
mdraid, 6 дисков
-
раид какой 0 или 10 ?
-
или 5 ?
-
короче Алексей там сказал про layout = far и в доке было упоминание про размер страйпа 1МБ.
-
не уверен, но вроде либо 5 либо 10
-
цирк.
-
Есть большая разница. Сделайте cat /proc/mdstat
-
я не админ :), и настраивал не я
-
поэтому на память не помню и посмотреть тоже не могу
-
для layout = far и страйпа в 1МБ надо пересобирать.
-
Тогда просто не парьтесь
-
+1 забейте
-
Это настройки самого mdraid, а не кх
-
просто far мы итак выставили
-
да, я спрашивал про настройки КХ
-
а не рейда
-
Если вас в работе CH все устраивает - не трогайте настройки типа max_read_buffer_size, они там не для того, чтобы их 100% крутить. Если не устраивает - рассказывайте поведение, ожидаемый результат и как вы это делаете - вам возможно подскажут. Просто крутить ради кручения ручек - не надо
-
Joined.
-
Всем привет! Встал вопрос о том чтобы использовать КХ вместо ms sql. В связи с этим встал вопрос, есть ли смысл в переезде при том условии, что в обозримом будущем будет лишь одна нода в «кластере»?
-
Как альтернатива еще рассматривается oracle
-
-
Аналитические запросы по таблицам +- 2 млрд строк
-
-
слишком мало строк для ClickHouse
-
Ну 2 ярда это в условиях ограниченности нынешней системы, гипотетически может возникнуть необходимость ворочать 10+ млрд
-
Да, на одной ноде 2 млрд строк это нормально
-
Ну там уже понятно будет расширение