Attributing cost

Attributing cost (비용 귀속)

조직은 Snowflake 사용 비용을 조직 내 논리적 단위(예: 다른 부서, 환경, 또는 프로젝트)에 배분할 수 있어요. 이 청구(chargeback) 또는 표시(showback) 모델은 회계 목적에 유용하며, 비용을 줄일 수 있는 제어와 최적화의 혜택을 받을 수 있는 조직의 영역을 정확히 짚어줘요.

출처: Attributing cost

본문

부서나 프로젝트 같은 다른 그룹에 비용을 귀속시키려면 다음 권장 접근 방식을 사용해요.

  • 객체 태그를 사용해 리소스와 사용자를 부서나 프로젝트와 연결.
  • 쿼리가 여러 부서에 속한 사용자를 대신해 같은 애플리케이션이 만든 경우, 쿼리 태그를 사용해 개별 쿼리를 부서나 프로젝트와 연결.

비용 귀속 시나리오 유형

다음 비용 귀속 시나리오가 가장 흔하게 나타나요. 이 시나리오에서 웨어하우스는 비용을 발생시키는 리소스의 예로 사용돼요.

  • 단일 비용 센터 또는 부서가 독점적으로 사용하는 리소스: 웨어하우스를 부서와 연결하기 위해 객체 태그를 사용하는 것이 예시예요. 이 객체 태그를 사용해 그 웨어하우스들이 발생시킨 비용을 그 부서에 완전히 귀속할 수 있어요.
  • 여러 부서의 사용자가 공유하는 리소스: 다른 부서의 사용자가 공유하는 웨어하우스가 예시예요. 이 경우 객체 태그를 사용해 각 사용자를 부서와 연결해요. 쿼리 비용은 사용자에게 귀속돼요. 사용자에게 할당된 객체 태그를 사용해 비용을 부서별로 분류할 수 있어요.
  • 여러 부서의 사용자가 공유하는 애플리케이션 또는 워크플로: 사용자를 대신해 쿼리를 발행하는 애플리케이션이 예시예요. 이 경우 애플리케이션이 실행하는 각 쿼리에는 그 쿼리가 이루어지는 사용자의 팀이나 비용 센터를 식별하는 쿼리 태그가 할당돼요.

다음 섹션은 내 계정에 객체 태그를 설정하는 방법을 설명하고 각 비용 귀속 시나리오에 대한 세부 정보를 제공해요.

비용 귀속용 객체 태그 설정

비용 귀속에 사용할 그룹을 나타내는 태그를 설정할 때, 그 그룹이 단일 계정에 적용되는지 여러 계정에 적용되는지 결정해야 해요. 이는 태그를 설정하는 방법을 결정해요.

예를 들어 비용을 부서별로 귀속하고 싶다고 가정해요.

  • 부서가 사용하는 리소스가 단일 계정에 있으면 그 계정의 데이터베이스에 태그를 만들어요.
  • 부서가 사용하는 리소스가 여러 계정에 걸쳐 있으면 조직의 키 계정(예: 조직 계정)에 태그를 만들고, 복제를 통해 그 태그를 다른 계정에서 사용할 수 있게 해요.

다음 섹션은 태그를 만들고, 태그를 복제하고, 리소스에 태그를 적용하는 방법을 설명해요.

  • 태그 만들기
  • 태그 데이터베이스 복제
  • 리소스와 사용자 태깅

참고

이 섹션의 예시는 태그를 만들고 관리할 권한이 부여되었다고 가정되는 사용자 지정 역할 tag_admin을 사용해요. 조직 내에서 객체 태깅을 위해 더 세분화된 권한을 사용해 안전한 태깅 전략을 개발할 수 있어요.

태그 만들기

전략을 설계하는 일부로 태그를 만들 계획인 데이터베이스와 스키마를 결정해요.

  • 태그를 위한 전용 데이터베이스와 스키마를 만들 수 있어요.
  • 조직 전반의 다른 계정에서 리소스에 태그를 지정하려면 조직의 키 계정(예: 조직 계정)에 태그를 만들 수 있어요.

다음 예시는 사용할 계획인 태그를 위한 cost_management라는 데이터베이스와 tags라는 스키마를 만들어요.

USE ROLE tag_admin;

CREATE DATABASE cost_management;
CREATE SCHEMA tags;

cost_management와 tags를 현재 데이터베이스·스키마로 선택한 상태에서 cost_center라는 태그를 만들고 태그에 허용되는 값을 비용 센터 이름으로 설정해요.

CREATE TAG cost_center
  ALLOWED_VALUES 'finance', 'marketing', 'engineering', 'product';

태그 데이터베이스 복제

여러 계정이 있는 조직이 있고 다른 계정에서 태그를 사용할 수 있게 하려면 복제를 위해 계정을 설정하고, 메인 계정(예: 조직 계정)에 복제 그룹을 만들어요. 태그를 포함한 데이터베이스를 복제하도록 이 복제 그룹을 설정해요.

예를 들어 my_org.my_account와 my_org.my_account_2라는 계정에 태그를 복제하려면 조직 계정에서 이 문장을 실행해요.

CREATE REPLICATION GROUP cost_management_repl_group
  OBJECT_TYPES = DATABASES
  ALLOWED_DATABASES = cost_management
  ALLOWED_ACCOUNTS = my_org.my_account_1, my_org.my_account_2
  REPLICATION_SCHEDULE = '10 MINUTE';

그런 다음 태그를 사용할 수 있게 하려는 각 계정에서 보조 복제 그룹을 만들고 이 그룹을 기본 그룹에서 새로고침해요.

CREATE REPLICATION GROUP cost_management_repl_group
  AS REPLICA OF my_org.my_org_account.cost_management_repl_group;

ALTER REPLICATION GROUP cost_management_repl_group REFRESH;

리소스와 사용자 태깅

태그를 만들고 복제한 뒤 이 태그를 사용해 각 부서에 속한 웨어하우스와 사용자를 식별할 수 있어요. 예를 들어 sales 부서가 warehouse1과 warehouse2 둘 다를 사용하므로 두 웨어하우스에 대해 cost_center 태그를 'SALES'로 설정할 수 있어요.

팁

이상적으로는 리소스와 사용자를 만들 때 이 태그를 적용하는 과정을 자동화하는 워크플로가 있어야 해요.

USE ROLE tag_admin;

ALTER WAREHOUSE warehouse1 SET TAG cost_management.tags.cost_center='SALES';
ALTER WAREHOUSE warehouse2 SET TAG cost_management.tags.cost_center='SALES';
ALTER WAREHOUSE warehouse3 SET TAG cost_management.tags.cost_center='FINANCE';

ALTER USER finance_user SET TAG cost_management.tags.cost_center='FINANCE';
ALTER USER sales_user SET TAG cost_management.tags.cost_center='SALES';

SCIM으로 사용자 태그 자동화

비용 귀속을 위해 사용자 태깅 과정을 자동화하려면 Microsoft Entra ID나 Okta 같은 SCIM ID 공급자를 통해 Snowflake 사용자를 프로비저닝해 그렇게 할 수 있어요. SCIM을 사용하면 사용자가 생성되거나 업데이트될 때 비용 귀속 태그를 자동으로 적용할 수 있어, 각 새 사용자에 대해 ALTER USER <user_name> SET TAG를 수동으로 실행할 필요가 없고, 사용자가 부서에 합류하거나 부서 간에 이동할 때 비용 귀속 태그를 일관되게 유지할 수 있어요.

SCIM을 사용할 때 snowflakeTags 사용자 지정 속성은 쉼표로 구분된 정규화된 태그 참조 목록을 받아요. 예를 들어 프로비저닝 시점에 사용자를 finance 비용 센터에 할당하려면 SCIM 사용자 페이로드에 다음 값을 포함해요.

{
  "userName": "JSMITH",
  "displayName": "Jane Smith",
  "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "snowflakeUserName": "JSMITH",
    "snowflakeTags": "[cost_management.tags.cost_center:finance]"
  }
}

SCIM을 통해 설정된 태그는 같은 TAG_REFERENCES 뷰에 나타나고 Snowsight 태그 필터(Snowsight에서 태그로 비용 보기 참고)와 함께 작동하므로, 기존 비용 귀속 쿼리와 대시보드가 변경 없이 작동해요.

이 접근 방식을 시작하려면:

  • 위의 태그 만들기에서 설명한 대로 Snowflake에 태그를 만들어요.
  • SCIM 프로비저너 역할에 태그 스키마에 대한 USAGE와 각 태그에 대한 APPLY를 부여해요.

완전한 설정 단계, 사전 요구 부여, API 예시는 다음의 "SCIM 통합으로 Snowflake 태그 채우기" 섹션을 참고해요.

  • SCIM with Microsoft Entra ID
  • SCIM with Okta
  • SCIM with a custom identity provider

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 스키마에서만 사용할 수 있어요. 이 뷰의 조직 전체에 해당하는 것은 없어요.

다음 섹션은 일반적인 비용 귀속 시나리오 중 일부에 대한 비용 귀속 방법을 설명해요.

  • 부서가 공유하지 않는 리소스
  • 여러 부서의 사용자가 공유하는 리소스
  • 다른 부서에 비용을 귀속해야 하는 애플리케이션이 사용하는 리소스

부서가 공유하지 않는 리소스

비용을 부서별로 귀속하고 각 부서가 전용 웨어하우스 집합을 사용한다고 가정해요.

웨어하우스에 cost_center 태그를 지정해 웨어하우스를 소유한 부서를 식별하면, ACCOUNT_USAGE TAG_REFERENCES 뷰를 object_id와 warehouse_id 컬럼에서 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;

조직 계정의 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 뷰와 조인할 수 있어요.

참고

이 데이터는 한 번에 단일 계정에 대해서만 얻을 수 있어요. 조직의 계정 전체에 걸쳐 이 데이터를 검색하는 쿼리는 실행할 수 없어요.

다음 섹션은 공유 리소스에 대한 비용 귀속 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;
유휴 시간 없이 부서별 사용자 쿼리 비용 계산

다음 예시는 해당 부서의 사용자가 실행한 쿼리를 통해 각 부서에 컴퓨팅 비용을 귀속해요. 이 쿼리는 사용자 객체에 그 부서를 식별하는 태그가 있다는 것에 의존해요.

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;
유휴 시간 없이 사용자별 쿼리 비용 계산

다음 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;
태그가 없는 사용자별 쿼리 비용 계산

다음 예시는 태그가 없는 사용자의 쿼리 비용을 계산해요. 이를 사용해 태그가 사용자에게 일관되게 적용되고 있는지 확인할 수 있어요.

SELECT qah.user_name, SUM(qah.credits_attributed_compute) as total_credits
  FROM
    SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY qah
    LEFT JOIN snowflake.account_usage.tag_references tr
    ON qah.user_name = tr.object_name AND tr.DOMAIN = 'USER'
  WHERE
    start_time >= dateadd(month, -1, current_date)
    AND qah.user_name IS NULL OR tr.object_name IS NULL
  GROUP BY qah.user_name
  ORDER BY total_credits DESC;

다른 부서에 비용을 귀속해야 하는 애플리케이션이 사용하는 리소스

이 섹션의 예시는 Snowflake로 구동되는 하나 이상의 애플리케이션에 대한 비용을 계산해요.

예시는 이 애플리케이션이 실행되는 모든 쿼리에 대해 애플리케이션을 식별하는 쿼리 태그를 설정한다고 가정해요. 세션의 쿼리에 대한 쿼리 태그를 설정하려면 ALTER SESSION 명령을 실행해요. 예:

ALTER SESSION SET QUERY_TAG = 'COST_CENTER=finance';

이것은 세션 동안 실행되는 모든 후속 쿼리와 COST_CENTER=finance 태그를 연결해요.

그런 다음 쿼리 태그를 사용해 이 쿼리들이 발생시킨 비용을 적절한 부서로 추적할 수 있어요.

다음 섹션은 이 접근 방식을 사용하는 예시를 제공해요.

  • 부서별 쿼리 비용 계산
  • 쿼리 태그별 쿼리 비용 계산(유휴 시간 제외)
  • 쿼리 태그별 쿼리 비용 계산(유휴 시간 포함)
부서별 쿼리 비용 계산

다음 예시는 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;
쿼리 태그별 쿼리 비용 계산(유휴 시간 제외)

다음 예시는 쿼리 태그별로 쿼리 비용을 계산하고 태그가 없는 쿼리("untagged"로 식별)를 포함해요.

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;
쿼리 태그별 쿼리 비용 계산(유휴 시간 포함)

다음 예시는 쿼리당 비용에서 포착되지 않은 유휴 시간을 부서에 그 웨어하우스 사용량에 비례해 분배해요.

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;

Snowsight에서 태그로 비용 보기

cost_center 태그가 있는 리소스의 사용에 대해 보고해 비용을 귀속할 수 있어요. Snowsight에서 이 데이터에 접근할 수 있어요.

  1. ACCOUNT_USAGE 스키마에 접근할 수 있는 역할로 전환해요.
  2. 내비게이션 메뉴에서 Admin » Cost management를 선택해요.
  3. Consumption을 선택해요.
  4. Tags 드롭다운에서 cost_center 태그를 선택해요.
  5. 특정 비용 센터에 집중하려면 태그 값 목록에서 값을 선택해요.
  6. Apply를 선택해요.

Snowsight에서 필터링에 대한 자세한 내용은 Filter by tag를 참고해요.

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를 기반으로 한 추가 쿼리는 Examples를 참고해요.

계층적 쿼리 비용 귀속

여러 계층적 쿼리를 발행하는 저장 프로시저의 경우, 프로시저의 루트 쿼리 ID를 사용해 그 프로시저에 대한 귀속된 쿼리 비용을 계산할 수 있어요.

  1. 저장 프로시저의 루트 쿼리 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;

자세한 내용은 Ancestor queries with stored procedures를 참고해요.

  1. 전체 프로시저의 쿼리 비용을 합산하려면 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);

더 알아보기