データコントラクトは、データプロバイダーとデータコンシューマー間のインターフェース定義であり、データモデル、品質保証、所有権などを指定する。Jochen Christ氏によると、データコントラクトはデータメッシュでの分散データのデータ所有権の決定に不可欠であり、このおかげでデータ特定性、データ相互運用性、データガバナンスが確保されている。データコントラクトでチーム間のコミュニケーションが促進され、データプロダクトの信頼性と品質が向上している。
Jochen Christ氏はObject-Oriented Conferenceでデータコントラクトについて講演した。
データコントラクトは、ソフトウェアシステムにとってのAPIのような存在だ、とChrist氏は説明する。データコントラクトは、データプロバイダーとデータコンシューマー間のインターフェース仕様である。データコントラクトは、提供されるデータモデルのシンタックス、フォーマット、セマンティクスを指定するだけでなく、データ品質保証、サービスレベル目標、データの利用規約も含まれる。また、データコントラクトは提供されるデータプロダクトの所有者も定義しており、ここで定義された所有者がプロダクトの問題や課題に責任を負うことになっている、と同氏は付け加えた。
データメッシュはデータコントラクトの重要な推進力であり、データメッシュでデータプロダクトの分散所有が可能になる、とChrist氏は述べている。従来は、1つの主要チームだけでデータやBIアクティビティを一手に統括しており、他のチームとの間でインターフェースを指定する必要がなかった。
データメッシュでは、複数のチームが共有インフラストラクチャ上でデータプロダクトを公開し合っている。こうした移行には、チーム間で標準化された明確なインターフェースを設計し、データ特定性やデータ相互運用性、効果的なデータガバナンスを実現する必要がある、とChrist氏は説明する。
データコントラクトでこうしたインターフェースを標準化する方法が提供され、各チームがプラットフォーム標準に準拠しながら、それぞれのデータプロダクトの開発、維持、利用を独立してできるようになります。
Christ氏は、データセット交換でチームが直面する主な課題はセマンティクスドメインを理解することだと述べ、いくつかの例を挙げた。
「order_timestamp」というフィールドがあるとしましょう。それは顧客が「今すぐ購入」をクリックした時間を示すタイムスタンプでしょうか?それとも支払い成功イベントの通知や、あるいは注文確認メールの通知でしょうか?
別の例には「status」フィールドのような enumeration型があり、こちらは実装済みのビジネスプロセスと例外処理ルーチンに大きく依存しています。
データコントラクトはYAMLで記述されており、機械判読が可能である、とChrist氏は言う。Data Contract CLIのようなツールは、シンタックス、フォーマット、品質チェックをデータコントラクトからデータプロダクトに抽出接続することで、データプロダクトがデータコントラクトの仕様に準拠しているかのテストが可能である。このようなテストがCI/CDデプロイパイプラインやCI/CDデータパイプラインに含まれていると、データエンジニアはデータプロダクトが正しく動作することを確認できる、とChrist氏は述べる。
データの利用者が他チームのデータを使用する場合、特にテストや強制実行が自動化されている場合は、データコントラクトが頼りになる、と同氏は言う。これは大きな進歩である、と同氏は説明した。従来の運用プラクティスでは、各々のユースケースへの適性や信頼性を判断するために、データエンジニアがリネージアトリビューションを用いてフィールドリネージ全体を手動追跡する必要があった。
データの適性や信頼性の保証工程を形式化し、自動化することで、データコントラクトはデータ使用の効率性や信頼性を高めています。
データプロバイダーのベネフィットは、データにアクセスしているコンシューマーを特定できる点である。また、必要に応じて権限が自動化されることがあり、データプロダクトの変更実装が必要な場合、データコントラクトの更新バージョンを導入し、コンシューマーに送信できる、とChrist氏は述べている。
データコントラクトを使用することで、非常に高品質なメタデータが得られる、とChrist氏は語る。このメタデータはガバナンスプロセスの最適化やエンタープライズデータマーケットプレイスの構築に向けたさらに活用が可能であり、データの特定性、透明性、アクセス管理の自動化を組織規模で向上させることで、より多くのチームにデータが利用可能になる。
データコントラクトの活用で、データチーム間のコラボレーションが変革しつつある、とChrist氏は説明する。
例えば、データコントラクトは要件エンジニアリングのツールとして使用できます。データコンシューマーチームは、データコントラクトのドラフトを提起し、個別のユースケースに必要な情報を指定することが可能です。このドラフトに基づいてデータプロバイダーとの議論がなされ、要求されたセマンティクスの情報が利用可能であるか、またはどのような代替案なら実用可能かが検討されます。
Christ氏はこれをコントラクトファースト開発と名付けている。このように、データコントラクトでチーム間コミュニケーションが促進される、と同氏は締めくくっている。
InfoQは、データコントラクトについてJochen Christ氏にインタビューした。
InfoQ: データコントラクトはどのように表記されていますか?
Jochen Christ氏:データコントラクトは通常、YAMLドキュメントとして表現されており、OpenAPIの仕様と似ています。
dataContractSpecification: 1.1.0info:title: Orders Latestowner: Checkout Teamterms:usage: Data can be used for AI use cases.models:orders: type: table description: All webshop orders since 2020 fields: order_id: type: text format: uuid order_total: description: Total amount in cents. type: long required: true examples: - 9999
InfoQ: データコントラクトは、チーム間でのデータセット交換にどのように役立つのでしょうか?
Christ氏:データコントラクトを使用することで、テクノロジーニュートラルな方法でのセマンティクス表現が可能になり、データコントラクト内部でデータ品質チェックを定義し、データ品質の保証や予測がテスト可能になります。
以下は一例の参考です。
order_total:description: | Total amount in the smallest monetary unit (e.g., cents). The amount includes all discounts and shipping costs. The amount can be zero, but never negative.type: longrequired: trueminimum: 0examples: - 9999classification: restrictedquality: - type: sql description: 95% of all values are expected to be between 10 and 499 EUR. query: | SELECT quantile_cont(order_total, 0.95) AS percentile_95 FROM orders mustBeBetween: [1000, 49900]
上記は「order_total」フィールドのメタデータ仕様です。形式(long型)だけでなく、ビジネスセマンティクスも定義しており、通貨概念の理解に役立っています。例えば、金額がユーロ建てではなくセント建てであると認識しておくことは重要です。またセキュリティ分類が「restricted(制限付き)」に定義されているほか、品質特性が売上予測を定義しており、データセットが有効なものかあるいは欠陥の恐れがあるかの検証ができます。
InfoQ: データコントラクトをどのように利用すれば、コード生成やテストの自動化ができるのでしょうか?
Christ氏:前述の「order_total」の例では、データ品質SQLクエリをデータ品質ツール(Data Contract CLIなど)で使用し、デプロイパイプラインでデータ品質チェックを実行できます。
同様に、データコントラクト内のデータモデルを使用することで、CLIでSQL DDLステートメント、各言語の固有データモデル、あるいはHTMLエクスポートなどのコード生成が可能です。