Предлагам да се запознаете с разшифровката на доклада от 2017 година на Игор Стрыхарь «ClickHouse – визуално бърза и нагледна анализа на данни в Tabix».
Уеб интерфейс за ClickHouse в проекта Tabix.
Основни възможности:
- Работи с ClickHouse директно от браузъра, без необходимост от инсталиране на допълнителен софтуер;
- Редактор на запитвания с подсветка на синтаксиса;
- Автозавършване на команди;
- Инструменти за графичен анализ на изпълнението на запитвания;
- Цветови схеми на избор.



Аз съм технически директор на СМИ2. Ние сме агрегатор на новини. Съ храним много данни, които получаваме от нашите партньори и ги регистрираме в ClickHouse – около 30 000 запитвания в секунда.
Това са данни като:
- Кликове по новините.
- Показвания на новини в агрегатора.
- Показвания на банери в нашата мрежа.
- И регистрираме събития с нашето собствено броячче, подобно на Яндекс.Метрика. Това е нашата собствена микроаналитика.

Имахме много бурен живот преди ClickHouse. Много страдахме, опитвайки се да складираме тези данни някъде и как да ги анализираме.
Живот преди ClickHouse — infiniDB
Първото, което имахме, беше infiniDB. Тя работи при нас 4 години. Започнахме я с труд.
- Тя не поддържа кластеризация или шардове. Никакви такива умни неща не бяха налични по подразбиране.
- Тя има затруднения с зареждането на данни. Само специфичен конзолен инструмент, който можеше само да зарежда CSV файлове и само по много неразбираем начин.
- Базата данни е еднопоточна. Можеше или да пише, или да чете. Но тя позволяваше обработка на голям обем данни.
- И още имаше интересен проблем. Всяка нощ трябваше да рестартираме сървъра, иначе не работеше.
Работи до края на 2016 година, когато напълно преминахме на ClickHouse.
Живот преди ClickHouse — Cassandra
Тъй като infiniDB беше еднопоточна, решихме, че ни трябва някаква многопоточна база, в която можем да пишем много потоци едновременно.
Опитахме много интересни неща. После решихме да пробваме Cassandra. С Cassandra всичко беше прекрасно. 10 000 запитвания в секунда на ставка. 2 000 запитвания някъде на четене.
Но и тя имаше своите особености. Веднъж в месеца или два, възникваше разсинхронизация на базата данни. И се налагаше да ставаш и да бягаш да поправяш Cassandra. Рестартираха сървърите по ред. И всичко ставаше гладко и красиво.
Животът преди ClickHouse – Druid
После разбрахме, че трябва да пишем още повече данни. През 2016 година започнахме да разглеждаме Druid.
Druid е открита база данни, написана на Java. Много специфична. И беше подходяща за clickstream, когато трябваше да съхраняваме определен поток от събития и след това да правим агрегиране или аналитични отчети по тях.
Druid имаше версия 0.9.X.
Самата база данни се разгръща много трудно. Това е сложността на инфраструктурата. За да я разгрънете, трябваше да инсталирате много-много железа. И всяко желязо отговаряше за своята отделна роля.
За да заредите данни в нея, трябваше да приложите някакво шаманство. Има проект с отворен код – Tranquility, който в потока ни загубваше данни. Когато зареждахме данни в него, той ги губеше.
Но някак си започнахме да го внедряваме. Ние, като таралежи, които се бодат, но продължават да ядат кактус, започнахме да го внедряваме. Нуждаехме се от около месец, за да подготвим цялата инфраструктура за него. Това значи, че трябваше да поръчаме сървъри, да настроим роли, да направим пълна автоматизация на разгръщането. Тоест, в случай на падение на кластера, да разгръща автоматично втори кластер.

Но тогава се случи чудо. Бях в отпуск и колегите ми изпратиха линк на , където се говореше, че Яндекс реши да отвори ClickHouse. Казах, че да опитаме.
И буквално за 2 дни разгръщаме тестов кластер ClickHouse. Започнахме да зареждаме данни в него. В сравнение с infiniDB – това е елементарно, в сравнение с Druid – това е елементарно. В сравнение с Cassandra също е елементарно. Защото когато от PHP зареждаш данни в Cassandra, това не е елементарно.

Какво получихме? Производителност в скорост. Производителност в съхранение на данни. Тоест, изисква се много по-малко дисково пространство. ClickHouse е бърз, той е много бърз в сравнение с другите продукти.

В момента на стартиране, когато Яндекс публикува ClickHouse в OpenSource, имаше само консолен клиент. Ние в нашата компания СМИ2 решихме да опитаме да направим нативен клиент за web, за да може от браузера да отворим страница, да напишем запитване и да получим резултат, защото започнахме да пишем много запитвания. Писането в конзолата е трудно. И направихме първата ни версия.

И около зимата на миналата година започнаха да се появяват странични инструменти за работа с ClickHouse. Това са такива инструменти като:
- .
- .
- . (Сега )
- .
- .
Ще разгледам някои от тези инструменти, т.е. тези, с които съм работил.

Добър инструмент, но за Druid. Когато внедрявах Druid, се запознах със SuperSet. Харесва ми. Работи много бързо за Druid.
Не е подходящ за ClickHouse. Т.е. подходящ е, стартира, но готов е да обработва само елементарни заявки като: SELECT event, GROUP BY event. Не поддържа по-сложна синтакса на ClickHouse.

Следващият инструмент – Apache Zeppelin. Това е нещо добро и интересно. Работи. Поддържа тетрадки, таблови дашбордове, поддържа променливи. Знам, че някой от общността ClickHouse го използва.
Но няма поддръжка за синтаксиса на ClickHouse, т.е. ще трябва да пишете заявките или в конзолата, или някъде другаде. След това да проверявате дали всичко работи. Това просто е неудобно. Но поддръжката за дашбординга е добра.

Следващият инструмент е Redash.IO. Redash се хоства в интернет. Т.е. в отличие от предишните инструменти, не е необходимо да го инсталирате. И това е дашборд с възможност за консолидация на данни от различни DataSource. Т.е. можете да експортирате от ClickHouse, MySQL, PostgreSQL и други бази данни.

Буквално преди месец (през март 2017 година) се появи поддръжка в Grafana. Когато изграждате отчети в Grafana, например, за състоянието на вашето оборудване или за някакви метрики, сега можете да изградите същия график или панел от данни от ClickHouse директно. Това е много удобно и ние го използваме при нас. Позволява ви да откриете аномалии. Т.е. ако нещо се случва и какво-то оборудване пада или се напряга, можете да проверите причината, ако тези данни са успели да стигнат до ClickHouse.

Беше ми много неудобно да пиша в тези инструменти или в конзолата. И реших да доработя нашия първи интерфейс. И взех идея от EventSQL, SeperSet, Zeppelin.

Какво исках? Исках да получа графики, подобрен редактор, да реализирам поддръжка на речници с предложения. Защото ClickHouse има отлична функция – речници. Но с речниците е трудно да се работи, защото трябва да помните формата на съхранените стойности, т.е. дали е число или стринг и т.н. А тъй като често използваме речниците в различни вариации, беше достатъчно трудно да пишете заявки.

Изминаха 3 месеца от релиза на първата ни версия. Направих около 330 комита в затворен клон и получих Tabix.
В отличие от предишната версия, която се казваше ClickHouse-Frontend, реших да променя името на по-просто. И така получих Tabix.
Какво ново?
Рисува графики. Поддържа SQL синтаксис на ClickHouse. Подсказва функции и прави много интересни неща.

Ето как изглежда общата схема на Tabix. Отляво е представено дървото. В средата – редакторът на заявките. А отдолу – резултатът от тази заявка.

Сега ще покажа как работи редакторът на заявките.

Тук автоматично се включи автокомплит за таблиците и съответно подсказва за полетата. И подсказки за функциите. Ако натиснете ctrl + enter, заявката ще се изпълни или ще получи грешка. Най-простата заявка се изпраща в Tabix и получавате резултат, т.е. може да се работи бързо с ClickHouse.

Данните, или както вече споменах, това е много интересна материя, с която работим много. И която позволи да направим много неща. Например, в данните съхраняваме всички градове. Съхраняваме идентификатора на града и името на града, неговата ширина и дължина. А в базата съхраняваме само идентификатора на града. По този начин значително компресираме данните.

Това, изглежда, е проста работа, но в ClickHouse тя помага по много интересен начин. Поради факта, че ClickHouse поддържа само вложени join, заявката расте надолни и нагоре значително. И когато се отвори скоба и се появи дълго израз, нещо толкова просто, колкото свиването на заявката, помага да се работи по-лесно с самата заявка. Защото когато заявката е 200-300 реда и на ширина е доста огромна, свиването на заявката изключително спасява и след това можете да намерите конкретно място или да я локализирате.
Дървото на обектите, мултизаявките и разделите (Видео 13:46 )

Следващите ще покажа за дървото и разделите. Отляво – това е дървото, а отгоре можете да създадете няколко раздела. Разделите са като работно пространство. Можете да създадете няколко раздела и всеки да ги именувате по свой начин. Това е като мини система за генериране на отчети.
Разделите се запазват автоматично. Ако презаредите браузъра или го затворите или отворите Tabix, всичко ще се запази.
Бърза клавишна комбинация – удобно (Видео 14:39 )
Има бързи клавишни комбинации и те са достатъчно много. Някои от тях извадих тук за пример. Това е за превключване между разделите, изпълнение на заявка или изпълнение на няколко заявки.

Ще покажа как да работим с резултатите. Изпращаме запит. Тук рисувам sin, cos и tg. Може да подчертаем резултата, т. е. да из绘ога типова карта на колонка. Може да подчертаем положителни или отрицателни стойности. Или просто да оцветим конкретен елемент от таблицата. Това е удобно, когато таблицата е огромна и е нужно да намерим аномалия с очи. Когато търсех аномалии, подчертавах някои редове, някои елементи с зелен или червен цвят.

Има много интересни неща. Например, как да копирате в Redmine Markdown. Ако трябва да копирате резултата някъде, това е много удобно. Просто изберете област, кажете „Copy to Redmine“ и той ще копира в Redmine Markdown или ще създаде запитване Where.

Следваща стъпка – оптимизация на запитванията. Един път забравих да посоча полето „date“. И запитването в ClickHouse не се обработваше много- много бързо, но бързо, т. е. по-малко от секунда. Когато видях колко реда преминава, ми стана страшно. Ние за 24 часа не пишем толкова реда в тази таблица. Започнах да анализирам запитването и видях, че на едно място съм пропуснал датата. Т. е. забравих да уточня, че ми трябват данни не от цялата таблица, а за конкретен период.
В Tabix има вкладка „Stats“, в която се съхранява цялата история на изпратените запитвания, т. е. там можете да видите колко реда са били прочетени от това запитване и колко време е отнело да се изпълни. Това помага за оптимизация.
Над резултата от запитването можете да построите сводна таблица. Изпратили сте запитване в ClickHouse, получили сте някакви данни. И след това тези данни могат да се манипулират с мишката и да се построи сводна таблица.

Следващата интересна вещ е построяването на графици. Да предположим, имаме такова запитване: за sin, cos от 0 до 299. За да го начертаете, трябва да изберете вкладката „Draw“ и ще получите график с вашите sin и cos.

Може да разделите всичко на различни оси, т. е. да начертаете два графика до конструкция. Написвате една команда и друга команда.

Може да начертаете хистограми.

Може да разделите всичко на матрица от графици.

Може да построите топлинна карта.

Може да построите топлинен календар. Между другото, това е много удобно нещо, когато трябва да анализирате аномалии за година, т. е. да намерите или пик, или спад. Тази визуализация на данни ми помогна в това.

Следващото е Treemap.


Sankeys – интересна графика. Това е или Streamgrahps, или River. Но аз го наричам River. Той също така позволява да се търсят определени аномалии. Много е удобен. Препоръчвам да го използвате за търсене.

Следващото интересно нещо е визуализацията на динамична карта. Ако в базата данни имате съхранена ширина, дължина и, да речем, местоназначение, например, ако имате автомобилен транспорт или самолети, които летят, можете да визуализирате маршрутите към местоназначението. Там също можете да зададете скоростта, размера на обектите, в които идват.
Но проблемът с тази карта е, че тя показва само картата на света, без детайлизация.

По-късно добавих Google map. Ако съхранявате ширина и дължина, можете да визуализирате резултата на Google map, но без поддръжка на самолетите.
Основните функции за работа с резултата, с заявката в Tabix, обговорихме.

Следващото нещо е анализът на вашия ClickHouse сървър. Има отделен раздел "Метрики", в който можете да видите размера на съхраняваните данни за всяка колона. На снимката е показано, че полето "referrer" заема около 730 Gb. Ако се откажем от това поле, ще спестим три шардове по 700 GB, т.е. около 2 TB, които не са ни необходими.
Също така имаме поле "request_id", което съхраняваме в текстов формат. Но ако започнем да го съхраняваме в числов формат, това поле ще се компресира значително.
Също така тук е показана конфигурацията на сървъра и списъкът на нодовете в кластера.

Следващият раздел е метрики. Те се извличат в реално време от ClickHouse и просто позволяват да анализирате състоянието на сървъра и да разберете какво се случва с него. Това не е заместител на пълноценната Grafana. Нуждаете се от това, за да направите бърз анализ.

Следващият раздел е процеси. Чрез тях можете да разберете какво се случва на сървъра. Да разберете какво става. Имах заявка, която консумираше 200 GB на четене всеки път. Видях го благодарение на този интерфейс. Хванах го и го коригирах. И се получи около 30 GB, т.е. производителността се увеличи многократно.

Благодаря! И това е в OpenSource
Завърших. И, между другото, това е в OpenSource, безплатно е и дори не е нужно да се изтегля. Отворете в браузъра и всичко ще работи.
Въпроси
Игор, какво следва? Къде ще развиваш този инструмент?
Скоро появится дашборд, то есть, возможно, появится дашбординг. Интеграция с другими базами данных. Я это сделал, но еще не опубликовал в OpenSource. Это MySQL и, возможно, PostgreSQL. То есть, можно будет отправлять запросы из Tabix не только в ClickHouse, но и в другие инструменты.
Видно, что проделана огромная работа. Получилась достаточно полноценная идея. В браузере сделано, видимо, чтобы исключить костыли на разных осях и быстро собрать все это дело. Я слышал, что вы php работаете над этим, поэтому проще всего собрать в браузере, и все будет работать. Здесь вопросов нет. Но вот вопрос: действительно сделано очень многое. Сколько человек работали над этим? И сколько времени все это заняло? Потому что инструменты под себя обычно не имеют такого большого функционала.
С лета по осень работал один человек из нашей команды. Это была первая версия. Затем я сделал 330 коммитов. То, что вы видите, мы делали с коллегой пополам. За 3 месяца с первой версии до последней я один сделал большую часть. Но я очень плохо знаю Javascript. Это был мой единственный и, надеюсь, последний проект на Javascript, над которым я работал. Он мне достался, я посмотрел – о, ужас. Но мне очень хотелось доделать продукт, и вот что получилось.
Спасибо большое за доклад! Это отличный инструмент. С Tableau сравнивали?
Спасибо. Поэтому и назвал Tabix, потому что первые буквы совпадают.
Потому что конкурируете?
Будет много инвестиций, будем конкурировать.
Как предложите продать внутренним аналитикам, что этот инструмент полностью заменит *Tableau*? Какие будут аргументы?
Нативно работает с ClickHouse. Я пробовал Tableau, но там нельзя настраивать поддержку словарей и тому подобное. Я знаю, как работают с Tabix люди. Они пишут запрос, выгружают в CSV и загружают в BI. И уже там что-то делают. Но я с трудом представляю, как они это делают, потому что – это графический инструмент. Он может выгрузить 5 000 строк, максимум 6 000 строк, но не больше, иначе браузер не выдержит.
То есть есть серьезные ограничения по объему данных, да?
Да. Я не представляю, что вы захотите выгрузить 10 000 строк в таблицу на экране браузера. Зачем?
Подразумевается, что это интерфейс для быстрого просмотра данных? Поработать немного, покрутить?
Да, бързо да видим как работи и просто да построим обобщен график. А след това да го предоставим някъде. При нас имаме собствена система за отчети, откъдето просто извличам тази заявка. Рисувам в Tabix и я изпращам в нашата отчетна система.
И още един въпрос. Когортен анализ?
Ако има желания, ще добавим.
Когато едва започнахме да използваме ClickHouse, колко време отне внедрението ClickHouse и довеждането до продуктивно състояние?
Както казах, внедрихме тестов кластер за много кратко време. За два дни го разположихме. А още няколко седмици го тестваме. И до продукция стигнахме за около 3 месеца. Но имахме собствен ETL, т.е. инструмент за запис на данни. Той записваше във всичко, което е възможно. Може да записва в MongoDB, Cassandra, MySQL. Да го научим да записва в ClickHouse беше лесно. Имахме готова инфраструктура за бързо внедряване. След около 3 месеца започнахме да изхвърляме първия компонент. За 6 месеца напълно се отказахме от всичко останало. Остана ни само ClickHouse.
Игор, благодаря ти много за доклада. Изключително ми хареса функционалността за изграждане на маршрути по картите. Планира ли се интеграция с Яндекс.Картите и по-специално с кастомни Яндекс.Карти?
Опитах се да се интегрирам вместо Google map, но не намерих тъмен режим на Яндекс.Картите. Не споделих един момент. Ще се върна, за да допълня.
Слайд – Google map. Там има команда "DRAW_GMAPS", която рисува картата. Има команда "DRAW_YMAPS", т.е. може да нарисува Яндекс.Карта. А всъщност под тази команда стои Javascript, т.е. данните, които получавате от ClickHouse, могат да се предадат в Javascript, който написахте тук. И на изхода имате зона, където трябва да се нарисува. Може да се нарисува всякакъв график, т.е. всякакъв график, карта, можете да нарисувате свой собствен компонент. Преди това имах друга библиотека за рисуване на самите графици.
Т.е. там има инструмент за кастомизация на функционалността на отображението?
Всякакви. Може да вземете и да промените цвета на точките, да ги направите не червени, а сини, зелени.
Благодаря за доклада! Имахте слайд, на който бяха представени алтернативни инструменти за заявки ClickHouse за изграждане на табла с аналитични отчети. Разбрах, че в момента, когато започнахте да работите с ClickHouse, за тези инструменти не бяха написани адаптери. Интересно ми е защо решихте да направите свой собствен инструмент, вместо да напишете адаптер за готов инструмент? Мисля, че настройката на тестов редактор е бърза. Защо решихте да правите толкова много работа?
Тук има интересен момент – фактът, че аз съм технически директор, а не дата-сайентист. В момента, в който започнахме да внедряваме Druid, в плана ми имаше около 50% задачи – да сметим това или да анализираме онова. И стана така, че внедрихме ClickHouse. Започнах да изграждам всичко бързо, да смятам, и бързо завърших плана си. Тогава осъзнах, че ми липсват знания по Data Science и визуализация на данни. Tabix е мой вид домашно задание, свързано с изучаване на визуализация на данни. Гледах как да допълня Zeppelin. Имам лека неприязън към програмирането му. Redash разгледах как да допълня, но ми липсваше добър редактор. А SuperSet е написан на езика, който не обичам много. Затова реших да направя велосипед, и ето какво се получи.
Игор, приемате ли Pull request?
Да.
Благодаря много за доклада! Имам два въпроса. Първият – не говорите много положително за Javascript. Писахте ли на чист Javascript или всичко пак е с някакъв фреймворк?*
По-добре на чист Javascript.
И какъв фреймворк?
Angular.
Разбрах. И вторият въпрос. Обмисляли ли сте R и *Shiny**?*
Обмислях. Играх си.
Можеше просто да напишете адаптер.
Има такъв. От общността е направен, но както отговорих на предишния въпрос, исках сам да експериментирам.
*Не, относно визуализация, там има.
Вие казвате, че има такова нещо и то ще ви нарисува график. Отворих книга за визуализация на данни. Помислих: „Да видим дали мога да визуализирам тези данни. Ще го напиша сам, за да структурирам данните“. Започнах да разбирам по-добре технологията за подаване на данни. А ако бях взел готов компонент, лично бих научил по-лошо как да го използвам, т. е. именно визуализацията. Но така – да, R ми харесва, но още не съм чел книгата „R за начинаещи“.
Благодаря!
Прост въпрос. Има ли възможности за бързо експортиране на таблица, график?
Може да експортирате в CSV, в Excel.
Не данните, а готова таблица, готов график? Например, за да покажа на ръководството.
Има бутон «Изтегли» и бутон «Изтегли графика в png, в jpg».
Благодаря!
P.S. Мини-инструкция за инсталиране на tabix
- Изтегли
- Разархивирайте, копирайте директорията
buildв nginx root_path - Настройте nginx
Източник: habr.com

