ClickHouse Table Chart Generator untuk PlantUML

Ketika skema database perlu didokumentasikan, DBMS yang berbeda menyediakan alatnya sendiri untuk tugas yang serupa. Dan kebanyakan dari mereka mendukung DESC table_name



, termasuk ClickHouse. Namun, hasil dari perintah ini tidak seekspresif yang kami inginkan.







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
      
      





Pada saat yang sama, tabel sistem tables



dan columns



berisi informasi yang komprehensif, menggabungkan yang bisa Anda dapatkan di sini adalah hasil yang cukup:













Inspirasi



Sebelum mulai dengan hati-hati melihat solusi saya sendiri, tanpa kekurangan fatal, saya mencari opsi yang tersedia. Dan pekerjaan ini menginspirasi saya untuk memulai proyek saya sendiri. Beberapa bagian kosong dipinjam dari sana, dengan atribusi.







Apa itu PlantUML



Beberapa kata tentang apa produk ini. Untuk pemahaman terbaik, saya menyarankan Anda untuk pergi ke halaman resmi . Singkatnya, ini adalah program yang mengubah deskripsi tekstual diagram, misalnya:







@startuml
Bob -> Alice : hello
@enduml
      
      





dalam gambar













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