コスト帰属¶
組織は、Snowflakeの使用コストを組織内の論理的な単位(たとえば、異なる部門、環境、プロジェクトなど)に割り当てることができます。このチャージバックまたはショーバックモデルは、アカウント目的に有用であり、コスト削減を可能にするコントロールや最適化によって恩恵を受けることができる組織の領域をピンポイントで特定します。
コストを部門やプロジェクトなどの異なるグループに帰属させるには、以下の推奨アプローチを使用します。
オブジェクトタグ を使用して、リソースやユーザーを部門やプロジェクトに関連付けます。
クエリタグ を使用して、複数の部門に属するユーザーに代わって同じアプリケーションでクエリを実行する場合に、個々のクエリを部門またはプロジェクトに関連付けます。
コスト帰属シナリオのタイプ¶
以下のようなコスト帰属のシナリオは、最もよく遭遇するものです。これらのシナリオでは、コストが発生するリソースの例としてウェアハウスが使われています。
単一のコストセンターまたは部門のみが使用するリソース: この例では、オブジェクトタグを使用してウェアハウスを部門に関連付けしています。これらのオブジェクトタグを使って、ウェアハウスで発生したコストを完全にその部門に属性付けることができます。
複数の部門のユーザーが共有するリソース: この例は、異なる部門のユーザーが共有するウェアハウスです。この場合、オブジェクトタグを使用して、各ユーザーを部門に関連付けます。クエリのコスト帰属がユーザーに設定されます。ユーザーに割り当てられたオブジェクトタグを使用して、部門別にコストを分類できます。
異なる部門のユーザーが共有するアプリケーションやワークフロー: この例は、ユーザーに代わってクエリを発行するアプリケーションです。この場合、アプリケーションによって実行される各クエリには、そのクエリを実行するユーザーのチームまたはコストセンターを識別するクエリタグが割り当てられます。
次のセクションでは、アカウントにオブジェクトタグをセットする方法を説明し、それぞれのコスト帰属状況に関する詳細を説明しています。
SQL でのタグ別のコスト表示¶
コスト帰属は、アカウント内または組織内のアカウント間で設定できます。
アカウント内でのコスト帰属の設定
ACCOUNT_USAGE スキーマの以下のビューをクエリすることで、アカウント内のコスト帰属を設定できます。
TAG_REFERENCES ビュー: タグを持つオブジェクト(ウェアハウスやユーザーなど)を識別します。
WAREHOUSE_METERING_HISTORY ビュー: ウェアハウスのクレジットの使用状況を入力します。
QUERY_ATTRIBUTION_HISTORY ビュー: クエリの計算コストを入力します。クエリあたりのコストは、クエリを実行するためのウェアハウスのクレジット使用量です。
このビューの使い方については、 QUERY_ATTRIBUTION_HISTORY ビューについて をご覧ください。
組織内の複数のアカウントへのコスト帰属の設定
組織内では、 組織アカウント から ORGANIZATION_USAGE スキーマのビューでクエリを実行することで、 単一の部署 によって排他的に使用されるリソースのコスト帰属を設定することもできます。
注釈
ORGANIZATION_USAGE スキーマでは、TAG_REFERENCES ビューは組織アカウントでのみ使用できます。
QUERY_ATTRIBUTION_HISTORY ビューは、アカウントの ACCOUNT_USAGE スキーマでのみ使用できます。組織全体に相当するビューはありません。
次のセクションでは、 一般的なコスト帰属の状況 をいくつか挙げて、コスト帰属を設定する方法を説明します。
異なる部門にコスト帰属を設定する必要があるアプリケーションで使用されるリソース¶
このセクションの例では、Snowflakeを使用する1つまたは複数のアプリケーションのコストを計算しています。
この例では、これらのアプリケーションが、実行されるすべてのクエリに対してアプリケーションを識別するクエリタグをセットすることを想定しています。セッション内のクエリにクエリタグをセットするには、 ALTER SESSION コマンドを実行します。例:
ALTER SESSION SET QUERY_TAG = 'COST_CENTER=finance';
これにより、 COST_CENTER=finance
タグがセッション中に実行される後続のすべてのクエリに関連付けられます。
そして、クエリタグを使用して、これらのクエリで発生したコストを適切な部門にトレースバックすることができます。
次のセクションでは、このアプローチの使用例を示します。
部門別のクエリのコストの計算¶
以下の例では、財務部の クエリアクセラレーションサービス に使用されたクレジットと計算クレジットを計算しています。これは、実行された元のクエリに COST_CENTER=finance
クエリタグが適用されているかどうかによって異なります。
コストにはアイドルタイムが 含まれていない 点に注意してください。
SELECT
query_tag,
SUM(credits_attributed_compute) AS compute_credits,
SUM(credits_used_query_acceleration) AS qas
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY
WHERE query_tag = 'COST_CENTER=finance'
GROUP BY query_tag;
+---------------------+-----------------+------+
| QUERY_TAG | COMPUTE_CREDITS | QAS |
|---------------------+-----------------|------|
| COST_CENTER=finance | 0.00576115 | null |
+---------------------+-----------------+------+
クエリタグ別のクエリのコストの計算(アイドル時間を除く)¶
次の例では、クエリタグ別にクエリのコストを計算し、タグのないクエリを含めています(「タグなし」で識別)。
SELECT
COALESCE(NULLIF(query_tag, ''), 'untagged') AS tag,
SUM(credits_attributed_compute) AS compute_credits,
SUM(credits_used_query_acceleration) AS qas
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY
WHERE start_time >= DATEADD(MONTH, -1, CURRENT_DATE)
GROUP BY tag
ORDER BY compute_credits DESC;
+-------------------------+-----------------+------+
| TAG | COMPUTE_CREDITS | QAS |
|-------------------------+-----------------+------+
| untagged | 3.623173449 | null |
| COST_CENTER=engineering | 0.531431948 | null |
|-------------------------+-----------------+------+
クエリタグ別のクエリのコストの計算(アイドル時間を含む)¶
次の例では、クエリごとのコストに含まれないアイドル時間を、各部門のウェアハウスの使用量に比例して配分しています。
WITH
wh_bill AS (
SELECT SUM(credits_used_compute) AS compute_credits
FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY
WHERE start_time >= DATE_TRUNC('MONTH', CURRENT_DATE)
AND start_time < CURRENT_DATE
),
tag_credits AS (
SELECT
COALESCE(NULLIF(query_tag, ''), 'untagged') AS tag,
SUM(credits_attributed_compute) AS credits
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY
WHERE start_time >= DATEADD(MONTH, -1, CURRENT_DATE)
GROUP BY tag
),
total_credit AS (
SELECT SUM(credits) AS sum_all_credits
FROM tag_credits
)
SELECT
tc.tag,
tc.credits / t.sum_all_credits * w.compute_credits AS attributed_credits
FROM tag_credits tc, total_credit t, wh_bill w
ORDER BY attributed_credits DESC;
+-------------------------+--------------------+
| TAG | ATTRIBUTED_CREDITS |
+-------------------------+--------------------|
| untagged | 9.020031304 |
| COST_CENTER=finance | 1.027742521 |
| COST_CENTER=engineering | 1.018755812 |
| COST_CENTER=marketing | 0.4801370376 |
+-------------------------+--------------------+
Snowsight でのタグ別のコスト表示¶
cost_center
タグのあるリソースの使用を報告すると、コストを帰属させることができます。このデータには Snowsight でアクセスできます。
ACCOUNT_USAGE スキーマへのアクセス権 を持つロールに切り替えます。
Admin » Cost Management に移動します。
Consumption を選択します。
Tags ドロップダウンから、
cost_center
タグを選択します。特定のコストセンターに焦点を当てるには、タグの値のリストから値を選択します。
Apply を選択します。
Snowsight でのフィルタリングに関する詳細については、 タグ別にフィルターする をご参照ください。
QUERY_ATTRIBUTION_HISTORY ビューについて¶
QUERY_ATTRIBUTION_HISTORY ビュー を使用して、クエリに基づくコスト帰属を設定することができます。クエリあたりのコストは、クエリを実行するためのウェアハウスのクレジット使用量です。このコストには、クエリ実行の結果発生するその他のクレジット使用量は含まれません。例えば、以下のものはクエリコストに含まれません:
データ転送コスト
ストレージコスト
クラウドサービスコスト
サーバーレス機能のコスト
AI サービスによって処理されるトークンのコスト
同時に実行されるクエリの場合、ウェアハウスのコストは、与えられた時間間隔におけるリソース消費の加重平均に基づいて、個々のクエリに帰属します。
クエリあたりのコストには、ウェアハウスの アイドル時間 は含まれていません。アイドル時間とは、ウェアハウス内でクエリが実行されていない時間のことで、ウェアハウスレベルで測定することができます。
その他のクエリ例¶
次のセクションでは、コスト帰属に使用できる追加のクエリを示します。
類似クエリのグループ化¶
反復または類似のクエリの場合は、 query_hash
または query_parameterized_hash
を使用して、クエリごとにコストをグループ化します。
当月で最も高額な反復クエリを検索するには、以下のステートメントを実行します:
SELECT query_parameterized_hash,
COUNT(*) AS query_count,
SUM(credits_attributed_compute) AS total_credits
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY
WHERE start_time >= DATE_TRUNC('MONTH', CURRENT_DATE)
AND start_time < CURRENT_DATE
GROUP BY query_parameterized_hash
ORDER BY total_credits DESC
LIMIT 20;
クエリ ID に基づく追加クエリについては、 例 を参照してください。
階層クエリのコスト帰属の設定¶
複数の階層クエリを発行するストアドプロシージャの場合、プロシージャのルートクエリ ID を使用して、プロシージャの帰属クエリコストを計算できます。
ストアドプロシージャのルートクエリ ID を見つけるには、 ACCESS_HISTORY ビュー を使用します。例えば、ストアドプロシージャのルートクエリ ID を見つけるには、
query_id
を設定し、以下のステートメントを実行します:SET query_id = '<query_id>'; SELECT query_id, parent_query_id, root_query_id, direct_objects_accessed FROM SNOWFLAKE.ACCOUNT_USAGE.ACCESS_HISTORY WHERE query_id = $query_id;
詳細については、 例: ストアドプロシージャによる祖先クエリ をご参照ください。
プロシージャ全体のクエリコストを合計するには、
< root_query_id >
を置き換え、以下のステートメントを実行します:SET query_id = '<root_query_id>'; SELECT SUM(credits_attributed_compute) AS total_attributed_credits FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY WHERE (root_query_id = $query_id OR query_id = $query_id);