مولد مخطط جدول ClickHouse لـ PlantUML

عندما تظهر الحاجة إلى توثيق مخططات قاعدة البيانات ، توفر نظم إدارة قواعد البيانات المختلفة أدواتها الخاصة لمهام مماثلة. ويدعم معظمهم DESC table_name



، بما في ذلك ClickHouse. ومع ذلك ، فإن نتيجة هذا الأمر ليست معبرة كما نود.







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
      
      





وفي الوقت نفسه، فإن جداول النظام tables



و columns



تحتوي على معلومات شاملة، والجمع التي يمكنك الحصول عليها هنا هو نتيجة جميلة:













وحي - الهام



قبل البدء في رؤية الحل الخاص بي بعناية ، والخالي من العيوب القاتلة ، بحثت عن الخيارات المتاحة. وقد ألهمني هذا العمل لبدء مشروعي الخاص. تم استعارة بعض الفراغات مع الامتنان من هناك ، مع الإسناد.







ما هو PlantUML



بضع كلمات حول ماهية هذا المنتج. للحصول على أفضل فهم ، أنصحك بالذهاب إلى الصفحة الرسمية . باختصار ، هذا برنامج يقوم بتحويل الوصف النصي للرسومات التخطيطية ، على سبيل المثال:







@startuml
Bob -> Alice : hello
@enduml
      
      





بالصور













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