💬
ローカルにおけるDB品質管理の向上:dbml/cli、dbdocs、psqldefの活用
背景
こういうのが大変
- スキーマを管理するために独自で書いたコードの管理
- DDLファイルとのスキーマの差分管理
- ドキュメント管理
- ER図の作成
対処
以下のツールを統合したDockerイメージを作成。
-
dbml/cli
・・・DDLからDBMLを生成 -
dbdocs
・・・DBMLファイルからER図を生成 -
psqldef
・・・PostgreSQLスキーマ管理ツール
ちなみにデジタル庁(旧IT総合戦略室)が提供しているデータ品質管理ガイドブックによると、データ品質を測定する項目は、ISO/IEC 25012に沿って以下の通り
- 正確性(Accuracy)
- 完全性(Completeness)
- 一貫性(Consistency)
- 信憑性(Credibility)
- 最新性(Currentness)
- アクセシビリティ(Accessibility)
- 標準適合性(Compliance)
- 機密性(Confidentiality)
- 効率性(Efficiency)
- 精度(Precision)
- 追跡可能性(Traceability)
- 理解性(Understandability)
- 可用性(Availability)
- 移植性(Portability)
- 回復性(Recoverability)
ER図の自動生成とsqldefによるスキーマチェックは、以下の品質項目に該当する
11.追跡可能性 (Traceability)
- sqldefによりDDLとデータベーススキーマの差分を管理できるため、スキーマ変更の追跡可能性が高まる
12.理解性 (Understandability)
- dbml/cliとdbdocsを使ってER図を自動生成できるので、データモデルの理解が容易になり、理解性が向上
Airflowによるテーブル作成のスケジュール管理とdbtを追加すれば、以下の品質項目が強化されるはず。
- 最新性(Currentness)
- Airflowを使ってETLパイプラインを自動化しデータの更新を適切なタイミングで行えるので最新性が保たれる
- 追跡可能性(Traceability)
- dbtのリネージ機能によってデータの流れと加工履歴が可視化されるため、追跡可能性が向上
- 完全性(Completeness)
- dbtでデータマートを構築すれば、必要な情報が網羅され完全性が高まる
- 一貫性(Consistency)
- dbtのテスト機能でデータマート内の一貫性チェックができるため、不整合が低減される
- 効率性(Efficiency)
- Airflow経由でETLを行うことで、効率的なデータ処理パイプラインを構築できる
今の構成だとまだまだ改良の余地がありそう
リポジトリ
開発のフロー
リポジトリのREADMEに書いてあるのでざっくりと説明
- pgsql-client-tools\DDL\sqlディレクトリ内にDDLファイルを作成
- 作成したDDLファイルを
summarized.sql
に集約してからconvert_sql_to_dbml.sh
でDBML形式に変換 - 集約されたsqlに対して
psqldef
でスキーマチェック - 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