ClickHouse Table Chart Generator for PlantUML

Quando surge a necessidade de documentar esquemas de banco de dados, diferentes DBMSs fornecem suas próprias ferramentas para tarefas semelhantes. E a maioria deles DESC table_name



oferece suporte , incluindo ClickHouse. No entanto, o resultado desse comando não é tão expressivo quanto gostaríamos.







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
      
      





Ao mesmo tempo, as tabelas do sistema tables



e columns



contêm informações abrangentes, combinando o que você pode obter aqui é um resultado bonito:













Inspiração



Antes de começar a ver cuidadosamente minha própria solução, desprovida de falhas fatais, procurei as opções disponíveis. E esse trabalho me inspirou a iniciar meu próprio projeto. Alguns espaços em branco foram emprestados com gratidão a partir daí, com atribuição.







O que é PlantUML



Algumas palavras sobre o que é este produto. Para melhor compreensão, aconselho que você vá até a página oficial . Em poucas palavras, este é um programa que converte a descrição textual de gráficos, por exemplo:







@startuml
Bob -> Alice : hello
@enduml
      
      





em imagens













, , , , . 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