OpenMetadataとSnowflakeのコラボレーション
前回記事でOpenMetadataをインストールしたので、Snowflakeと繋げてどんなことができるのか手探りで見ていきたいと思います。
Snowflakeとの接続設定を行う
OpenMetadataにログイン後画面左下に「Settings」をクリックします。
画面遷移後の左メニューバーより「Database」をクリックします。
すると画面中央の画面が遷移し、下図の通りになります。
そして画面右上の「Add New Service」をクリックします。
※上図だと既に「Snowflake」の接続情報ができていますがお気になさらずに
続けて、接続するサービスを選択します。
検索窓に「snowflake」と入力し、検索結果として表示されているSnowflakeのアイコンをクリックし、選択した状態で「Next」をクリックします。
接続情報名を入力します。
最後に接続情報を入力し、Snowflakeとの接続テストが成功したら「Save」をクリックします。
今回は動作確認をすることが目的なのでROLEはACCOUNTADMINとしています。
運用を見据えた利用をするならちゃんとROLE設計された方がいいですね。
参考までにOpenMetadataのブログをご紹介します。
-- 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