Snowflakeでクレジットの使用状況を確認してみた 〜SQL編〜
こんにちは!エノカワです。
Snowflakeではリソースの消費に対する支払いにクレジットという測定単位が使用されます。
支払いに直結するため、クレジットの使用状況を確認することが費用を試算する上でポイントになってきます。
前回の記事ではウェブインターフェイスでクレジットの使用状況を確認しました。
Snowflakeの利用形態やクレジットの説明は前回の記事にありますので参照ください。
SnowflakeではウェブインターフェイスとSQLの両方でクレジットの使用状況を確認できます。
今回はもう一つの方法であるSQLでクレジットの使用状況を確認してみました。
SNOWFLAKEデータベース
SnowflakeはSNOWFLAKEという名前の共有データベースを介して、アカウントの履歴データを提供します。
データベースには以下の2つの読み取り専用スキーマが含まれており、各スキーマにはビューのセットが含まれています。
- ACCOUNT_USAGE
アカウントのオブジェクトメタデータと使用メトリックを表示するビュー - READER_ACCOUNT_USAGE
アカウント用に作成されたすべてのリーダーアカウントのオブジェクトメタデータと使用メトリックを表示するビュー
スキーマ内のビューは、Snowflakeの他のビューと同様にクエリできます。
今回はACCOUNT_USAGEのビューにクエリを実行し、クレジットの使用状況を確認していきたいと思います。
クレジット使用状況を含むビュー
今回使用するのは以下の4つのビューです。
クレジット使用状況に関する項目が含まれており、過去365日(1年)の履歴を参照することができます。
- WAREHOUSE_METERING_HISTORY
- ウェアハウスの時間単位のクレジット使用状況
- METERING_HISTORY
- アカウントの時間単位のクレジット使用状況
- METERING_DAILY_HISTORY
- アカウントの毎日のクレジット使用状況とクラウドサービスリベート
- QUERY_HISTORY
- Snowflakeクエリ履歴
ビューによって履歴データの単位が異なります。
また、クラウドサービスで使用されたクレジット数はすべてのビューに含まれますが、
コンピューティングリソース(ウェアハウス)に使用されたクレジット数はQUERY_HISTORY
には含まれていません。
ビュー名 | 単位 | コンピューティングリソース | クラウドサービス |
---|---|---|---|
WAREHOUSE_METERING_HISTORY | ウェアハウス別/1時間単位 | ○ | ○ |
METERING_HISTORY | サービスタイプ別/1時間単位 | ○ | ○ |
METERING_DAILY_HISTORY | サービスタイプ別/日単位 | ○ | ○ |
QUERY_HISTORY | クエリ単位 | ✗ | ○ |
METERING_HISTORY
,METERING_DAILY_HISTORY
のサービスタイプには以下の6つがあります。
- WAREHOUSE_METERING
- WAREHOUSE_METERING_READER
- AUTOMATIC_CLUSTERING
- MATERIALIZED_VIEW
- PIPE
- REPLICATION
クレジット使用状況の確認
それではSQLでクレジットの使用状況を確認してみましょう。
ロールの切り替え
クレジット使用状況の情報にアクセスするためにアカウント管理者のロールに変更する必要があります。
以下のクエリを実行し、ロールをACCOUNTADMINに変更します。
ここでスキーマもSNOWFLAKEデータベースのACCOUNT_USAGEに変更しておきましょう。
use role ACCOUNTADMIN; use schema SNOWFLAKE.ACCOUNT_USAGE;
ロールをACCOUNTADMINに変更すると、画面左部のデータベースオブジェクト一覧にSNOWFLAKEが表示されるようになります。
一覧からビューを選択すると、メニューから「データをプレビュー」することができます。
WAREHOUSE_METERING_HISTORY
データをプレビュー
ウェアハウスごとに1時間単位のクレジット使用状況をクエリできます。
クレジット使用状況に関する3つの項目の説明は以下の通りです。
ウェアハウス、クラウドサービスそれぞれに使用されたクレジットの内訳とその合計を知ることができます。
- CREDITS_USED
- 時間内にウェアハウスに使用されたクレジットの総数
- CREDITS_USED_COMPUTEとCREDITS_USED_CLOUD_SERVICESの合計
- クラウドサービスの調整を考慮していないため、実際のクレジット消費量よりも大きくなる場合がある
- CREDITS_USED_COMPUTE
- 時間内にウェアハウスに使用されたクレジットの数
- CREDITS_USED_CLOUD_SERVICES
- 時間内にクラウドサービスに使用されたクレジットの数
SQLでクレジット使用状況を確認してみましょう。
ウェアハウス別クレジット使用状況
ウェアハウスごとに当月消費したクレジットの合計、平均、時間数をクエリします。
select warehouse_name, sum(credits_used) as total_credits_used, avg(credits_used) as average_credits_used, count(credits_used) as hours_credits_used from WAREHOUSE_METERING_HISTORY where start_time >= date_trunc(month, current_date) group by warehouse_name order by warehouse_name ;
多くのコンピューティングリソースクレジットを消費したウェアハウスを検索
コンピューティングリソースクレジットの消費が多い順にウェアハウスをソートします。
select warehouse_name, sum(credits_used_compute) as credits_used_compute, sum(credits_used_cloud_services) as credits_used_cloud_services, sum(credits_used) as credits_used from WAREHOUSE_METERING_HISTORY where start_time >= date_trunc(month, current_date) group by warehouse_name order by credits_used_compute desc ;
METERING_HISTORY
データをプレビュー
サービスタイプごとに1時間単位のクレジット使用状況をクエリできます。
SQLでクレジット使用状況を確認してみましょう。
特定ウェアハウスのクレジット使用状況
COMPUTE_WHの直近1週間の履歴をクエリします。
select name, service_type, start_time, end_time, credits_used from METERING_HISTORY where name = 'COMPUTE_WH' and start_time >= timestampadd(week, -1, current_timestamp) order by start_time ;
多くのクラウドサービスリソースを消費している時間帯を検索
クラウドサービスクレジットの消費が多い順に時間帯をソートします。
select hour(start_time) as hour, sum(credits_used_cloud_services) as credits_used_cloud_services, sum(credits_used_compute) as credits_used_compute, sum(credits_used) as credits_used from METERING_HISTORY where start_time >= timestampadd(week, -1, current_timestamp) group by hour order by credits_used_cloud_services desc ;
METERING_DAILY_HISTORY
データをプレビュー
サービスタイプごとに日単位のクレジット使用状況をクエリできます。
本ビューでは、クラウドサービス用に調整されたクレジット数を知ることができます。
クラウドサービスは、コンピューティングリソースの1日の使用量の10%を超えた場合にのみ請求されますので、
10%を超えない分は調整(減額)されます。
以下の2つの項目で調整されたクレジット数と請求されたクレジット総数を確認することができます。
- CREDITS_ADJUSTMENT_CLOUD_SERVICES
- クラウドサービス用に調整されたクレジットの数
- 負の値(例: -9)
- CREDITS_BILLED
- 当日アカウントに対して請求されたクレジットの総数
- CREDITS_USED_COMPUTEとCREDITS_USED_CLOUD_SERVICESとCREDITS_ADJUSTMENT_CLOUD_SERVICESの合計
SQLでクレジット使用状況を確認してみましょう。
サービスタイプ別クレジット使用状況
サービスタイプごとに直近1週間で消費したクレジットの合計、平均、日数をクエリします。
select service_type, sum(credits_used) as total_credits_used, avg(credits_used) as average_credits_used, count(credits_used) as days_credits_used from METERING_DAILY_HISTORY where usage_date >= timestampadd(week, -1, current_timestamp) group by service_type order by service_type ;
特定サービスタイプのクレジット使用状況
WAREHOUSE_METERINGの直近1週間の履歴をクエリします。
select service_type, usage_date, credits_used_compute, credits_used_cloud_services, credits_used, credits_adjustment_cloud_services, credits_billed, (credits_used_cloud_services > credits_used_compute * 0.1) as over_10per from METERING_DAILY_HISTORY where usage_date >= timestampadd(week, -1, current_timestamp) and service_type = 'WAREHOUSE_METERING' order by service_type, usage_date ;
QUERY_HISTORY
データをプレビュー
クエリごとにクラウドサービスクレジットの使用状況をクエリできます。
※本ビューは項目が多いため、上図では「データをプレビュー」ではなく主要な項目をクエリしています。
SQLでクレジット使用状況を確認してみましょう。
クエリタイプ別クラウドサービスクレジット使用状況
クエリタイプごとに直近1ヶ月で消費したクレジットの合計、平均、日数をクエリします。
select query_type, sum(credits_used_cloud_services) as cs_credits, count(query_type) as num_queries from QUERY_HISTORY where start_time >= timestampadd(month, -1, current_timestamp) group by query_type order by cs_credits desc limit 10 ;
特定クエリタイプのクラウドサービスクレジット使用状況
COPYの直近1ヶ月の履歴をクエリします。
select credits_used_cloud_services, query_text, database_name, schema_name, warehouse_name, warehouse_size, cluster_number from QUERY_HISTORY where start_time >= timestampadd(month, -1, current_timestamp) and query_type = 'COPY' order by credits_used_cloud_services desc limit 10 ;
Snowsightによる可視化
Snowflakeの新しいウェブインターフェイスではSnowsightを使用することでクエリ結果を可視化できます。
以下のようにクレジット使用状況を可視化するといった活用も可能です。
Snowsightに関する記事もありますので良ければ参考にしてみてください。
まとめ
以上、SQLでクレジットの使用状況を確認してみました。
ウェブインターフェイス編と同様に特別な準備作業の必要もなく、
通常のSQLと同じ感覚で簡単に確認することができました。
ウェブインターフェイスで大まかな概算を確認し、SQLで詳細の確認や集計を行う、
といった使い分けができそうだと感じました。
Snowsightで可視化することでコスト課題の洗い出しなどにも活用できそうですね。
参考
- Snowflake仮想ウェアハウス、ストレージ、クラウドサービスの使用について — Snowflake Documentation
- WAREHOUSE_METERING_HISTORY ビュー — Snowflake Documentation
- METERING_HISTORY ビュー — Snowflake Documentation
- METERING_DAILY_HISTORY ビュー — Snowflake Documentation
- QUERY_HISTORY ビュー — Snowflake Documentation
- アカウントの使用 — Snowflake Documentation