조직은 조직 내 논리적 단위(예: 다른 부서, 환경 또는 프로젝트)에 Snowflake 사용 비용을 할당할 수 있습니다. 이 차지백 또는 쇼백 모델은 회계 목적에 유용하며, 조직에서 제어 및 최적화를 통해 비용을 절감할 수 있는 영역을 정확히 찾아냅니다.
부서 또는 프로젝트와 같은 여러 그룹에 비용을 특성으로 지정하려면 다음 권장 방법을 사용하십시오.
SQL 로 태그별 비용 뷰 보기
계정 내 또는 조직의 계정 간에 비용을 특성으로 지정할 수 있습니다.
계정 내 비용 특성 지정하기
ACCOUNT_USAGE 스키마에서 다음 뷰를 쿼리하여 계정 내 비용을 특성으로 지정할 수 있습니다.
조직 내 계정 간 비용 특성 부여하기
조직 내에서, 조직 계정 에서 ORGANIZATION_USAGE 스키마의 뷰를 쿼리하여 단일 부서에서만 사용하는 리소스에 대한 비용을 특성으로 지정할 수도 있습니다.
다음 섹션에서는 일반적인 비용 배분 시나리오 에 대한 비용 배분 방법을 설명합니다.
부서에서 공유하지 않는 리소스
부서별로 비용을 특성으로 지정하고 싶고 각 부서가 전용 웨어하우스 세트를 사용한다고 가정해 보겠습니다.
웨어하우스에 cost_center 태그를 지정하여 웨어하우스를 소유한 부서를 식별한 경우, object_id 및 warehouse_id 열의 ACCOUNT_USAGE TAG_REFERENCES 뷰 를 WAREHOUSE_METERING_HISTORY 뷰 와 조인하여 웨어하우스별 사용 정보를 얻을 수 있으며, tag_value 열을 사용하여 해당 웨어하우스를 소유한 부서를 식별할 수 있습니다.
다음 SQL 문은 이 조인을 수행합니다.
SELECT
TAG_REFERENCES . tag_name ,
COALESCE ( TAG_REFERENCES . tag_value , 'untagged' ) AS tag_value ,
SUM ( WAREHOUSE_METERING_HISTORY . credits_used_compute ) AS total_credits
FROM
SNOWFLAKE . ACCOUNT_USAGE . WAREHOUSE_METERING_HISTORY
LEFT JOIN SNOWFLAKE . ACCOUNT_USAGE . TAG_REFERENCES
ON WAREHOUSE_METERING_HISTORY . warehouse_id = TAG_REFERENCES . object_id
AND TAG_REFERENCES . domain = 'WAREHOUSE'
WHERE
WAREHOUSE_METERING_HISTORY . start_time >= DATE_TRUNC ( 'MONTH' , DATEADD ( MONTH , - 1 , CURRENT_DATE ))
AND WAREHOUSE_METERING_HISTORY . start_time < DATE_TRUNC ( 'MONTH' , CURRENT_DATE )
GROUP BY TAG_REFERENCES . tag_name , COALESCE ( TAG_REFERENCES . tag_value , 'untagged' )
ORDER BY total_credits DESC ;
+-------------+-------------+-----------------+
| TAG_NAME | TAG_VALUE | TOTAL_CREDITS |
|-------------+-------------+-----------------|
| NULL | untagged | 20.360277159 |
| COST_CENTER | Sales | 17.173333333 |
| COST_CENTER | Finance | 8.14444444 |
+-------------+-------------+-----------------+
조직 계정 의 ORGANIZATION_USAGE 스키마에 있는 뷰를 사용하여 유사한 쿼리를 실행하여 조직의 모든 계정에 대해 동일한 특성을 수행할 수 있습니다. 나머지 쿼리는 변경되지 않습니다.
SELECT
TAG_REFERENCES . tag_name ,
COALESCE ( TAG_REFERENCES . tag_value , 'untagged' ) AS tag_value ,
SUM ( WAREHOUSE_METERING_HISTORY . credits_used_compute ) AS total_credits
FROM
SNOWFLAKE . ORGANIZATION_USAGE . WAREHOUSE_METERING_HISTORY
LEFT JOIN SNOWFLAKE . ORGANIZATION_USAGE . TAG_REFERENCES
ON WAREHOUSE_METERING_HISTORY . warehouse_id = TAG_REFERENCES . object_id
AND TAG_REFERENCES . domain = 'WAREHOUSE'
AND tag_database = 'COST_MANAGEMENT' AND tag_schema = 'TAGS'
WHERE
WAREHOUSE_METERING_HISTORY . start_time >= DATE_TRUNC ( 'MONTH' , DATEADD ( MONTH , - 1 , CURRENT_DATE ))
AND WAREHOUSE_METERING_HISTORY . start_time < DATE_TRUNC ( 'MONTH' , CURRENT_DATE )
GROUP BY TAG_REFERENCES . tag_name , COALESCE ( TAG_REFERENCES . tag_value , 'untagged' )
ORDER BY total_credits DESC ;
다른 부서의 사용자가 공유하는 리소스
여러 부서의 사용자가 동일한 웨어하우스를 공유하며 각 부서에서 사용한 크레딧을 세분화하고 싶다고 가정해 보겠습니다. 사용자에게 cost_center 태그를 지정하여 소속 부서를 식별할 수 있으며, TAG_REFERENCES 뷰 로 QUERY_ATTRIBUTION_HISTORY 뷰 에 조인할 수 있습니다.
참고
이 데이터는 한 번에 1개의 계정에 대해서만 가져올 수 있습니다. 조직의 여러 계정에서 이 데이터를 검색하는 쿼리를 실행할 수 없습니다.
다음 섹션에서는 공유 리소스에 대한 비용 특성 부여를 위한 SQL 문의 예를 제공합니다.
지난 달 사용자 쿼리 비용 계산하기
다음 SQL 문은 지난 달의 비용을 계산합니다.
이 예제에서, 유휴 시간 은 사용자의 사용량에 비례하여 사용자에게 분배됩니다.
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
),
user_credits AS (
SELECT user_name , SUM ( credits_attributed_compute ) AS credits
FROM SNOWFLAKE . ACCOUNT_USAGE . QUERY_ATTRIBUTION_HISTORY
WHERE start_time >= DATE_TRUNC ( 'MONTH' , CURRENT_DATE )
AND start_time < CURRENT_DATE
GROUP BY user_name
),
total_credit AS (
SELECT SUM ( credits ) AS sum_all_credits
FROM user_credits
)
SELECT
u . user_name ,
u . credits / t . sum_all_credits * w . compute_credits AS attributed_credits
FROM user_credits u , total_credit t , wh_bill w
ORDER BY attributed_credits DESC ;
+-----------+--------------------+
| USER_NAME | ATTRIBUTED_CREDITS |
|-----------+--------------------+
| FINUSER | 6.603575468 |
| SALESUSER | 4.321378049 |
| ENGUSER | 0.6217131392 |
|-----------+--------------------+
유휴 시간 없이 부서별 사용자 쿼리 비용 계산하기
다음 예제에서는 해당 부서의 사용자가 실행한 쿼리를 통해 각 부서의 컴퓨팅 비용을 특성으로 지정합니다. 이 쿼리는 부서를 식별하는 태그가 있는 사용자 오브젝트에 따라 달라집니다.
WITH joined_data AS (
SELECT
tr . tag_name ,
tr . tag_value ,
qah . credits_attributed_compute ,
qah . start_time
FROM SNOWFLAKE . ACCOUNT_USAGE . TAG_REFERENCES tr
JOIN SNOWFLAKE . ACCOUNT_USAGE . QUERY_ATTRIBUTION_HISTORY qah
ON tr . domain = 'USER' AND tr . object_name = qah . user_name
)
SELECT
tag_name ,
tag_value ,
SUM ( credits_attributed_compute ) AS total_credits
FROM joined_data
WHERE start_time >= DATEADD ( MONTH , - 1 , CURRENT_DATE )
AND start_time < CURRENT_DATE
GROUP BY tag_name , tag_value
ORDER BY tag_name , tag_value ;
+-------------+-------------+-----------------+
| TAG_NAME | TAG_VALUE | TOTAL_CREDITS |
|-------------+-------------+-----------------|
| COST_CENTER | engineering | 0.02493688426 |
| COST_CENTER | finance | 0.2281084988 |
| COST_CENTER | marketing | 0.3686840545 |
|-------------+-------------+-----------------|
유휴 시간 없이 사용자의 쿼리 비용 계산하기
다음 SQL 문은 지난 한 달 동안의 사용자당 비용을 계산(유휴 시간 제외)한 것입니다.
SELECT user_name , SUM ( credits_attributed_compute ) AS credits
FROM SNOWFLAKE . ACCOUNT_USAGE . QUERY_ATTRIBUTION_HISTORY
WHERE
start_time >= DATEADD ( MONTH , - 1 , CURRENT_DATE )
AND start_time < CURRENT_DATE
GROUP BY user_name ;
+-----------+--------------------+
| USER_NAME | ATTRIBUTED_CREDITS |
|-----------+--------------------|
| JSMITH | 17.173333333 |
| MJONES | 8.14444444 |
| SYSTEM | 5.33985393 |
+-----------+--------------------+
여러 부서에 비용을 특성으로 지정해야 하는 애플리케이션에서 사용하는 리소스
이 섹션의 예제에서는 Snowflake로 구동되는 1개 이상의 애플리케이션에 대한 비용을 계산합니다.
이 예에서는 이러한 애플리케이션이 실행되는 모든 쿼리에 대해 애플리케이션을 식별하는 쿼리 태그를 설정한다고 가정합니다. 세션의 쿼리에 대한 쿼리 태그를 설정하려면 ALTER SESSION 명령을 실행합니다. 예:
ALTER SESSION SET QUERY_TAG = 'COST_CENTER=finance' ;
이렇게 하면 COST_CENTER=finance 태그가 세션 중에 실행되는 모든 후속 쿼리와 연결됩니다.
그런 다음 쿼리 태그를 사용하여 이러한 쿼리로 인해 발생한 비용을 해당 부서로 추적할 수 있습니다.
다음 섹션에서는 이 접근법을 사용하는 예제를 제공합니다.
부서별 쿼리 비용 계산하기
다음 예는 재무 부서를 위한 Query Acceleration Service 에 사용된 컴퓨팅 크레딧과 크레딧을 계산하는 예입니다. 이는 실행된 원래 쿼리에 적용된 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 |
+-------------------------+--------------------+
QUERY_ATTRIBUTION_HISTORY 뷰 정보
QUERY_ATTRIBUTION_HISTORY 뷰 를 사용하여 쿼리를 기반으로 비용 특성을 구할 수 있습니다. 쿼리당 비용은 쿼리를 실행하는 데 사용된 웨어하우스 크레딧입니다. 이 비용에는 쿼리 실행으로 인해 발생하는 다른 크레딧 사용은 포함되지 않습니다. 예를 들어, 다음은 쿼리 비용에 포함되지 않습니다.
데이터 전송 비용
저장소 비용
클라우드 서비스 비용
서버리스 기능 비용
AI 서비스에서 처리하는 토큰에 대한 비용
동시 실행 쿼리의 경우, 웨어하우스의 비용은 주어진 시간 간격 동안 리소스 소비량의 가중 평균을 기준으로 개별 쿼리의 특성에 따라 결정됩니다.
쿼리당 비용에는 웨어하우스의 유휴 시간 이 포함되지 않습니다. 유휴 시간이란 웨어하우스에서 쿼리가 실행되지 않는 기간으로, 웨어하우스 수준에서 측정할 수 있습니다.