Te ofrezco familiarizarte con la transcripción del informe de 2017 de Igor Strychar «ClickHouse: análisis de datos visualmente rápido y claro en Tabix».
Interfaz web para ClickHouse en el proyecto Tabix.
Principales características:
- Funciona con ClickHouse directamente desde el navegador, sin necesidad de instalar software adicional;
- Editor de consultas con resaltado de sintaxis;
- Autocompletado de comandos;
- Herramientas de análisis gráfico para la ejecución de consultas;
- Esquemas de color a elegir.



Soy el director técnico de MEDIA2. Somos un agregador de noticias. Almacenamos muchos datos que obtenemos de nuestros socios y los registramos en ClickHouse: alrededor de 30,000 consultas por segundo.
Estos son datos como:
- Clics en noticias.
- Impresiones de noticias en el agregado.
- Impresiones de banners en nuestra red.
- Y registramos eventos de nuestro propio contador, que es similar a Yandex.Metrica. Esta es nuestra propia microanalítica.

Tuvimos una vida muy agitada antes de ClickHouse. Luchamos mucho tratando de almacenar estos datos en algún lugar y analizarlos de alguna manera.
La vida antes de ClickHouse — infiniDB
Lo primero que tuvimos fue infiniDB. Funcionó con nosotros durante 4 años. La pusimos en marcha con gran dificultad.
- No admite clustering ni sharding. Ninguna de esas funcionalidades inteligentes se activó de forma predeterminada.
- Tenía dificultades para cargar datos. Solo había una utilidad de consola específica que solo podía cargar archivos CSV y de una manera muy confusa.
- La base de datos es de un solo hilo. Solo se podía escribir o leer. Pero permitía procesar un gran volumen de datos.
- Y además tenía una traba interesante. Cada noche había que reiniciar el servidor, de lo contrario no funcionaba.
Funcionó con nosotros hasta finales de 2016, cuando pasamos completamente a ClickHouse.
La vida antes de ClickHouse — Cassandra
Dado que infiniDB era de un solo hilo, decidimos que necesitábamos una base de datos multihilo, en la que pudiéramos escribir muchos flujos simultáneamente.
Probamos muchas cosas interesantes. Luego decidimos probar Cassandra. Con Cassandra todo iba de maravilla. 10,000 consultas por segundo en carga. 2,000 consultas aproximadamente en lectura.
Pero también tenía sus peculiaridades. Una vez al mes o cada dos meses, ocurría una desincronización de la base de datos. Teníamos que despertarnos y correr a arreglar Cassandra. Reiniciábamos los servidores uno a uno. Y todo volvía a ser suave y bonito.
La vida antes de ClickHouse – Druid
Luego nos dimos cuenta de que necesitábamos escribir aún más datos. En 2016 comenzamos a mirar Druid.
Druid es una base de datos de código abierto, escrita en Java. Muy específica. Y era adecuada para el clickstream, cuando necesitábamos almacenar algún flujo de eventos y luego realizar agregaciones o hacer informes analíticos sobre ellos.
Druid tenía la versión 0.9.X.
La base de datos en sí es difícil de desplegar. Esa es la complejidad de la infraestructura. Para desplegarla, se necesitaba mucho hardware. Y cada equipo tenía su propio rol específico.
Para cargar datos en ella, había que aplicar algún tipo de ritual. Hay un proyecto de código abierto – Tranquility, que perdía datos en el flujo. Cuando cargábamos datos en él, los perdía.
Pero de alguna manera comenzamos a implementarlo. Éramos como erizos que se pinchaban, pero seguían comiendo cactus. Nos tomó alrededor de un mes preparar toda la infraestructura para él. Es decir, ordenar servidores, configurar roles, automatizar completamente el despliegue. Es decir, en caso de caída del clúster, para que se desplegara automáticamente un segundo clúster.

Pero entonces sucedió un milagro. Estaba de vacaciones, y mis colegas me enviaron un enlace a , donde se decía que Yandex había decidido abrir ClickHouse. Les dije que lo intentáramos.
Y literalmente en 2 días desplegamos un clúster de prueba de ClickHouse. Comenzamos a cargar datos en él. En comparación con infiniDB – es elemental, en comparación con Druid – es elemental. En comparación con Cassandra también es elemental. Porque si cargas datos en Cassandra desde php, no es elemental.

¿Qué obtuvimos? Rendimiento en velocidad. Rendimiento en almacenamiento de datos. Es decir, se utiliza mucho menos espacio en disco. ClickHouse es rápido, es muy rápido en comparación con otros productos.

En el momento del lanzamiento, cuando Yandex publicó ClickHouse en OpenSource, solo había un cliente de consola. En nuestra empresa, SMI2, decidimos intentar hacer un cliente nativo para web, para poder abrir una página desde el navegador, escribir una consulta y obtener el resultado, porque comenzamos a escribir muchas consultas. Escribir en la consola es difícil. Y hicimos nuestra primera versión.

Y hacia finales del año pasado comenzaron a aparecer herramientas de terceros para trabajar con ClickHouse. Estas herramientas incluyen:
- .
- .
- . (Ahora )
- .
- .
Voy a revisar algunas de estas herramientas, es decir, aquellas con las que he trabajado.

Es una buena herramienta, pero para Druid. Cuando implementamos Druid, probé SuperSet. Me gustó. Funciona muy rápido para Druid.
No es adecuado para ClickHouse. Es decir, sí funciona, se ejecuta, pero solo puede manejar consultas simples como: SELECT event, GROUP BY event. No soporta una sintaxis más compleja de ClickHouse.

La siguiente herramienta es Apache Zeppelin. Es algo bueno e interesante. Funciona. Soporta cuadernos, tableros, y variables. Sé que algunas personas de la comunidad ClickHouse lo utilizan.
Pero no hay soporte para la sintaxis de ClickHouse, es decir, tendrás que escribir las consultas ya sea en la consola o en otro lugar. Luego verificar que todo funcione. Es simplemente incómodo. Pero tiene un buen soporte para tableros.

La siguiente herramienta es Redash.IO. Redash se hospeda en internet. Es decir, a diferencia de las herramientas anteriores, no necesitas instalarlo. Es un tablero con la capacidad de consolidar datos de diferentes fuentes de datos. Es decir, puedes extraer de ClickHouse, MySQL, PostgreSQL y otras bases de datos.

Literalmente hace un mes (en marzo de 2017) se añadió soporte en Grafana. Cuando construyes informes en Grafana, digamos, sobre el estado de tu hardware o sobre alguna métrica, ahora se puede construir un gráfico o un pequeño panel a partir de los datos de ClickHouse directamente. Es muy conveniente, y lo usamos en nuestra empresa. Esto permite detectar anomalías. Es decir, si algo ocurre y algún hardware falla o se carga, puedes ver la causa si esos datos han llegado a ClickHouse.

Me resultaba muy incómodo escribir en esas herramientas o en la consola. Así que decidí mejorar nuestra primera interfaz. E inspiré la idea en EventSQL, SeperSet, Zeppelin.

¿Qué quería? Quería gráficos, un editor mejorado, implementar soporte para diccionarios de sugerencias. Porque ClickHouse tiene una excelente función: son los diccionarios. Pero trabajar con los diccionarios es difícil, porque tienes que recordar el formato de los valores almacenados, es decir, si es un número o una cadena, etc. Y dado que usamos los diccionarios en sus diferentes variaciones, era bastante difícil escribir consultas.

Han pasado 3 meses desde el lanzamiento de nuestra primera versión. Hice alrededor de 330 commits en la rama privada y surgió Tabix.
A diferencia de la versión anterior, que se llamaba ClickHouse-Frontend, decidí renombrarlo con un nombre simple. Así nació Tabix.
¿Qué hay de nuevo?
Dibuja gráficos. Soporta la sintaxis SQL de ClickHouse. Ofrece sugerencias sobre funciones y tiene muchas más capacidades interesantes.

Así es como se ve el esquema general de Tabix. A la izquierda se presenta el árbol. En el centro está el editor de consultas. Y en la parte inferior, el resultado de esa consulta.

A continuación, mostraré cómo funciona el editor de consultas.

Aquí se activó automáticamente el autocompletado para la tabla, sugiriendo campos y funciones correspondientes. Si presionas ctrl y enter, la consulta se ejecutará o mostrará un error. La consulta más simple se envía a Tabix y se obtiene un resultado, lo que permite trabajar rápidamente con ClickHouse.

Los diccionarios, como ya mencioné, son algo muy interesante con lo que trabajamos mucho. Permiten realizar muchas cosas. Por ejemplo, en los diccionarios almacenamos todas las ciudades, guardando su identificador y nombre, así como su latitud y longitud. En la base, solo almacenamos el identificador de la ciudad, lo que nos permite comprimir los datos de manera significativa.

Esto puede parecer una cosa sencilla, pero en ClickHouse ayuda de manera muy interesante. Dado que ClickHouse solo admite joins anidados, la consulta se expande bastante tanto hacia abajo como en ancho. Cuando se abre un paréntesis y se ingresa una llamada larga, algo tan sencillo como colapsar la consulta facilita trabajar con ella. Porque cuando una consulta tiene 200-300 líneas y es muy amplia, colapsar la consulta es de gran ayuda para encontrar un lugar específico o para localizarla.
Árbol de objetos, consultas múltiples y pestañas (Video 13:46) )

A continuación mostraré sobre el árbol y las pestañas. A la izquierda está el árbol, y en la parte superior puedes crear varias pestañas. Las pestañas son como un espacio de trabajo. Puedes crear varias pestañas y nombrarlas a tu manera. Es como un mini sistema para generar informes.
Las pestañas se guardan automáticamente. Si recargas el navegador, lo cierras o vuelves a abrir Tabix, todo esto se guardará.
Tecla de acceso rápido – conveniente (Video 14:39) )
Hay teclas de acceso rápido, y hay bastantes. He extraído algunas de ellas aquí como ejemplo. Esto incluye cambiar de pestaña, ejecutar una consulta o ejecutar varias consultas.

Voy a mostrar cómo trabajar con el resultado. Enviamos la solicitud. Aquí dibujo sin, cos y tg. Se puede resaltar el resultado, es decir, dibujar un mapa típico en la columna. Se pueden resaltar valores positivos o negativos. O simplemente colorear un elemento específico de la tabla. Es útil cuando la tabla es enorme y es necesario encontrar alguna anomalía a simple vista. Cuando buscaba anomalías, resaltaba algunas filas, algunos elementos en verde o rojo.

Hay muchas cosas interesantes allí. Por ejemplo, cómo copiar en Redmine Markdown. Si necesitas copiar el resultado en algún lugar, es muy conveniente. Solo puedes seleccionar el área, decir "Copiar a Redmine" y se copiará en Redmine Markdown o creará una solicitud Where.

A continuación, está la optimización de las solicitudes. Una vez olvidé especificar el campo "date". Y mi solicitud en ClickHouse no se procesó muy, muy rápido, sino rápido, es decir, menos de un segundo. Cuando vi cuántas filas estaba procesando, me asusté. No escribimos tantas filas en esta tabla en un día. Comencé a analizar la solicitud y vi que había pasado por alto la fecha en un lugar. Es decir, olvidé especificar que necesitaba datos no de toda la tabla, sino de un período específico.
En Tabix hay una pestaña "Stats", donde se almacena todo el historial de solicitudes enviadas, es decir, se puede ver cuántas filas fueron leídas por esta solicitud y cuánto tiempo tardó en ejecutarse. Esto permite optimizar.
Sobre el resultado de la solicitud se puede construir una tabla dinámica. Has enviado una solicitud a ClickHouse, has recibido algunos datos. Y luego esos datos se pueden manipular con el ratón y construir alguna tabla dinámica.

Lo siguiente interesante es la construcción de gráficos. Supongamos que tenemos esta solicitud: sobre sin, cos de 0 a 299. Y para dibujarlo, necesitas seleccionar la pestaña "Draw" y obtendrás un gráfico con tus sin y cos.

Se puede dividir en diferentes ejes, es decir, se pueden dibujar dos gráficos uno al lado del otro. Escribir un comando y otro comando.

Se pueden dibujar histogramas.

Se puede dividir en una matriz de gráficos.

Se puede construir un mapa de calor.

Se puede construir un calendario de calor. Por cierto, es una herramienta muy útil cuando necesitas analizar anomalías durante el año, es decir, encontrar picos o caídas. Esta visualización de datos me ayudó en eso.

El siguiente es un Treemap.


Sankeys – un gráfico interesante. Es o Streamgrahps o River. Pero lo llamo River. También permite buscar algunas anomalías. Es muy conveniente. Recomiendo usarlo para la búsqueda.

La siguiente cosa interesante es la representación de un mapa dinámico. Si en su base de datos tiene guardada la latitud, longitud y, por ejemplo, el destino, si hay, digamos, transporte por carretera o aviones volando, se pueden trazar las rutas de destino. También se puede establecer la velocidad, el tamaño de estos objetos a los que llegan.
Pero el problema con este mapa es que dibuja solo el mapa del mundo, no hay detalles.

Posteriormente, añadí Google Maps. Si guarda la latitud y longitud, se puede trazar el resultado en Google Maps, pero sin soporte para los aviones.
Hemos discutido las funciones principales para trabajar con el resultado, con la consulta en Tabix.

El siguiente es el análisis de su servidor ClickHouse. Hay una pestaña separada “Métricas”, donde se puede ver el tamaño de los datos almacenados en cada columna. En la captura de pantalla se muestra que este campo “referrer” ocupa alrededor de 730 Gb. Si renunciamos a este campo, ahorraremos tres shards de 700 GB, es decir, alrededor de 2 TB, que no necesitamos.
También tenemos el campo “request_id”, que almacenamos como cadena. Pero si comenzamos a almacenarlo como un número, comprimiría este campo enormemente.
Aquí también se muestra la configuración del servidor y la lista de nodos de su clúster.

La siguiente pestaña son las métricas. Se obtienen en tiempo real de ClickHouse y simplemente permiten analizar el estado del servidor y entender qué está sucediendo con él. No sustituye a un Grafana completo. Esto es para un análisis rápido.

La siguiente pestaña son los procesos. A partir de ellos, se puede entender qué sucede en el servidor. Comprender lo que está pasando. Tuve una consulta que consumía 200 GB en lectura cada vez. Lo vi gracias a esta interfaz. Lo detecté y lo corregí. Y resultó en alrededor de 30 GB, es decir, un rendimiento varias veces mejor.

¡Gracias! Y esto es OpenSource.
He terminado. Y, por cierto, esto es OpenSource, es gratuito y ni siquiera es necesario descargarlo. Ábralo en el navegador y todo funcionará.
Preguntas
Igor, ¿qué sigue? ¿Cómo piensas desarrollar esta herramienta?
Pronto aparecerá un panel de control, es decir, podría surgir un panel de control. Integración con otras bases de datos. Lo hice, pero aún no lo he publicado en OpenSource. Es MySQL y, posiblemente, PostgreSQL. Es decir, se podrá enviar consultas desde Tabix no solo a ClickHouse, sino también a otras herramientas.
Es evidente que se ha realizado una gran cantidad de trabajo. Se ha desarrollado una idea bastante completa. En el navegador se ha hecho, aparentemente, para evitar soluciones temporales en varios ejes y para recopilar rápidamente todo esto. He escuchado que ustedes están php trabajando, por eso es más fácil generar en el navegador y funcionará en todos lados. No hay dudas al respecto. La pregunta es: se ha hecho mucho realmente. ¿Cuántas personas trabajaron en esto? ¿Y cuánto tiempo llevó todo? Porque las herramientas personalizadas suelen no tener tanta funcionalidad.
Desde el verano hasta el otoño trabajó una persona de nuestro equipo. Esa fue la primera versión. Luego hice 330 confirmaciones por mi cuenta. Lo que ven, lo hicimos a medias con un colega. En 3 meses pasamos de la primera versión a la última, yo hice la mayor parte por mi cuenta. Pero conozco muy poco Javascript. Este fue mi único y, espero, último proyecto en Javascript con el que trabajé. Me llegó, lo miré – oh, horror. Pero realmente quería terminar el producto y así fue como quedó.
¡Muchas gracias por la presentación! Es una excelente herramienta. ¿Se comparó? Tableau Gracias. Por eso lo llamé Tabix, porque las primeras letras coinciden.
¿Porque compiten?
Habrá muchas inversiones, competiremos.
¿Cómo sugerirán vender a los analistas internos que esta herramienta reemplazará completamente a
*Tableau*? Funciona de manera nativa con ClickHouse. He probado Tableau, pero allí no se puede escribir soporte para diccionarios y cosas similares.? Какие будут аргументы?
Sé cómo trabajan las personas con Tabix. Hacen consultas, exportan a CSV y lo cargan en BI. Y ya hacen algo allí. Pero me cuesta imaginar cómo lo hacen, porque es una herramienta gráfica. Puede exportar 5,000 filas, como máximo 6,000 filas, pero no más, de lo contrario el navegador no lo soportará. Es decir, hay ciertas limitaciones serias en cuanto al volumen de datos, ¿verdad?
Sí. No me imaginaría que ustedes quieran exportar 10,000 filas a la pantalla del navegador. ¿Para qué?
Se supone que es una interfaz para una rápida visualización de datos, ¿no? ¿Para explorar un poco, girar?
?
Sí, es fácil ver cómo funciona y simplemente construir un gráfico resumen. Luego se puede enviar a algún lado. Para nosotros, tenemos nuestro propio sistema de informes, del cual simplemente tomo esta consulta. La dibujo en Tabix y la envío a nuestro informe.
Y otra pregunta. ¿Análisis de cohortes?
Si hay sugerencias, las añadiremos.
Cuando apenas comenzamos a usarlo ClickHouse, ¿cuánto tiempo tomó su implementación? ClickHouse y llevarlo a estado de producción?
Como mencioné, implementamos un clúster de prueba en un tiempo muy reducido. Lo desplegamos en dos días. Y lo probamos durante un par de semanas. Y llegamos a producción en unos tres meses. Pero teníamos nuestro propio ETL, es decir, herramienta para registro de datos. Y él escribía en todo lo que podía. Sabe escribir en MongoDB, Cassandra, MySQL. Enseñarle a escribir en ClickHouse fue fácil. Teníamos la infraestructura lista para una rápida implementación. Después de tres meses comenzamos a eliminar el primer componente. En seis meses nos deshicimos de todo lo demás. Nos quedó solo ClickHouse.
Igor, muchas gracias por la presentación. Me gustó mucho la funcionalidad de construcción de rutas en mapas. ¿Está planeada la integración con Yandex.Maps y, en particular, con mapas personalizados de Yandex?
Intenté integrarlo en lugar de Google Maps, pero no encontré el tema oscuro en Yandex.Maps. No mencioné una parte. Regresaré para complementarlo.
Diapositiva: Google Map. Allí hay un comando "DRAW_GMAPS" que dibuja el mapa. Hay un comando "DRAW_YMAPS", es decir, puede dibujar el mapa de Yandex. Pero, de hecho, detrás de este comando hay Javascript, es decir, los datos que obtienes de ClickHouse se pueden pasar a Javascript que tú mismo escribirás aquí. Y tendrás una área de salida donde debe dibujarse. Se puede dibujar cualquier gráfico, es decir, cualquier gráfico, mapa, o puedes dibujar tu propio componente. Anteriormente, tenía otra biblioteca para dibujar los gráficos.
Es decir, hay una herramienta para personalizar la funcionalidad de visualización.
Cualquiera. Puedes tomar y cambiar el color de esos puntos, haciéndolos no rojos, sino azules, verdes.
¡Gracias por la presentación! Tuviste una diapositiva donde se presentaron herramientas alternativas para consultas ClickHouse para construir dashboards, informes analíticos. Entendí que en el momento en que comenzaste a trabajar con ClickHouse, para estas herramientas no se escribieron adaptadores. Me pregunto, ¿por qué decidieron crear su propia herramienta en lugar de escribir un adaptador para alguna herramienta existente? Creo que ajustar el editor de pruebas es rápido. ¿Por qué decidieron hacer tanto trabajo?
Aquí hay un punto interesante: soy el director técnico, no un científico de datos. Para el momento en que comenzamos a implementar Druid, tenía alrededor del 50% de tareas en mi hoja de ruta: contemos esto o analicemos esto. Y resultó que implementamos ClickHouse. Comencé a construir y calcular rápidamente, cerré mi hoja de ruta pronto. Y en ese momento me di cuenta de que me faltaban conocimientos en Ciencia de Datos y visualización de datos. Tabix es una especie de tarea que me di para aprender sobre visualización. Miré cómo complementarlo con Zeppelin. Tengo una ligera aversión a su programación. Miré cómo complementar Redash, pero me faltaba un buen editor allí. Y SuperSet también está escrito en un lenguaje que no me gusta mucho. Así que decidí reinventar la rueda, y esto es lo que salió.
Igor, ¿aceptan solicitudes de extracción?
Sí.
¡Muchas gracias por la presentación! Y dos preguntas. La primera: no hablas muy positivamente de Javascript. ¿Escribiste en Javascript puro o era algún marco?
Mejor en Javascript puro.
Entonces, ¿qué marco?
Angular.
Entiendo. Y la segunda pregunta. ¿No consideraron R y *Shiny??*
Lo consideré. Jugué con eso.
Podrías haber simplemente escrito un adaptador.
Ya existe. Parece que lo hizo la comunidad, pero, como respondí a la pregunta anterior, quería experimentar por mí mismo.
*No, en cuanto a la visualización, allí ya existe.
Dices que hay algo y te dibujará un gráfico. Abrí un libro sobre visualización de datos. Y pensé: 'Voy a intentar visualizar estos datos. Escribiré para que los presente'. Y empecé a entender mejor la tecnología de presentación de datos. Si hubiera tomado un componente existente, personalmente habría aprendido peor a usarlo, es decir, exactamente la visualización. Pero sí, R me gustó, aunque aún no he leído el libro 'R para Dummies'.
¡Gracias!
Una pregunta simple. ¿Hay alguna posibilidad de exportar rápidamente una tabla, un gráfico?
Se puede exportar en CSV, en Excel.
No los datos, sino una tabla lista, un gráfico listo. Por ejemplo, para mostrarlo a la dirección.
Hay un botón "Exportar" y hay un botón "Exportar gráfico en png, en jpg".
¡Gracias!
P.D. Mini-instrucciones para la instalación de tabix
- Descargar
- Descomprimir, copiar el directorio
builden nginx root_path - Configurar nginx
Fuente: habr.com

