データの原点
系統
1)血統とは何か、なぜ必要なのか
Data Lineageは「、データがどこから来たのか、どのように変換されたのか、どこで誰が使用したのか」という正式な記録です。"結果は、属性(時間、バージョン、所有者、変換、アクセスポリシー、品質)を持つ依存関係の指示されたグラフであり、データシステムを理解して監査可能にします。
ビジネス価値:- メトリクス(金融、製品、リスク)の透明性:"なぜ数はX=1,234ですか?».
- 変更(スキーム/ジョブ)のクイックインパクト分析:「what will break if……」
- コンプライアンスと監査(GDPR/ISO/SOC):実証可能なフィールドパス。
- オンボーディングの加速とトイルの削減(セルフサービス知識)。
- 品質向上:リスクが高い方を対象とした検査。
2)適用範囲区域および細部のレベル
ストリームレベル(パイプライン/ジョブ):データセットを生成するジョブ/オーケストレーター。
データセットレベル(テーブル/ビュー/トピック/ファイル):入力→出力、バージョン/スナップショット。
Column/feature-level-各フィールドがどのソースから計算されるか。
消費レイヤー:BIレポート、API、 MLモデル、ダッシュボード、アラート。
重要な実体(お金、規制)の場合は、列レベルの詳細が必要です。
3)リネージュデータモデル-キーエンティティ
データセット: '{urn、 type、 schema、 owners、 pii_class、 retention、 tags}'
ジョブ/タスク: '{urn、 code_ref、バージョン、ランタイム、スケジュール、所有者}'
実行/実行: '{run_id、 job_urn、 start/end、 status、 inputs[]、outputs[]、code_sha、 infra}'
フィールド:'{dataset_urn、 name、 type、 derivation}' (derivation-expression/AST/operator)。
ポリシー: '{dataset_urn/field、 access_rules、マスキング、consent_scope}'
品質チェック: '{check_id、 scope、 rule、 severity、 result}'
4)ラインソース: アクティブ対パッシブアセンブリ
Active(イベントベース):オーケストレーター/エンジン(Spark/DBT/SQL エンジン/Kafka)をインストゥルメントして、イベント「ジョブの開始/終了、入力/出力、列マッピング」を発行します。
長所:正確さ、関連性、ポストパースの最小化。
パッシブ(推論):DAG parsim、 SQL/DDL/logリクエスト、ディレクトリ/ストレージログ;依存関係を遡って構築します。
長所:急速な遺産の適用範囲;cons: column-levelの精度を下げます。
通常、ハイブリッドが使用されます:可能であればアクティブなイベント、および「保険グリッド」としてのパッシブ分析。
5)ソリューションアーキテクチャ(参照)
プロデューサー(オーケストレーター/エンジン)→ライン・イベントバス→ノーマライザー→グラフ・ストレージ→インデックス/検索→UI/API/アラート→エクスポート/カタログ。
イベント:unified (job/run/dataset/column-lineage)、 URNおよびセマンティックバージョン。
グラフストレージ:列レベルのグラフ(たとえば、グラフデータベースまたはリレーショナル+反転インデックスに基づく)。
UI:最短経路のインタラクティブな可視化、影響/根本原因、エッジとノードの「品質信号」。
統合:データカタログ、品質システム(DQ)、アクセス制御(ABAC)、監査(追加のみのログ)。
6)識別子とバージョン管理
各データセット/ジョブ/フィールドのURN/グローバル ID:安定した、人間で読める、プラットフォーム/名前空間/名前/バージョンを含む。
SchemaVersionとコードバージョン(コードSHA、イメージダイジェスト)。
タイムトラベル系統:調査の再現性。
7)コラム・レベルの血統: 信頼できる得る方法
SQLの構文解析とエイリアス/CTE/blizzardの正規化。
変換コードの注釈(DBTテスト、プリミティブなコメント、UDFメタデータ)。
エンジンからのイベント: 「target」を指定します。col=f (src。A、 SRC。b)
セマンティックルール:UDF/集計オプスは「lossy」(粒度が失われる)または「sensitive-preserving」 (PIIタグを転送する)としてマークされます。
8)プライバシーとセキュリティへのリンク
デザインによるプライバシー:フィールドラベル'pii_class'、' consent_scope'、'retention'。列をプロモートする場合、ルールに従ってラベルが送信されます(例えば、'email→hash_email' PII派生のまま)。
PIIトークン化:lineage store tokenization/detokenization fact and token service nodes;detokenizationは監査イベントです。
暗号化:AEAD/FPEフィールドの場合、lineageは「暗号状態」とキーエリア(テナント/スコープ)をキャプチャします。
監査とWORM-リネージイベントとポリシーの変更は、変更できないログに保存されます(ハッシュチェーンでのみ追加)。
9)データ品質と系統ベースのSLO
エッジのチェック:鮮度、完全性、ユニークさ/キー、分布のドリフト。
SLO/SLI: 「06:00 UTC ≤完了したフィノレポートのメトリックを提供するジョブの95%」。
根本原因:グラフ+実行時間は「、最初に壊れたノード」を簡単に定義します。
10)影響分析と変更管理
スキーマ/ロジックの計画変更の場合:下流(下流)の列-影響を受けるレポート/モデル/APIクライアントのリスト。
変更ポリシーの破棄:下流アーティファクトの所有者、猶予期間、並行バージョン('v1'/'v2')および日没日付フラグの必須通知。
消費者のリストと移行チェックリストを含む自動PR/チケット。
11)オーケストレーターやエンジンとの統合
オーケストレータ:'RunStarted/RunCompleted'イベントの入力/出力がジョブの前後に出力されます。
SQL/ELT:実際の実行計画と列マッピングを取得するためのエンジン(倉庫、レイクハウス)へのコネクタ。
ストリーム処理:メッセージの系統(トピック→トピック、キー/ヘッダー)、Avro/Protobufスキーム、レジストリを介したスキームの進化。
ML:線形フィーチャー/データセット、モデルバージョン、トレーニングアーティファクト、フィーチャーソース。
12)ラベル伝搬規則のモデリング(データ契約)
データセット契約:スキーマ+フィールドセマンティクス(キー、PII、集約性、ライセンス/法的根拠、保持)。
伝播規則:- 'SELECT a、 b FROM T'→移動ラベル'a、 b'。
- 'hash (email)'→ラベル'PII由来(仮名化)'とデトークン化を禁止。
- 「SUM(量)」→個性の喪失;結果フィールドではjoinは許可されません。
- 契約はCI(コンプライアンス違反の場合のブロッカー)で検証され、違反は監査のイベントです。
13)性能およびスケール
血統イベントの増分注入;'(run_id、 job_urn)'による重複排除。
コラムの貯蔵:熱い索引(最後の30-90日)およびアーカイブの分離;スナップショット。
頻繁なリクエストのためのパスのキャッシュ(「ゴールデン」メトリックへの短いパス)。
neimspaces/テナントによるsharding;「モンスターノード」に対する保護(ファンアウト制限)。
14)可視化とUX
モード:- メトリックへのパス:「メトリックを組み立てる元」。
- ソースからの影響:「変更の影響を受ける人」。
- フィールド系統:「フィールドがどのように計算されるか」。
- オーバーレイ:ジョブのステータス、品質、PIIタグ、リテンション、所有者。
- アクション:契約を開き、移行のためのチケットを作成し、アラートを変更するために購読します。
15)グラフへのアクセスのセキュリティ
ABAC:ノード/エッジの可視性はテナント/ロールに制限されます。
Redaction:訓練されていないロールのUIで機密フィールド名を隠す(またはそれらをエイリアスする)。
mTLS/OIDC for API lineageイベントはサービスIDで署名されます。
WORMと読み取り制御:クリティカルグラフセグメントの読み取りもログに記録されます。
16)操作: SLO、監視、警報
グラフSLO:イベント遅延<5分;適用範囲の完全性>重要なパイプラインの98%;「ゴールデンメトリクス」の100%には列レベルの血統があります。
アラート:チェーンブレイク、完了イベントなしで実行、一貫性のないスキーム、孤立したデータセット、成長/サイクルのファンアウト。
レポート:毎週「血統カバレッジの状態」、トップ10リスクノード。
17)プライバシーとコンプライアンス(バンドル)
GDPR/PbD:処理ベースとリテンションをタグとして保存します。lineageは、対応するセグメントのカスケード暗号削除によって高速なDSARパスファインディングと「削除する権利」を提供します。
秘密管理:原材料へのアクセス源は、オープンクレジットとして血統に陥ることはありません。ロール/ポリシー参照のみが保存されます。
監査/変更されていないログ-すべてのリネージイベントが署名され、追加のみのリポジトリにピン留めされます(対応する記事を参照)。
18)チェックリスト
開始する前に:- データセット/ジョブ/フィールドに定義されているURN契約。
- オーケストレーターやエンジンからの血統イベントの排出を可能にしました。
- SQL/DDLパーサとスキーマノーマライザの作業。
- データ契約およびPII/保持伝播規則が承認されています。
- WORMイベントログとグラフのバックアップを構成しました。
- BI/MLは血統消費者(レポート、モデル、特徴)として接続されています。
- クリティカルドメインの血統カバレッジ≥ 98%、「お金」=100%の列レベル。
- 休憩、孤立データセット、回路ドリフトのアラートがオンになっています。
- PIIタグと契約の四半期ごとの監査。
- 変更(破棄)や消費者への流通の流れを文書化する。
19)ミニレシピ
RunCompletedイベント(擬似JSON):json
{
"event": "RunCompleted",
"run": {
"id": "run_2025-10-31T14:20:00Z_42",
"job": "urn:job:etl:finance:close_books_v3",
"status": "SUCCESS",
"code_sha": "b3f9…",
"started_at": "2025-10-31T14:05:00Z",
"ended_at": "2025-10-31T14:19:52Z"
},
"inputs": [
"urn:dataset:lake:bank_txn_v2",
"urn:dataset:warehouse:fx_rates_d+1"
],
"outputs": [
"urn:dataset:warehouse:pnl_daily_v3"
],
"column_lineage": [
{
"output": "pnl_daily_v3. pnl_usd",
"expr": "SUM(txn. amount_local fx. rate)",
"inputs": ["bank_txn_v2. amount_local", "fx_rates_d+1. rate"],
"lossy": true
}
]
}
PII伝搬規則(アイデア):
if input. field. pii in {email, phone, id} and transform in {hash, tokenize}:
output. field. pii = "pseudonymized"
elif transform in {aggregate, anonymize_k}:
output. field. pii = "anonymous"
else:
output. field. pii = input. field. pii
インパクトクォリス「壊れるもの」:
affected = downstream(urn:"urn:dataset:warehouse:users_v4", depth=4)
filter affected where kind in {"dashboard","model","api"} and owner not in {"team-exp"}
20)頻繁なミスとそれらを回避する方法
正式なモデルのない「絵の中の」血統。イベント/スキーム/URNが必要です。そうでなければ、グラフはスケーリングされません。
「お金」がある列レベルはありません。"計算は列レベルなしでは説明できません。
不完全なイベント(code_sha/versiiスキーマなし)。再現性はありません。
プライバシーを無視します。PIIタグは生きていて、フィールドと一緒に運ばなければなりません。
1つの大きなグラフデータベースをシャーディングなしで。名前空間で分割し、スナップショットを保存します。
パーサーに対する盲目の信仰。物議を醸すケースでは-エンジンからのアクティブなイベント。
21) Runbook
インシデント:メトリック「ジャンプ」。
1.「メトリックへのパス」→パス上の最後の「実行」ノードをチェックします。
2.コード/スキーマのバージョンを確認し、エッジのDQステータスを確認します。
3.壊れたリンクが見つかった場合は、所有者のチケットを作成し、メトリック出版物の一時的な「保留」を有効にします。
4.修正後-RCAをマークし、グラフのノードに関連付けます。
ソーススキーマの変更。
1.ダウンストリームインパクトを要求します。
2.オーナーに通知を送信し、移行PRを作成します。
3.平行に'v_next'を上げ、両方のバージョンを日没まで保ちます。
4.'v_prev'を閉じ、コントラクトとリネージグラフを更新します。
- 「デザインによるプライバシー(GDPR)」
- 「PIIデータトークン化」
- 「秘密管理」
- 「監査ログと不変ログ」
- 「At Rest/In Transit Encryption」
- 「キー管理とローテーション」