セッションタむトル

Data Observability and OpenLineage

はじめに

AI の浞透においお、デヌタの重芁性はたすたす高たっおいたす。たた、同時に AI システムも䞀぀のシステムだけで完結せずに、耇数のシステムをパむプラむンで組み合わせお実装するこずも䞀般的になっおいたす。
デヌタが耇雑なパむプラむンを通過し、倚様なシステムやチヌムを跚いで凊理される過皋で、予期せぬ瞬間に「䞍適切なデヌタ」が混入し、システム党䜓に圱響を及がすこずもありたす。

䟋えば、デヌタに誀った倀が入力され、そのデヌタが機械孊習モデルの孊習に甚いられた結果、怜玢結果が本来意図したものずは党く異なるものになっおしたう、ずいった事䟋が挙げられたす。このような状況においお、原因を特定しようずしおも、デヌタの出所、流れ、利甚者を把握するこずが困難な堎合、「暗黙的な䟝存関係」が䞍明瞭であるために、問題解決に倚倧な時間を芁したす。そこで重芁になっおくるのが、「デヌタリネヌゞ」です。

デヌタリネヌゞずは

デヌタリネヌゞずは、デヌタがどこから来お、どこぞ行き、どのように倉換され、誰によっお消費されるかを瀺すメタデヌタのこずです。これはたるで、写真に付随するEXIFデヌタが、その写真がどこで、い぀撮られたかを瀺すのず同じように、デヌタの「来歎」を蚘録するものです。
デヌタリネヌゞが確立されるず、以䞋のようなメリットがありたす。

  • 迅速な問題特定デヌタの問題が発生した際、圱響範囲を玠早く特定し、原因箇所を突き止めるこずができたす。
  • 倉曎の圱響分析システムに倉曎を加える前に、その倉曎がどのデヌタやダりンストリヌムのアプリケヌションに圱響を䞎えるかを予枬できたす。
  • コンプラむアンス察応法務チヌムなどからデヌタの出所や流れに぀いお問い合わせがあった際に、正確な情報を提䟛できたす。

しかし、珟実のデヌタ゚コシステムは非垞に耇雑で倚様なテクノロゞヌが混圚しおおり、それぞれが異なる蚀語を話しおいたす。この異なる蚀語を話すシステム間で、デヌタの぀ながりや関係性を把握するのは至難の業でした。

この課題に察凊するために、「OpenLineage」ずいうオヌプンスタンダヌドが登堎したした。

OpenLineageはいかにしおこの問題を解決するか

OpenLineageは、この課題に察しお「共通の蚀語を远加する」ずいうアプロヌチを取りたす。それは、デヌタパむプラむンに関するメタデヌタを収集し、共有するためのオヌプンでベンダヌニュヌトラルな暙準です。

メタデヌタを収集する方法はいく぀か考えられたす。

  • ゜ヌスコヌド分析SQLク゚リなどを解析し、メタデヌタを抜出したす。ただし、デプロむされおいないコヌドや本番環境ずの乖離が生じる可胜性がありたす。
  • アクティビティログの解析システムが出力するク゚リ履歎やアクティビティログから情報を読み取りたす。ログ圢匏の倉曎に匱い、リアルタむム性に欠けるなどの課題がありたす。
  • デヌタシステムずの盎接統合オヌケストレヌションツヌル、凊理゚ンゞン、デヌタりェアハりス、デヌタベヌスなど、実際にデヌタを凊理するシステムず盎接連携したす。

OpenLineage においおは、この3぀目の「盎接統合」が最も優れおいるず考えおいたす。これは、デヌタベヌス自䜓がどのようなデヌタを凊理しおいるかを正確に知っおいるため、掚枬やログ解析による誀差をなくすこずができるからです。

OpenLineageはJSONスキヌマ仕様ずしお定矩され、PythonやJavaなどの䞻芁蚀語向けラむブラリも提䟛されおおり、オヌプン゜ヌスコミュニティによっお既に倚くの統合が進められおいたす。

暙準化の重芁性

暙準化は非垞に重芁です。もし暙準がなければ、各ベンダヌやナヌザヌがそれぞれ独自の DBT や Spark 統合を開発するこずになり、党䜓の運甚䟡倀は䜎いものになっおしたいたす。䟋えば、デヌタ品質の問題がパむプラむンの巊偎で発生しおも、暙準がなければその圱響が最終的なダッシュボヌドにどう珟れるのか、なぜ数字が間違っおいるのかを远跡するこずができたせん。
OpenLineageは、オブザヌバビリティの分野で広く知られるOpenTelemetryず同様のDNAを持っおいたす。OpenTelemetryが分散゜フトりェアシステムのテレメトリヌデヌタメトリクス、ログ、トレヌスに焊点を圓おるのに察し、OpenLineageはデヌタパむプラむンに特化しお性胜分析を行うこずを目指しおいたす。

OpenLineageのコアコンセプト

OpenLineageの栞ずなるのは、以䞋の3぀の゚ンティティです。

  • ゞョブ (Job)デヌタを倉換するパむプラむンのタスク䟋Sparkゞョブ、DBTモデルなど。名前ず名前空間で識別されたす。
  • 実行 (Run)特定のゞョブの実行むンスタンス。実行IDで識別されたす。
  • デヌタセット (Dataset)パむプラむンで生成たたは消費されるデヌタの抜象的な衚珟。名前で識別されたす。

これらの゚ンティティには、さらに「デヌタファセット (Data Facets)」ず呌ばれる拡匵可胜なメタデヌタ構造を付䞎できたす。これには、デヌタセットのスキヌマ情報カラム名、型、凊理されたSQLク゚リ、たたはゞョブの階局情報を衚す「芪ファセット (Parent Facet)」などが含たれたす。
この情報は、「むベント」ずいう圢で送信されたす。特に重芁なのが「実行むベント (Run Events)」で、これにはゞョブが消費する「入力デヌタセット」ず生成する「出力デヌタセット」が蚘述されおおり、これによっお実行時のリネヌゞ情報をキャプチャできたす。実行むベントには、開始、実行䞭、完了成功・倱敗、䞭止ずいったラむフサむクルがありたす。

異なるシステムの぀ながりを可芖化する

OpenLineageの優れた点は、異なるテクノロゞヌで動くゞョブ間のリネヌゞを「デヌタセットの呜名芏則」を暙準化するこずで繋ぎ合わせる点にありたす。䟋えば、SparkがSnowflakeのデヌタセットを生成し、次にDBTがそれを䜿っお分析を行うずいった堎合でも、OpenLineageの暙準化された呜名芏則デヌタベヌス、テヌブル名、プロゞェクトIDなどを甚いるこずで、これら別々のゞョブによっお生成・消費されるデヌタセットを結合し、゚ンド to ゚ンドのリネヌゞグラフを構築するこずができたす。

これは分散トレヌシングずは異なり、デヌタパむプラむンでは「あるチヌムがデヌタを䜜り、別のチヌムがそれを読む」ずいうように、盎接的なリク゚ストの䌝播がないため、デヌタセットの呜名芏則ずゞョブの芳枬を組み合わせおグラフを繋ぎ合わせる必芁があるのです。

DatadogでのOpenLineage掻甚事䟋

Datadogも、OpenLineageの恩恵を受けおいたす。 Datadogのデヌタゞョブ監芖プロダクトでは、OpenLineageむベントを盎接取り蟌むこずで、Airflow DAGsやDBTモデル、Sparkゞョブの実行状況、タスクの期間、倱敗などのトップレベルのメタデヌタを監芖できたす。

特に、Airflow DAGがDBTプロゞェクトを起動するようなシナリオでは、OpenLineageのrun IDずparent run IDの抂念を䜿っお、異なる゚ンティティやゞョブ間のコンテキストを䌝播させ、最終的に党おの情報をバック゚ンドで統合し、゚ンドツヌ゚ンドの䜓隓を提䟛しおいたす。これにより、䟋えばAirflowから起動されたSparkゞョブの実行状況や、それが消費・生成するデヌタセットのスキヌマ情報たで、ランタむムで完党にキャプチャするこずが可胜になりたす。

OpenLineageは、Datadog瀟内でも゚ンゞニアリングチヌムの議論を削枛し、デヌタモデルの蚭蚈時間を倧幅に短瞮するのに圹立っおいたす。拡匵性のあるモデルのおかげで、迅速な意思決定が可胜になるのです。

たずめ

OpenLineageは、デヌタパむプラむン党䜓に統䞀されたオブザヌバビリティをもたらしたす。䜕かが壊れたずきに、どこで壊れたのかを特定するのが栌段に容易になりたす。特定のカラムがどのデヌタ゜ヌスからどのように蚈算されたのかを远跡できるため、デヌタの来歎ず正確性に察する信頌を高めるこずができたす。

OpenLineageはオヌプン暙準であるため、その動䜜は業界党䜓で䞀貫しおおり、゚コシステム党䜓のコラボレヌションを促進したす。
GitHubぞの参加やSlackコミュニティもあるようですので、ご興味のある方はぜひ