Zenn
👻

Snowflakeのメタデータ利活用:【導入編】Snowflakeで得られるメタデータとは?

2024/12/24に公開

1.自己紹介

はじめまして!
都内SIer勤務のデータエンジニアです。
これまで主にクラウドサービス(AWS/Azure/Snowflake)を利用したデータ分析基盤の構築に従事してきました。

2.はじめに

本記事は Snowflake アドベントカレンダー 25 日目の記事です。
https://qiita.com/advent-calendar/2024/snowflake

データ利活用を恒久的に持続するには 「メタデータ管理」 が必要です。
メタデータとは「データのデータ」と呼ばれるデータそのものが持つ情報のことで、データを活用する企業が大きくなればなるほど、メタデータを管理することは重要になってきます。

今回のお話のメインとなるSnowflakeは、ただのデータウェアハウスのサービスにとどまらず、AI、データ統合と共有、セキュリティ・ガバナンスなど、幅広い機能を有するデータプラットフォームです。
Snowflakeでは当然メタデータを取得でき、またそれをユーザにわかりやすく提供するインターフェースを備えています。

今後数回に分けてSnowflakeのメタデータの利活用について記事を投稿していこうと思いますが、この記事ではその導入としてSnowflakeで得られるメタデータをサラッと紹介してきます。

3.対象者

Snowflakeで全社的にデータ分析基盤を構築したい!/構築したけど運用・保守効率が悪い・・・/構築したけど効果が出ているのか分からない・・・そんなユーザ企業のIT部門およびベンダー向けの記事です。

4.DMBOKで定義されているメタデータ

メタデータは多種多様な形で存在するので、まずはメタデータを体系的に整理するためにDMBOKの「メタデータ管理」の内容の一部を紹介したいと思います。

データマネジメント知識体系ガイド(DMBOK)はエンタープライズなデータマネジメント推進するうえで強力な指針となるガイドブックです。

DMBOKではメタデータを次の3つの種類に分類しています。

  • 「ビジネスメタデータ」:利用者がデータを理解するための補足情報
  • 「テクニカルメタデータ」:対象システムの機能的な定義情報
  • 「オペレーショナルメタデータ」:データの処理とアクセスの詳細の運用情報​

DMBOKで紹介されている各メタデータ種別に該当するメタデータ一覧は以下の通りです。

ビジネスメタデータ

  • データセット、テーブルおよびカラムの定義と説明
  • 業務ルール、変換ルール、計算方法、および導出方法
  • データモデル
  • データ品質の規則と測定結果
  • データが更新されるスケジュール
  • データの出所とデータリネージ
  • データ標準
  • データエレメントが依存するマスターレコードシステムの指定
  • 有効値制約
  • ステークホルダーの連絡先情報(例えばデータオーナー、データスチュワード)
  • データのセキュリティ/プライバシーレベル
  • データに関する既知の問題
  • データ利用上の注意

テクニカルメタデータ

  • 物理データベースとカラムの名称
  • カラムのプロパティ
  • データベースオブジェクトのプロパティ
  • アクセス権
  • データCRUD(Create作成、Replace置換、Update更新、Delete削除)ルール
  • データテーブル名、キー、インデックスなどを含む物理データモデル
  • データモデルと物理的資産の関係を示すドキュメント
  • ETLジョブの詳細
  • ファイルフォーマットのスキーマ定義
  • ソースからターゲットへのマッピングを示すドキュメント
  • 上流および下流への変更影響情報を含むデータリネージを記述するドキュメント
  • プログラムとアプリケーションの名称と説明
  • コンテンツ更新サイクルのジョブスケジュールと依存関係
  • リカバリーとバックアップのルール
  • グループ別、役割別データのアクセス権

オペレーショナルメタデータ

  • バッチプログラムのジョブ実行ログ
  • データの抽出とその結果などの履歴
  • 運用スケジュールの異常
  • オーディット、バランス、コントロールなどの結果
  • エラーログ
  • レポートとクエリのアクセスパターン、頻度、および実行時間
  • バッチとバージョン管理の計画と実行、現在のパッチ適用レベル
  • バックアップ、保存、実行日付、災害復旧などの規定
  • SLAの要件と規定
  • 容量の増減と利用パターン
  • データのアーカイブと保持ルール、関連するアーカイブ
  • 廃棄基準
  • データ共有ルールや合意事項
  • IT側の役割と責任、連絡先

少しわかりづらい表現もありますが、それぞれの関係をまとめると以下のように整理できるのではないでしょうか。

組織という大きい単位やその下のビジネス単位での決まり事を「ビジネスメタデータ」とし、それをインプットに物理的なデータ分析基盤から得られる情報を「テクニカルメタデータ」とします。
さらにそのデータ分析基盤を稼働したときに得られるものが「オペレーショナルメタデータ」のイメージです。

5.Snowflakeのメタデータの種類

本題の、Snowflakeで得られるメタデータにはどのようなものがあるか??を語る前に、まずは先ほど紹介したDMBOKのメタデータの種類に着目して、Snowflakeで取得できる領域を当てはめてみます。

ものすごくざっくばらんなイメージですが、このような領域で表現できそうです。
当然Snowflakeはデータ分析基盤を構成するメインのデータプラットフォームになりますので、テクニカルメタデータを取得できます。
また、ビジネスメタデータで定義した情報の一部は、データ分析基盤の物理構築後にSnowflakeから参照できます。
さらにオペレーショナルメタデータについても、Snowflakeが稼働することで出力される情報については取得可能となります。

6.Snowflakeで得られるメタデータ

さて、なんとなくSnowflakeから取得できるメタデータの種類がイメージできたところで、実際にSnowflakeからメタデータを取得してみます。
Snowflakeからメタデータを参照する方法は基本的に2種類あります。

  • SQLクエリで取得する
  • Snowsightからメタデータを参照する

リネージ(ビジネスメタデータの例)

リネージはデータが生成されてから最終的に利用されるまでの一連の過程を追跡し、その流れや変化を表したものです。
リネージを定義しておくと、例えば法規制によってある情報を生のまま格納してはいけなくなったとき、どの項目が該当するか辿りやすくなることで対応コストの軽減につながります。
なんとSnowflakeでは依存関係のあるオブジェクト(テーブル、ビュー、動的テーブル)同士のリネージをビジュアル的にSnowsightから参照できます!
※ 12月25日時点でリネージはプレビュー機能となります

以下の通りテーブルとそれを参照するビューを作成します。

-- テーブル「A_TBL」の作成
create or replace table wy_db.wy_schema.a_tbl(
  col_01 varchar(5),
  col_02 varchar(5),
  col_03 varchar(5)
)
;

-- ビュー「B_VIEW」の作成
create or replace view wy_db.wy_schema.b_view
as
select col_01, col_02
from wy_db.wy_schema.a_tbl
;

テーブルとビューを作成後、Snowsightのビュー「B_VIEW」(またはテーブル「A_TBL」)の「系列」タブを押下すると、、

テーブル⇒ビューのリネージ
オブジェクト同士の依存関係が表示されました!
また、以下のように各カラムの系列も参照できます。

テーブル⇒ビューのcol_02の系列

オブジェクトのプロパティ(テクニカルメタデータの例)

Snowflakeで物理的に生成したオブジェクトは、その定義情報(プロパティ)を内部でもち、SQLクエリやSnowsightから参照できます。

以下の通り、テーブルのオブジェクト作成時に各カラムにNOT NULL制約やコメントを付与します。

-- テーブル「TBL_A」の作成
create or replace table wy_db.wy_schema.a_tbl(
  col_01 varchar(5) not null comment 'テーブルAの1番目のカラム',
  col_02 varchar(5) comment 'テーブルAの2番目のカラム',
  col_03 varchar(5) comment 'テーブルAの3番目のカラム'
);

-- テーブル「TBL_B」の作成
create or replace table wy_db.wy_schema.b_tbl(
  col_01 varchar(5) not null comment 'テーブルBの1番目のカラム',
  col_02 varchar(5) comment 'テーブルBの2番目のカラム',
  col_03 varchar(5) comment 'テーブルBの3番目のカラム'
);

テーブルの一覧を表示するには以下の通り「show <オブジェクト種別の複数形>;」で情報を参照できます。

show tables;


「show tables;」結果

また、より詳細にテーブルおよびカラムのプロパティを参照したい場合は「desc <オブジェクト種別> <オブジェクト名>;」を実行します。

desc table wy_db.wy_schema.a_tbl;


「desc table wy_db.wy_schema.a_tbl;」結果

ジョブの実行/エラーログ(オペレーショナルメタデータの例)

Snowflakeにデータを取り込む際には、あるストレージ基盤からELT・ETLサービス(Fivetran, dbt, Glue, DataFactoryなど)を使用することが多いですが、Snowflakeの各種機能を組み合わせることでSnowflake単体でデータ取り込みを完結させることができます。
そのデータ取り込みジョブの起点として動作するタスクでは、タスクが出力する実行ログやエラーログをSQLクエリやSnowsightから参照できます。

以下の通りテーブル「テーブルA」にデータを挿入するタスク「A_TBL_TASK」を作成して手動で実行します。

-- タスク「A_TBL_TASK」を作成
create or replace task wy_db.wy_schema.a_tbl_task
warehouse=COMPUTE_WH
schedule='USING CRON 45 15 * * * Asia/Tokyo'
as
INSERT INTO wy_db.wy_schema.a_tbl
SELECT 'aaa', 'bbb', 'ccc';

-- タスク「A_TBL_TASK」を手動実行
execute task wy_db.wy_schema.a_tbl_task;

タスクを実行後、以下のSQLクエリで実行結果を取得してみます。

SELECT STATE
FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(
    TASK_NAME=>'A_TBL_TASK'
));


SQLクエリによるタスク「A_TBL_TASK」の実行結果
また、Snowsightでは以下の通り「実行履歴」のタブからビジュアル的にタスクの実行結果を参照できます。

Snowsightによるタスク「A_TBL_TASK」の実行結果

今度は以下の通りタスクがエラーとなるように書き換えて同じ要領で結果を確認していきます。

-- 文字数オーバーでエラーとなるようにタスク「A_TBL_TASK」を書き換え
create or replace task wy_db.wy_schema.a_tbl_task
warehouse=COMPUTE_WH
schedule='USING CRON 45 15 * * * Asia/Tokyo'
as
INSERT INTO wy_db.wy_schema.a_tbl
SELECT 'aaaaaa', 'bbb', 'ccc';

-- タスク「A_TBL_TASK」を手動実行
execute task wy_db.wy_schema.a_tbl_task;

-- タスク「A_TBL_TASK」の結果確認
SELECT STATE
FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(
    TASK_NAME=>'A_TBL_TASK'
));


SQLクエリによるタスク「A_TBL_TASK」の実行結果(エラーログ)

Snowsightでは以下のように表示されます。

Snowsightによるタスク「A_TBL_TASK」の実行結果
Snowsightでは右端にある「クエリプロファイル」からエラーログも参照できます。

「クエリプロファイル」のエラーログ

7.まとめ

いかがでしたでしょうか。
今回は、DMBOKで定義されているメタデータの種類とSnowflakeにおけるメタデータの対応を整理しつつ、実際にSnowflakeで得られるメタデータの一部を紹介してみました。
かなり基礎的な内容ばかりでSnowflakeを触ったことがある人には物足りない内容になったかもしれません。。

今後はもっと実業務を意識して、Snowflakeを中心にその周辺のエコシステムも含めたデータ分析基盤構築におけるメタデータの利活用について記事を投稿していきたいと思っていますので、ご興味があればぜひご一読ください!

Discussion

ログインするとコメントできます