データ比較ツールRecceの紹介
こんにちは!Septeni Japan株式会社でデータエンジニアをしている大志万といいます。
当社はその特性上大量で複雑な広告データを扱うことが多いです。
私のチームでは、そのような広告データの変換・加工(Transform)を dbt を使って行っています。
しかし、大量のデータを取り扱うため、dbt のモデルが増加し、
- モデルの変更時のデータの検証に時間がかかっている
- 依存先のモデルを把握しきれず、意図しない変更が生じてしまうことがある
といった課題がありました。
そこで何かいいツールはないか探したところ、Recce という面白そうなツールを見つけたので紹介したいと思います!
Recce 概要
概要
Recce は dbt に特化したデータ比較ツールです。開発環境と本番環境のような 2 つの環境間での結果の比較を容易にし、差異を特定するのに役立ちます。
データ比較ツールなだけあり、様々な角度から比較することが可能です。
比較する際はローカルでサーバーを立ち上げて比較することになります。
設定
install
pip install recce
dbt のプロジェクトのディレクトリに移動
cd your-dbt-project/
dbt の package.yml の設定
下記のパッケージを追加でインストールする必要があります。
packages:
- package: dbt-labs/audit_helper
version: 0.9.0
- package: data-mie/dbt_profiler
version: 0.8.1
target-base
ディレクトリの設定
dbt ではtarget
ディレクトリに、dbt の設定情報が格納されています。
Recce では target-base
ディレクトリに本番の設定情報を格納し、target
ディレクトリの設定情報と比較することで、モデルの差分を検出しています。
# 本番用のブランチに移動
git switch main
# 本番の設定情報をtarget-baseディレクトリに出力
dbt docs generate --target prod --target-path target-base/
target
ディレクトリに最新情報を更新
git switch feature/my-awesome-feature
# Run dbt and generate artifacts for current working environments
dbt run
dbt docs generate
以上で設定は完了です。
実際に使ってみた
recce server
上記のコマンドで Recce サーバーを起動して、localhost:8000
にアクセスします。
Lineage Diff
Recce にアクセスするとデフォルトで、変更したモデルと、関係のあるモデルのリネージが表示されるようになっています。
変更したモデル:黄色
削除したモデル:赤色
新しく作成したモデル:緑色
として変更をハイライトしてくれます。
関係のあるモデルのリネージが表示されることで、依存先のモデルの把握で抜け漏れがなくなりそうです。
Ad-Hoc Query and Query Diff
- モデルに対するクエリの実行
- クエリを本番環境と開発環境で実行し、実行結果の差分を出力
が可能です。
データ量が多いときに where 句を使って比較してみたり、特定条件下で差分を抽出したい時に役に立ちそうです。
Row count diff
モデルのレコード数を比較する機能になります。
データリネージのモデルをクリック後、右上のrow_count
を押すと、
本番環境とのレコード数の差分の比率を計算してくれます。
JOIN時に間違ったキーで紐付けをしている場合はレコード数の比較をすることで、すぐに検知できそうです。
Profile Diff
モデルの概要を比較する機能になります。
Profile Diff では、下記の項目について比較を行い、
差分がある項目では赤くハイライトしてくれます。
- データ型
- 行数
- NOT_NULL
- ユニーク
- MIN/MAX/AVG/MEDIAN
変更の概要を把握したい場合は Profile Diff を使うのが良さそうです。
Value Diff
レコード単位での比較も行うことも可能です。
差分の調査を行うときはValue Diffを使うのが良さそうです。
所感
使ってみた感想としては、かなり使い勝手が良さそうなツールだと思いました!
特に、便利だなと感じたのは、Profile DiffとValue Diffです。
Profile Diffを使うことで、データ型や行数、Enum値などの概要を簡単に把握でき、意図しない変更があった場合にすぐに気づくことができそうだなと感じました。
また、Value Diffについても、今まで手動で書いていたクエリをGUIで簡単に出力できるのはとてもありがたいと思いました。
Recceを使うことで、品質と開発生産性両方の向上が期待できそうです。
もし、
- モデルが多すぎて、依存先を把握するのが大変
- モデル変更後のデータの検証に時間がかかっている
といった課題を抱えている場合は、Recceを試してみてはいかがでしょうか?
ちなみに、紹介した以外にも
- ヒストグラム Diff(ヒストグラムのグラフを重ね合わせて差分を表示)
- TOP-K Diff(上位 10件の要素数をグラフで表示)
といった方法の比較もできる様です。
使ってみてまた便利な機能があれば記事にしたいと思います。
We are hiring
Septeni Japanでは、一緒にプロダクト開発組織を盛り上げてくれる仲間を募集しています!
ご興味のある方は以下リンクから応募していただき、カジュアル面談を通じて働く環境や仲間を知っていただければと思います!
その際、応募フォームの「知ったきっかけ」に「テックブログ」と記載いただければと思います。
Discussion