Propongo di prendere visione della trascrizione della relazione del 2017 di Igor Strikhar «ClickHouse – analisi dei dati veloce e chiara in Tabix».
Interfaccia web per ClickHouse nel progetto Tabix.
Caratteristiche principali:
- Funziona con ClickHouse direttamente dal browser, senza necessità di installare software aggiuntivo;
- Editor di query con evidenziazione della sintassi;
- Autocompletamento dei comandi;
- Strumenti di analisi grafica delle query;
- Schemi di colori a scelta.



Sono il direttore tecnico di СМИ2. Siamo un aggregatore di notizie. Conserviamo molti dati che riceviamo dai nostri partner e li registriamo in ClickHouse – circa 30.000 query al secondo.
Si tratta di dati come:
- Click sulle notizie.
- Visualizzazioni delle notizie nell'aggregatore.
- Visualizzazioni dei banner nella nostra rete.
- E registriamo eventi dal nostro contatore, simile a Yandex.Metrica. Questa è la nostra microanalisi.

Abbiamo avuto una vita molto frenetica prima di ClickHouse. Abbiamo sofferto molto cercando di immagazzinare questi dati da qualche parte e di analizzarli.
La vita prima di ClickHouse — infiniDB
La prima cosa che avevamo era infiniDB. È durata 4 anni. Abbiamo faticato molto per farla partire.
- Non supporta la clusterizzazione o lo sharding. Nessuna di queste funzionalità avanzate era disponibile di default.
- Presentava difficoltà nel caricamento dei dati. Solo un'utilità da console specifica, che poteva solo caricare file CSV in modo molto confuso.
- Il database è monothread. Si poteva scrivere o leggere. Ma permetteva di elaborare grandi quantità di dati.
- E c'era anche un'interessante soluzione temporanea. Ogni notte dovevamo riavviare il server, altrimenti non funzionava.
È rimasta in funzione fino alla fine del 2016, quando siamo passati completamente a ClickHouse.
La vita prima di ClickHouse — Cassandra
Poiché infiniDB era monothread, abbiamo deciso che avevamo bisogno di un database multi-thread, in cui potevamo scrivere molti flussi contemporaneamente.
Abbiamo provato molte cose interessanti. Poi abbiamo deciso di provare Cassandra. Con Cassandra tutto andava molto bene. 10.000 query al secondo in scrittura. 2.000 query circa in lettura.
Ma anche con essa c'erano delle peculiarità. Una volta al mese o ogni due mesi si verificava una desincronizzazione del database. E dovevamo svegliarci e correre a riparare Cassandra. Riavviavamo i server uno dopo l'altro. E tutto tornava fluido e bello.
Vita prima di ClickHouse – Druid
Poi abbiamo capito che dovevamo scrivere ancora più dati. Nel 2016 abbiamo iniziato a guardare Druid.
Druid è un database open source scritto in Java. Molto specifico. Si adattava al clickstream, quando dovevamo memorizzare un flusso di eventi e poi eseguire aggregazioni o fare report analitici su di essi.
Druid aveva la versione 0.9.X.
Il database stesso era molto difficile da implementare. Questa è la complessità dell'infrastruttura. Per implementarlo occorreva mettere molta, molta attrezzatura. E ogni pezzo di attrezzatura aveva il suo ruolo specifico.
Per caricare i dati in esso, dovevamo applicare una sorta di magia. C'era un progetto OpenSource – Tranquility, che ci faceva perdere dati nel flusso. Quando caricavamo dati in esso, li perdeva.
Ma in qualche modo abbiamo iniziato a implementarlo. Noi, come ricci che si pungevano ma continuavano a mangiare il cactus, abbiamo iniziato a implementarlo. Ci è servito circa un mese per preparare tutta l'infrastruttura per lui. Ovvero, ordinare i server, configurare i ruoli, effettuare una completa automazione dell'implementazione. Cioè, in caso di caduta del cluster, doveva automaticamente avviarsi un secondo cluster.

Ma qui è successo un miracolo. Ero in vacanza e i miei colleghi mi hanno inviato un link su , dove si dice che Yandex ha deciso di aprire ClickHouse. Ho detto, proviamo.
E letteralmente in 2 giorni abbiamo implementato un cluster di test di ClickHouse. Abbiamo iniziato a caricare dati in esso. Rispetto a infiniDB – è elementare, rispetto a Druid – è elementare. Rispetto a Cassandra è anche elementare. Perché se si caricano dati da php in Cassandra, non è elementare.

Cosa abbiamo ottenuto? Performance nella velocità. Performance nella memorizzazione dei dati. Cioè, si utilizza molto meno spazio su disco. ClickHouse è veloce, è molto veloce rispetto ad altri prodotti.

Al momento del lancio, quando Yandex ha pubblicato ClickHouse in OpenSource, c'era solo un client a riga di comando. Nella nostra azienda, MEDIA2, abbiamo deciso di provare a creare un client nativo per il web, in modo da poter aprire una pagina dal browser, scrivere una query e ricevere un risultato, perché abbiamo iniziato a scrivere molte query. È difficile scrivere nella console. E abbiamo fatto la nostra prima versione.

E circa verso l'inverno dello scorso anno hanno iniziato a comparire strumenti di terze parti per lavorare con ClickHouse. Strumenti come:
- .
- .
- . (Ora )
- .
- .
Esaminerò alcuni di questi strumenti, ovvero quelli con cui ho lavorato.

È uno strumento buono, ma per Druid. Quando abbiamo implementato Druid, ho esplorato SuperSet. Mi è piaciuto. Per Druid funziona molto rapidamente.
Non è adatto per ClickHouse. Cioè, è adatto, si avvia, ma è pronto a elaborare solo richieste elementari come: SELECT event, GROUP BY event. Non supporta una sintassi più complessa di ClickHouse.

Il prossimo strumento è Apache Zeppelin. È una cosa buona e interessante. Funziona. Supporta notebook, dashboard e variabili. So che qualcuno nella comunità di ClickHouse lo utilizza.
Ma non c'è supporto per la sintassi di ClickHouse, quindi dovrai scrivere le richieste nella console o altrove. Poi controllare che tutto funzioni. È semplicemente scomodo. Ma ha un buon supporto per le dashboard.

Il prossimo strumento è Redash.IO. Redash è ospitato su Internet. Cioè, a differenza degli strumenti precedenti, non è necessario installarlo. È un dashboard con la possibilità di consolidare dati da diverse fonti di dati. Cioè, puoi estrarre da ClickHouse, MySQL, PostgreSQL e da altri database.

Letteralmente un mese fa (marzo 2017) è arrivato il supporto in Grafana. Quando costruisci report in Grafana, ad esempio, sulla situazione del tuo hardware o su alcune metriche, ora puoi creare lo stesso grafico o un pannello dai dati di ClickHouse direttamente. È molto comodo, e lo stiamo utilizzando qui. Questo permette di individuare anomalie. Cioè, se succede qualcosa e un hardware si blocca o si sovraccarica, puoi controllare la causa, se i dati sono stati trasferiti in ClickHouse.

Mi era molto scomodo scrivere in questi strumenti o nella console. Ho deciso di migliorare la nostra prima interfaccia. Ho preso spunto dall'idea di EventSQL, SuperSet e Zeppelin.

Cosa desideravo? Volevo ottenere grafici, un editor migliorato, implementare il supporto per dizionari e suggerimenti. Perché ClickHouse ha una funzione fantastica: i dizionari. Ma lavorare con i dizionari è complicato, perché è necessario ricordare il formato dei valori memorizzati, cioè se è un numero o una stringa, ecc. E poiché usiamo spesso i dizionari nelle loro varie forme, era piuttosto difficile scrivere richieste.

Sono passati 3 mesi dal rilascio della nostra prima versione. Ho effettuato circa 330 commit in un ramo chiuso ed è nato Tabix.
A differenza della versione precedente, che si chiamava ClickHouse-Frontend, ho deciso di rinominarla semplicemente. È nato Tabix.
Cosa c'è di nuovo?
Disegna grafici. Supporta la sintassi SQL di ClickHouse. Suggerisce funzioni e ha molte altre capacità interessanti.

Ecco come appare lo schema generale di Tabix. A sinistra si trova l'albero. Al centro - è l'editor della query. E in basso - è il risultato di questa query.

Ora mostrerò come funziona l'editor della query.

Qui ha attivato automaticamente il completamento automatico per la tabella e suggerisce, di conseguenza, il completamento automatico per i campi. E suggerimenti per le funzioni. Se si preme ctrl invio, la query verrà eseguita o darà un errore. La query più semplice viene inviata a Tabix e si ottiene un risultato, cioè si può lavorare rapidamente con ClickHouse.

I dizionari, come ho già detto, sono cose molto interessanti, con cui lavoriamo molto. E che hanno permesso di fare molte cose. Ad esempio, nei dizionari conserviamo tutte le città. Conserviamo l'identificatore della città e il nome della città, la sua latitudine e longitudine. E nel database conserviamo solo l'identificatore della città. Di conseguenza, comprimiamo molto i dati.

Questa sembra una cosa semplice, ma in ClickHouse è molto utile. Poiché ClickHouse supporta solo join annidati, la query cresce abbastanza in profondità e in larghezza. E quando si apre una parentesi e si ha un'espressione lunga, una cosa abbastanza semplice come la compressione della query aiuta a lavorare più facilmente con la query stessa. Perché quando la query è di 200-300 righe e in larghezza è molto grande, la compressione della query aiuta molto a trovare un posto o a localizzarlo.
Albero degli oggetti, multiprogressioni e schede (Video 13:46) )

Successivamente mostrerò l'albero, le schede. A sinistra - questo è l'albero, in alto puoi creare più schede. Le schede sono come uno spazio di lavoro. Puoi creare più schede e dare a ciascuna un nome diverso. È come un mini sistema per la creazione di report.
Le schede vengono salvate automaticamente. Se ricarichi il browser o chiudi e riapri Tabix, tutto rimarrà salvato.
Tasto rapido - comodo (Video 14:39) )
Ci sono tasti rapidi e ce ne sono abbastanza. Ne ho mostrati alcuni qui come esempio. Si tratta di passare da una scheda all'altra, eseguire una query o eseguire più query.

Mostrerò come lavorare con il risultato. Inviamo la richiesta. Qui disegno sin, cos e tg. È possibile evidenziare il risultato, ovvero disegnare una mappa tipica su una colonna. È possibile evidenziare valori positivi o negativi. Oppure semplicemente colorare un elemento specifico della tabella. Questo è comodo quando la tabella è enorme e si deve trovare a colpo d'occhio un'anomalia. Quando cercavo anomalie, evidenziavo alcune righe, alcuni elementi in verde o rosso.

Ci sono molte cose interessanti. Ad esempio, come copiare in Redmine Markdown. Se hai bisogno di copiare un risultato da qualche parte, è molto comodo. Puoi semplicemente selezionare l'area, dire 'Copia in Redmine' e copierà in Redmine Markdown o creerà una richiesta Where.

Poi c'è l'ottimizzazione delle richieste. Una volta ho dimenticato di specificare il campo 'data'. E la mia richiesta in ClickHouse veniva elaborata non molto velocemente, ma abbastanza velocemente, cioè in meno di un secondo. Quando ho visto quante righe stava elaborando, mi è venuta paura. In un giorno non scriviamo così tante righe in questa tabella. Ho iniziato ad analizzare la richiesta e ho visto che avevo saltato la data in un punto. Cioè, avevo dimenticato di specificare che avevo bisogno dei dati non su tutta la tabella, ma solo per un periodo specifico.
In Tabix c'è la scheda 'Stats', nella quale è memorizzata tutta la cronologia delle richieste inviate, quindi lì puoi vedere quante righe sono state lette da quella richiesta e quanto tempo ha impiegato ad eseguirsi. Questo permette di ottimizzare.
Sulla base del risultato della richiesta, puoi costruire una tabella riassuntiva. Hai inviato una richiesta a ClickHouse, hai ricevuto alcuni dati. E poi puoi afferrare questi dati con il mouse e costruire una tabella riassuntiva.

La prossima cosa interessante è la creazione di grafici. Supponiamo di avere una richiesta così: su sin, cos da 0 a 299. E per disegnarlo devi selezionare la scheda 'Draw' e otterrai un grafico con i tuoi sin e cos.

Puoi dividerlo su diversi assi, cioè puoi disegnare subito due grafici affiancati. Scrivere un comando e un secondo comando.

Puoi disegnare istogrammi.

Puoi dividere questo in una matrice di grafici.

Puoi costruire una mappa di calore.

Puoi costruire un calendario di calore. Tra l'altro, è una cosa molto comoda quando devi analizzare le anomalie per un anno, cioè trovare o picchi o cali. Questa visualizzazione dei dati mi ha aiutato in questo.

Il successivo è il Treemap.


Sankeys è un interessante grafico. È o un Streamgraphs o un River. Ma io lo chiamo River. Consente anche di cercare alcune anomalie. È molto comodo. Lo consiglio per la ricerca.

La prossima cosa interessante è la creazione di una mappa dinamica. Se nel vostro database sono memorizzate latitudine, longitudine e, ad esempio, una destinazione, se per esempio avete trasporti su rotaia o aerei, è possibile tracciare i percorsi di destinazione. È anche possibile specificare la velocità e la dimensione di questi oggetti, in cui atterrano.
Ma il problema con questa mappa è che mostra solo la mappa del mondo, senza dettagli.

Successivamente ho aggiunto Google map. Se memorizzate latitudine e longitudine, è possibile rappresentare il risultato su Google map, ma senza il supporto degli aerei.
Abbiamo discusso le funzionalità principali del lavoro con il risultato, con la query in Tabix.

Il prossimo è l'analisi del vostro server ClickHouse. C'è una scheda separata 'Metriche' dove è possibile vedere la dimensione dei dati memorizzati per ogni colonna. Nello screenshot è mostrato che questo campo 'referrer' occupa circa 730 Gb. Se rinunciamo a questo campo, risparmieremo tre shard di 700 GB, ovvero circa 2 TB, che non ci servono.
Abbiamo anche un campo 'request_id', che memorizziamo come stringa. Ma se iniziamo a memorizzarlo in forma numerica, questo campo si ridurrà notevolmente.
Qui è mostrata anche la configurazione del server e l'elenco delle nodi del vostro cluster.

La scheda successiva è per le metriche. Esse vengono prelevate in tempo reale da ClickHouse e consentono di analizzare semplicemente lo stato del server e capire cosa stia succedendo. Non è un sostituto completo di Grafana. Serve per un'analisi rapida.

La scheda successiva riguarda i processi. Da essi è possibile capire cosa sta accadendo sul server. Capire cosa succede. Avevo una query che consumava 200 GB in lettura ogni volta. L'ho vista grazie a questa interfaccia. L'ho individuata e corretta. E sono riuscito a ridurla a circa 30 GB, cioè prestazioni enormemente migliorate.

Grazie! E questo è in OpenSource.
Ho finito. E, tra l'altro, è in OpenSource, è gratuito e non è nemmeno necessario scaricare nulla. Aprite nel browser e tutto funzionerà.
Domande
Igor, cosa facciamo adesso? Come intendi sviluppare questo strumento?
Successivamente apparirà un dashboard, cioè, potrebbe apparire un dashboard. Integrazione con altri database. Questo l'ho fatto, ma non l'ho ancora pubblicato in OpenSource. È MySQL e, forse, PostgreSQL. Cioè, sarà possibile inviare richieste non solo a ClickHouse, ma anche ad altri strumenti da Tabix.
È evidente che è stato fatto un enorme lavoro. È emersa un'idea abbastanza completa. È stato fatto nel browser, presumibilmente per evitare delle soluzioni temporanee su vari assi e per buttare giù tutto in fretta. Ho sentito dire che state php lavorando, quindi è più semplice buttare giù nel browser e funzionerà ovunque. Non ci sono domande su questo. Ecco la domanda. È stato davvero fatto molto. Quante persone hanno lavorato a questo? E quanto tempo ci è voluto? Perché gli strumenti personalizzati di solito non hanno una funzionalità così ampia.
Dall'estate all'autunno ha lavorato una sola persona del nostro team. Questa è stata la prima versione. Poi ho fatto 330 commit da solo. Ciò che vedete, io e un collega lo abbiamo fatto insieme. In 3 mesi, dalla prima versione all'ultima, ho fatto la maggior parte io. Ma conosco molto male Javascript. Questo è stato il mio unico e, spero, ultimo progetto in Javascript a cui ho lavorato. Mi è stato dato, ho guardato - orrore. Ma avevo molta voglia di completare il prodotto e questo è ciò che è venuto fuori.
Grazie mille per la presentazione! È un ottimo strumento. Hai Hai confrontato con Tableau? Grazie. Ecco perché ho chiamato Tabix, perché le prime lettere coincidono.
Perché competete?
Ci saranno molti investimenti, competitività al massimo.
Come suggerirete di venderlo agli analisti interni, che questo strumento sostituirà completamente
*Tableau* Funziona nativamente con ClickHouse. Ho provato Tableau, ma non permette di scrivere supporto per dizionari e simili.? Какие будут аргументы?
So come lavorano con Tabix le persone. Scrivono query, le esportano in CSV e le caricano nel BI. E già lì fanno qualcosa. Ma a fatica riesco a immaginare come lo facciano, perché - è uno strumento grafico. Può esportare 5.000 righe, al massimo 6.000 righe, ma non di più, altrimenti il browser non regge. Cioè, ci sono delle limitazioni serie in termini di volume di dati, giusto?
Sì. Non riesco a immaginare che vogliate esportare 10.000 righe nella tabella sullo schermo del browser. Perché?
Si presume che sia un'interfaccia per una rapida visualizzazione dei dati? Girare un po', ruotare?
Si intende che questo sia un'interfaccia per visualizzare rapidamente i dati? Scorrere un po', muoverli?
Sì, vediamo rapidamente come funziona e costruiamo semplicemente un grafico riassuntivo. E poi lo inviamo da qualche parte. Abbiamo il nostro sistema di reportistica, da cui prendo semplicemente questa richiesta. Lo disegno in Tabix e lo invio al nostro reporting.
E un'altra domanda. Analisi di coorte?
Se ci sono richieste, aggiungeremo.
Quando abbiamo appena iniziato a utilizzare ClickHouse, quanto tempo ci è voluto per l'implementazione ClickHouse e per raggiungere lo stato di produzione?
Come ho detto, abbiamo implementato un cluster di test in tempi molto rapidi. Lo abbiamo messo in piedi in due giorni. E abbiamo effettuato ulteriori test per un paio di settimane. E siamo arrivati alla produzione in circa 3 mesi. Ma avevamo il nostro ETL, cioè uno strumento per l'immissione dei dati. E scriveva su tutto ciò che era possibile. Può scrivere in MongoDB, Cassandra, MySQL. Insegnargli a scrivere in ClickHouse è stato semplice. Avevamo un'infrastruttura pronta per un'implementazione rapida. Dopo circa 3 mesi abbiamo iniziato a rimuovere il primo componente. Dopo 6 mesi ci siamo completamente liberati del resto. Ci è rimasto solo ClickHouse.
Igor, grazie mille per la presentazione. Mi è piaciuta molto la funzionalità di costruire percorsi sulle mappe. È prevista un'integrazione con Yandex.Maps e in particolare con le mappe personalizzate di Yandex?
Ho provato a integrarmi invece di Google Map, ma non ho trovato il tema scuro su Yandex.Maps. Ho dimenticato un pezzo. Torno indietro per completare.
Diapositiva – Google Map. Qui c'è il comando "DRAW_GMAPS", che disegna la mappa. C'è un comando "DRAW_YMAPS", cioè può disegnare la mappa di Yandex. E infatti, sotto questo comando c'è JavaScript, cioè i dati che ottieni da ClickHouse possono essere passati a JavaScript che scrivi qui. E alla fine hai un'area in cui dovrebbe essere disegnata. Puoi disegnare qualsiasi grafico, cioè qualsiasi grafico, mappa, puoi disegnare il tuo componente personalizzato. Prima avevo un'altra libreria per disegnare i grafici.
Cioè, c'è uno strumento per la personalizzazione della funzionalità di visualizzazione?
Qualsiasi tipo. Puoi prendere e cambiare colore a questi punti, facendoli non rossi, ma blu, verdi.
Grazie per la presentazione! Avevi una diapositiva in cui erano presentati strumenti alternativi per le query ClickHouse per costruire dashboard, report analitici. Ho capito bene che al momento in cui hai iniziato a lavorare con ClickHouse, non sono stati scritti adattatori per questi strumenti. E mi chiedo perché tu abbia deciso di creare il tuo strumento, invece di scrivere un adattatore per uno strumento già esistente? Penso che migliorare un editor di test sia rapido. Perché hai deciso di fare tutto questo lavoro?
C'è un aspetto interessante: il fatto è che io sono il direttore tecnico, non un data scientist. Al momento in cui abbiamo iniziato a implementare Druid, avevo nella mia roadmap circa il 50% delle attività - facciamo questo calcolo o facciamo quest'altro, o analizziamo questo. E alla fine, abbiamo implementato ClickHouse. Ho iniziato a costruire e calcolare tutto rapidamente, chiudendo rapidamente la mia roadmap. E a quel punto ho capito che mi mancavano conoscenze nella Data Science e nella visualizzazione dei dati. Tabix è una sorta di compito a casa per studiare la visualizzazione dei dati. Ho visto come integrare Zeppelin. Ho un leggero disamore per la sua programmazione. Ho esaminato Redash per vedere come integrarlo, ma mi mancava un editor decente. E SuperSet è scritto in un linguaggio che non mi piace molto. Così ho deciso di fare il mio progetto e questo è il risultato.
Igor, accetti le pull request?
Sì.
Grazie mille per la presentazione! E due domande. Prima: non parli molto positivamente di Javascript. Hai programmato in puro Javascript o stavi usando un framework?*
Meglio in puro Javascript.
Quindi quale framework?
Angular.
Chiaro. E la seconda domanda. Non hai considerato R e *Shiny**?*
L'ho considerato. Ci ho giocato.
Potevi anche semplicemente scrivere un adattatore.
Esiste. Sembra che la comunità lo abbia fatto, ma, come ho risposto alla domanda precedente, volevo sperimentarlo personalmente.
*No, riguardo alla visualizzazione, ce ne sono.
Dici che c'è qualcosa che ti disegnerà un grafico. Ho aperto un libro sulla visualizzazione dei dati. E ho pensato: 'Proviamo a visualizzare questi dati. Scriverò io stesso in modo che possa costruire i dati'. E ho iniziato a comprendere meglio la tecnologia di presentazione dei dati. Se avessi preso un componente pronto, personalmente avrei imparato a usarlo peggio, cioè proprio nella visualizzazione. Ma così – sì, mi è piaciuto R, ma non ho ancora letto il libro "R per chi non è esperto".
Grazie!
Domanda semplice. Ci sono modi per esportare rapidamente una tabella, un grafico?
Puoi esportare in CSV, in Excel.
Non i dati, ma una tabella pronta, un grafico pronto? Ad esempio, per mostrarlo ai superiori.
C'è un pulsante "Esporta" e c'è un pulsante "Esporta grafico in png, in jpg".
Grazie!
P.S. Mini-guida all'installazione di tabix
- Scarica
- Decomprimere, copiare la directory
buildin nginx root_path - Configurare nginx
Fonte: habr.com

