Doporučuji se seznámit s přepisem zprávy z roku 2017 Igora Strykhaře „ClickHouse – vizuálně rychlá a přehledná analýza dat v Tabixu“.
Webové rozhraní pro ClickHouse v projektu Tabix.
Hlavní funkce:
- Pracuje s ClickHouse přímo z prohlížeče, bez nutnosti instalace dalšího softwaru;
- Editor dotazů se zvýrazněním syntaxe;
- Automatické doplňování příkazů;
- Nástroje pro grafickou analýzu vykonávání dotazů;
- Barevné schémata na výběr.



Jsem technický ředitel RIA Novosti. Jsme zpravodajský agregátor news exchange. Ukládáme mnoho dat, která získáváme od našich partnerů a registrujeme je v ClickHouse – asi 30 000 dotazů za sekundu.
Jedná se o taková data, jako jsou:
- Kliknutí na zprávy.
- Zobrazení zpráv v agregátoru.
- Zobrazení bannerů v naší síti.
- A registrujeme události z našeho vlastního počítadla, které je podobné Yandex.Metrice. To je naše vlastní mikroanalytika.

Měli jsme velmi bouřlivý život před ClickHouse. Velice jsme se trápili, snažíc se ukládat tato data někam a analyzovat je.
Život před ClickHouse – infiniDB
První, co jsme měli, byla infiniDB. Ta u nás vydržela 4 roky. Zavedli jsme ji s obtížemi.
- Nepodporuje clustering nebo sharding. Žádné takové chytré věci se zkrátka defaultně nezapnuly.
- Měla potíže s nahráváním dat. Pouze specifický konzolový nástroj, který mohl jen nahrávat CSV soubory a to docela nejasně.
- Databáze byla jednovláknová. Buď bylo možné zapisovat, nebo číst. Ale umožnila zpracovávat velké objemy dat.
- A měla ještě zajímavý workaround. Každou noc bylo nutné restartovat server, jinak nefungoval.
Provozovala se u nás do konce roku 2016, kdy jsme se plně přepli na ClickHouse.
Život před ClickHouse – Cassandra
Jelikož infiniDB byla jednovláknová, rozhodli jsme se, že potřebujeme nějakou vícevětvenou databázi, ve které můžeme zapisovat velmi mnoho vláken současně.
Zkoušeli jsme mnoho zajímavých věcí. Pak jsme se rozhodli vyzkoušet Cassandru. S Cassandrou jsme měli všechno skvělé. 10 000 dotazů za sekundu na zápis. 2 000 dotazů někde na čtení.
Ale měla také své zajímavosti. Jednou měsíčně nebo jednou za dva měsíce došlo k synchronizačnímu problému databáze. A museli jsme se probudit a běžet opravit Cassandru. Restartovali jsme servery po jednom. A všechno se stalo hladkým a krásným.
Život před ClickHouse – Druid
Později jsme pochopili, že potřebujeme ještě více psát dat. V roce 2016 jsme začali zkoumat Druid.
Druid je otevřená databáze napsaná v Javě. Velmi specifická. A hodila se pro clickstream, když jsme potřebovali uchovávat nějaký proud událostí a poté provádět agregaci nebo vytvářet analytické zprávy.
Druid měl verzi 0.9.X.
Sama databáze se nasazuje velmi obtížně. To je složitost infrastruktury. Aby se dala nasadit, bylo potřeba pořídit mnoho a mnoho zařízení. A každý prvek byl zodpovědný za svou specifickou roli.
K tomu, abychom do ní načetli data, bylo potřeba použít nějaké kouzla. Existuje OpenSource projekt – Tranquility, který nám v průběhu ztrácel data. Když jsme do něj nahrávali data, ztrácel je.
Ale nějak jsme jej začali zavádět. Jak ježci, kteří se bodají, ale stále jedí kaktus, začali jsme jej zavádět. Potřebovali jsme zhruba měsíc, abychom připravili celou infrastrukturu. Tedy objednat servery, nastavit role, provést plnou automatizaci nasazení. Tedy, v případě pádu clustera, aby se automaticky nasadil druhý cluster.

Ale pak se stalo zázrak. Byl jsem na dovolené a moji kolegové mi poslali odkaz na , kde se říká, že Yandex se rozhodl otevřít ClickHouse. Řekl jsem, že to zkusíme.
A během dvou dnů jsme nasadili testovací cluster ClickHouse. Začali jsme do něj nahrávat data. Ve srovnání s infiniDB – to je jednoduché, ve srovnání s Druid – to je jednoduché. Ve srovnání s Cassandrou také jednoduché. Protože pokud se data nahrávají z php do Cassandry, není to jednoduché.

Co jsme získali? Výkon v rychlosti. Výkon v uchovávání dat. Tedy se používá mnohem méně diskového prostoru. ClickHouse je rychlý, je velmi rychlý ve srovnání s jinými produkty.

V době spuštění, kdy Yandex publikoval ClickHouse v OpenSource, byl k dispozici pouze konzolový klient. My v naší společnosti SMI2 jsme se rozhodli zkusit vytvořit nativního klienta pro web, aby bylo možné otevřít stránku z prohlížeče, napsat dotaz a získat výsledek, protože jsme začali psát mnoho dotazů. Psát v konzoli je obtížné. A vytvořili jsme naši první verzi.

A přibližně na podzim loňského roku začala vznikat externí nástroje pro práci s ClickHouse. Mezi tyto nástroje patří:
- .
- .
- . (Nyní )
- .
- .
Podívám se na některé z těchto nástrojů, tj. na ty, se kterými jsem pracoval.

Dobrá nástroj, ale pro Druid. Když jsem implementoval Druid, testoval jsem SuperSet. Líbilo se mi to. Pro Druid funguje velmi rychle.
Pro ClickHouse se nehodí. Tj. sice funguje, ale připraven zpracovávat pouze elementární dotazy jako: SELECT event, GROUP BY event. Nepodporuje složitější syntaxi ClickHouse.

Další nástroj – Apache Zeppelin. Je to dobrá a zajímavá věc. Funguje. Podporuje poznámkové bloky, dashboardy, podporuje proměnné. Vím, že někdo z komunity ClickHouse ho používá.
Ale nepodporuje syntaxi ClickHouse, tj. bude třeba psát dotazy buď v konzoli, nebo jinde. Poté ověřit, že to všechno funguje. Je to prostě nepraktické. Ale podpora dashboardingu je u něj dobrá.

Další nástroj – Redash.IO. Redash je hostován na internetu. Tj. na rozdíl od předchozích nástrojů ho není třeba instalovat. A je to takový dashboard s možností konsolidace dat z různých DataSources. Tj. můžete exportovat z ClickHouse, z MySQL, z PostgreSQL a z dalších databází.

Před měsícem (v březnu 2017) se objevila podpora v Grafana. Když vytváříte zprávy v Grafana, například o stavu vašeho hardwaru nebo o nějakých metrikách, můžete nyní vytvářet stejný graf nebo nějaký panel z dat přímo z ClickHouse. To je velmi pohodlné a používáme to u nás. Umožňuje to nalézt anomálie. Tj. pokud se něco děje a nějaký hardware selhává nebo se přetěžuje, můžete zjistit příčinu, pokud se tato data dostala do ClickHouse.

Bylo mi velmi nepohodlné psát v těchto nástrojích nebo v konzoli. A rozhodl jsem se vylepšit naše první rozhraní. A inspiroval jsem se u EventSQL, SeperSet, Zeppelin.

Co jsem chtěl? Chtěl jsem získat grafy, vylepšený editor, implementovat podporu pro slovníky nápověd. Protože ClickHouse má skvělou funkci – slovníky. Ale se slovníky se těžko pracuje, protože je třeba si pamatovat formát uložených hodnot, tj. jestli je to číslo nebo řetězec apod. A protože často používáme slovníky v jejich různých variantách, bylo těžké psát dotazy.

Uplynuly 3 měsíce od vydání naší první verze. Udělal jsem přibližně 330 commitů do uzavřené větve a vznikl Tabix.
Na rozdíl od předchozí verze, která se jmenovala ClickHouse-Frontend, jsem se rozhodl přejmenovat ji na jednodušší název. A vznikl Tabix.
Co je nového?
Kreslí grafy. Podporuje SQL syntaxi ClickHouse. Poskytuje nápovědu k funkcím a zvládá mnoho dalších zajímavých věcí.

Takto vypadá celková schéma Tabix. Na levé straně je zobrazeno stromové zobrazení. Uprostřed se nachází editor dotazů. A dole – to je výsledek tohoto dotazu.

Nyní ukážu, jak funguje editor dotazů.

Tady automaticky funguje autocomplet na tabulce a poskytuje nápovědu k polím. A také nápovědy k funkcím. Pokud stisknete ctrl enter, dotaz se vykoná nebo selže s chybou. Nejjednodušší dotaz se odešle do Tabix a dostaneme výsledek, t.j. rychle lze pracovat s ClickHouse.

Slovníky, jak jsem již zmínil, jsou velmi zajímavá věc, se kterou pracujeme hodně. A umožnily udělat mnoho věcí. Například ve slovnících uchováváme všechna města. Uchováváme identifikátor města a název města, jeho šířku a délku. A v databázi uchováváme pouze identifikátor města. Tím pádem velmi silně komprimujeme data.

To se na první pohled zdá jako jednoduchá věc, ale v ClickHouse velmi zajímavě pomáhá. Vzhledem k tomu, že ClickHouse podporuje pouze vnořené joiny, dotaz roste dolů a široce. A když se otevírá závorka a probíhá nějaký dlouhý výraz, tak taková jednoduchá věc, jako je skládání dotazu, usnadňuje práci s dotazem. Protože když je dotaz na 200-300 řádků a široký, skládání dotazu opravdu pomáhá najít nějaké místo nebo jak jej lokalizovat.
Strom objektů, vícedotazy a záložky (Video 13:46) )

Následující ukážu strom a záložky. Na levé straně – to je strom, nahoře můžete vytvářet několik záložek. Záložky – to je jako workspace. Můžete vytvořit několik záložek a každou pojmenovat podle svého. Je to jako minisystém pro sestavení zprávy.
Záložky se automaticky ukládají. Pokud restartujete prohlížeč nebo zavřete nebo otevřete Tabix, vše se uloží.
Klávesová zkratka – pohodlné (Video 14:39) )
Existují klávesové zkratky a je jich poměrně hodně. Některé jsem zde uvedl jako příklad. To je přepínání záložek, provedení dotazu nebo provedení několika dotazů.

Ukážu, jak pracovat s výsledkem. Odesíláme dotaz. Zde vykresluji sin, cos a tg. Můžete zvýraznit výsledek, t. j. vykreslit typovou mapu sloupce. Můžete zvýraznit kladné nebo záporné hodnoty. Nebo jednoduše vybarvit nějaký konkrétní prvek tabulky. To je užitečné, když je tabulka obrovská a je potřeba najít nějakou anomálii očima. Když jsem hledal anomálie, zvýrazňoval jsem některé řádky nebo prvky zelenou nebo červenou barvou.

Je tam spousta zajímavých věcí. Například, jak zkopírovat do Redmine Markdown. Pokud potřebujete někam zkopírovat výsledek, je to velmi pohodlné. Stačí vybrat oblast, říct „Copy to Redmine“ a zkopíruje to do Redmine Markdown nebo vytvoří dotaz Where.

Dále – to je optimalizace dotazů. Jednou jsem zapomněl uvést pole „date“. A můj dotaz v ClickHouse byl zpracován ne velmi, ale rychle, t. j. za méně než sekundu. Když jsem viděl, kolik řádků procházel, začalo mi být úzko. Za den tolik řádků do této tabulky nenapíšeme. Začal jsem analyzovat dotaz a zjistil jsem, že jsem v jednom místě vynechal datum. T. j. zapomněl jsem uvést, že potřebuju data ne z celé tabulky, ale za nějaké konkrétní období.
V Tabix je záložka „Stats“, ve které se uchovává celá historie zaslaných dotazů, t. j. tam si můžete prohlédnout, kolik řádků bylo přečteno tímto dotazem a kolik času trval. To umožňuje optimalizaci.
Nad výsledkem dotazu můžete vytvořit kontingenční tabulku. Odeslali jste dotaz v ClickHouse, získali nějaká data. A dále můžete s těmito daty manipulovat a vytvořit nějakou kontingenční tabulku.

Další zajímavá věc – to je vytváření grafů. Předpokládejme, že máme takový dotaz: na sin, cos od 0 do 299. A abychom ho vykreslili, je potřeba vybrat záložku „Draw“ a získáte graf se svými sin a cos.

Můžete to rozdělit na různé osy, t. j. můžete vykreslit okamžitě dva grafy vedle sebe. Napsat jeden příkaz a druhý příkaz.

Můžete vykreslit histogramy.

Můžete to rozdělit na matici grafů.

Můžete vytvořit tepelnou mapu.

Můžete vytvořit tepelný kalendář. Mimochodem, velmi užitečná věc, když potřebujete analyzovat anomálie za rok, t. j. najít buď výkyvy, nebo poklesy. Tato vizualizace dat mi v tom pomohla.

Další – to je Treemap.


Sankeys – zajímavý graf. Je to buď Streamgraphs, nebo River. Já to nazývám River. Umožňuje také vyhledávat určité anomálie. Je to velmi užitečné. Doporučuji ho použít pro analýzu.

Další zajímavou věcí je vykreslení dynamické mapy. Pokud máte v databázi uloženu šířku a délku, a pokud například máte auto přepravy nebo létající letadla, můžete vykreslit trasy k destinacím. Můžete také nastavit rychlost, velikost těchto objektů, do kterých přilétají.
Ale problém s touto mapou je ten, že vykresluje pouze mapu světa, postrádá detaily.

Později jsem přidal Google mapu. Pokud ukládáte šířku a délku, můžete vykreslit výsledek na Google mapě, ale bez podpory letadel.
Hlavní funkce práce s výsledkem, se žádostí v Tabix jsme probrali.

Další je analýza vašeho serveru ClickHouse. Existuje samostatná záložka 'Metriky', kde si můžete prohlédnout velikost uložených dat pro každý sloupec. Na screenshotu je vidět, že pole 'referrer' zabírá něco kolem 730 GB. Pokud se tohoto pole vzdáme, ušetříme tři shardů po 700 GB, tedy přibližně 2 TB, které nepotřebujeme.
Také máme pole 'request_id', které ukládáme jako řetězec. Ale pokud ho začneme uchovávat v číselné podobě, tohle pole se dramaticky zmenší.
Zde je také ukázána konfigurace serveru a seznam uzlů vašeho clusteru.

Další záložka – to jsou metriky. Ty se získávají v reálném čase z ClickHouse a jednoduše umožňují analyzovat stav serveru a pochopit, co se na něm děje. Není to náhrada za plnohodnotnou Grafanu. Je to potřeba k rychlé analýze.

Další záložka – to jsou procesy. Z toho lze pochopit, co se na serveru děje. Zjistit, co tam probíhá. Měl jsem dotaz, který pokaždé zabíral na čtení 200 GB. Díky tomuto rozhraní jsem to viděl. Lapil jsem ho a upravil. A dostal jsem se na cca 30 GB, tedy výkon se výrazně zlepšil.

Děkuji! A to je OpenSource.
Skončil jsem. A mimochodem, to je OpenSource, je to zdarma a ani nemusíte stahovat. Otevřete v prohlížeči a všechno bude fungovat.
Otázky
Igore, co teď? Kam budeš tento nástroj rozvíjet?
Dále se objeví dashboard, tj. je možné, že se objeví dashboard. Integrace s jinými databázemi. To jsem udělal, ale ještě jsem to nepublikoval jako OpenSource. Je to MySQL a možná PostgreSQL. To znamená, že bude možné z Tabix posílat dotazy nejen do ClickHouse, ale také do jiných nástrojů.
Je evidentní, že byla udělána obrovská porce práce. Vznikla docela funkční myšlenka. V prohlížeči bylo uděláno, zřejmě proto, aby se vyloučily křivky na různých osách a rychle všechno hodilo dohromady. Slyšel jsem, že pracujete na tom, php proto je nejjednodušší všechno hodit do prohlížeče a všude to bude fungovat. K tomu nejsou žádné otázky. Otázka je však taková. Opravdu bylo uděláno velmi mnoho. Kolik lidí na tom pracovalo? A kolik času to všechno zabralo? Protože nástroje na míru obvykle nemají takovou širokou funkcionalitu.
Od léta do podzimu pracoval jeden člověk z našeho týmu. To byla první verze. Pak jsem sám udělal 330 commitů. Co vidíte, to jsme dělali společně s kolegou. Za 3 měsíce z první verze do poslední jsem na tom většinou pracoval sám. Ale javascript moc neznám. To byl můj jediný a doufám, že poslední projekt na javascriptu, na kterém jsem pracoval. Dostal jsem to, podíval se – o, hrůza. Ale opravdu jsem chtěl dotáhnout produkt a takto to dopadlo.
Děkuji moc za prezentaci! Je to skvělý nástroj. S Tableau srovnávali?
Děkuji. Proto jsem to nazval Tabix, protože první písmena se shodují.
Protože konkurujete?
Bude hodně investic, budeme soutěžit.
Jak navrhnete prodat interním analytikům, že tento nástroj zcela nahradí *Tableau*? Какие будут аргументы?
Nativně pracuje s ClickHouse. Zkoušel jsem Tableau, ale tam nelze psát podporu slovníků a podobně. Vím, jak s Tabix lidé pracují. Píšou dotaz, exportují do CSV a nahrávají do BI. A už tam něco dělají. Ale já si s obtížemi představuji, jak to dělají, protože – je to grafický nástroj. Může exportovat 5 000 řádků, maximálně 6 000 řádků, ale ne více, jinak prohlížeč nevydrží.
To znamená, že existují nějaká vážná omezení ohledně objemu dat, že?
Ano. Nedokážu si představit, že byste chtěli 10 000 řádků exportovat na obrazovku prohlížeče. Proč?
Předpokládá se, že je to rozhraní pro rychlé prohlížení dat? Mírně si pohrát, pootočit?
Ano, rychle se podívat, jak to funguje, a jednoduše vytvořit souhrnný graf. A poté to někde předat. Máme vlastní reportingový systém, odkud tento dotaz jednoduše beru. Kreslím v Tabix a posílám to do našeho reportingu.
A ještě otázka. Kohortní analýza?
Pokud budou přání, přidáme.
Když jsme teprve začínali používat ClickHouse, kolik času zabralo zavedení ClickHouse a uvedení do produkčního stavu?
Jak jsem řekl, testovací cluster jsme zavedli ve velmi krátkém čase. Za dva dny jsme ho rozjeli. A ještě několik týdnů jsme ho testovali. A do produkce jsme se dostali asi za 3 měsíce. Měli jsme vlastní ETL, tedy nástroj pro zápis dat. A ten zapisoval do všeho, co šlo. Umí psát do MongoDB, Cassandry, MySQL. Naučit ho psát do ClickHouse bylo jednoduché. Měli jsme hotovou infrastrukturu pro rychlé zavedení. Asi za 3 měsíce jsme začali odstraňovat první komponent. Za 6 měsíců jsme se zcela vzdali všeho ostatního. Zůstal nám jen ClickHouse.
Igore, díky moc za přednášku. Velmi se mi líbil funkce pro vykreslování cest na mapách. Plánuje se integrace s Yandex.Mapy, konkrétně s vlastním Yandex.Mapy?
Zkoušel jsem se integrovat místo Google mapy, ale na Yandex.Mapách jsem nenašel tmavý motiv. Neřekl jsem jednu část. Vrátím se, abych doplnil.
Snímek – Google mapy. Tam je příkaz „DRAW_GMAPS“, který kreslí mapu. Je tam příkaz „DRAW_YMAPS“, tedy může vykreslit Yandex.Mapu. A vlastně pod tímto příkazem je Javascript, tedy data, která získáte z ClickHouse, můžete poslat do Javascriptu, který zde napíšete. A máte výstupní oblast, kde by se to mělo vykreslit. Můžete vykreslit jakýkoli graf, tedy jakýkoli graf, mapu, můžete vykreslit svůj vlastní komponent. Měl jsem předtím jinou knihovnu pro vykreslování grafů.
To znamená, že tam je nástroj pro přizpůsobení funkčnosti zobrazení?
Jakékoli. Můžete vzít a přebarvit tyto body, aby nebyly červené, ale modré, zelené.
Děkuji za přednášku! Měl jste snímek, na kterém byly představeny alternativní nástroje pro dotazy ClickHouse pro vytváření dashboardů, analytických reportů. Pochopil jsem správně, že v době, kdy jste začali pracovat s ClickHouse, pro tyto nástroje nebyly napsány adaptéry. Zajímalo by mě, proč jste se rozhodli vytvořit svůj vlastní nástroj místo toho, abyste napsali adaptér pro nějaký již existující nástroj? Myslím, že vyladění testovacího editoru je rychlé. Proč jste se rozhodli udělat tolik práce?
Tady je zajímavý moment – já jsem technický ředitel a ne datový vědec. V době, kdy jsme začali implementovat Druid, jsem měl v plánu zhruba 50 % úkolů – pojďme spočítat tohle nebo pojďme spočítat tohle, nebo analyzujme tohle. A nakonec jsme implementovali ClickHouse. Rychle jsem začal stavět, počítat a rychle jsem uzavřel svůj plán. A v té době jsem pochopil, že mi chybí znalosti z oblasti Data Science a vizualizace dat. Tabix je takové mé domácí úkoly v oblasti studia vizualizace dat. Díval jsem se, jak doplnit Zeppelin. Mám malou averzi k jeho programování. Podíval jsem se na Redash, jak doplnit, ale chyběl mi tam dobrý editor. A SuperSet je také napsán v jazyce, který nemám moc v oblibě. A proto jsem se rozhodl vytvořit něco vlastního, a tak to dopadlo.
Igore, přijímáte Pull requesty?
Ano.
Děkuji moc za prezentaci! Mám dvě otázky. První - nehodnotíte příliš pozitivně Javascript. Psali jste v čistém Javascriptu, nebo to byl nějaký framework?*
Lépe v čistém Javascriptu.
Tak který framework?
Angular.
Rozumím. A druhá otázka. Zvažovali jste R a *Shiny**?*
Zvažoval. Experimentoval jsem.
Mohl jste také jednoduše napsat adaptér.
Ten existuje. Zdá se, že ho udělala komunita, ale jak jsem odpověděl na předchozí otázku, chtěl jsem si to zkusit sám.
*Ne, ohledně vizualizace, tam už něco je.
Říkáte, že existuje taková věc a ona vám vykreslí graf. Otevřel jsem knihu o vizualizaci dat. A řekl jsem si: „Zkusím tyto data vizualizovat. Napsal bych to sám, aby to vykreslilo data“. A začal jsem lépe rozumět technologii podávání dat. Kdybych vzal hotovou komponentu, osobně bych se naučil horší způsob, jak ji používat, tedy konkrétně vizualizaci. Ale tak – ano, R se mi líbila, ale ještě jsem nečetl knihu „R pro začátečníky“.
Děkuji!
Jednoduchá otázka. Existují nějaké možnosti, jak rychle exportovat tabulku, graf?
Můžete exportovat do CSV, do Excelu.
Ne data, ale hotovou tabulku, hotový graf? Například, abych to mohl ukázat šéfovi.
Je tu tlačítko „Exportovat“ a tlačítko „Exportovat grafiku ve formátu png, jpg“.
Děkuji!
P.S. Mini-návod na instalaci tabix
- Stáhnout
- Rozbalit, zkopírovat adresář
builddo nginx root_path - Nastavit nginx
Zdroj: habr.com

