Skip to content

フィールドレベルのリネージ:ダッシュボードのタイルからウェアハウスの列まで

テーブルレベルのリネージは、ダッシュボードがテーブルに触れていることを教えます。列レベルのリネージは、列を落としたときにどのダッシュボードが壊れるかを教えます。その違い、最後のホップが難しい理由、そして溺れずに地図を読む方法。

更新 · 5 分で読めます

列の粒度が加えるもの

ある列が落とされ、型を変えられ、改名されようとしています。その瞬間、2つの問いが似て聞こえます。ひとつは、どのダッシュボードがこのテーブルに触れているか。もうひとつは、どのダッシュボードが壊れるか。

テーブルレベルのリネージは最初の問いに答えます。幅の広いテーブルなら40のダッシュボードを返します。そのうち2つがその列を使っていて、誰かがその2つを見つけるために40のワークブックを開かなければなりません。レポートは正しく、ほぼ役に立ちません。

列レベルのリネージは2つ目の問いに答えます。それが、その粒度に届くための余分な仕事をする価値がある理由です。

連鎖を、ホップごとに

  1. ダッシュボードのタイルはワークシートを表示し、ワークシートはフィールドを使います。
  2. 各フィールドは、計算か、データソースへの直接のリンクのどちらかです。
  3. 計算は他のフィールドを使います。ときに何層も深く、ときにデータソースをまたいで。
  4. データソースのフィールドは物理テーブルの列に対応します。
  5. そのテーブルには、ビューや変換を通じた上流のテーブルがあり、データが最初に着地した場所までさかのぼります。

すべてのホップがシステムの境界を越えます。各システムは名前とは何かについて独自の考えを持っています。問題はそこにあり、グラフを描くことにはありません。

最後のホップ

ここで2つの問題が現れます。どちらも本で読んだのではなく、稼働中のウェアハウスを調べて見つけたものです。

  • 名前は方言で引用符付きで届きます。メタデータ API は、自身の方言が引用符を付けるとおりに完全名を返します。それは別のエンジンがそのまま受け取る文字列ではありません。
  • 大文字小文字が効きます。Snowflake のバインドは大文字小文字を区別し、引用符のない名前は大文字に畳まれます。名前をそのままバインドすればゼロ行に一致します。

静かなゼロはリネージで最悪の失敗です。空の結果は、きれいな答えとまったく同じに見えます。接続され、正しく設定され、何にも一致しないリンクは、依存関係のまったくない環境として読めてしまいます。

修正は、最後にではなく、すべてのウェアハウスプローブの前に正規化することです。引用符のない Snowflake のセグメントは大文字に畳みます。Databricks の名前は SQL の中で引用符を外し、小文字にします。完全名は文字列検索で分解するのではなく、セグメントに分割します。

列のエッジはどこから来るか

Snowflake
アカウント自身のリネージ関数。深いグラフが暴走しないよう距離に上限があります。その関数がない古いアカウントは、アカウント使用状況のフォールバックがカバーします。
Databricks
system.access.column_lineage。プラットフォーム自身が保持する本物の列から列へのリネージで、提供される中で最も強い証拠です。
Palantir AIP
各オブジェクト型から順に読まれるリンク型。オントロジー自身の結合グラフで、その向きは名前から推測されたものではなく、プラットフォームが宣言するものです。
Tableau
Metadata API。Catalog がそこまでインデックスしていれば列レベルで、していなければテーブルレベルで答えます。その場合は、想定で済ませるのではなく、扱わなければなりません。
名前の照合
データソースのフィールドからウェアハウスの列へ、名前で架ける橋。一致が一意な場合にだけ使われ、常に「照合済み」とラベル付けされます。

4つ目は厳しい目で見る価値があり、製品はそうしています。名前で照合された橋は「照合済み」とラベル付けされ、カタログのデータとして示されることは決してありません。推測とラベル付けされた推測は役に立ちます。静かに事実に昇格した推測は、正しかった部分も含めて地図全体を台無しにします。

届いた粒度を言う

リネージの地図は、届いた粒度を述べ、それを完成させたものを名指しすべきです。Catalog はテーブルレベルで答えるかもしれません。ウェアハウスから引いた列のリストがそこで仕事を仕上げ、地図はまさにそう言います。

これは小さな礼儀の問題に聞こえます。それは、判断に使える地図と、手で確かめなければならない地図の隔たりです。常に列の粒度を主張する地図はときどき間違い、どのときがそうだったかを決して言いません。

溺れずに地図を読む

実際の環境の完全な列レベルグラフは、一度に読むのが困難です。数千のノードは地図ではありません。それは模様です。

最初の読み込みは、テーブルレベルの背骨を示します。カードをひとつクリックすると、そのカード自身の粒度だけが開きます:その列と、そこから流れるフィールド。それは1ホップで、閉包全体ではありません。レイアウトが調整し直され、開いたものが視野に入ります。

その振る舞いは、両方向での2回の実利用から生まれました。最初にすべてを表示することが試され、使いものになりませんでした。答えは小さいグラフではなく、局所的に開くことだと判明しました。別のアイデアで、よりよいものでした。

何に使うか

  • スキーマ変更前の影響調査。広いリストではなく、実際に影響を受けるダッシュボードのリストが得られます。
  • 2つのダッシュボードが食い違い、どちらの作者も確信しているときに、数値をソースまでたどること。
  • 誰も所有を認めないテーブルに、どのダッシュボードが寄りかかっているかを見つけること。
  • クリックしてたどれる自己完結した地図を、ひとつの HTML ファイルとしてエクスポートして誰かに渡すこと。サーバーもインターネットもなしで動きます。

エクスポートは知っておく価値があります。ガバナンスの会話は、ログインを持たず、これからも持たない人たちと行われます。開けるファイルは、受け入れられない招待に勝ります。