OSSデータカタログの決定版!?OpenMetadataがかなりイケてるので紹介したい

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本記事では、最近登場したばかりのOSSデータカタログ OpenMetadata についてご紹介していきます。

商用製品縛りでデータ系SaaSを紹介してきた本アドベントカレンダーですが、最後の23製品目はOSSのデータカタログをご紹介します。というのも、商用製品並みに良くできているんですよねコレ。

OpenMetadataについて

OpenMetadataは、2021年8月に最初のバージョン0.3.0がリリースされたOSSのデータカタログです。1ヶ月サイクルでリリースするという驚異的な開発速度で改善や機能拡張が進み、2021年12月23日現在でバージョンは0.7.0がリリースされています。

Announcing OpenMetadata. Open-source project to supercharge your… | by Suresh Srinivas | OpenMetadata

これまでのOSSデータカタログは、Lyft社製のAmundsenやLinkdin製のDataHubといった社内用のデータカタログをスピンアウトしたOSSが多かったですが、OpenMetadataは逆に商用のデータカタログのエッセンスを取り込んでいる印象です。UI/UX、メタデータの付与の方法、権限管理などを必要十分なレベルまでシンプルにしつつ、PII情報のテンプレートタグや連携できるサービス数の多さなど、ユーザーにとってはクリティカルに嬉しい機能が盛り込まれています。

メジャーバージョンの1.0のリリースがいつになるかは不明ですが、製品ロードマップもしっかり用意されているので、興味がある方は Roadmap - OpenMetadata もどうぞ!

次節より実際の機能をご紹介していきます。公式サイトのリンクよりGoogle認証によるサンドボックス環境も用意されているので、ご自身でサクッと試しみてることも可能です。なお、本記事ではバージョン0.7.0なので、0.8.0以降UIや機能が大幅に変更されている可能性がある点はご注意ください。

インストール

Run OpenMetadata - OpenMetadata に沿って、ローカルのmacOSで立ち上ていきます。venvの作成は端折ってます。

$ python3 --version
Python 3.9.6
$ pip3 --version
pip 21.1.3 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
$ docker --version
Docker version 20.10.11, build dea9396

$ mkdir openmetadata-docker && cd openmetadata-docker
$ pip3 install --upgrade 'openmetadata-ingestion'
$ metadata docker --help
Usage: metadata docker [OPTIONS]

  Checks Docker Memory Allocation Run Latest Release Docker - metadata docker
  --start Run Local Docker - metadata docker --start -t local -p
  path/to/docker-compose.yml

Options:
  --start          Start release Docker containers
  --stop           Stop Docker containers (local and release)
  --clean          Prune unused containers, images, volumes and networks
  -t, --type TEXT  'local' - local type will start local build of OpenMetadata
                   docker
  -p, --path FILE  Path to Local docker-compose.yml
  --help           Show this message and exit.

$ metadata docker --start
[2021-12-23 10:50:58,614] INFO     {metadata.cmd:188} - Running Latest Release Docker
[2021-12-23 10:50:58,919] INFO     {metadata.cmd:202} - docker-compose -f /var/folders/vx/y0ml3sns3xzbmcz0zyzcyjlm0000gq/T/docker-compose.yml up -d
[2021-12-23 10:52:06,489] INFO     {metadata.cmd:207} - Time took to get containers running: 0:01:07.569516
.........[2021-12-23 10:52:52,056] INFO     {metadata.cmd:230} - Time took to get OpenMetadata running: 0:01:53.137061

✔ OpenMetadata is up and running

Head to http://localhost:8585 to play around with OpenMetadata UI.
                
To checkout Ingestion via Airflow, go to http://localhost:8080 
(username: admin, password: admin)
                
Need support? Get in touch on Slack: https://slack.open-metadata.org/

Dockerが立ち上がった後、 http://localhost:8080 からAirflowのコンソールに入り、サンプルデータの挿入が完了しているかどうか確認します。

完了後、http://localhost:8585 からOpenMetadataのUIに入ります。

Explore

以下がOpenMetadataのトップページです。左には種類別のアセット数、真ん中にはユーザーアクティビティが表示されるようになっています。Exploreをクリックして、先ほど挿入したサンプルデータを見ていきます。

Exploreの画面では、上部のタブでアセットタイプの切り替え、左側のパネルで絞り込みが可能です。リストの項目には、サービスアイコン、テーブル名、所有者、Tier、利用頻度、データベース、概要が並ぶようになっています。試しにraw_orderをクリックしてみます。

テーブルの詳細画面は、画面上部にテーブルに対するメタデータ、下部にカラム情報が配置されています。

カラムに対してタグを付与できます。テンプレートでいくつか用意されているので、#User.CreditCardNumberを選択してみます。

一つタグを付与すると、それに紐づいている別のタグ、ここではPersonalData.PersonalPII.Sensitiveのタグも合わせて付与される仕様になっています。

画面右のタブでSchamaからSample Dataに切り替えると、プレビューが表示されます。

上部のタブをSchemaからProfilerに切り替えると、カラムごとの統計値を確認するとこができます。分布がグラフになっている点が地味に凝っててすごい。

LineageタブはAirflowと連動しており、テーブルとジョブの関係性を視覚的に把握できるようになっています。

ManageタブではOwner(所有者)とTierを設定することができます。Ownerはユーザーだけなくチーム単位でも設定が可能です。OpenMetadataでは、Tierは重要度を表す情報として使用されており、判断の目安がわかる説明書きも用意されています。

Exploreの画面にもどり、次にTopicsを見ていきます。こちらはKafkaトピックがカタログ化されています。salesをクリックしてみます。

詳細画面ではsalesトピックのスキーマや設定情報を確認することができます。

DashboardsではSupersetやTableauといったBIツールのダッシュボードがカタログ化されています。ETA Predictions Performanceをクリックしてみます。

Dashboardはダッシュボードへのリンクが貼られているぐらいで、付与できるメタデータの種類は少なめです。

最後はPipelinesです。こちらはAirflowなどのジョブ系のメタデータが一覧化されています。Snowflake ETLをクリックしてみます。

こちらもDashboardと同様、ジョブ画面へのリンクが貼られているくらいです。

基本的にどのアセットもDescriptionOwnerTagは変更・付与できるようになっており、あとは個別特有のメタデータが設定されている仕様ですね。

TeamsとUsers

OpenMetadataではTeamsという単位でユーザーとアセットの所有権が分けられています。ユーザーは複数のチームに入ることもできるので、チームをアセットに対する所有権やアクセス権用のロールとしても考えることができます。

UsersTeamsの画面構成と少し似ていますが、こちらの画面ではユーザーに対してAdmin権限の付与が可能です。

ユーザーをクリックすると変更用のモーダルが表示されます。

バージョン0.7.0の段階では、Asset、Team、User、Adminの組み合わせでシンプルな権限管理が実現されています。

Tags

TagsはOpenMetadataのコア機能で、コンプライアンスやビジネスメタデータをタグ形式で作成しておく箇所です。左側のTag Categoriesの中に、複数のTagがぶら下がる2層構造になっており、アセットにタグを付与する時はマージされた形で表示される仕組みになっています。下のテンプレートでは、GDPRで定義されているパーソナルデータ用のタグです。

UserのTag Categoryには、住所や銀行口座といった、特定の個人情報のカラムやアセットに付与するタグが定義されています。Associated tagsで関連する別のタグを紐づけることができるので、例えば#User.Address#PII.Sensitiveを紐づけて、#User.Addressを付与したアセットには#PII.Sensitiveも自動で付与する、みたいな運用が可能です。

試しに左上の+ボタンからTag Categoryを作ってみます。Category TypeDescriptiveClassificationから選択できます。Category Typeは現状ただのメタデータのようで、これによって特に構造が変更されるわけではなさそうです。

Tag Categoryを作成したらAdd new tagをクリックしてTagを新規作成します。

NameDescriptionを入力してSaveをクリックします。

関連づけたい他のタグがあれば、Associated Tagsの列で編集を行います。

このようにTagでメタデータを定義し、クリックベースでアセットに情報を付与していくのがOpenMetadataの特徴の一つです。

ServicesとIngestions

OpenMetadataでは、Servicesという単位でコネクションを設定しています。

bigquery_gcpの設定は仮置きといった感じでした。

bigquery_gcpをクリックすると、そのServiceで取得したデータベース名が表示されます。

shopifyをクリックすると、取得したshopify配下のテーブル一覧を確認することができます。この画面は、Exploreからテーブルを表示した際に上のパスを遡る方法でもたどり着けます。

Ingestionsではデータソースからテーブル情報を抽出するためのジョブを作成できます。Redshiftと接続しようとしたのですがうまくいかず、今回はUIの紹介だけになってしまいます。

右上のAdd ingestionをクリックすると設定用のモーダルが表示されます。まず名前の入力とService、Ingestionタイプ選択を行います。

Connector configで、データソースへの接続情報を入力していきます。

スケジュールの設定を行います。曜日指定の場合はボタンが表示されるなど、視覚的にスケジュール設定ができます。

UI側は結構作り込まれていますが、Redshift - OpenMetadataにあるようなプログラムで設定するIngestionとは設定項目が少し違っているので、接続できないのはまだ開発段階だからかもしれません。今後のアップデートに期待しましょう!

おわりに

「激熱!1日1製品!最強のデータ系SaaSはどれだ決定戦」アドベントカレンダーの製品紹介編は本日で終了です!

結果、モダンなSaaSで20製品、クラウドベンダー製で2製品、OSSで1製品という構成のアドベントカレンダーになりましたね。明日の最終日で個人的に「使える!」と思った製品を選出しますので、どうぞ最後までお付き合いください!