비용 귀속¶
조직은 조직 내 논리적 단위(예: 다른 부서, 환경 또는 프로젝트)에 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
태그가 세션 중에 실행되는 모든 후속 쿼리와 연결됩니다.
그런 다음 쿼리 태그를 사용하여 이러한 쿼리로 인해 발생한 비용을 해당 부서로 추적할 수 있습니다.
다음 섹션에서는 이 접근법을 사용하는 예제를 제공합니다.
부서별 쿼리 비용 계산하기¶
다음 예는 재무 부서를 위한 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 |
+-------------------------+--------------------+
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);