📑

OpenMetadataとSnowflakeのコラボレーション

2023/07/16に公開

前回記事でOpenMetadataをインストールしたので、Snowflakeと繋げてどんなことができるのか手探りで見ていきたいと思います。

Snowflakeとの接続設定を行う

OpenMetadataにログイン後画面左下に「Settings」をクリックします。

画面遷移後の左メニューバーより「Database」をクリックします。
すると画面中央の画面が遷移し、下図の通りになります。
そして画面右上の「Add New Service」をクリックします。

※上図だと既に「Snowflake」の接続情報ができていますがお気になさらずに
続けて、接続するサービスを選択します。
検索窓に「snowflake」と入力し、検索結果として表示されているSnowflakeのアイコンをクリックし、選択した状態で「Next」をクリックします。

接続情報名を入力します。

最後に接続情報を入力し、Snowflakeとの接続テストが成功したら「Save」をクリックします。

今回は動作確認をすることが目的なのでROLEはACCOUNTADMINとしています。
運用を見据えた利用をするならちゃんとROLE設計された方がいいですね。
参考までにOpenMetadataのブログをご紹介します。
https://docs.open-metadata.org/v1.1.0/connectors/database/snowflake

ブログより抜粋
-- Create New Role
CREATE ROLE NEW_ROLE;

-- Create New User
CREATE USER NEW_USER DEFAULT_ROLE=NEW_ROLE PASSWORD='PASSWORD';

-- Grant role to user
GRANT ROLE NEW_ROLE TO USER NEW_USER;

-- Grant USAGE Privilege on Warehouse to New Role
GRANT USAGE ON WAREHOUSE WAREHOUSE_NAME TO ROLE NEW_ROLE;

-- Grant USAGE Privilege on Database to New Role
GRANT USAGE ON DATABASE TEST_DB TO ROLE NEW_ROLE;

-- Grant USAGE Privilege on required Schemas to New Role
GRANT USAGE ON SCHEMA TEST_SCHEMA TO ROLE NEW_ROLE;

-- Grant SELECT Privilege on required tables & views to New Role
GRANT SELECT ON ALL TABLES IN SCHEMA TEST_SCHEMA TO ROLE NEW_ROLE;
GRANT SELECT ON ALL VIEWS IN SCHEMA TEST_SCHEMA TO ROLE NEW_ROLE;

-- Grant IMPORTED PRIVILEGES on all Schemas of SNOWFLAKE DB to New Role
GRANT IMPORTED PRIVILEGES ON ALL SCHEMAS IN DATABASE SNOWFLAKE TO ROLE NEW_ROLE;

-- Grant IMPORTED PRIVILEGES on all Schemas of SNOWFLAKE DB to New Role
GRANT IMPORTED PRIVILEGES ON ALL SCHEMAS IN DATABASE SNOWFLAKE TO ROLE NEW_ROLE;

Snowflakeのメタデータを収集する

※事前にSnowflakeにデータが存在していることが望ましいです。
先ほど作成したSnowflakeの接続情報をクリックします。

「Ingestions」タブをクリックし、「Add Ingestion」をクリックします。
「Add Metadata Ingestion」を選択します。

メタデータ収集設定はデフォルトのままにし、「Next」をクリックします。

最後に収集スケジュールを設定します。
ここもデフォルトのままとし、「Add&Deploy」をクリックします。

作成したmetadata収集ジョブをActionsの「Run」で実行します。

ジョブの実行が完了すると、Databaseタブにデータベースが表示されます。

DEMO_DB -> PUBLICスキーマとアクセスすると、事前に作成していたテーブル情報が表示されています。

収集したメタデータを確認する

それではどのようなメタデータや情報を収集できたのかを確認してみます。

Schema情報

RAW_CUSTOMERSテーブルにアクセスし、「Schema」タブをクリックします。
すると、テーブルの以下情報を確認することができます。

項目 説明
NAME カラム名
TYPE カラムのタイプ
DESCRIPTION カラムの説明
TAGS タグ情報
GLOSSARY TERMS 訳すと「用語集」これはよく分からないですね


SnowfalkeのTYPEと比較すると、 TYPE名が違いますね。
定義する数値範囲は同じですが。
これはOpenMetadataが認識するTYPEとSnowflakeが認識するTYPEに差異がある感じですね。

Profiler&DataQuality情報

Table Profile

Table Profileで確認できることは、以下情報です。

項目 説明
Row Count テーブルの行数
Column Count テーブルのカラム数
Profile Sample 特定のテーブルに対してプロファイラが使用するサンプルデータの利用割合
Data Volume カラム数の推移を視覚して表示してくれる
Table Update Inser/Update/Deleteの実行履歴を可視化する?
Volume Change Inser/Update/Deleteによるデータ量の変化を可視化する?

Column Profile

Column Profileで確認できることは、以下情報です。
特に赤枠の部分に注目します。

項目 説明
NAME カラム名
DATE TYPE カラムのTYPE
NULL% NULLが含まれる割合
UNIQUE% データのユニーク率
DISTINCT% データの重複率
VALUE COUNT 行数?データ数?
TESTS テスト実行回数
STATUS テストの結果?

Data Quality

ここはテストケースの実行結果を確認する画面です。
まだテストケースを作成していないので、結果がない状態です。

Linage情報

テーブルのリネージを確認できます。
ここで嬉しいポイントがカラム情報も一緒に確認できるのグッドです!

その他の情報

それ以外の以下タブの情報はデータが無いのか、表示されませんでした。

  • Activity Feeds & Tasks
  • Sample Data
  • Queries
  • Custome Properties

まとめ

メタデータを集めることで大まかに以下の情報が収集できました。

  • カラム名
  • カラムタイプ
  • DMLの履歴
  • データ量の推移
  • リネージ
  • データのユニーク率
  • データの重複率

データを管理運用するために、どこにどのような情報があるのか。
そして、それはどのようなデータ構造なのか、がわかるサービスとなっていて非常に使いやすいと思いました。

2023-07-17追記

Viewのメタデータが収集されてなかったので、以下の設定で収集できます。
「Include Views」を有効にします。

もう一度メタデータ収集ジョブを実行してみます。
下図の通り、VIEWのメタデータも取得できました。

2023-09-30 追記

Database Filter Patternの検証

Database Serviceを作成する際に、あえてデータベース名を入力しないでおくと、Ingestion設定する際にデータベースのフィルター設定ができます。
Metadata Ingestionで特定のデータベースのみを取り込む設定をしてみます。

Ingestionが実行完了後、確認してみると、DEMO_DBだけ取り込まれており期待する動作となりました。

Schema Filter Patternの検証

Metadata IngestionのSchema Filter Patternの下記項目を入力する。

  • Include : PUBLIC
  • Exclude : INFORMATION_SCHEMA


設定後、Ingestionを実行すると・・・
PUBLICのみ取り込まれました。
プロジェクト外の使わないスキーマをフィルターすることで、データ量削減と無駄なコスト削減を実現できるので嬉しい機能ですね!

IncludeにもExcludeにも含まれないスキーマはどうなる?

次にSchema Filter PatternのInclude/Excludeの両方に含まれないスキーマはどうなるか?検証してみます。
適当にスキーマとテーブルを作成しました。

Metadata Ingestionを実行したところ、フィルターに設定が無いスキーマは取り込まれないことがわかりました。

追加したスキーマを理込むには?

DEMO_SCHEMA2というスキーマと適当なテーブルを用意したので、既存のMetadata Ingestionから取り込んでみます。

Metadata Ingestionを以下のように設定し、実行します。

期待通り、DEMO_SCHEMA2のみ追加されています。

Discussion