「うちのデータ、見るたびに少し違う気がする」。データを使い込むほど、こうした言葉が現場で増えていきます。テストを書こうにも、何をどこまで検証すれば安心と言えるか、判断が難しい。Great Expectationsは、この問いに「Expectation(期待)」という単位で答えるOSSのデータ検証フレームワークです。

名称のとおり、Great Expectationsは「データに何を期待するか」を明示的に書く道具です。dbt testsより表現の幅が広く、dbtの外側のデータも検証できます。基本概念から運用設計までを整理します。

中核概念:Expectation・Suite・Checkpoint

Great Expectationsの中核は3つの概念です。

概念意味
Expectation「この属性は0〜100の範囲」のような期待を1つ表す検証単位
Expectation SuiteExpectationを束ねた、1つのデータセットに対する期待集合
Checkpoint「このSuiteをこのデータに対して実行する」という運用単位

Expectationを書き、Suiteにまとめ、Checkpointとして繰り返し実行する、というのが基本の流れです。結果はData Docsという自動生成ドキュメントに残り、誰がいつ何を検証して何が失敗したかを後追いできます。

最小のExpectation

PythonでExpectationを直接書く例です。

import great_expectations as gx

# データソース接続を取得
context = gx.get_context()
data_source = context.data_sources.add_pandas("orders")
data_asset = data_source.add_dataframe_asset("orders")
batch = data_asset.add_batch_definition_whole_dataframe("orders").get_batch(
    batch_parameters={"dataframe": df_orders}
)

# Expectationを書く
batch.validate(
    gx.expectations.ExpectColumnValuesToBeBetween(
        column="order_total", min_value=0, max_value=1000000
    )
)
batch.validate(
    gx.expectations.ExpectColumnValuesToNotBeNull(column="order_id")
)
batch.validate(
    gx.expectations.ExpectColumnValuesToBeInSet(
        column="order_status",
        value_set=["pending", "paid", "shipped", "cancelled"]
    )
)

標準で200以上のExpectationが用意されており、範囲・分布・正規表現・行数・一意性・参照整合性などをカバーします。dbt testsの基本(unique/not_null)に加えて、「分布が想定の範囲内か」「外れ値が一定以下か」のような統計的な検査が標準で書けるのが強みです。

プロファイリングから期待を自動生成する

「最初のExpectationを何にすればよいか分からない」という壁を、Great Expectationsはプロファイラ機能で乗り越えます。データを読み込ませると、統計的な特徴から「期待として書きそうな項目」を自動生成してくれます。

from great_expectations.experimental.rule_based_profiler import RuleBasedProfiler

profiler = RuleBasedProfiler(name="auto_orders_suite", config_version=1.0)
profiler.run(batch=batch)
suite = profiler.get_expectation_suite("auto_orders_suite")

生成されたSuiteをそのまま使うのではなく、「業務的に正しいか」を人が見て調整するのが運用の現実です。自動生成は「叩き台を作る」ためのものと位置づけます。

Checkpointで運用する

Checkpointは、Suiteを定期実行する単位です。1つのCheckpointに、複数のSuiteと複数のデータセットを束ねられます。失敗時の通知(Slack、Email等)もここで設定します。

checkpoint = context.checkpoints.add(
    gx.Checkpoint(
        name="daily_orders_checkpoint",
        validation_definitions=[validation_definition],
        actions=[
            gx.checkpoint.UpdateDataDocsAction(name="update_docs"),
            gx.checkpoint.SlackNotificationAction(
                name="notify_slack",
                slack_webhook="${SLACK_WEBHOOK}",
                notify_on="failure"
            ),
        ],
    )
)
checkpoint.run()

dbtとの組み合わせ

dbtと併用するパターンは2つあります。

使い分け使う場面
dbt-expectations(dbt内)dbtで作るモデルの基本検証。schema.ymlに宣言的に書ける
Great Expectations本家dbtの外側(取り込み前のソース、BI出力等)の検証や、高度な統計的検査

dbt-expectationsはGreat Expectationsの「期待表現」をdbtに移植したもので、dbt中心の運用なら、まずdbt-expectationsで足ります。dbt-expectationsとdbt testsの使い分けはdbt tests 実践にまとめています。dbtの外側でも検証したくなったら、本家Great Expectationsの導入を検討する流れです。

運用上のハマりどころ

  • Expectationが増えすぎて遅くなる:全カラムに統計検査を入れると、検証時間が爆発します。「業務上重要な列だけ深い検査、他は基本検査」と濃淡をつけます。
  • 偽陽性が増える:自動生成の期待は厳しすぎることがあり、運用初期は警告ばかり出ます。閾値を業務的に妥当な範囲に調整するレビューが必要です。
  • 誰がSuiteを管理するか:データプロデューサー(ソースを生成する側)と相談せずに「期待」を一方的に固めると、ソース側の正当な変更が常にエラー扱いになります。所有者を明確にします。
  • 結果の見方が定まらない:Data Docsを生成しても、誰が見て対応するかが決まっていないと意味がありません。失敗時の通知先と対応フローを最初に決めます。

向く・向かない場面

  • 向く:Pythonでデータ処理しているチーム、dbtの外側の検証も必要、明示的に「期待」を書きたい、統計的な検査が欲しい
  • 向かない:YAMLで完結させたい(→Soda)、書きたくない・自動で異常を見つけたい(→Monte Carlo)、小規模でdbt testsで足りる

まとめ

  • Great Expectationsは「期待を明示的にコードで書く」OSSのデータ検証フレームワーク。
  • Expectation→Suite→Checkpoint→Data Docs、の流れで構築・実行・記録する。
  • プロファイラで叩き台を自動生成。人が業務的に調整する。
  • dbt中心ならdbt-expectationsで足り、外側の検証が必要になったら本家を入れる。
  • 運用は所有者と閾値の調整、通知と対応フローをセットで設計する。

全体像はデータ品質ツール選定ガイド、隣接の選択肢はSoda とはMonte Carlo とはにあります。データ品質の設計やツール導入の壁打ちは、DE-STKの初回相談(30分・無料)もご利用ください。

よくある質問(FAQ)

Q. Great Expectationsの学習コストは、現実的にどのくらい?

A. 初めて触る人なら、最初の使えるCheckpointを動かすまで1〜2週間が目安です。Suite・Checkpoint・Data Docsという独自概念の理解と、PythonとYAMLの両方を行き来する運用に慣れる必要があります。dbt-expectationsから入ると、概念に触れずに使えるので学習コストが下がります。本家GEはdbtの外側の検証が必要になったタイミングで導入するのが、コスト効率が良いです。

Q. GX Cloudは使うべきですか?

A. 用途と予算次第です。GX CloudはGreat Expectations社が提供するマネージドSaaSで、ホスティング・通知・コラボ機能が付いて運用が楽になります。OSS版で十分回るチームならわざわざ移行は不要です。OSS版の運用負荷が重く感じる、複数チームで結果を共有したい、SLAが必要、といった段階で検討します。

Q. CI/CDで実行する場合、何に気をつけますか?

A. 大きく3点です。第1に、検証時間がパイプライン全体の中で許容範囲か。重い統計検査は本番ジョブから外し、夜間バッチに回します。第2に、失敗時に止めるかWarningで続行するかの設計。「止めると業務影響、間違ったデータが流れるともっと影響」を天秤にかけます。第3に、検証結果のアーティファクト保存。Data Docsを成果物として残し、後から追跡できるようにします。

Q. Great Expectationsで「未知の異常」も見つけられますか?

A. 限定的にしか見つけられません。Great Expectationsは「明示的に書いた期待に対する違反」を検出する道具で、書いていない種類の異常は気づきません。「未知の異常」も見つけたいなら、Monte Carloのような機械学習ベースのオブザーバビリティ製品が向きます。GEは「想定どおりか」、Monte Carloは「想定外が起きていないか」と役割を切り分けると整理しやすいです。

▼ このトピックをポチポチ学ぶ

データガバナンスとカタログ

関連記事を順序立てて読みながら、ステップごとに4択クイズで理解を確認できる学習パスです。登録不要・進捗自動保存。

学習パスを始める →