はじめに
最近Snowflakeを勉強する機会に恵まれ、
学習を進めていたが、監視の部分において一部取得できる情報が多すぎて、
便利なのはわかるがどのように役立つのかが分からない、
SNOWFLAKEデータベースのACCOUNT_USAGEスキーマと言う物が提供されています。。。
今回、その内容を整理することにしました。
少しでもこの記事が理解のお役に立てば幸いです!
Snowflakeとは
Snowflakeとはクラウドベースのデータウェアハウスで
SaaS(ソフトウェアのインストール・インフラの管理不要)という、
完全管理型のサービスの為、利用開始のハードルが低いという特徴が挙げられます。
またSnowflake特有の特徴として以下があげられます。
-
スケーラビリティ: それぞれのデータ処理に合わせたコンピュート
(Snowflake上ではウェアハウスと呼ばれる)を使用可能 - コスト最適化 : 本当に必要なリソース分の従量課金
- データ共有 : 別アカウントが持つデータ、共有されている外部データの使用が簡単
【参考】
以下に実際のワークフローにおいて、
Snowflakeがどのように使用されているのかイラストを添付
引用元:Snowflakeとは?何がすごいの?~アーキテクチャと特長をわかりやすく解説!~
ACCOUNT_USAGEスキーマとは
SnowflakeではACCOUNT_USAGEスキーマ(※1)が提供されています。
ACCOUNT_USAGEとは、Snowflakeアカウント内のリソース使用状況や、
アクティビティを監視・分析するために使用されるスキーマです。
以下が実際の画面です。この様に
データベース:SNOWFLAKE
スキーマ :ACCOUNT_USAGE
が存在しており、
その配下に様々なビューが提供されていることが分かります!
(これらのデータベース、スキーマ、ビューはSNOWFLAKEが自動で作成・更新されます)
これらのビューに対してSELECTを実施することで、
過去1年分の様々なジャンル別データを取得でき、非常に便利ですが、
公式ドキュメント※2より提供されているビューは103個も提供されています。
そのため正直どのビューからどのようなデータが取得できるのか把握しきれず、
有効活用できていない状況でした
→ 以下3つのカテゴリーに分け、
主要なビューからどのようなデータが取得できるかまとめます。
カテゴリー:
- アクセス管理
- ウェアハウス管理
- ストレージ管理
【注意】
スキーマ:ACCOUNT_USAGE(データベース:SNOWFLAKE)に
アクセスするためには以下権限を持つユーザが必要です
- ACCOUNTADMINロール
-
データベースロールが付与されているアカウントロール
(データベースロール権限: スキーマ:ACCOUNT_USAGEの閲覧権限を持っている事)
【参考】
※1. スキーマとは
【DB設計】外部スキーマ・概念スキーマ・内部スキーマについてまとめてみた
※2. 公式ドキュメント
Snowflake 公式ドキュメント: Account Usage
1. アクセス管理
ビュー:LOGIN_HISTORY
このビューを使用することで以下の情報を取得することが可能です。
いつ(カラム:EVENT_TIMESTAMP)、
誰が(カラム:USER_NAME)、
どの多要素認証を使用して(カラム:SECOND_AUTHENTICATION_FACTOR)、
正常にアクセスができたのか(カラム:IS_SUCCESS)
といった情報を確認することができる。
以下は直近で実行された10件の上記情報を確認した画面になります。
【参考】
画面左中央のチャートを選択することで、
出力されたデータを棒や折れ線グラフの表示で出力することが可能
→ どの時間帯、日付にログインが集中しているのかなどを簡単に確認することができる!
参考:公式ドキュメント:LOGIN_HISTORY ビュー
ビュー:ACCESS_HISTORY
このビューを使用することで以下の情報を取得することが可能です。
いつ(カラム:QUERY_START_TIME)、
誰が(カラム:USER_NAME)、
どのテーブル(ビュー)のどのカラム(カラム:DIRECT_OBJECTS_ACCESSED)
にアクセスしたのかなどの情報を確認することができる。
以下は直近で実行された10件の上記情報を確認した画面になります。
(カラム:DIRECT_OBJECTS_ACCESSEDにはJSON形式で値が格納されています)
参考:公式ドキュメント:ACCESS_HISTORY ビュー
2. ウェアハウス管理
ビュー:QUERY_HISTORY
※使用状況の監視で紹介しますが、このビューはコスト管理、
セキュリティ監査など様々な用途で使用される便利なビューです。
このビューを使用することで以下の情報を取得することが可能です。
誰が(カラム:user_name)、
いつ(カラム:start_time)、
どのロール(カラム:role_name)、
どのウェアハウス(カラム:warehouse_name)
を使用してクエリを実行したかなどを確認することができる。
(その他にも情報を取得できますが、詳しくは以下参照をご確認ください。)
以下は直近で実行された10件の上記情報を確認した画面になります。
参考:公式ドキュメント:QUERY_HISTORYビュー
ビュー:WAREHOUSE_METERING_HISTORY
このビューを使用することで以下の情報を取得することが可能です。
いつから(カラム:start_time)、
いつまで(カラム:end_time)、
どのウェアハウスにて(カラム:WAREHOUSE_NAME)、
どれほどのクレジット(カラム:CREDITS_USED_COMPUTE)
が使用されていたのかなどの情報を確認することができる。
(その他にも情報を取得できますが、詳しくは以下参照をご確認ください。)
以下は直近で実行された10件の上記情報を確認した画面になります。
参考:公式ドキュメント:WAREHOUSE_METERING_HISTORY ビュー
3. ストレージ管理
ビュー:STORAGE_USAGE
このビューを使用することで以下の情報を取得することが可能です。
アカウント全体の過去1年間における1日当たりの平均データストレージ使用量
(カラム:STORAGE_BYTES)
などの情報を確認することができる。
以下は直近で実行された100件の上記情報を確認した画面になります。
参考:公式ドキュメント:STORAGE_USAGE ビュー
ビュー:TABLE_STORAGE_METRICS
このビューを使用することで以下の情報を取得することが可能です。
どのスキーマに属している(カラム:TABLE_SCHEMA)、
どのテーブルで(カラム:TABLE_NAME)、
現在アクセス可能なデータ(カラム:ACTIVE_BYTES)、
Time-Travelに格納されているデータ(カラム:TIME_TRAVEL_BYTES)、
Fail-safeに格納されているデータ(カラム:FAILSAFE_BYTES)
量を確認することができる。
以下は直近で実行された10件の上記情報を確認した画面になります。
これを活用することで、テーブルごとのデータ容量を効率的に管理できます!
参考:公式ドキュメント:TABLE_STORAGE_METRICS ビュー
さいごに
ACCOUNT_USAGEから取得できるデータに関して主要な部分をまとめました。
少しでもACCOUNT_USAGEについて理解度が深まる手助けになれば幸いです!
【参考】
本記事で記載したもの以外にも、
ACCOUNT_USAGEから取得できるデータとしては以下が存在します。
- コスト
- データロード、転送
- タスク
- ロール
- ネットワークポリシー
など