Snowflakeのアカウント全体のクレジット使用状況を確認できるACCOUNT_USAGEのview2種類を試してみた #SnowflakeDB

2022.12.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

※本エントリは、Snowflakeをもっと使いこなそう! Advent Calendar 2022の17日目の記事となります。

さがらです。

Snowflakeのアカウント全体のクレジット使用状況を確認できるACCOUNT_USAGEのview2種類を試してみたので、その内容をまとめてみます。

本記事で試す2種類のview

本記事では、以下の2種類のアカウント全体のクレジット使用状況を確認できるviewを試します。

  • METERING_DAILY_HISTORY
  • METERING_HISTORY

その他のACCOUNT_USAGEスキーマから参照できるview

SNOWFLAKEデータベースのACCOUNT_USAGEスキーマに格納されているviewの一覧については、こちらの公式Docにまとまっております。

特に、本記事では触れていませんが、以下のviewでも各ウェアハウス・各サーバーレス機能・各クラウドサービスのクレジット情報を確認することが可能です。もし各機能ごとに個別にクレジットの使用状況を知りたい場合には、こちらも参考にしてみてください。

  • AUTOMATIC_CLUSTERING_HISTORY
    • 自動クラスタリングに使用されたクレジットをテーブルごとに確認可能
  • DATABASE_REPLICATION_USAGE_HISTORY
    • データベースのレプリケーションに関する使用されたクレジットをデータベースごとに確認可能
  • MATERIALIZED_VIEW_REFRESH_HISTORY
    • マテリアライズドビューの更新に使用されたクレジットを、各マテリアライズドビューごとに確認可能
  • PIPE_USAGE_HISTORY
    • Snowpipeでの継続的なデータロードにて使用されたクレジットを、各PIPEオブジェクトごとに確認可能
  • QUERY_ACCELERATION_HISTORY
    • 一時的にウェアハウスのリソースを増強できるQuery Accelerationにて使用されたクレジットを、各ウェアハウスごとに確認可能
  • REPLICATION_GROUP_USAGE_HISTORY
    • アカウントレプリケーションで使用されたクレジットを、定めたREPLICATION GROUPごとに確認可能
  • SEARCH_OPTIMIZATION_HISTORY
    • 検索最適化サービスで使用されたクレジットを、各テーブルごとに確認可能
  • SERVERLESS_TASK_HISTORY
    • サーバーレスタスクで使用されたクレジットを、各タスクごとに確認可能
  • WAREHOUSE_METERING_HISTORY
    • ウェアハウスが稼働して使用されたクレジットを、各ウェアハウスごとに確認可能

事前準備

SnowflakeのアカウントはタイムゾーンのデフォルトがAmerica/Los_Angeles(UTC -8:00)で正直使いづらいため、アカウントレベルでタイムゾーンをUTCに変更しておきます。

use role accountadmin;
alter account set timezone = 'UTC';

このタイムゾーンを変更しておくことで、本記事で確認するMETERING_HISTORYのSTART_TIME列がEND_TIME列がUTCでの表記となるため、使いやすくなると思います。

METERING_DAILY_HISTORY

まずは、METERING_DAILY_HISTORYについて見ていきます。

どんなデータが入っているかを見るため、以下のクエリを実行します。

use role accountadmin;
select
    *
from snowflake.account_usage.metering_daily_history
order by usage_date desc;

SERVICE_TYPE列で「WAREHOUSE_METERTING」や「QUERY_ACCELERATION」など、どの機能・サービスでのクレジット使用かがわかり、USAGE_DATEには該当する日付が入っています。

また、実際に消費されるクレジットは、「クラウドサービスでのクレジット使用量」と「ウェアハウスでのクレジット使用量の10%」多いほうで計算される仕様のため、その調整をCREDITS_ADJUSTMENT_CLOUD_SERVICES列で行い、実際に消費されるクレジットはCREDITS_BILLED列に表示されます。(クラウドサービス周りの請求の仕様に関しては、公式Docも併せてご覧ください。)

METERING_HISTORY

続いて、METERING_HISTORYについて見ていきます。

どんなデータが入っているかを見るため、以下のクエリを実行します。

use role accountadmin;
select
    *
from snowflake.account_usage.metering_history
order by start_time desc;

SERVICE_TYPE列があるのはMETERING_DAILY_HISTORYと同じなのですが、こちらはSTART_TIMEEND_TIMEに分けて、1時間毎のクレジット使用状況を記録しています。

また、NAME列では各機能・サービスでの実際のオブジェクト名が記載されており、オブジェクトレベルで消費クレジットを確認することが可能です。

あとは、クラウドサービスに関する消費クレジットもCREDITS_USED_CLOUD_SERVICESとして記録されているのですが、METERING_DAILY_HISTORYと違い、消費クレジットの調整に関する情報はありません。(日次のクレジット消費量から調整している仕様だからですね。)

また、BYTESROWSFILESといった列では、Query Acceleration、自動クラスタリング、Snowpipe、などの機能に関連するレコードの場合、データが入ってきます。(添付図ではQuery Accelerationに関するデータが入っています。)

METERING_DAILY_HISTORYとMETERING_HISTORYの使い分け

ではここで、METERING_DAILY_HISTORYとMETERING_HISTORYの使い分けについて考えてみます。

まず、METERING_DAILY_HISTORYですが、クラウドサービスの利用費用との調整も含め、日毎に使用されたクレジットの総量がCREDITS_BILLED列に記載されているため、アカウントを通して消費したクレジットを正しく管理したい場合には、METERING_DAILY_HISTORYを使用するのが良いと思います。

一方で、METERING_HISTORYですが、こちらはNAME列に実際にクレジットを使用しているオブジェクト名が登録されており、各機能・サービスレベルよりも一つ下のオブジェクトレベルでクレジットの使用状況を確認できます。また、METERING_DAILY_HISTORYと違い時間単位で消費クレジットが記録されているため、各オブジェクトレベルで、どの時間帯にどれだけのクレジットが使用されているのかを確認したい場合には、METERING_HISTORYを使用するのが良いと思います。

最後に

Snowflakeのアカウント全体のクレジット使用状況を確認できるACCOUNT_USAGEのview2種類を試してみました。

どちらも汎用性が高く使えるviewだと思いますので、ぜひ活用してください!