Wenn Datenbankschemata dokumentiert werden müssen, stellen verschiedene DBMS ihre eigenen Tools für ähnliche Aufgaben bereit. Und die meisten von ihnen unterstützen DESC table_name
, einschließlich ClickHouse. Das Ergebnis dieses Befehls ist jedoch nicht so aussagekräftig, wie wir es gerne hätten.
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
Gleichzeitig sind die Systemtabellen tables
und columns
umfassende Informationen enthalten. Die Kombination, die Sie hier erhalten können, ist ein hübsches Ergebnis:

Inspiration
Bevor ich meine eigene Lösung ohne schwerwiegende Mängel sorgfältig erkannte, suchte ich nach verfügbaren Optionen. Und diese Arbeit hat mich dazu inspiriert, mein eigenes Projekt zu starten. Einige Rohlinge wurden von dort dankbar mit Zuschreibung ausgeliehen.
Was ist PlantUML?
Ein paar Worte darüber, was dieses Produkt ist. Zum besten Verständnis empfehle ich Ihnen, auf die offizielle Seite zu gehen . Kurz gesagt, dies ist ein Programm, das die Textbeschreibung von Diagrammen konvertiert, zum Beispiel:
@startuml Bob -> Alice : hello @enduml
in Bildern

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