비용 귀속¶
조직에서는 그와 같은 비용을 조직 내의 논리 단위(예: 부서, 환경, 프로젝트)로 돌려 Snowflake를 사용하는 비용에 대한 인사이트를 얻을 수 있습니다. 이 차지백 또는 쇼백 모델은 회계 목적으로 유용하지만, 이 모델을 통해 조직에서 가장 많은 비용을 지출하는 단위를 식별할 수도 있습니다. 이러한 인사이트는 조직에서 비용 절감을 위한 제어와 최적화로부터 이익을 얻을 수 있는 영역을 정확히 파악하는 데 도움이 됩니다.
개별 리소스의 비용 귀속¶
부서, 환경 또는 프로젝트와 같은 다양한 그룹화에 비용을 귀속시키는 가장 직접적이고 강력한 방법은 오브젝트 태깅 기능을 사용하여 특정 리소스에 태그를 지정하는 것입니다. 이 전략에서는 관리자가 태그(예: cost_center
)를 만든 다음 태그의 가능한 값 목록(예: sales
, finance
)을 정의합니다. 이 예제에서 각 비용 센터는 고유한 태그 값을 받습니다. 그러면 태그/값 조합이 비용 센터에서 사용하는 리소스에 할당됩니다. 이러한 리소스는 크레딧을 사용하므로 태그 값을 기준으로 분류된 보고서를 실행할 수 있습니다. 이 태그 값은 조직 내의 특정 그룹화에 직접적으로 대응하므로, 비용의 출처를 정확하게 귀속시킬 수 있습니다.
오브젝트 태깅을 사용하면 계정과 같은 일반적인 항목이나 테이블과 같은 구체적인 항목을 기반으로 비용의 귀속시킬 수 있습니다. 태그 가능 오브젝트 가 전부 비용을 누적하는 것은 아닙니다. 비용 관리 관점에서, 오브젝트에 태그를 지정하는 것은 해당 오브젝트와 관련된 사용량 또는 비용 데이터가 포함된 스키마 뷰가 있는 경우에만 타당합니다. Snowflake 사용량 및 비용 뷰 목록은 전체 비용 살펴보기 섹션을 참조하십시오.
귀속 워크플로¶
오브젝트 태그를 사용하여 비용을 귀속시키는 것은 세 가지 기본 작업으로 구성됩니다.
태깅 전략을 설계하고 적절한 태그를 만듭니다.
올바른 태그/값 페어로 리소스에 태그를 지정합니다.
사용량 및 태그 데이터를 기반으로 보고서를 실행합니다.
이 워크플로를 설명하는 데 도움이 되도록 다음과 같은 Snowflake 계정을 고려하십시오.
영업 및 재무라는 두 가지 비용 센터가 있는 계정.
세 개의 웨어하우스가 있는 계정. 영업 부서에서는 Warehouse1과 Warehouse2를 사용하고 재무 부서에서는 Warehouse3를 사용합니다.

이 예제에서는 각 웨어하우스와 관련된 웨어하우스 비용을 알맞은 부서에 귀속시키는 것이 목표입니다.
참고
다음 예제에서는 tag_admin
역할에 알맞은 권한이 부여되었다고 가정합니다. 조직에서는 세분화된 태깅 권한 을 사용하여 안전한 태깅 전략을 개발할 수 있습니다.
- 작업 1: 태깅 전략 설계 및 알맞은 태그 만들기
이 예제의 경우, 적절한 권한이 있는 관리자가
cost_center
라는 단일 태그를 만듭니다.USE ROLE tag_admin; USE SCHEMA my_db.my_schema; CREATE TAG cost_center;
- 작업 2: 올바른 태그/값 페어로 오브젝트에 태그 지정
태그 관리자는 적절한 태그/값 페어를 웨어하우스에 적용합니다. 예를 들어 영업 부서에서
warehouse1
과warehouse2
를 모두 사용하므로, 동일한 태그/값 조합이 이 두 리소스에 적용됩니다.USE ROLE tag_admin; ALTER WAREHOUSE warehouse1 SET TAG cost_center='SALES'; ALTER WAREHOUSE warehouse2 SET TAG cost_center='SALES'; ALTER WAREHOUSE warehouse3 SET TAG cost_center='FINANCE';
참고
관리자가 오브젝트에 설정할 수 있는 값을 제어하려는 경우, 태그를 만들 때 선택적
allowed_values
매개 변수를 사용할 수 있습니다. 자세한 내용은 CREATE TAG 섹션을 참조하십시오.- 작업 3: 사용량 및 태그 데이터를 기반으로 보고서 실행
cost_center
태그가 있는 리소스 사용에 관해 보고하여 비용의 출처를 밝힐 수 있습니다. 이 데이터는 Snowsight 에서 구하거나SNOWFLAKE.ACCOUNT_USAGE
스키마를 쿼리하여 구할 수 있습니다.- Snowsight:
ACCOUNT_USAGE 스키마에 대한 액세스 권한 이 있는 역할로 전환합니다.
Admin » Cost Management 으로 이동합니다.
Consumption 을 선택합니다.
Tags 드롭다운에서
cost_center
태그를 선택합니다.특정 비용 센터에 초점을 맞추려면 태그 값 목록에서 값을 선택하십시오.
Apply 를 선택합니다.
Snowsight 에서의 필터링에 대한 자세한 내용은 태그로 필터링하기 섹션을 참조하십시오
- SQL:
Account Usage 스키마는 리소스 사용량과 스키마의 태그에 대한 데이터를 모두 포함합니다. 이 스키마의 뷰에 대해 쿼리를 실행하면 웨어하우스의 크레딧 사용이 올바른 비용 센터에 귀속됩니다.
USE snowflake.account_usage; SELECT tag_value AS cost_center, SUM(credits_used) FROM warehouse_metering_history, tag_references WHERE warehouse_name=object_name AND tag_name='COST_CENTER' GROUP BY 1 ORDER BY 2 DESC;
이 쿼리는 다음과 같은 보고서를 반환합니다.
COST_CENTER
CREDITS_USED
SALES
17.173333333
FINANCE
8.14444444
특정 월의 모든 웨어하우스에 대한 비용 기여도를 태그 및 태그 값과 함께 볼 수 있습니다. 이 쿼리는 태그가 지정되지 않은 웨어하우스도 식별합니다.
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 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 | +-------------+-------------+-----------------+
오브젝트 태그 사용에 대한 자세한 내용은 오브젝트 태그 지정 섹션을 참조하십시오.
쿼리 비용 특성¶
QUERY_ATTRIBUTION_HISTORY 뷰 를 사용하여 쿼리를 기반으로 비용 특성을 구할 수 있습니다. 쿼리당 비용은 쿼리를 실행하는 데 사용된 웨어하우스 크레딧입니다. 이 비용에는 쿼리 실행으로 인해 발생하는 다른 크레딧 사용은 포함되지 않습니다. 예를 들어, 다음은 쿼리 비용에 포함되지 않습니다.
데이터 전송 비용
저장소 비용
클라우드 서비스 비용
서버리스 기능 비용
AI 서비스에서 처리하는 토큰에 대한 비용
동시 실행 쿼리의 경우, 웨어하우스의 비용은 주어진 시간 간격 동안 리소스 소비량의 가중 평균을 기준으로 개별 쿼리의 특성에 따라 결정됩니다.
쿼리당 비용에는 웨어하우스의 유휴 시간 이 포함되지 않습니다. 유휴 시간이란 웨어하우스에서 쿼리가 실행되지 않는 기간으로, 웨어하우스 수준에서 측정할 수 있습니다.
태그, 사용자 및 쿼리별 비용 특성¶
태그, 사용자 또는 쿼리(예: 반복 쿼리)별로 웨어하우스 및 쿼리 비용의 특성을 구할 수 있습니다.
쿼리 태그를 기반으로 한 웨어하우스 비용 특성¶
QUERY_TAG 매개 변수를 사용하여 다양한 워크로드에 비용을 할당할 수 있습니다. 쿼리 태그는 작업 부하나 쿼리 세트에 대해 세션 수준에서 할당될 수 있습니다. 태그 기반 속성에 대한 자세한 내용은 기여 워크플로 섹션을 참조하십시오.
세션에 대한 쿼리 태그를 설정하려면 다음 단계를 따릅니다.
태그를 생성합니다. 예를 들어, 재무팀에 대한 태그를 생성합니다.
CREATE TAG finance;
현재 세션에 대한 쿼리 태그를 설정합니다.
ALTER SESSION SET query_tag = finance;
finance
태그는 세션 동안 실행되는 모든 쿼리와 연결됩니다.현재 월에 대한 모든 태그가 지정된 쿼리의 웨어하우스 비용을 보려면 다음 문을 실행합니다. 이 쿼리는 조정을 위해 태그 전체에 걸쳐 전체 웨어하우스 컴퓨팅 비용(유휴 시간 포함)을 할당합니다.
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 >= DATE_TRUNC('MONTH', CURRENT_DATE) AND start_time < 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;
웨어하우스 비용의 사용자 기반 특성¶
사용자별로 웨어하우스 비용 특성을 구할 수 있습니다. 예를 들어, 이번 달의 각 사용자별 총 웨어하우스 비용을 확인하려면 다음 문을 실행합니다.
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 |
|-----------+--------------------|
| JSMITH | 17.173333333 |
|-----------+--------------------|
| MJONES | 8.14444444 |
|-----------+--------------------|
| SYSTEM | 5.33985393 |
+-----------+--------------------+
반복 쿼리의 쿼리 비용¶
반복되거나 유사한 쿼리의 경우 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);