Amundsen 是一個數據發現和元數據引擎,旨在提高數據分析師、數據科學家和工程師與數據交互時的生產力。目前,它通過索引數據資源(表格、儀表板、數據流等)并基于使用模式(例如,查詢頻率高的表格會優先于查詢頻率低的表格)提供頁面排名式的搜索功能來實現這一目標。您可以將其視為數據版的 Google 搜索。該項目以挪威探險家羅爾德·阿蒙森 (Roald Amundsen) 的名字命名,他是第一個發現南極的人。
1.1 Amundsen簡介
1.1.1 核心定位:開源數據發現平臺
- 官方定義:
“Amundsen is a metadata driven application for improving the productivity of data analysts, data scientists and engineers when interacting with data.”
(來源:Amundsen GitHub)- 關鍵解析:
- 元數據驅動:以元數據(數據描述、血緣、使用記錄等)為核心構建功能。
- 提升數據生產力:解決數據從業者(分析師/科學家/工程師)的“數據發現難”問題。
- 關鍵解析:
- 產品本質:
- 非數據存儲或處理引擎,而是 數據目錄(Data Catalog) —— 用于集中管理、索引和探索數據資產。
1.1.2 核心價值:數據民主化與協作
- 元數據管理:
- 統一視圖:聚合分散的元數據(表結構、血緣、所有權),形成可搜索的目錄。
- 減少重復工作:避免用戶手動維護電子表格或離線文檔。
- 數據民主化:
- 降低數據發現門檻:通過關鍵詞搜索、過濾、排名和個性化推薦,讓非技術用戶快速定位數據。
- 協作閉環:支持用戶添加描述、標簽、所有權聲明、常見查詢片段(如GitHub的協作模式)。
1.1.3 起源與設計原則
- 誕生背景(源自Lyft工程博客):
- Lyft為解決內部數據資產混亂問題于2019年開源,目前由 LF AI & Data Foundation 托管,仍保持 非商業化產品 治理模式。
- 設計原則(官方架構文檔):
- 簡單優先:UI輕量易用(類Google搜索界面)。
- 可擴展性:微服務架構,支持通過 Databuilder 框架自定義元數據采集任務,支持 Elasticsearch/OpenSearch、PostgreSQL/MySQL、AWS Neptune、Neo4j 作為后端存儲。
- 社區驅動:由用戶貢獻迭代,核心維護者來自 Airbnb、Apple、Dremio、Stripe 等組織。
1.1.4 與其他工具對比
工具 | 核心差異點 |
---|---|
Atlas | 與 Hadoop 生態深度耦合,偏重安全與治理;Amundsen 輕量且 UI 友好。 |
DataHub | 原生支持流式元數據(Kafka)、GraphQL API;Amundsen 更早專注“搜索體驗優化”。 |
OpenMetadata | 同屬 Apache 開源目錄,側重元數據事件流與治理工作流;Amundsen 專注于搜索與協作體驗。 |
1.2 學習目標與范圍
1.2.1 適用人群與學習路徑
目標讀者
- 數據從業者(分析師/工程師/科學家)
- 希望零成本快速體驗開源數據目錄的初學者
- 需理解元數據管理核心概念的技術愛好者
學習路徑設計
- 漸進式實踐:從 Docker Compose 環境啟動 → 元數據注入 → 搜索/瀏覽 → 血緣協作
- 最小化技術棧:僅需基礎 Python/Docker Desktop/Docker Compose 知識
1.2.2 您將掌握的技能
能力維度 | 具體成果 |
---|---|
環境管理 | 在個人電腦運行 Amundsen 全套服務(Frontend+Metadata+Search+Neo4j) |
概念理解 | 解析元數據模型/搜索排名原理/血緣協作邏輯 |
核心操作 | 完成數據攝取 → 關鍵詞搜索 → 表詳情解讀 → 書簽添加的全流程 |
擴展實踐 | 將本地 SQLite 數據庫注入為可發現的數據資產 |
1.2.3 內容邊界說明
為保障學習效率,本指南:
- ? 專注:個人本地環境(非生產部署)
- ? 簡化:使用官方默認配置
docker-amundsen.yml
(非企業級優化) - ? 開放:所有代碼/配置源自 Amundsen GitHub
- ? 不包含:云服務集成、大規模集群運維、商業定制化案例
1.3 官方資源概覽
1.3.1 核心學習資源
GitHub 主倉庫
- 地址:https://github.com/amundsen-io/amundsen
- 內容:
- 源代碼(Frontend / Metadata / Search / Databuilder)
- Docker 配置(docker-compose.yml)
官方文檔站點
- 地址:https://www.amundsen.io/amundsen/
- 關鍵文檔:
- 安裝指南(Installation)
- 架構說明(Architecture)
- Databuilder 用法(Data Ingestion)
- 安裝指南(Installation)
社區支持渠道
- Slack 工作組:amundsen-workspace
- 問題討論區:GitHub Issues
1.3.2 學習前提知識
基礎工具能力
- Docker 與 Docker Compose:
- 容器創建/啟停命令(
docker run
,docker-compose up
,docker-compose down
) - 日志查看(
docker logs
)
- 容器創建/啟停命令(
- Python 基礎:
- 理解 Python 腳本結構(如 Databuilder 示例)
- 包安裝(
pip install
)
核心概念認知
- 元數據基礎:表(Table)、列(Column)、血緣(Lineage)定義
- 搜索引擎基礎:Elasticsearch 索引概念(非運維級)
A. 術語表
元數據 (Metadata)
定義:描述數據的數據(data about data)
Amundsen上下文:
- 表結構(名稱/列/類型/列描述)
- 數據血緣關系
- 表使用統計信息(查詢次數/活躍用戶)
- 數據質量評分(SLA、Freshness、Completeness)
“Metadata is information about the data assets”
—— Amundsen Architecture Doc
元數據攝取 (Metadata Ingestion)
定義:從數據源提取元數據并加載到目錄系統的過程
技術流程:
實現方式:
- 批處理作業(Airflow DAG 定時執行)
- 流式攝取(Kafka Connect / Flink CDC)
- 支持 CSV / SQL / RDBMS / Hive / Glue / dbt / Iceberg 等源
血緣追蹤 (Lineage Tracking)
定義:記錄數據從源頭到終端的完整流動路徑
Amundsen實現:
# Neo4j 血緣關系模型
(:Table)-[:UPSTREAM]->(:Table)
(:Table)-[:COLUMN_UPSTREAM]->(:Column)
(:Dashboard)-[:DASHBOARD_UPSTREAM]->(:Table)
核心價值:
- 影響分析(上游變更影響范圍)
- 故障溯源(數據異常定位)
- 合規審計(數據來源證明)
- 成本歸因(下游資源消耗追蹤)
數據目錄 (Data Catalog)
定義:集中化管理企業數據資產的元數據存儲庫
核心能力:
- 數據發現(全文搜索 / 過濾器 / 推薦)
- 元數據管理(描述 / 標簽 / 所有權 / 生命周期)
- 協作功能(書簽 / 評論 / 通知 / 審批)
- 權限控制(表級 / 列級 / 行級)
“A metadata driven data discovery and catalog platform”
—— Amundsen Homepage
數據民主化 (Data Democratization)
定義:使非技術人員能夠自主發現和使用數據
實現機制:
- 類 Google 搜索界面(智能提示 / 分面搜索)
- 業務友好的元數據描述(術語表集成)
- 可視化血緣關系圖(列級血緣 / 分區血緣)
- 數據預覽(采樣 / 統計摘要)
- 自然語言查詢(與 LLM 集成)
效果衡量:
- 數據團隊查詢需求下降
- 業務用戶自助分析比例上升
- 數據資產利用率提升
BM25 排序 (BM25 Ranking)
定義:基于 BM25 概率模型的搜索結果評分算法
公式:
score(D,Q)=∑i=1nIDF(qi)?f(qi,D)(k1+1)f(qi,D)+k1(1?b+b?∣D∣avgdl)\text{score}(D,Q)=\sum_{i=1}^{n}\text{IDF}(q_i)\cdot\frac{f(q_i,D)\,(k_1+1)}{f(q_i,D)+k_1\left(1-b+b\cdot\dfrac{|D|}{\text{avgdl}}\right)} score(D,Q)=i=1∑n?IDF(qi?)?f(qi?,D)+k1?(1?b+b?avgdl∣D∣?)f(qi?,D)(k1?+1)?
其中
- IDF(qi)=ln??(N?n(qi)+0.5n(qi)+0.5)\text{IDF}(q_i)=\ln\!\left(\dfrac{N-n(q_i)+0.5}{n(q_i)+0.5}\right)IDF(qi?)=ln(n(qi?)+0.5N?n(qi?)+0.5?)
- f(qi,D)f(q_i,D)f(qi?,D):詞項 qiq_iqi? 在文檔 DDD 中的詞頻
- ∣D∣|D|∣D∣:文檔 DDD 的長度(詞項總數)
- avgdl\text{avgdl}avgdl:整個索引的平均文檔長度
- k1=1.2k_1=1.2k1?=1.2、b=0.75b=0.75b=0.75 為 Elasticsearch/OpenSearch 的默認值 。
Amundsen應用:
- 檢索引擎:Elasticsearch / OpenSearch 默認 BM25
- 字段權重:表名(10×) > 描述(5×) > 列名(1×)
- 業務因子:黃金表 +15% 權重、最近更新 +10% 權重
可擴展架構 (Extensible Architecture)
定義:通過插件化設計支持功能擴展
Amundsen實現點:
# 自定義提取器示例
from amundsen_common.models.table import TableMetadata
from databuilder.extractor.base_extractor import Extractorclass CustomExtractor(Extractor):def extract(self) -> TableMetadata:# 實現特定邏輯return table_metadata
擴展方向:
- 新數據源支持(Flink / Trino / Snowflake)
- 存儲后端替換(PostgreSQL / Amazon Neptune)
- 分析引擎集成(Superset / Mode / Tableau)
- 身份認證插件(Okta / Auth0 / Azure AD)
元數據模型 (Metadata Model)
定義:描述元數據實體及關系的抽象結構
Amundsen核心實體:
設計原則:
- 全局唯一鍵標識資源(格式:database://cluster.schema/table)
- 輕量化關系(無屬性邊,屬性存節點)
- Schema Registry 保證向后兼容
協作式元數據 (Collaborative Metadata)
定義:通過用戶協作生成的元數據
典型形式:
- 表/列描述(Markdown 支持 / 富文本)
- 數據質量標記(SLA、異常、棄用)
- 使用建議注釋(查詢示例 / 最佳實踐)
- 業務術語(與 DataHub Business Glossary 對齊)
Amundsen實現:
- 類 Wiki 的編輯系統(版本歷史 / 差異對比)
- 變更通知(Slack / Teams / Email)
- 審批工作流(Owner 審核 / Steward 審批)
風險提示與免責聲明
本文內容基于公開信息研究整理,不構成任何形式的投資建議。歷史表現不應作為未來收益保證,市場存在不可預見的波動風險。投資者需結合自身財務狀況及風險承受能力獨立決策,并自行承擔交易結果。作者及發布方不對任何依據本文操作導致的損失承擔法律責任。市場有風險,投資須謹慎。