データコントラクトとは?データの生産者と消費者の間の合意の解説
データコントラクトとは、データを生産するチームとそれを消費するチームの間で交わされる、データのスキーマ、セマンティクス、品質に関する明示的で強制可能な合意です。
下流のデータの破損は、しばしば上流で始まります。生産者が誰にも知らせずにカラム名を変更したり単位を変えたりすると、ダッシュボードやモデルが静かに壊れます。データコントラクトはそうした期待を明示的かつ強制可能にし、破壊的な変更が発生元で捕捉されるようにします。
データコントラクトとは何か
データコントラクトは、データセットのバージョン管理された仕様です。そのフィールドと型、許可される値、セマンティクス、鮮度、所有権を規定します。APIコントラクトと同様に、生産者と消費者の間に明確な期待を設定し、どちらの側も一方的に振る舞いを変更しないようにします。
なぜチームが採用するのか
データプラットフォームが成長するにつれ、多くのチームが互いのテーブルに依存するようになります。コントラクトがなければ、上流の変更が下流の静かな失敗へと波及します。コントラクトは失敗を左へシフトさせます。コントラクトに違反する生産者の変更は、1週間後の消費者のダッシュボードではなく、生産者のパイプラインで失敗します。
どのように強制されるか
コントラクトは機械可読な仕様(多くの場合YAMLまたはJSON Schema)として記述されます。強制は、実際のデータまたはスキーマをコントラクトと比較し、破壊的な変更で失敗するチェックとして実行されます。dbt contractsやschema registryのようなツールがこれをサポートします。
CIにおけるデータコントラクト
変更のたびに生産者のパイプラインでコントラクトを検証することで、スキーマやセマンティクスの破壊がマージ前にブロックされます。
steps:
- run: datacontract test --server warehouse contract.yaml
- run: dbt build --select my_model # fails if contract breaksLatchkeyに関する注記
コントラクトチェックは、pull requestのたびにウェアハウスに問い合わせたり、サンプルデータを読み込んだりします。Latchkeyでは、ツールチェーンをキャッシュすることでこれらのチェックが高速に保たれ、auto-retryにより一時的なウェアハウス接続の不具合がコントラクト違反と誤認されるのを防ぎます。
重要なポイント
- データコントラクトは、生産者と消費者の間の、データセットのスキーマ、セマンティクス、品質に関する強制可能な合意です。
- 下流のダッシュボードやモデルではなく、生産者のパイプラインで破壊的な変更を捕捉します。
- コントラクトは機械可読な仕様であり、変更のたびにCIチェックとして強制されます。