Snowflake에서 비용 귀속

조직에서는 그와 같은 비용을 조직 내의 논리 단위(예: 부서, 환경, 프로젝트)로 돌려 Snowflake를 사용하는 비용에 대한 인사이트를 얻을 수 있습니다. 이 차지백 또는 쇼백 모델은 회계 목적으로 유용하지만, 이 모델을 통해 조직에서 가장 많은 비용을 지출하는 단위를 식별할 수도 있습니다. 이러한 인사이트는 조직에서 비용 절감을 위한 제어와 최적화로부터 이익을 얻을 수 있는 영역을 정확히 파악하는 데 도움이 됩니다.

이 항목의 내용:

개요

Snowflake는 조직이 Snowflake 오브젝트 계층 구조의 어떤 수준에서든 비용의 출처를 파악할 수 있게 해주는 유연한 비용 귀속 기능 세트를 제공합니다. 이러한 기능은 크레딧 사용을 비용 센터, 환경, 프로젝트와 같은 그룹화에 귀속시킬 수 있습니다. Snowflake는 다음과 같은 귀속 전략을 제공합니다.

  • 오브젝트 태깅 은 웨어하우스 또는 데이터베이스와 같은 개별 리소스 사용 비용을 조직 내의 특정 단위에 할당할 수 있는 세분화된 귀속을 제공할 수 있습니다.

  • 쿼리 실행 은 역할, 사용자 또는 쿼리별로 웨어하우스 사용을 귀속시킬 수 있는데, 이는 여러 비용 센터가 동일한 웨어하우스를 공유할 때 특히 유용합니다.

개별 리소스의 비용 귀속

부서, 환경 또는 프로젝트와 같은 다양한 그룹화에 비용을 귀속시키는 가장 직접적이고 강력한 방법은 오브젝트 태깅 기능을 사용하여 특정 리소스에 태그를 지정하는 것입니다. 이 전략에서는 관리자가 태그(예: cost_center)를 만든 다음 태그의 가능한 값 목록(예: sales, finance)을 정의합니다. 이 예제에서 각 비용 센터는 고유한 태그 값을 받습니다. 그러면 태그/값 조합이 비용 센터에서 사용하는 리소스에 할당됩니다. 이러한 리소스는 크레딧을 사용하므로 태그 값을 기준으로 분류된 보고서를 실행할 수 있습니다. 이 태그 값은 조직 내의 특정 그룹화에 직접적으로 대응하므로, 비용의 출처를 정확하게 귀속시킬 수 있습니다.

오브젝트 태깅을 사용하면 계정과 같은 일반적인 항목이나 테이블과 같은 구체적인 항목을 기반으로 비용의 귀속시킬 수 있습니다. 태그 가능 오브젝트 가 전부 비용을 누적하는 것은 아닙니다. 비용 관리 관점에서, 오브젝트에 태그를 지정하는 것은 해당 오브젝트와 관련된 사용량 또는 비용 데이터가 포함된 스키마 뷰가 있는 경우에만 타당합니다. Snowflake 사용량 및 비용 뷰 목록은 Snowflake에서 비용 살펴보기 섹션을 참조하십시오.

귀속 워크플로

오브젝트 태그를 사용하여 비용을 귀속시키는 것은 세 가지 기본 작업으로 구성됩니다.

  1. 태깅 전략을 설계하고 적절한 태그를 만듭니다.

  2. 올바른 태그/값 페어로 리소스에 태그를 지정합니다.

  3. 사용량 및 태그 데이터를 기반으로 보고서를 실행합니다.

이 워크플로를 설명하는 데 도움이 되도록 다음과 같은 Snowflake 계정을 고려하십시오.

  • 영업 및 재무라는 두 가지 비용 센터가 있는 계정.

  • 세 개의 웨어하우스가 있는 계정. 영업 부서에서는 Warehouse1과 Warehouse2를 사용하고 재무 부서에서는 Warehouse3를 사용합니다.

Three warehouses in an account

이 예제에서는 각 웨어하우스와 관련된 웨어하우스 비용을 알맞은 부서에 귀속시키는 것이 목표입니다.

참고

다음 예제에서는 tag_admin 역할에 알맞은 권한이 부여되었다고 가정합니다. 조직에서는 세분화된 태깅 권한 을 사용하여 안전한 태깅 전략을 개발할 수 있습니다.

작업 1: 태깅 전략 설계 및 알맞은 태그 만들기

이 예제의 경우, 적절한 권한이 있는 관리자가 cost_center 라는 단일 태그를 만듭니다.

use role tag_admin;
use schema my_db.my_schema;
create tag cost_center;

작업 2: 올바른 태그/값 페어로 오브젝트에 태그 지정

태그 관리자는 적절한 태그/값 페어를 웨어하우스에 적용합니다. 예를 들어 영업 부서에서 warehouse1warehouse2 를 모두 사용하므로, 동일한 태그/값 조합이 이 두 리소스에 적용됩니다.

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, the Snowflake web interface 에서 구하거나 SNOWFLAKE.ACCOUNT_USAGE 스키마를 쿼리하여 구할 수 있습니다.

Snowsight
  1. ACCOUNTADMIN 역할로 전환합니다.

  2. Admin » Usage 으로 이동합니다.

  3. Tags 드롭다운에서 cost_center 태그를 선택합니다.

  4. 특정 비용 센터에 초점을 맞추려면 태그 값 목록에서 값을 선택하십시오.

  5. 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

오브젝트 태그 사용에 대한 자세한 내용은 오브젝트 태그 지정 섹션을 참조하십시오.

공유 웨어하우스의 비용 귀속

특정한 상황에서는 웨어하우스가 여러 팀 간에 공유되며 팀 사이에서 웨어하우스 비용을 분할해야 합니다. 비용을 구분하는 방법으로는 사용자 기준, 역할 기준 또는 사용자 지정 쿼리 태그 기준으로 구분하는 세 가지가 있습니다. 이들 각각에 대해 간략하게 설명한 후 각 접근 방식에 대한 보고서를 생성하는 데 사용되는 쿼리를 설명합니다.

사용자 기준

가상 웨어하우스에서 실행되는 모든 쿼리는 쿼리를 실행한 사용자와 연결됩니다. 이 데이터는 QUERY_HISTORY 뷰 의 USER_NAME 열에서 사용할 수 있습니다. 이 데이터를 WAREHOUSE_METERING_HISTORY 뷰의 사용량 데이터와 조인하여 웨어하우스 비용을 사용자 기준으로 분석할 수 있습니다.

예를 들어 USER_NAME을 포함하도록 아래 쿼리 를 수정한 경우 보고서는 다음과 같은 형태일 수 있습니다.

USER_NAME

WAREHOUSE_NAME

APPROXIMATE_CREDITS_USED

JOHN

WAREHOUSE1

11.255295833

SALLY

WAREHOUSE1

3.79444444

JOHN

WAREHOUSE2

1.636703054

역할 기준

가상 웨어하우스에서 실행되는 모든 쿼리는 쿼리를 실행하는 역할과 연결됩니다. 이 데이터는 QUERY_HISTORY 뷰 의 ROLE_NAME 열에서 사용할 수 있습니다. 모든 Snowflake 사용자에게는 하나 이상의 역할이 있습니다.

비용 관리자는 QUERY_HISTORY 뷰의 쿼리 역할을 WAREHOUSE_METERING_HISTORY 뷰의 사용량 데이터와 조인하여 웨어하우스 비용을 역할을 기준으로 분석할 수 있습니다.

예를 들어 ROLE_NAME을 포함하도록 아래 쿼리 를 수정한 경우 보고서는 다음과 같은 형태일 수 있습니다.

ROLE_NAME

WAREHOUSE_NAME

APPROXIMATE_CREDITS_USED

SALES_ADMIN

WAREHOUSE1

17.20239833

DEV_ADMIN

WAREHOUSE1

5.7990244

SALES_ADMIN

WAREHOUSE2

1.49765448

쿼리 태그 기준

여러 애플리케이션이 동일한 사용자 이름과 웨어하우스를 공유할 때, QUERY_TAG 세션 매개 변수는 여러 애플리케이션 간의 비용을 귀속시키는 데 도움이 될 수 있습니다. 이 세션 매개 변수는 세션 내에서 실행되는 쿼리와 기타 SQL 문에 태그를 적용합니다.

이 귀속 전략을 사용하려면 먼저 세션에 대한 QUERY_TAG를 설정합니다. 예:

ALTER SESSION SET QUERY_TAG = 'APP1'

세션에 대해 이 매개 변수가 설정되면 세션 중에 실행되는 모든 쿼리는 APP1 쿼리 태그와 함께 QUERY_HISTORY 뷰 에 저장됩니다.

특정 쿼리 태그와 관련된 비용에 관한 보고서를 실행하려면 QUERY_TAG를 포함하도록 아래의 쿼리 를 수정하십시오. 결과는 다음과 같을 수 있습니다.

QUERY_TAG

WAREHOUSE_NAME

APPROXIMATE_CREDITS_USED

SALES_APP

WAREHOUSE1

14.3027235

DEV_APP

WAREHOUSE1

11.2938568

SALES_APP

WAREHOUSE2

9.235620

쿼리: 사용자, 역할 또는 쿼리 태그를 기준으로 웨어하우스 사용량 분할

쿼리를 사용하여 사용자, 역할 또는 쿼리 태그를 기준으로 공유 웨어하우스 비용을 분할하는 보고서를 생성할 수 있습니다. 이 쿼리는 비용을 어떻게 구분하든 상관없이 기본적으로 동일합니다. QUERY_HISTORY 뷰 의 쿼리 메타데이터를 WAREHOUSE_METERING_HISTORY 뷰 의 사용량 데이터와 조인하여 지난달 웨어하우스 비용을 분석합니다.

보고서를 생성하려면 QUERY_HISTORY 뷰의 적절한 열을 투영하도록 SELECT 문을 수정하여 다음 쿼리를 조정하십시오. 예를 들어 다양한 역할에 웨어하우스 비용을 귀속시키는 경우 ROLE_NAME 열을 지정합니다.

-- Replace <query_metadata> with USER_NAME, ROLE_NAME, or QUERY_TAG

WITH HOUR_EXECUTION_TIME_CTE AS (
    SELECT <query_metadata>
      ,WAREHOUSE_NAME
      ,DATE_TRUNC('hour',START_TIME) as START_TIME_HOUR
      ,SUM(EXECUTION_TIME)  as HOUR_EXECUTION_TIME
    FROM "SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY"
    WHERE WAREHOUSE_NAME IS NOT NULL
    AND EXECUTION_TIME > 0

--Change the below filter if you want to look at a longer range than the last 1 month
    AND START_TIME > DATEADD(Month,-1,CURRENT_TIMESTAMP())
    group by 1,2,3
    )
, HOUR_EXECUTION_TOTAL_CTE AS (
    SELECT START_TIME_HOUR
      ,WAREHOUSE_NAME
      ,SUM(HOUR_EXECUTION_TIME) AS HOUR_EXECUTION_TOTAL
    FROM HOUR_EXECUTION_TIME_CTE
    group by 1,2
)
, HOUR_APPROXIMATE_CREDITS_USED AS (
    SELECT
      A.<query_metadata>
      ,C.WAREHOUSE_NAME
      ,(A.HOUR_EXECUTION_TIME/B.HOUR_EXECUTION_TOTAL)*C.CREDITS_USED AS HOUR_APPROXIMATE_CREDITS_USED

    FROM HOUR_EXECUTION_TIME_CTE A
    JOIN HOUR_EXECUTION_TOTAL_CTE B  ON A.START_TIME_HOUR = B.START_TIME_HOUR and B.WAREHOUSE_NAME = A.WAREHOUSE_NAME
    JOIN "SNOWFLAKE"."ACCOUNT_USAGE"."WAREHOUSE_METERING_HISTORY" C ON C.WAREHOUSE_NAME = A.WAREHOUSE_NAME AND C.START_TIME = A.START_TIME_HOUR
)

SELECT
  <query_metadata>
  , WAREHOUSE_NAME
  ,SUM(HOUR_APPROXIMATE_CREDITS_USED) AS APPROXIMATE_CREDITS_USED
FROM HOUR_APPROXIMATE_CREDITS_USED
GROUP BY 1, 2
ORDER BY 3 DESC
;
맨 위로 이동