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