🚀

OSS版OpenMetadataでBigQueryのメタデータ管理してみた

2024/04/25に公開

こんにちは。Acompany新卒のハルカです。
CEOに同姓の高橋さんがいるので、私はハルカさんと呼ばれています。

OSS系のデータカタログの1つであるOpenMetadataを触ってみました。公式サイトからサンドボックス版を試すことができますが、今回はDockerを使ってローカル環墐で立ち上げて、BigQueryとの連携を試してみました。

OpenMetadataとは?

OpenMetadataは、OSSのデータカタログの1つです。データ検出、ガバナンス、データ品質、オブザーバビリティ、コラボレーションなど、幅広い機能を提供しています。
以下の特徴があると言われています。

  • 直感的なユーザーインターフェースにより、データを素早く見つけられる
  • メタデータの追加・編集、ロールベースのアクセス制御が可能
  • データのリネージュ(系統)を可視化し、データパイプラインやETL処理でのデータの変化・加工を追跡できる
  • データ品質テストやプロファイリング機能により、データの完全性や正確性を監視できる
  • 柔軟性とカスタマイズ性が高く、コミュニティによる活発な開発で継続的に機能改善される

OpenMetadataかDataHubか?

OSS系のデータカタログでは他にもLinkedInが作ったDataHubなどがあります。
この2つはよく比較されることが多いですが、以下のような違いがあります。

項目 OpenMetadata DataHub
開発開始年 2021年 2019年
アーキテクチャ シンプルな構成を志向。MySQLとElasticsearch、AirFlowで構成可能 スケーラビリティを重視した分散アーキテクチャ。Kafka、Elasticsearch、Neo4jなど多数のコンポーネントで構成
メタデータ管理 必要最小限のデータ構造で機能を実現。The Open Metadata Type Systemによるメタデータの分類と整理 柔軟にエンティティを追加できるデータモデル設計
データリネージ データアセット間のリネージを自動で生成。PIIデータのフラグ付けとリネージ伝搬が可能 影響分析のためのデータリネージ生成機能あり
データ品質 データ品質管理機能あり。独自仕様のテスト追加が可能 -
PII(個人情報)管理 PIIデータの自動タグ付け機能あり。リネージを通じてPII情報を伝搬 -
費用 OSSだが、SaaS版の提供も予定 完全なOSS
コミュニティ 2021年から本格的に活動開始。Collate社が中心に開発 2019年からのOSSプロジェクトとして確立されたコミュニティ
サポート OSSコミュニティによるサポート LinkedInによる継続的な開発とOSSコミュニティのサポート

UIや検索の使い勝手、データリネージの可視化、データ品質管理など、OpenMetadataはデータカタログとしての機能を強化している印象です。

OpenMetadataの準備

以下の環境で検証しました。

  • マシン: MacBook Pro(M2 Pro)
  • OS: macOS Sonnoma 14.4.1

Dockerの準備

公式DocにDockerとDocker composeのバージョンが指定されているのでそれに従います。
Docker Desktop on Macからインストールします。
上記のデスクトップ版パッケージであれば、Docker ComposeはDockerと同時にインストールされます。但し、homebrewでDockerをインストールした場合は、別途Docker composeのインストールが必要でした。

  • Docker: version 20.10.0 以上
  • Docker Compose: version v2.1.1以上
$ docker --version
Docker version 25.0.3, build 4debf41
$ docker compose version
Docker Compose version v2.24.6-desktop.1

OpenMetadataの立ち上げ

作業用のディレクトリを作成して移動します。

$ mkdir openmetadata-docker && cd openmetadata-docker

公式docに従い、Dockerコンテナを立ち上げます。

PostgreSQLを使った起動

curlかwgetでdocker-compose-postgres.ymlをダウンロードします。

curl -sL -o docker-compose-postgres.yml https://github.com/open-metadata/OpenMetadata/releases/download/1.3.1-release/docker-compose-postgres.yml

or

wget https://github.com/open-metadata/OpenMetadata/releases/download/1.3.1-release/docker-compose-postgres.yml

立ち上げ

docker compose -f docker-compose-postgres.yml up --detach
MySQLを使う場合

curlかwgetでdocker-compose-mysql.ymlをダウンロードします。

curl -sL -o docker-compose.yml https://github.com/open-metadata/OpenMetadata/releases/download/1.3.1-release/docker-compose.yml

or

wget https://github.com/open-metadata/OpenMetadata/releases/download/1.3.1-release/docker-compose.yml
docker compose -f docker-compose.yml up --detach

以下のURLにアクセスするとOpenMetadataのホーム画面が表示されます。
http://localhost:8585
初期のユーザーはadmin、パスワードはadminです。
OpenMetadata Home
OpenMetadata Home画面

新規ユーザー登録

ユーザー登録画面から新規ユーザーを登録します。
以降の作業には管理者権限が必要なため、「Settings」→「Team & User Management」→「Admins」と進み、管理者アカウントを作成します。

OpenMetadata Sign Up
設定
OpenMetadata Sign Up
Team & User Management

一般ユーザーから管理者へ変更

新規ユーザー登録時には一般ユーザーとして作成した場合、以降の作業で必要な管理者権限を付与するために「Roles」に「Admin」を追加します。
OpenMetadata Role変更

初期のadminからログアウトして、作成したアカウントで再度ログインします。

データソースの登録: BigQuery

本記事ではBigQueryとの連携を試してみます。
以下のドキュメントに従い、BigQueryの設定を行います。
https://docs.open-metadata.org/v1.1.x/connectors/database/bigquery

BigQuery側の準備

「IAMと管理」→「サービスアカウント」→「サービスアカウントを作成」からサービスアカウントを作成します。
作成したサービスアカウントにBigQueryの閲覧権限を付与します。

必要な権限

OpenMetadataがBigQueryのメタデータを取得するために、以下の権限が最低限必要です。[1]

権限 必要な理由
bigquery.datasets.get メタデータ取り込みに必要
bigquery.tables.get メタデータ取り込みに必要
bigquery.tables.getData メタデータ取り込みに必要
bigquery.tables.list メタデータ取り込みに必要
resourcemanager.projects.get メタデータ取り込みに必要
bigquery.jobs.create プロファイリングに必要

これらの権限を持つカスタムロールを作成し、OpenMetadataとの連携に使用するサービスアカウントに割り当てます。

ポリシータグを使用している場合

BigQueryのテーブル列にポリシータグを付与してアクセス制御を行っている場合、追加で以下の権限が必要です。[1:1]

権限 必要な理由
datacatalog.taxonomies.get ポリシータグの取得に必要
datacatalog.taxonomies.list ポリシータグの取得に必要

OpenMetadataはこれらの権限により、ポリシータグを取得して該当の列にアタッチします。

権限が設定できたら、Json形式の認証情報をダウンロードして、そのファイルを基にOpenMetadata側の設定を行います。

OpenMetadata側の設定

OpenMetadataのホーム画面から「Settings」→「Services」→「Databases」→「Add New Service」を選択します。
データベースの追加
データベースの追加

データベースの追加は次の3つのステップで行います。

  1. Serviceの選択
    Database ServicesからBigQueryを選択して次へ進みます。
    BigQueryを選択
    BigQueryを選択

  2. サービス情報の設定
    Configure Serviceで、「Service Name」と「Description」を入力して次へ進みます。

  3. 認証情報を入力
    ダウンロードしたJsonファイルを開いて、Connection detailsの対応する項目を入力します。
    Connection details
    Connection details

  4. 接続テスト
    「Connection Test」をクリックして、接続テストを行います。
    以下のようにすべての項目がSuccessとなれば接続成功です。権限が足りないと、一部の項目の接続に失敗することがあります。
    接続テスト

データの取得

データベースの追加が完了したら、BigQueryのテーブルを取得してみます。
データの取得にはIngestionsという機能を使います。

Ingestions

Ingestionsとは、様々なデータソースからメタデータを取り込むためのワークフローを指します。
具体的には、

  • 様々なデータソース(データベース、BI ツールなど)からメタデータを抽出
  • 必要に応じてメタデータを変換・加工
  • OpenMetadataのメタデータカタログに取り込む

という一連のプロセスを指します。

Ingestionsのバックエンドには、Apache Airflowが使われていて、AirflowのDAG(Directed Acyclic Graph)として定義されています。

メタデータ取り込み

作成したDatabase Serviceの「Ingestions」タブから、
「Add New Ingestion」→ 「Add Metadata Ingestion」
を選択します。
Ingestions

次に、取り込み設定を行います。
Ingestions

フィルタリング

Metadata Ingestionで連携先のデータソースから取得するデータベース/スキーマ/テーブルをフィルタリングすることができます。

  • Include
    正規表現を使ってデータベースを明示的に含めることができます。
    OpenMetadataは、指定された正規表現の1つ以上に名前が一致するすべてのデータベースを含めます。その他のデータベースは除外されます。
  • Exclude
    正規表現を使ってデータベースを明示的に除外することができます。
    OpenMetadataは、指定された正規表現の1つ以上に名前が一致するデータベースをすべて除外します。その他のデータベースは含まれます。
Include Exclude 動作
すべてのデータベース/スキーマ/テーブルが取り込まれる
指定 Includeで指定したデータベース/スキーマ/テーブルのみ取り込まれる
指定 Excludeで指定したデータベース/スキーマ/テーブルを除いたものが取り込まれる
指定 指定 IncludeとExcludeの積集合:Includeに一致し、かつExcludeに一致しないものが取り込まれる

その他に設定できる項目

その他に設定できる項目は以下の通りです[1:2]

オプション 説明
Enable Debug Log デバッグログを有効にする。
Mark Deleted Tables 削除されたテーブルにマークを付ける。
Mark Deleted Stored Procedures 削除された保存プロシージャにマークを付ける。
Include Tables テーブルを含める。
Include Views ビューを含める。
Include Tags タグを含める。
Include Owners 所有者を含める。
Include Stored Procedures 保存プロシージャを含める。
Query Log Duration クエリログの期間を設定する。
Query Parsing Timeout Limit クエリパースのタイムアウト制限を300秒に設定する。
Use Fqn For Filtering フィルタリングにFQN(完全修飾名)を使用する。
DisplayName 表示名を設定する。

メタデータ取り込みの実行

Nextをクリックして、Ingestions一覧の画面に遷移します。

Ingestions
Ingestions一覧

TYPEが「metadata」の先ほど作成したIngestionを選択して、右の「Run」ボタンをクリックします。
RECENT RUNSが「Running」から「Success」に変われば、メタデータの取り込みが完了です。

メタデータの確認

Exploreタブから、取り込んだテーブルのメタデータを確認できます。
Explore
Explore

スキーマ

テーブルを選択すると、そのテーブルのスキーマやプロパティを確認できます。
Table
スキーマ

リネージ

リネージを確認することもできます。今回はBigQuery側で特にリネージを設定していないため、現在のテーブルのみが表示されます。
Lineage
リネージ

サンプルデータ

IngestionsにProfiler Ingestionを追加することで、BigQueryのテーブルから、任意の数の行をランダムにサンプリングして表示することができます。今回は試しに3件を表示してみました。
Sample Data
サンプルデータ

データの品質テスト

Profiler & Data Qualityタブから、データの品質テストを行うことができます。
「first_nameがNULLでないこと」を確認するテストを追加してみました。
Data Quality
データ品質テストの作成

反映までに若干時間がかかるかもしれませんが、テストが完了すると、テスト結果が表示されます。
Data Quality
データ品質テストの結果
今回は、意図的に「fist_name」にがNULLのデータを追加していたため、テストが失敗しています。このように、テスト項目を追加してデータの品質を監視することで、データの異常をいち早く検知することができます。また、データの品質を一定に保つことで、アナリストやデータサイエンティストが信頼できるデータを使って分析を行うことができます。

まとめ

今回は、OpenMetadataの概要と、BigQueryとの連携を試してみました。
データカタログとしての機能を強化しているOpenMetadataは、データの可視化やデータ品質管理など、データ活用に必要な機能を提供しています。
また、データソースの追加やメタデータの取り込み、データ品質テストなど、UIも直感的で使いやすい印象でした。
ドキュメントも充実しているため、データエンジニアリング勉強中の私でも、比較的スムーズに試すことができました。

おわりに

Acompanyでは、我々と一緒にプライバシーテックの領域で世界を目指してくれるメンバーを募集しています。まずは、カジュアル面談でAcompanyという会社のことを知ってもらいたいです。
https://recruit.acompany.tech/#84ba9c895d464495a63fd437bac75431

また、弊社の他のブログは以下エンジニアブログハブから見られます!
https://engineering.acompany.tech/

脚注
  1. OpenMetadata Docs - BigQuery Connector ↩︎ ↩︎ ↩︎

Discussion