OSSのデータカタログを調査・整理してみた

# 背景・目的
以前、[「【DMBOK】データマネジメントについて整理する（第12章.メタデータ管理）」](https://qiita.com/zumax/items/dc84dc16724c2d245e0e)で、メタデータについて整理しました。
メタデータを管理するデータカタログについて、どのようなものが世の中にあるのか整理します。

# まとめ
以下に、代表的なデータカタログの特徴を整理します。
なお、TBDの箇所については、ドキュメントを読む限り不明でしたので、今後、動作確認を通じて確認したいと思います。

| |OpenMetadata| Amundsen|DataHub |
|:--|:-- |:-- |:-- |
| 特徴 | データ検出、ガバナンス、データ品質、オブサーバビリティ、人々のコラボレーション等でエンドツーエンドのメタデータ管理ソリューション|データの Google 検索<BR>  |DataHub は、modern data stack向けのOSS |
| クラウド、ライセンス等| Apache License 2.0 | Apache License 2.0|Apache License 2.0|
| Data Discovery | テーブル、トピック、ダッシュボード、パイプライン、およびサービスを検索可能。<BR>配列や構造体などの複雑なデータ型のサポートを含め、アセットとそのコンポーネント (列、グラフなど) の詳細なメタデータをサポート| TBD| DataHub の統合検索エクスペリエンスは、データベース、データ レイク、BI プラットフォーム、ML 機能ストア、オーケストレーション ツールなどにわたって結果を表示。| 
| メタデータの追加| テーブル、列、およびその他のアセットに説明とタグを追加可能| TBD | TBD| 
| アクセス制御 | メタデータ操作の役割ベースのアクセス制御 (RBAC) ポリシーをサポート。| TBD|エンティティの所有権をユーザーおよびユーザー グループにすばやく簡単に割り当て<BR>・Create Users, Groups, & Access Policies | 
| Data Lineage| テーブル、パイプライン、およびダッシュボード全体でデータのパスを追跡する。 | TBD|プラットフォーム、データセット、ETL/ELT パイプライン、チャート、ダッシュボードなどにまたがってリネージを追跡することで、データのエンドツーエンドのジャーニーをすばやく理解可能。 | 
| Integration | ・DBT Integration<BR>・Apache Airflow との UI 統合を提供 <BR>・Elasticsearch Integration<BR>・Slack統合 | TBD| DataHub で行われた変更をサードパーティ システムに同期。 <BR>詳細は別途調査|
| データの信頼性の検証 |データが完全で、最新で、正確であることを監視するテストを作成して、データに対する信頼を構築 |TBD | TBD|
| ユーザビリティ（UIや通知など）|**UI**<BR>・ホーム画面には、データ変更イベントの概要を表示できる変更アクティビティ フィードがある。 このフィードには、最新の変更が一番上に来るように並べ替えられた、データに対するすべての変更が表示される。 <BR>・Explore UI を使用すると、重要度に基づいてアセットをフィルタリングできる。<BR> **通知**<BR>・Webhook インターフェイスを使用すると、API を介して組織内で発生するすべてのデータ変更を受け取るアプリケーションを構築可能。|TBD | **UI**<BR>・DataHub の統合検索エクスペリエンスは、データベース、データ レイク、BI プラットフォーム、ML 機能ストア、オーケストレーション ツールなどにわたって結果を表示。<BR>・バッチ メタデータ インジェストを作成、構成、スケジュール、および実行<BR>**通知**<BR>・DataHub で変更が行われると、組織固有の通知を生成。 （たとえば、「PII」タグがデータ資産に追加されたときに、ガバナンス チームに電子メールを送信する。）| 

# 概要
## OpenMetadata
[OpenMetadata](https://open-metadata.org/)には、以下の記載があります。

> A Single Place to Discover, Collaborate and get your Data Right
Unlock the value of data assets with an end-to-end metadata management solution that includes data discovery, governance, data quality, observability, and people collaboration.

データ検出、ガバナンス、データ品質、オブサーバビリティ、人々のコラボレーション等でエンドツーエンドのメタデータ管理ソリューションとのこと。

### 機能
[Features](https://docs.open-metadata.org/overview/features)を参考にまとめます。

#### All Data in One Place
- OpenMetadata は、さまざまなユース ケースに必要なすべてのデータ コンテキストを 1 か所で提供

#### Data Discovery
- キーワード検索、データの関連付け (頻繁に結合されるテーブル、系列など)、複雑なクエリなど、さまざまな戦略を使用してデータを発見可能。
- テーブル、トピック、ダッシュボード、パイプライン、およびサービスを検索できる。 
- 配列や構造体などの複雑なデータ型のサポートを含め、アセットとそのコンポーネント (列、グラフなど) の詳細なメタデータをサポート

#### Activity Feeds
- OpenMetadata ホーム画面には、データ変更イベントの概要を表示できる変更アクティビティ フィードがある。 このフィードには、最新の変更が一番上に来るように並べ替えられた、データに対するすべての変更が表示される。 
- テーブル、ダッシュボード、チーム名など、アクティビティ フィード内のエンティティはクリック可能であり。次のアクティビティ フィードがある。
    - すべてのデータ
    - 自分が所有者であるデータ
    - フォローしているデータ

#### Event Notification via Webhooks and Slack Integration
- Webhook インターフェイスを使用すると、API を介して組織内で発生するすべてのデータ変更を受け取るアプリケーションを構築可能。 
- メタデータ イベント通知を受信する URL を登録。
    -  Webhook による Slack 統合は、この機能の多くのアプリケーションの 1 つ。

#### Add Descriptive Metadata
- テーブル、列、およびその他のアセットに説明とタグを追加できる。 
- OpenMetadata は、説明、タグ、名前、およびその他のメタデータに基づいてアセットのインデックスを作成し、キーワード、高度な検索、およびフィルタリングを有効にして、組織内のユーザーがデータを発見できるようにする。

#### Complex Data Types
- 配列や構造体などの複雑なデータ型のネストされたフィールドに説明とタグを追加する。 キーワード検索または高度な検索を使用して、これらのアセットを見つける。

#### Deleted Entity Metadata
- エンティティには、説明、タグ、所有権、階層化など、ユーザーが生成したメタデータが多数ある。 また、データ プロファイラー、使用状況データ、系列、テスト結果、および他のエンティティとのその他のグラフ関係を通じて OpenMetadata によって生成される豊富なメタデータもある。
- エンティティが削除されると、この豊富な情報がすべて失われ、再作成するのは容易ではないが、 OpenMetadata は、UI でのソフト削除と、API でのソフトおよび永久削除をサポートしており、削除されたエンティティのメタデータを維持するかどうかを選択可能。

#### Importance & Owners
- Tier タグを使用すると、他の資産と比較した重要性で資産に注釈を付けることが可能。 
- Explore UI を使用すると、重要度に基づいてアセットをフィルタリングできる。
- 所有権のメタデータを使用して、関心のあるアセットの主要な連絡先を特定し、質問がある場合にサポートを得ることが可能

#### Role Based Access Control
- OpenMetadata は、メタデータ操作の役割ベースのアクセス制御 (RBAC) ポリシーをサポート。
- 各ユーザーには、1 つまたは複数のロールを割り当てることができる。
- 各ロールには定義済みのポリシーがあり、 ポリシーは一連のルールで構成される。 ルールは、説明、タグ、所有者、系統の更新などのメタデータ操作へのアクセスを許可/拒否する。

#### Data Lineage
- テーブル、パイプライン、およびダッシュボード全体でデータのパスを追跡する。

#### Edit Data Lineage Manually
- リネージを編集して、データの出所をより深く理解できるようにする。 
- OpenMetadata ノーコード エディターは、ドラッグ アンド ドロップ インターフェイスを提供する。 
- テーブル、パイプライン、およびダッシュボードを系列グラフにドロップする。 データ系統をより適切に表すために、新しいエッジを追加したり、既存のエッジを削除することが可能。

#### DBT Integration
- DBT モデルは、生データからテーブルを作成する変換ロジックを提供。 
- リネージは、テーブルがどのデータから生成されたかを広く示す。 
- DBT モデルは詳細を提供。 
- OpenMetadata には DBT の統合が含まれており、テーブルの生成に使用されているモデルを確認可能。

#### Data Reliability
- データが完全で、最新で、正確であることを監視するテストを作成して、データに対する信頼を構築する。

#### Service Connectors & One-Click Ingestion Pipelines
- データベース、ダッシュボード、メッセージング、およびパイプライン サービスを OpenMetadata と統合する。 
- OpenMetadata は、取り込み、データ プロファイリング、データ品質、その他の自動化ジョブを実行するためのワークフロー エンジンとして Apache Airflow との UI 統合を提供。 
- 管理者は、OpenMetadata パイプラインを実行するサービスを構成し、取り込みスケジュールを追加して、OpenMetadata UI から直接取り込みジョブを自動的に開始できる。

#### Metadata Versioning & Events API
- 0.6 以降、OpenMetadata は技術メタデータ (テーブル スキーマなど) とビジネス メタデータ (タグ、所有権、説明など) の両方の変更をエンティティの新しいバージョンとしてキャプチャする。
- メタデータの変更により、どのエンティティが変更されたか、誰が変更したか、どのように変更されたかを示すイベントが生成される。 これらのイベントを使用して、メタデータを他のツールに統合したり、アクションをトリガーする。

#### Elasticsearch Integration
- OpenMetadata は、SSL 対応の Elasticsearch (自己署名証明書を含む) をサポートしている。
- 以前のバージョンの OpenMetadata では、取り込まれたエンティティを OpenMetadata UI で使用できるようにするために、取り込みワークフローに続いてインデックス作成ワークフローを実行する必要があった。 
- 0.7 リリースの時点で、取り込みワークフローを通じて新しいエンティティが追加または更新されると、OpenMetadata はインデックス作成ワークフローを自動的に実行する。

### Architecture
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/96a0ce2e-8c62-3654-dae0-600406bd18ef.png)

出典：https://docs.open-metadata.org/developers/architecture

## Amundsen
[Amundsen](https://www.amundsen.io/amundsen/)には、以下の記載があります。
> Amundsen is a data discovery and metadata engine for improving the productivity of data analysts, data scientists and engineers when interacting with data. It does that today by indexing data resources (tables, dashboards, streams, etc.) and powering a page-rank style search based on usage patterns (e.g. highly queried tables show up earlier than less queried tables). Think of it as Google search for data. The project is named after Norwegian explorer Roald Amundsen, the first person to discover the South Pole.

- データのGoogle検索らしいです。

### 機能
TBD.

### Architecture
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f892670e-704f-4a88-befc-b73e924eeb87.png)
出典：https://www.amundsen.io/amundsen/architecture/

- Frontend
    - フロントエンド サービスは、ユーザー インタラクション用の Web UI ポータルとして機能する。
    - React with Redux、Bootstrap、Webpack、Babelでプレゼンテーション層を構築したFlaskベースのWebアプリ。
- Search
    - 検索サービス プロキシは、Elasticsearch の検索機能 (選択したバックエンドの場合は Apache Atlas の検索 API) を活用しRESTful API を提供してフロントエンド サービスからの検索要求を処理する。
    - この API は文書化されており、OpenAPI（Swagger）を介してライブで探索可能。
    - 現在、テーブル リソースのみがインデックス化され、検索可能。 
    - 検索インデックスは、databuilder elasticsearch パブリッシャーで構築される。
- Metadata
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/10c22c0c-8e98-7da6-9757-3bba4c9e9d89.png)
    - Neo4j プロキシを使用して Neo4j グラフ データベースとやり取りし、フロントエンド サービスのメタデータを提供。 （メタデータはグラフ モデルとして表される。）
- Databuilder
    - メタデータを構築するためのデータ取り込みライブラリを提供。 ※ Lyft では、Airflow DAG を使用して 1 日 1 回メタデータを構築しているようです。


## DataHub
[DataHubのGitHub](https://github.com/datahub-project/datahub)には、以下の記載があります。
> DataHub is an open-source metadata platform for the modern data stack. Read about the architectures of different metadata systems and why DataHub excels here. Also read our LinkedIn Engineering blog post, check out our Strata presentation and watch our Crunch Conference Talk. You should also visit DataHub Architecture to get a better understanding of how DataHub is implemented.

- DataHub は、modern data stack向けのOSS

### 機能
[DataHub Features Overview](https://github.com/datahub-project/datahub/blob/master/docs/features.md)を元にまとめます。

#### Search and Discovery
- Search All Corners of Your Data Stack
    - DataHub の統合検索エクスペリエンスは、データベース、データ レイク、BI プラットフォーム、ML 機能ストア、オーケストレーション ツールなどにわたって結果を表示。
- Trace End-to-End Lineage
    - プラットフォーム、データセット、ETL/ELT パイプライン、チャート、ダッシュボードなどにまたがってリネージを追跡することで、データのエンドツーエンドのジャーニーをすばやく理解可能。
- Understand the Impact of Breaking Changes on Downstream Dependencies
    - 影響分析を使用して、重大な変更によって影響を受ける可能性のあるエンティティを事前に特定。
- View Metadata 360 at a Glance
    - 技術メタデータと論理メタデータを組み合わせて、データ エンティティの 360 度ビューを提供。
    - データセット統計を生成して、データの形状と分布を理解する。

#### Modern Data Governance
- Govern in Real Time
    - アクション フレームワークは、次のリアルタイム ユース ケースを強化する。
        - 通知: DataHub で変更が行われると、組織固有の通知を生成。 （たとえば、「PII」タグがデータ資産に追加されたときに、ガバナンス チームに電子メールを送信する。）
        - ワークフローの統合: DataHub を組織の内部ワークフローに統合。 （たとえば、特定のタグまたは用語がデータセットで提案されたときに Jira チケットを作成する。）
        - 同期: DataHub で行われた変更をサードパーティ システムに同期。 （たとえば、DataHub でのタグ追加を Snowflake に反映する。）
        - 監査: DataHub で誰がどのような変更を行っているかを経時的に監査。
- Manage Entity Ownership
    - エンティティの所有権をユーザーおよびユーザー グループにすばやく簡単に割り当てます。
- Govern with Tags, Glossary Terms, and Domains
    - データ所有者がデータエンティティを管理できるようにするためにの機能は以下の通り。
        - Tags
            - 検索と発見のためのツール
        - Glossary Terms
        - Domains
            - フォルダ、カテゴリ

#### DataHub Administration
- Create Users, Groups, & Access Policies
    - DataHub 管理者はポリシーを作成して、誰がどのリソースに対してどのアクションを実行できるかを定義できる。
    -  新しいポリシーを作成すると、以下を定義できる。
        -  Policy Type
        -  Resource Type
        -  Privileges
        -  Users and/or Groups
- Ingest Metadata from the UI
    - DataHub ユーザー インターフェイスを使用して、バッチ メタデータ インジェストを作成、構成、スケジュール、および実行できる。
    - これにより、カスタム統合パイプラインの操作に必要なオーバーヘッドが最小限に抑えられ、DataHub へのメタデータの取り込みが容易になる。


### Architecture
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/1f2ec3b8-4a19-7554-e0c9-f59beee67cf3.png)

出典：https://datahubproject.io/docs/architecture/architecture

- Schema-first approach to Metadata Modeling
    - DataHub のメタデータ モデルは、シリアル化に依存しない言語を使用して記述される。 
    - REST と GraphQL API の両方がサポートされている。 さらに、DataHub は、Kafka を介した AVRO ベースの API をサポートして、メタデータの変更を伝達し、それらをサブスクライブする。
    - ※ コードなしのメタデータ モデルの編集をすぐにサポートするマイルストーンが含まれている。（）これにより、型付き API のすべての利点を維持しながら、さらに使いやすくなる。）
- Stream-based Real-time Metadata Platform
    - DataHub のメタデータ インフラストラクチャはストリーム指向であり、メタデータの変更を数秒で伝達してプラットフォーム内に反映させることが可能。 
    - また、DataHub のメタデータで発生する変更をサブスクライブして、リアルタイムのメタデータ駆動型システムを構築することも可能。
        - たとえば、PII を含む新しいスキーマ フィールドを追加して、以前は誰でも読み取り可能なデータセットを観察し、アクセス制御レビューのためにそのデータセットをロックダウンできるアクセス制御システムを構築ができる。
- Federated Metadata Serving
    - DataHub には、オープン ソース リポジトリの一部として単一のメタデータ サービス (gms) が付属している。 
        - ただし、さまざまなチームが所有および運用できるフェデレーション メタデータ サービスもサポートしている。
    - フェデレーション サービスは、Kafka を使用して中央の検索インデックスおよびグラフと通信し、メタデータの分離された所有権を有効にしながら、グローバルな検索と検出をサポート。 
        - この種のアーキテクチャは、データ メッシュを実装している企業にとって非常に適している。



# 考察
- ドキュメントを読む限り、OpenMetadataは機能が豊富だと感じました。
- 次回以降、ドキュメントから読み取れない箇所については、実際に動かして試してみたいと思います。

# 参考
https://qiita.com/zumax/items/dc84dc16724c2d245e0e

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/catalog-and-crawler.html

https://open-metadata.org/

https://github.com/open-metadata/OpenMetadata

https://github.com/datahub-project/datahub