Snowflakeのメタデータ利活用:【実践編01】Snowflakeのメタデータの可視化

に公開

1.自己紹介

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

2.はじめに

本記事は以前公開した『Snowflakeのメタデータ利活用:【導入編】』の続編にあたります。
Snowflakeから取得できるメタデータについて、DMBOKで定義されたメタデータ種別の観点からまとめているので、興味があればそちらも参照してみてください!
https://zenn.dev/yuwatari/articles/ee244d51a1189e

Snowflakeのマネジメントコンソール(Snowsight)にはもともと一部のメタデータを見やすい形で可視化する機能(ジョブの実行/エラーログ、リネージなど)が備わっています。
ただデータ活用を進める中で、より自社のデータマネジメントプロセス用にカスタマイズされたメタデータの収集・分析が必要になることも出てくると思います。

今回はそんなシチュエーションを前提に、SnowflakeのメタデータをPower BIでサクッと可視化する流れを見ていきたいと思います!

3.対象者

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

4.想定するシチュエーション

実案件でもあり得そうな以下のシチュエーションを考えてみます。

  • ある企業ではSnowflakeでデータ基盤を構築していて、日次でELT処理を動かすためにSnowflakeのタスクを使っています。
  • データ基盤の運用担当は日々の各タスクの実行時間を可視化することで、各タスクが想定の時間内に完了していることを一目で確認したいと思っています。
  • 可視化ツールは全社的に導入済みの使い慣れているPower BIを使いたいです。

5.Snowsightにおけるタスクの可視化

さっそく提示された要件を実装していこうと思いますがその前に、、、
Snowflakeのマネジメントコンソール(Snowsight)では、タスクのメタデータをもとに標準でタスクどうしの依存関係を可視化する機能が備わっています!


Snowsightで可視化されたタスクのグラフ

このようにすでに必要な情報がSnowsightで可視化されているケースもありますので、まずは実現したい内容がSnowsightで見れないか確認するのがよいと思います。

6.事前準備

Snowflakeの環境構築

Snowflakeは30日間の無料トライアルで構築した環境を使用します。
以下の記事を参考にしてみてください。
https://itsol.dentsusoken.com/snowflake/blog/snowflake-trial-vol-010-3644/

構築時の設定は以下の通りです。

  • エディション:エンタープライズ
  • クラウドプロバイダー:Microsoft Azure
  • リージョン:Japan East

データ基盤とタスクの作成

Snowflakeで構築されたデータ基盤とELT処理をおこなうタスクを作成していきます。
データ基盤側はタスクのメタデータを取得できればいいので実体のないシンプルな構成・作りにしていきます。

まずは以下のSQLでSnowflak上のタイムゾーンを東京にし、データベースとその配下のスキーマを作成します。
このデータベース・スキーマの箱をデータ基盤とみなし、データの格納は省略します。
なお今回は権限周りは気にしないので、すべてACCOUNTADMINのロールを使用します。

-- タイムゾーンの設定
ALTER ACCOUNT SET TIMEZONE = 'Asia/Tokyo';

-- データベースの作成
CREATE OR REPLACE DATABASE TEST_DB;

-- スキーマの作成
CREATE OR REPLACE SCHEMA TEST_DB.TEST_SCHM;

スキーマまで作成できたら、今度はこのスキーマ配下にタスクを作成していきます。
タスクは3つ作成し、それぞれTASK01, TASK02, TASK03とします。
TASK01の実行が終わったら、TASK02, TASK03が動くという依存関係とし、各タスクは共通のストアドプロシージャ(COMMON_PROCEDURE)を呼び出すことにします。
このプロシージャは1分間スリーブする処理のみをおこないます。
まとめると以下の図のようなイメージです。

データ基盤/タスク/プロシージャの関係

以下のSQLでこれらを作成していきます。

-- プロシージャの作成
CREATE OR REPLACE PROCEDURE TEST_DB.TEST_SCHM.COMMON_PROCEDURE()
RETURNS VARIANT
LANGUAGE PYTHON
RUNTIME_VERSION = '3.11'
PACKAGES = ('snowflake-snowpark-python')
HANDLER = 'main'
EXECUTE AS OWNER
AS '# セッション用のライブラリのインポート
import snowflake.snowpark as snowpark
# スリーブ処理用のライブラリのインポート
import time

def main(session: snowpark.Session): 

    # 1分(60秒)待つ
    time.sleep(60)

    # Noneを返す
    return None';


-- タスクの作成
-- TASK01 ※SCHEDULEオプションに起動したい時間をCRONで指定
CREATE OR REPLACE TASK TEST_DB.TEST_SCHM.TASK01
WAREHOUSE = COMPUTE_WH
SCHEDULE = 'USING CRON 15 17 * * * Asia/Tokyo' 
AS
CALL TEST_DB.TEST_SCHM.COMMON_PROCEDURE();

-- TASK02
CREATE OR REPLACE TASK TEST_DB.TEST_SCHM.TASK02
WAREHOUSE = COMPUTE_WH
AFTER TEST_DB.TEST_SCHM.TASK01
AS
CALL TEST_DB.TEST_SCHM.COMMON_PROCEDURE();

-- TASK03
CREATE OR REPLACE TASK TEST_DB.TEST_SCHM.TASK03
WAREHOUSE = COMPUTE_WH
AFTER TEST_DB.TEST_SCHM.TASK01
AS
CALL TEST_DB.TEST_SCHM.COMMON_PROCEDURE();

Power BIの準備

以下のページを参考にデスクトップ版のPower BIを自分の端末にインストールします。
https://learn.microsoft.com/ja-jp/power-bi/fundamentals/desktop-get-the-desktop

7.実装と可視化

事前準備まで終えたらいよいよ可視化のための実装に入っていきます。

メタデータ取得用のビューの作成

Snowflakにはテーブル関数と呼ばれるデフォルトで使用できる便利な関数群を用意していて、それを使うことでメタデータを表形式で取得できます。
https://docs.snowflake.com/ja/sql-reference/functions-table

テーブル関数の中にTASK_HISTORYという関数があり、こちらを使うことでタスクの実行開始・終了時間を取得できます。
https://docs.snowflake.com/ja/sql-reference/functions/task_history

ただし、Power BIからSnowflakのテーブル関数は直接参照できないので、ビューでテーブル関数をラッピングし、そのビューをPower BIから参照させるようにします。
以下のSQLで前項で作成したスキーマ配下にビューを作成します。
このビューを参照すると、直近1週間のタスクの実行履歴を表形式で取得できます。

-- ビューの作成
CREATE OR REPLACE VIEW TEST_DB.TEST_SCHM.TEST_VIEW
AS
SELECT *
FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(
    SCHEDULED_TIME_RANGE_START => DATEADD('day', -7, CURRENT_TIMESTAMP()),
    SCHEDULED_TIME_RANGE_END => CURRENT_TIMESTAMP()
));

タスクの実行

実際にタスクを実行して実行履歴を記録していきます。
前項で作成された直後のタスクは一時停止状態となっているので、以下のSQLで再開状態にしタスクが動くようにします。
なお、タスクに依存関係がある場合は、後ろ側のタスクから順番に再開状態にする必要があります。

-- タスクの再開
ALTER TASK TEST_DB.TEST_SCHM.TASK02 RESUME;
ALTER TASK TEST_DB.TEST_SCHM.TASK03 RESUME;
ALTER TASK TEST_DB.TEST_SCHM.TASK01 RESUME;

タスクが再開できたら、指定した時間でTASK01が起動し、TASK01の実行が終わり次第TASK02とTASK03が実行されます。
すべてのタスクの実行が完了したら以下のSQLでビューを参照し実行履歴を確認してみます。

-- タスクの実行履歴を参照
SELECT * FROM TEST_DB.TEST_SCHM.TEST_VIEW;


タスクの実行履歴

図のようにTASK_HISTORYの各種メタデータが取得できることが確認できます。

タスクの実行履歴の可視化

最後にPower BIでタスクの実行履歴を可視化していきましょう。

前項でインストールしたPower BIを立ち上げて、作成済みのメタデータ取得用のビュー(TEST_VIEW)をDirect Queryモードで参照します。
Power BIからSnowflakへ接続する方法は以下の記事を参考にしてみてください。
https://newssdx.kcme.jp/pbi_snowflake_link1/

なお、2025/6時点ではサーバーURLの取得場所は以下の通り変わっているようです。

ビューの参照ができたら、そのデータをもとに可視化するためのレポートを作成していきます。
タスクの実行時間が一目でわかるようなビジュアルにしたいということで、今回はスケジュール管理でよく使用されるガントチャートを採用します。
ガントチャートのビジュアルはデフォルトでPower BIに備わっていないので、以下の図の手順で「Gantt」を取得してください。


次に左のペインにある「モデルビュー」でデータの編集画面に行き、TEST_VIEWのデータを少し加工しましょう。
上部のバーにある「データの変換」を選択すると、新しいPower Queryウィザードが表示されます。
これはExcelライクにデータを編集できる画面となっています。
ここでは、Snowflakがデフォルトで動かしているタスクの履歴を除いて、前項で作成したタスクのみを表示できるようにします。
「NAME」カラムのフィルターでTASK01, TASK02, TASK03だけを選択しましょう。

フィルターができたら左上の「閉じて適用」ボタンを押して、フィルターを適用させます。
こうすることで必要なタスクのみを表示させる準備ができました。

左のペインにある「レポート ビュー」でレポートの編集画面に戻り、先ほど取得したGanttビジュアルボタンを押してレポートを作成していきます。
視覚化ペインの下部にGanttビジュアルでの可視化に必要なフィールドが表示されるので、「タスク」フィールドに右側のデータペインにあるTEST_VIEWの「NAME」カラムをドラッグ&ドロップして反映させます。

同じように「開始日」「終了日」フィールドにそれぞれ「SCHEDULED_TIME」「COMPLETED_TIME」カラムを反映させます。

左に情報が反映されたレポートを拡大するとタスクごとのガントチャートが表示されていることがわかります。

しかしこのレポートでは、タスクは1分しか動いていないのに1日単位で表示されてしまっています。
これを正確な表示に直すには、視覚化ペインの「ビジュアルの書式設定>全般>期間の単位」で秒に設定します。

無事各タスクの時間を正しく可視化させることができました。
もっとビジュアルは改良の余地がありますが、基本的な部分はこれで完成となります。

8.まとめ

いかがでしたでしょうか。
今回は、実際のデータ基盤運用を想定して、Snowflakeのタスクの実行履歴のメタデータから、タスクの実行時間を確認する運用者向けの可視化をおこないました。
シンプルな構成にしすぎて実業務で使えるかというと微妙ですが、、ベーシックな部分はお伝えすることができたのではないでしょうか
Snowflakのメタデータから洞察を得るための手段として、Snowsight/Power BIは手軽に扱えるツールになりますので、ぜひ試してみてください!

今後のテーマは未定ですが、別のデータソースのメタデータの利活用なども扱った記事を投稿していきたいと思っていますので、ご興味があればぜひご一読ください!

電通総研 データテックブログ

Discussion