❄️

データ比較ツールRecceの紹介

2024/06/05に公開

こんにちは!Septeni Japan株式会社でデータエンジニアをしている大志万といいます。

当社はその特性上大量で複雑な広告データを扱うことが多いです。
私のチームでは、そのような広告データの変換・加工(Transform)を dbt を使って行っています。

しかし、大量のデータを取り扱うため、dbt のモデルが増加し、

  • モデルの変更時のデータの検証に時間がかかっている
  • 依存先のモデルを把握しきれず、意図しない変更が生じてしまうことがある

といった課題がありました。

そこで何かいいツールはないか探したところ、Recce という面白そうなツールを見つけたので紹介したいと思います!

Recce 概要

https://datarecce.io/docs/

概要

Recce は dbt に特化したデータ比較ツールです。開発環境と本番環境のような 2 つの環境間での結果の比較を容易にし、差異を特定するのに役立ちます。

データ比較ツールなだけあり、様々な角度から比較することが可能です。
比較する際はローカルでサーバーを立ち上げて比較することになります。

設定

install

pip install recce

dbt のプロジェクトのディレクトリに移動

cd your-dbt-project/

dbt の package.yml の設定

下記のパッケージを追加でインストールする必要があります。

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 にアクセスするとデフォルトで、変更したモデルと、関係のあるモデルのリネージが表示されるようになっています。

変更したモデル:黄色
削除したモデル:赤色
新しく作成したモデル:緑色

として変更をハイライトしてくれます。

lineage_digg

関係のあるモデルのリネージが表示されることで、依存先のモデルの把握で抜け漏れがなくなりそうです。

Ad-Hoc Query and Query Diff

  • モデルに対するクエリの実行
  • クエリを本番環境と開発環境で実行し、実行結果の差分を出力

が可能です。

query_diff

データ量が多いときに where 句を使って比較してみたり、特定条件下で差分を抽出したい時に役に立ちそうです。

Row count diff

モデルのレコード数を比較する機能になります。

データリネージのモデルをクリック後、右上のrow_countを押すと、
本番環境とのレコード数の差分の比率を計算してくれます。

count_diff

JOIN時に間違ったキーで紐付けをしている場合はレコード数の比較をすることで、すぐに検知できそうです。

Profile Diff

モデルの概要を比較する機能になります。

Profile Diff では、下記の項目について比較を行い、
差分がある項目では赤くハイライトしてくれます。

  • データ型
  • 行数
  • NOT_NULL
  • ユニーク
  • MIN/MAX/AVG/MEDIAN

profile_diff

変更の概要を把握したい場合は Profile Diff を使うのが良さそうです。

Value 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では、一緒にプロダクト開発組織を盛り上げてくれる仲間を募集しています!
ご興味のある方は以下リンクから応募していただき、カジュアル面談を通じて働く環境や仲間を知っていただければと思います!

その際、応募フォームの「知ったきっかけ」に「テックブログ」と記載いただければと思います。
https://septeni-recruitment.snar.jp/jobboard/detail.aspx?id=D3Sa2fnGT-Q5Qe8T-ivLbg

Discussion