Generador de gráficos de tablas ClickHouse para PlantUML

Cuando surge la necesidad de documentar esquemas de bases de datos, diferentes DBMS proporcionan sus propias herramientas para tareas similares. Y la mayoría de ellos son compatibles DESC table_name



, incluido ClickHouse. Sin embargo, el resultado de este comando no es tan expresivo como nos gustaría.







DESCRIBE TABLE data_lr

name        type      default_type   default_expression   comment   codec_expression   ttl_expression
Path        String                                                  ZSTD(3)
Value       Float64                                                 Gorilla, LZ4
Time        UInt32                                                  DoubleDelta, LZ4
Date        Date                                                    DoubleDelta, LZ4
Timestamp   UInt32                                                  DoubleDelta, LZ4
      
      





Al mismo tiempo, las tablas del sistema tables



y columns



contienen información completa, combinando lo que puede obtener aquí es un resultado bonito:













Inspiración



Antes de comenzar a ver cuidadosamente mi propia solución, desprovista de fallas fatales, busqué opciones disponibles. Y este trabajo me inspiró a comenzar mi propio proyecto. Algunos espacios en blanco fueron tomados prestados con gratitud de allí, con atribución.







Que es PlantUML



Algunas palabras sobre qué es este producto. Para una mejor comprensión, le aconsejo que vaya a la página oficial . En pocas palabras, este es un programa que convierte la descripción textual de diagramas, por ejemplo:







@startuml
Bob -> Alice : hello
@enduml
      
      





en imagenes













, , , , . Atlassian Confluence, wiki. pandoc ( ), LaTeX, .







.









: system.tables , , , , . , system.columns, . , , . .









, , . , . , ReplacingMergeTree Version. . Replicated*MergeTree. MaterializedView . , MV.







. , ± . -. .







. , Distributed , Buffer *MergeTree



, . . .









@startuml
' This diagram is generated with https://github.com/Felixoid/clickhouse-plantuml
!define Table(x) class x << (T,mistyrose) >>
!define View(x) class x << (V,lightblue) >>
!define MaterializedView(x) class x << (m,orange) >>
!define Distributed(x) class x << (D,violet) >>

hide empty methods
hide stereotypes
skinparam classarrowcolor gray

Distributed(graphite.data) {
  ENGINE=**Distributed**
  ..engine config..
  cluster: graphite_data
  database: graphite
  table: data_lr
  sharding_key: cityHash64(Path)
  ==columns==
  Path: String
  Value: Float64
  Time: UInt32
  Date: Date
  Timestamp: UInt32
}

Table(graphite.data_lr) {
  ENGINE=**ReplicatedGraphiteMergeTree**
  ..engine config..
  rollup_config: graphite_rollup
  ..replication..
  zoo_path: /clickhouse/tables/graphite.data_lr/{shard}
  replica: {replica}
  ==columns==
  Path: String <size:15><&signal></size>
  Value: Float64
  Time: UInt32 <size:15><&signal></size>
  Date: Date <size:15><&list-rich></size>
  Timestamp: UInt32
  ..<size:15><&list-rich></size>partition key..
  toYYYYMMDD(toStartOfInterval(Date, toIntervalDay(3)))
  ..<size:15><&signal></size>sorting key..
  Path, Time
}

Table(graphite.index) {
  ENGINE=**ReplicatedReplacingMergeTree**
  ..engine config..
  version: Version
  ..replication..
  zoo_path: /clickhouse/tables/graphite.index/1
  replica: {replica}
  ==columns==
  Date: Date <size:15><&list-rich></size> <size:15><&signal></size>
  Level: UInt32 <size:15><&signal></size>
  Path: String <size:15><&signal></size>
  Version: UInt32
  ..<size:15><&list-rich></size>partition key..
  toYYYYMM(Date)
  ..<size:15><&signal></size>sorting key..
  Level, Path, Date
}

Table(graphite.tagged) {
  ENGINE=**ReplicatedReplacingMergeTree**
  ..engine config..
  version: Version
  ..replication..
  zoo_path: /clickhouse/tables/graphite.tagged/1
  replica: {replica}
  ==columns==
  Date: Date <size:15><&list-rich></size> <size:15><&signal></size>
  Tag1: String <size:15><&signal></size>
  Path: String <size:15><&signal></size>
  Tags: Array(String)
  Version: UInt32
  ..<size:15><&list-rich></size>partition key..
  toYYYYMM(Date)
  ..<size:15><&signal></size>sorting key..
  Tag1, Path, Date
}

graphite.data_lr -|> graphite.data
@enduml
      
      













, — ClickHouse. ClickHouse. , - issue. , .









, - .







, pypi:







pip install clickhouse-plantuml
clickhouse-plantuml -h
      
      





.







, !




All Articles