💬

ローカルにおけるDB品質管理の向上:dbml/cli、dbdocs、psqldefの活用

2024/03/23に公開

背景

こういうのが大変

  • スキーマを管理するために独自で書いたコードの管理
  • DDLファイルとのスキーマの差分管理
  • ドキュメント管理
  • ER図の作成

対処

以下のツールを統合したDockerイメージを作成。

  • dbml/cli・・・DDLからDBMLを生成
  • dbdocs・・・DBMLファイルからER図を生成
  • psqldef・・・PostgreSQLスキーマ管理ツール

ちなみにデジタル庁(旧IT総合戦略室)が提供しているデータ品質管理ガイドブックによると、データ品質を測定する項目は、ISO/IEC 25012に沿って以下の通り

  1. 正確性(Accuracy)
  2. 完全性(Completeness)
  3. 一貫性(Consistency)
  4. 信憑性(Credibility)
  5. 最新性(Currentness)
  6. アクセシビリティ(Accessibility)
  7. 標準適合性(Compliance)
  8. 機密性(Confidentiality)
  9. 効率性(Efficiency)
  10. 精度(Precision)
  11. 追跡可能性(Traceability)
  12. 理解性(Understandability)
  13. 可用性(Availability)
  14. 移植性(Portability)
  15. 回復性(Recoverability)

ER図の自動生成とsqldefによるスキーマチェックは、以下の品質項目に該当する

11.追跡可能性 (Traceability)

  • sqldefによりDDLとデータベーススキーマの差分を管理できるため、スキーマ変更の追跡可能性が高まる

12.理解性 (Understandability)

  • dbml/cliとdbdocsを使ってER図を自動生成できるので、データモデルの理解が容易になり、理解性が向上

Airflowによるテーブル作成のスケジュール管理とdbtを追加すれば、以下の品質項目が強化されるはず。

  1. 最新性(Currentness)
  • Airflowを使ってETLパイプラインを自動化しデータの更新を適切なタイミングで行えるので最新性が保たれる
  1. 追跡可能性(Traceability)
  • dbtのリネージ機能によってデータの流れと加工履歴が可視化されるため、追跡可能性が向上
  1. 完全性(Completeness)
  • dbtでデータマートを構築すれば、必要な情報が網羅され完全性が高まる
  1. 一貫性(Consistency)
  • dbtのテスト機能でデータマート内の一貫性チェックができるため、不整合が低減される
  1. 効率性(Efficiency)
  • Airflow経由でETLを行うことで、効率的なデータ処理パイプラインを構築できる

今の構成だとまだまだ改良の余地がありそう

リポジトリ

https://github.com/hayato540101/Docker-envs/tree/main/pgsql-client-tools

開発のフロー

リポジトリのREADMEに書いてあるのでざっくりと説明

  1. pgsql-client-tools\DDL\sqlディレクトリ内にDDLファイルを作成
  2. 作成したDDLファイルを summarized.sql に集約してから convert_sql_to_dbml.sh でDBML形式に変換
  3. 集約されたsqlに対して psqldef でスキーマチェック
  4. dbdocsを使用してER図を作成

ディレクトリ構成

.
├── README.md
└── pgsql-client-tools
    ├── DDL
    │   ├── dbml
    │   │   ├── query1.dbml
    │   │   ├── query2.dbml
    │   │   └── summarized.dbml # ER図の生成
    │   ├── sql # 各テーブルのDDL
    │   │   ├── query1.sql
    │   │   ├── query2.sql
    │   │   └── query3.sql
    │   └── utils
    │       └── convert_sql_to_dbml.sh  # dbmlの生成
    ├── Docker
    │   ├── build_run.bat
    │   └── pgsql-client-dockerfile
    └── README.md

Discussion