사용자별 할당량
사용자별 할당량 (Per-user quotas)
사용자별 할당량(per-user quota)을 사용하면 사용자 단위의 세분화 수준으로 지출 한도를 시행해 개별 사용자가 원치 않는 비용을 발생시키는 것을 방지할 수 있어요. 할당량은 특히 개별 사용자가 짧은 시간에 상당한 요금을 누적할 수 있는 서비스(예: 대규모 데이터 세트에 대해 복잡한 AI 함수를 실행하는 경우)를 배포할 때 유용해요.
사용자별 할당량을 사용하면 다음을 할 수 있어요.
- 범위 안의 모든 사용자에게 균일하게 적용되는 월별, 주별, 일별 사용자별 크레딧 한도를 정의해요.
- 할당량을 계정의 모든 사용자에게 적용하거나, 팀, 코스트 센터, 비즈니스 단위를 나타내는 태그를 사용해 특정 사용자를 선택해요.
- 사용자가 사용자별 한도에 도달하면 자동으로 차단해요. 차단은 주기가 초기화되거나 한도를 올리면 자동으로 해제돼요.
- 사용자가 한도에 접근하거나 초과할 때 실제 또는 예상 지출에 기반한 알림을 구성해요.
- 구성 가능한 임계값에서 트리거되는 저장 프로시저로 사용자 지정 집행 작업을 자동화하고, 각 월의 시작에 영향을 받은 상태를 초기화해요.
- Snowsight에서 사용자별 지출, 사용률, 집행 상태를 모니터링해요.
본문
사용자별 할당량이 작동하는 방식
사용자별 할당량은 지정된 데이터베이스와 스키마 내에서 사용자별 지출 제어를 정의하는 일급(first-class) Snowflake 객체예요. 할당량을 만든 후에는 범위 안의 사용자, 할당량 임계값, 임계값을 초과할 때 취할 조치를 지정해 할당량을 구성해요.
할당량 주기
할당량은 주기별로 하나씩, 최대 3개의 사용자별 지출 한도를 정의할 수 있으며, 범위 안의 모든 사용자에게 균일하게 적용돼요. 모든 주기는 UTC 기준이며, 각 주기가 시작할 때 사용자별 사용량 카운터가 자동으로 초기화돼요. 한도는 하나 이상 설정해요.
- 월별 한도(Monthly limit) : 사용자가 UTC 역월(calendar month) 동안 소비할 수 있는 최대 크레딧. 월별 사용량은 매월 1일에 초기화돼요.
- 주별 한도(Weekly limit) : 사용자가 단일 ISO 주 동안 소비할 수 있는 최대 크레딧. 주별 사용량은 월요일 00:00 UTC에 초기화돼요.
- 일별 한도(Daily limit) : 사용자가 단일 UTC 일 동안 소비할 수 있는 최대 크레딧. 일별 사용량은 각 UTC 일의 시작에 초기화돼요.
한도는 독립적으로 평가돼요. 사용자는 다른 한도 내에 머물면서 한 한도에 대해 집행될 수 있어요.
집행 작업
사용자가 한도에 도달하면 할당량은 집행 작업을 취할 수 있어요.
- 차단(Block, 기본 제공) : 고객 작성 코드 없이 사용자의 지출이 한도에 도달하면 Snowflake가 자동으로 사용자가 새 AI 요청을 발행하지 못하게 차단해요. 집행은 지출 이벤트 발생 수분 이내에 평가되며 주기별로 적용되고, 주기가 초기화되면 자동으로 해제돼요. 자세한 내용은 한도에서 사용자 차단 을 참고해요.
- 사용자 지정 작업(Custom action) : 임계값을 초과하면 사용자가 제공한 저장 프로시저가 실행돼 역할에 기반한 접근 권한 취소, 사용자 지정 알림 전송, 감사 기록 쓰기 같은 사용자 지정 집행을 구현할 수 있게 해요. 자세한 내용은 사용자 지정 작업 구성 을 참고해요.
사용자 선택
할당량은 계정의 모든 사용자에게 적용되거나 태그로 선택한 특정 사용자 집합에 적용될 수 있어요. 모든 사용자를 선택하면 할당량이 나중에 계정에 추가된 사용자도 재구성 없이 자동으로 포함해요. 모든 사용자를 범위에 유지하면서 태그로 특정 사용자 그룹을 제외할 수도 있어요.
태그로 범위를 지정하면 할당량 범위는 사용자 객체에 적용된 특정 태그에 의해 결정돼요. Snowflake에서 태그는 키-값 쌍으로 기능하며 각 키는 사용자당 단일 값을 지원해요. 범위 지정에 여러 태그 키가 사용되면 사용자 해석을 위한 로직을 정의하는 연산자가 필요해요.
- UNION(기본값) : 정의된 태그 중 하나 이상과 일치하는 개별 사용자를 포함하는 사용자들의 합집합을 만들어요.
- INTERSECTION : 관리되려면 사용자가 모든 지정된 태그와 일치해야 하는 교집합을 만들어요.
사용자 해석은 평가 시점에 동적으로 발생하므로 태그 할당 변경은 재구성 없이 할당량에 자동으로 반영돼요.
팁: 사용자 태깅을 자동화하려면 SCIM 아이덴티티 프로바이더로 사용자를 프로비저닝하고 snowflakeTags 속성을 사용해 사용자가 생성되거나 업데이트될 때 태그를 자동으로 적용할 수 있어요. 자세한 내용은 SCIM으로 사용자 태그 자동화 를 참고해요. 프로바이더별 설정 단계는 다음을 참고해요.
- Microsoft Entra ID가 있는 SCIM
- Okta가 있는 SCIM
- 사용자 지정 아이덴티티 프로바이더가 있는 SCIM
임계값 유형
임계값은 사용자에 대해 알림이나 사용자 지정 작업이 트리거되는 시점을 결정해요. 임계값은 구성된 주기에 대한 사용자별 한도의 백분율로 표현되며, 두 가지 방법 중 하나로 평가할 수 있어요.
- 실제 지출(Actual spend) : 현재 주기 내 사용자의 누적 지출이 해당 주기의 사용자별 한도의 구성된 백분율을 초과하면 트리거돼요. 일반적으로 하드 집행에 사용돼요.
- 예상 지출(Projected spend, 기본값) : 사용자의 현재 지출 속도를 주기 끝까지 외삽했을 때 임계값을 초과할 가능성이 있다는 것을 나타내면 트리거돼요. 사전 예방적이며 조기 경고와 예방에 사용돼요.
프로젝션은 주기 내에서 의미 있는 경과 사용량이 필요하므로 일별 또는 주별 주기의 처음 약 12시간 동안에는 계산되지 않아요.
예제: 실제 지출
사용자별 할당량: 300 크레딧. 임계값: 90%(Actual). 사용자가 월 내에 실제 사용량 270 크레딧을 소비하면 알림이나 작업이 트리거돼요.
예제: 예상 지출
사용자별 할당량: 300 크레딧. 임계값: 90%(Projected). 30일 월의 1일째에 사용자가 9 크레딧을 소비하면 임계값이 트리거돼요(9 × 30 = 270, 할당량의 90%에 해당하기 때문). 이를 통해 한도가 실제로 위반되기 전에 조기 개입이 가능해요.
지원 도메인(Supported domains)
사용자별 할당량은 사용자별 사용량 데이터를 방출하는 다음 지원 도메인을 모니터링해요. 사용자별 지출 한도는 선택한 하나 이상의 도메인에 대한 사용량에 적용돼요.
단일 할당량은 웨어하우스 컴퓨팅 또는 AI 도메인 중 하나를 모니터링하지만 둘을 혼합하지는 않아요. 측정 단위가 다르기 때문에(웨어하우스 컴퓨팅은 플랫폼 크레딧, AI 도메인은 AI 크레딧) 웨어하우스 및 AI 도메인을 같은 할당량에 결합할 수 없어요.
| 도메인 | 모니터링되는 비용 |
|---|---|
| WAREHOUSE | 웨어하우스에서 쿼리 실행을 위한 컴퓨팅 리소스. 웨어하우스 요금 측정(meiering)과 쿼리 가속화 비용을 포함해요. |
| AI FUNCTION | 사용자에게 귀속되는 AI 함수 작업의 크레딧 사용량. |
| SNOWFLAKE INTELLIGENCE | 사용자에게 귀속되는 Snowflake CoWork(이전 Snowflake Intelligence) 작업의 크레딧 사용량. |
| CORTEX AGENT | 사용자에게 귀속되는 Cortex Agents 작업의 크레딧 사용량. |
| CORTEX CODE | 사용자에게 귀속되는 Snowflake CoCo(이전 Cortex Code) 작업의 크레딧 사용량. Snowflake CoCo CLI, Snowsight의 Snowflake CoCo, Snowflake CoCo Desktop의 지출을 포함해요. |
| AI GATEWAY | 프리뷰 기능 — 공개 모든 계정에서 사용 가능. 사용자에게 귀속되는 AI Gateway 작업의 크레딧 사용량. |
할당량으로 추적하려는 선택한 도메인을 하나 이상 지정할 수 있어요. 이는 Snowsight UI에서 또는 SQL로 할당량 생성 중에 수행할 수 있어요. 도메인 선택은 할당량 생성 후에도 수정할 수 있어요.
예제: 모든 AI 함수를 할당량에 추가
CALL my_quota!ADD_SHARED_RESOURCE('AI FUNCTION');
예제: AI Classify 함수를 할당량에 추가
CALL my_quota!ADD_SHARED_RESOURCE('AI FUNCTION', 'AI_CLASSIFY');
참고: 전체 AI Function 도메인을 지정하면 AI Classify 같은 특정 함수를 선택적으로 별도로 추가할 필요가 없어요.
예제: 특정 Cortex Agent를 할당량에 추가
CALL my_quota!ADD_SHARED_RESOURCE(
'CORTEX AGENT',
(SELECT SYSTEM$REFERENCE('CORTEX AGENT', 'myagent'))
);
예제: Snowflake CoWork 도메인을 할당량에 추가
CALL my_quota!ADD_SHARED_RESOURCE('SNOWFLAKE INTELLIGENCE');
예제: 특정 웨어하우스 리소스를 할당량에 추가
CALL my_quota!ADD_SHARED_RESOURCE(
'WAREHOUSE',
(SELECT SYSTEM$REFERENCE('WAREHOUSE', 'SNOWADHOC'))
);
AI Gateway 추가
프리뷰 기능 — 공개
모든 계정에서 사용 가능.
도메인별로 AI Gateway를 추가해요. 각 계정에는 SNOWFLAKE 라는 이름의 단일 게이트웨이가 있으므로 도메인이 이를 포괄해요.
CALL my_quota!ADD_SHARED_RESOURCE('AI GATEWAY');
제한 사항 및 고려 사항
- 할당량은 UTC 달력에 맞춘 월별, 주별, 일별 주기를 지원해요. 사용자 지정 주기 시작 날짜는 지원되지 않아요.
- 사용자 지정 작업과 주기 시작 작업은 월별 주기에 대해서만 평가돼요. 주별 또는 일별 한도에는 적용되지 않아요.
- Snowsight는 웨어하우스에 범위가 지정된 할당량에 대해서만 사용자 지정 작업과 주기 시작 작업을 제공해요. AI 관련 범위에서 사용하려면 SQL로 구성해요.
- 기본적으로 새 할당량은 계정의 모든 사용자를 모니터링해요. 태그로 범위를 좁히거나 특정 사용자를 제외할 수 있어요.
- 사용자별 지출 한도가 설정되기 전에는 집행이 발생하지 않아요.
- 같은 할당량 내에서 사용자마다 다른 한도를 설정할 수 없어요. 모든 사용자가 동일한 사용자별 한도를 공유해요.
- 할당량의 모든 사용자에 걸친 집단 지출 한도는 지원되지 않아요. 각 사용자의 한도는 독립적으로 평가돼요.
- 할당량 평가는 실시간이 아니며 수분 내에 발생해요. 사용자가 차단된 시점과 데이터가 Snowsight에 나타나는 시점 사이에 약간의 지연이 있을 수 있어요.
- 예상 지출 임계값에 대한 알림은 24시간 기간 내에 사용자당 임계값당 최대 한 번 전송돼요. 실제 지출 임계값은 주기당 최대 한 번 트리거돼요.
- 알림에 사용되는 각 이메일 주소는 검증되어야 해요. 사용자의 이메일을 사용할 수 없으면 정보 이벤트가 이벤트 테이블에 기록돼요. 기본적으로 이벤트는 snowflake.telemetry.events 에 기록되지만 사용자 지정 이벤트 테이블을 구성할 수 있어요. SYSTEM$VERIFY_DNS_DOMAIN 을 사용해 전체 이메일 도메인을 검증할 수 있어요.
차단 집행(block enforcement) 에는 다음 제한 사항이 적용돼요.
- 차단 집행은 AI 도메인만 지원해요: AI 함수, Cortex Agents, Snowflake CoWork, Snowflake CoCo, AI Gateway. 웨어하우스 지출은 별도의 할당량에서 추적할 수 있지만 차단 집행은 웨어하우스에 적용되지 않아요.
- 집행은 요청 시점이 아니라 지출 이벤트 발생 수분 이내에 평가되므로 사용자는 차단이 적용될 때까지 한도를 약간 초과해 계속 지출할 수 있어요. 초과분은 그 짧은 시간 동안 지출한 양에 의해 제한되며, 일반적으로 인터랙티브 사용에는 작아요. 예를 들어 100 크레딧 한도에서 사용자가 100에 도달하고 차단이 적용되기 전에 30을 더 소비하면 130에서 끝나요. 대규모 테이블에 대한 AI 함수 같은 큰 단일 요청은 더 많이 초과할 수 있어요. 할당량 한도를 정의할 때 이를 고려해야 해요.
- 일별 및 월별 주기는 UTC 자정에 초기화되고, 주별 주기는 월요일 00:00 UTC에 초기화돼요. 주기 경계 근처에서 지출을 시작하는 사용자는 초기화 전에 최대 한도 하나를 소비하고 그 후에 새 한도를 소비할 수 있어요.
- 한도와 범위 변경은 즉각적이지 않아요. 할당량 구성이 한도와 범위 변경을 포함해 약 5~10분이 걸려 전파된 후 집행에 작용해요.
사용자별 할당량 만들기
이 섹션에서 설명하는 대로 SQL 문을 실행하거나 Snowsight에서 사용자별 할당량을 만들 수 있어요. Snowsight 워크플로우는 Snowsight 사용 을 참고해요.
할당량을 만들 사용자 지정 역할 만들기
계정에서 할당량을 만들 사용자 지정 역할을 사용하거나 계정 관리자로 할당량을 만들 수 있어요. 다음 예제는 quota_owner 라는 역할을 만들고 스키마 cost_mgmt_db.quota_schema 에서 할당량을 만드는 데 필요한 역할과 권한을 부여해요. 예제는 ACCOUNTADMIN 역할로 실행해야 해요.
USE ROLE ACCOUNTADMIN;
CREATE ROLE quota_owner;
GRANT USAGE ON DATABASE cost_mgmt_db TO ROLE quota_owner;
GRANT USAGE ON SCHEMA cost_mgmt_db.quota_schema TO ROLE quota_owner;
GRANT DATABASE ROLE SNOWFLAKE.QUOTA_CREATOR TO ROLE quota_owner;
GRANT CREATE SNOWFLAKE.CORE.QUOTA ON SCHEMA cost_mgmt_db.quota_schema TO ROLE quota_owner;
SQL로 사용자별 할당량 만들기
사용자별 할당량을 만든 다음 사용자 범위, 지출 한도, 알림을 구성해요. 사용자별 할당량을 만들려면 할당량을 만드는 데 필요한 권한을 가진 역할을 사용해야 해요.
cost_mgmt_db.quota_schema 에 my_quota 라는 할당량을 만들어요.
USE SCHEMA cost_mgmt_db.quota_schema;
CREATE SNOWFLAKE.CORE.QUOTA my_quota();
할당량을 만든 후 아래 섹션의 단계에 따라 구성해요.
범위 안의 사용자 지정
기본적으로 새 할당량은 계정의 모든 사용자를 모니터링하므로 범위 구성이 필요하지 않아요. 태그로 사용자 부분집합으로 범위를 좁히거나, 이름으로 개별 사용자를 추가하거나 제거하거나, 둘을 결합할 수 있어요.
태그로 사용자 범위 지정
할당량을 사용자 부분집합으로 범위를 지정하려면 SET_USER_TAGS 메서드를 사용해 범위 안의 사용자를 지정해요. 태그를 참조로 전달하고 연산자(UNION 또는 INTERSECTION )를 지정해요. SET_USER_TAGS 호출은 원자적이고 멱등적(idempotent)이에요. 기존 태그는 덮어써져요.
CALL my_quota!SET_USER_TAGS(
[
[(SELECT SYSTEM$REFERENCE('TAG', 'cost_mgmt_db.tags.cost_center', 'SESSION', 'APPLYBUDGET')), 'finance'],
[(SELECT SYSTEM$REFERENCE('TAG', 'cost_mgmt_db.tags.dept', 'SESSION', 'APPLYBUDGET')), 'analytics']
],
'UNION'
);
참고: 할당량에 사용자 태그를 설정하는 역할은 각 태그에 대한 APPLYBUDGET 권한이 있어야 해요.
모든 사용자를 범위에 유지하지만 태그로 부분집합을 제외하려면 제외할 사용자를 식별하는 태그와 함께 EXCLUDE_USERS 를 사용해요. 다음 예제에서 할당량은 값이 high 인 usage_tier 태그로 태그된 사용자를 제외하고 모든 사용자를 범위에 유지해요.
CALL my_quota!EXCLUDE_USERS('TAG', [
[(SELECT SYSTEM$REFERENCE('TAG', 'cost_mgmt_db.tags.usage_tier', 'SESSION', 'APPLYBUDGET')), 'high']
]);
개별 사용자 포함 또는 제외
특정 사용자를 직접 추가하려면 이름을 INCLUDE_USERS 에 전달해요. 특정 사용자를 제외하려면 'USER' 키워드와 함께 이름을 EXCLUDE_USERS 에 전달해요.
CALL my_quota!INCLUDE_USERS(['ALICE', 'BOB']);
CALL my_quota!EXCLUDE_USERS('USER', ['CAROL']);
SET_USER_TAGS 와 달리 두 메서드는 누적돼요. 둘 중 하나를 다시 호출하면 교체하지 않고 기존 목록에 추가해요.
이렇게 사용자를 이름으로 지정하는 것은 할당량의 태그 범위보다 우선해요. 포함된 사용자는 태그와 일치하는지 여부와 관계없이 모니터링되고, 제외된 사용자는 여전히 일치하는 동안에도 범위 밖에 유지돼요. 이후의 태그 변경은 이를 재정의하지 않아요. 일치하는 태그를 얻은 사용자는 범위에 합류하지만 이름으로 제외한 사용자는 제외된 채로 유지돼요.
참고: 목록을 지우려면 빈 배열을 전달해요: INCLUDE_USERS([]) 또는 EXCLUDE_USERS('USER', []) . 할당량의 사용자 범위를 모든 사용자로 변경하면 두 목록도 지워지므로 범위를 설정한 후 개별 사용자를 조정해요.
사용자는 둘 이상의 할당량에 속할 수 있어요. 각 할당량은 그 사용자의 지출을 자체 한도에 대해 독립적으로 평가해요.
사용자 범위 확인
현재 사용자 범위를 확인하려면 다음을 실행해요.
CALL my_quota!GET_QUOTA_SCOPE();
연결된 모니터링 도메인, 이름으로 포함 및 제외된 사용자, 구성된 태그, 연산자를 보여주는 JSON 객체를 반환해요.
{
"excluded_users": [
{
"user_id": 3817,
"user_name": "CAROL"
}
],
"included_users": [
{
"user_id": 2153,
"user_name": "ALICE"
},
{
"user_id": 6253,
"user_name": "BOB"
}
],
"shared_resources": [
{
"domain": "CORTEX_AGENT",
"id": -1,
"name": "[ALL-AGENTS]"
}
],
"user_tags": {
"operator": "UNION",
"tags": [
{
"type": "tag",
"tag_database": "cost_mgmt_db",
"tag_schema": "tags",
"tag_key": "COST_CENTER",
"tag_values": ["FINANCE"]
},
{
"type": "tag",
"tag_database": "cost_mgmt_db",
"tag_schema": "tags",
"tag_key": "DEPT",
"tag_values": ["ANALYTICS"]
}
]
}
}
shared_resources 배열은 ADD_SHARED_RESOURCE 로 추가된 모니터링 도메인을 나열해요. 특정 리소스가 아닌 전체 도메인이 연결되면 항목의 id 는 -1 이고 name 은 [ALL-AGENTS] 처럼 대괄호로 묶여 있어요.
included_users 및 excluded_users 배열은 INCLUDE_USERS 및 EXCLUDE_USERS 로 이름으로 추가되거나 제거된 사용자를 나열해요. 할당량이 태그로만 범위가 지정되면 두 배열 모두 비어 있어요.
참고: ADD_SHARED_RESOURCE 또는 REMOVE_SHARED_RESOURCE 를 호출한 후 GET_QUOTA_SCOPE 를 사용해 할당량이 모니터링하는 도메인을 확인해요.
할당량의 범위로 현재 해석된 사용자를 나열하려면 다음을 실행해요.
CALL my_quota!GET_USERS();
참고: 사용자 해석은 TAG_REFERENCES 에 의존하며 최대 약 2시간까지 지연될 수 있어요. 최근 태그 변경이 GET_USERS 에 즉시 나타나지 않을 수 있어요.
사용자별 지출 한도 설정
할당량 관리자는 월별, 주별, 일별 또는 이들의 조합인 하나 이상의 사용자별 크레딧 한도를 설정해요. 범위 안의 각 사용자에게 동일한 사용자별 한도가 할당되며, 한도는 사용자별로 독립적으로 집행돼요. 사용자 간 집계 또는 집단 상한은 없어요.
사용자당 지출 한도를 120 크레딧으로 설정해요.
CALL my_quota!SET_PER_USER_LIMIT(120);
사용자별 한도를 포함한 현재 구성을 검색해요.
CALL my_quota!GET_CONFIG();
주별 또는 일별 사용자별 한도 설정
주별 또는 일별 한도를 설정하려면 SET_PER_USER_LIMIT 에 주기 인자를 전달해요. 인자 없이는 한도가 월별 주기에 적용돼요.
-- Monthly limit (default).
CALL my_quota!SET_PER_USER_LIMIT(1000);
-- Weekly limit.
CALL my_quota!SET_PER_USER_LIMIT(500, 'WEEKLY');
-- Daily limit.
CALL my_quota!SET_PER_USER_LIMIT(120, 'DAILY');
각 주기는 다른 주기와 독립적으로 평가되므로 사용자는 설정한 어떤 한도에 도달하자마자 차단돼요. 일별 한도는 각 UTC 일의 시작에 초기화돼요. 주별 한도는 ISO 주를 따르며 월요일 00:00 UTC에 초기화되므로 주별 한도로 차단된 사용자는 다음 월요일에 해제돼요.
한도를 제거하려면 해제할 주기를 전달해요. 예를 들어 주별 한도를 제거해요.
CALL my_quota!UNSET_PER_USER_LIMIT('WEEKLY');
한도에서 사용자 차단
할당량은 사용자의 지출이 사용자별 한도에 도달하면 사용자가 새 AI 요청을 발행하는 것을 자동으로 차단할 수 있어요. 차단은 기본 제공되며 단일 설정으로 활성화하면 Snowflake가 차단, 주기 초기화, 여러 할당량이 같은 사용자를 포괄할 때의 안전 로직을 처리해요. 저장 프로시저, 권한 부여, 예약이 필요하지 않아요.
집행은 지출 이벤트 발생 수분 이내에 위반을 평가하는 Snowflake 관리 파이프라인에서 실행돼요.
차단 집행을 활성화하려면 다음을 실행해요.
CALL my_quota!SET_BLOCK_ENFORCEMENT_ENABLED(TRUE, TRUE);
비활성화하려면 첫 번째 인자에 FALSE 를 전달해요. 집행을 비활성화하면 이 할당량이 차단한 사용자가 약 5~10분 내에 자동으로 차단 해제돼요.
두 번째 인자는 차단되었을 때 최종 사용자가 알림을 받을지 여부를 결정해요. 차단되었을 때 최종 사용자 알림을 비활성화하려면 FALSE 로 설정해요.
집행 가능한 도메인
차단 집행은 다음 AI 도메인을 지원해요: AI 함수, Cortex Agents, Snowflake CoWork, Snowflake CoCo, AI Gateway. 웨어하우스 지출은 별도의 할당량에서 추적할 수 있지만 차단 집행은 웨어하우스에 적용되지 않아요.
사용자가 집행 불가능한 지출(예: 웨어하우스 사용량)로 한도를 위반하면 집행은 지원되는 AI 도메인에 여전히 적용되지만 집행 불가능한 지출은 계속돼요.
참고: SET_BLOCK_ENFORCEMENT_ENABLED 는 현재 할당량의 범위를 검증하지 않고 집행을 켜거나 끕니다. 집행 불가능한 도메인을 포함한 할당량을 거부하는 범위 검증은 계획되어 있지만 아직 사용할 수 없어요.
집행이 작동하는 방식
집행이 활성화되면 Snowflake는 범위 안의 각 사용자에 대해 지속적인 루프를 실행해요.
- 사용량(Usage) : 사용자가 AI 요청을 발행해요. 사용량 데이터는 요금 측정 파이프라인을 통해 수분 내에 사용자별 귀속 데이터로 흘러들어가요.
- 평가(Evaluation) : 집행 파이프라인은 각 사용자의 지출을 사용자별 한도와 비교해요. 지출이 한도를 충족하거나 초과하면 파이프라인이 차단을 기록해요.
- 알림(Notification) : 할당량 차단 집행이 활성화되고 사용자에게 차단 시 알리도록 구성된 경우 영향을 받는 사용자에게 이메일이 전송돼요. 이 알림은 할당량이 소진되어 관리자가 한도를 올리거나 주기가 초기화될 때까지 후속 AI 요청이 거부됨을 설명해요. 관리자는 얼마 후 일반 할당량 측정 태스크를 통해 별도로 알림을 받아요.
- 거부(Deny) : 사용자가 다음에 AI 요청을 발행할 때 서비스는 일반적인 권한 부여 실패가 아니라 원인(할당량 소진)을 식별하는 도메인에 적절한 오류를 반환해요. AI 함수의 경우 차단이 적용되면 새 요청뿐 아니라 진행 중인 호출도 종료돼요.
- 주기 초기화(Cycle reset) : 차단은 주기 경계(일별 한도는 UTC 자정, 주별 한도는 월요일 00:00 UTC, 월별 한도는 매월 1일)에서 자동으로 만료돼요. 별도의 지우기 단계가 필요하지 않으며, 주기가 지나면 사용자가 다시 지출할 수 있어요. 사용자별 한도를 사용자의 현재 지출보다 올리거나 할당량을 제거해도 차단이 해제돼요.
집행 상태 확인
현재 차단된 사용자를 검토해요.
CALL my_quota!GET_ACTIVE_BLOCKS_V2();
날짜 범위에 걸친 할당량의 차단 및 차단 해제 이력을 검토해요. 시작 및 종료 날짜가 모두 필요해요.
CALL my_quota!GET_ENFORCEMENT_HISTORY('2026-06-01', '2026-06-30');
Snowsight에서 Enforcement breakdown 차트와 할당량 딥다이브 뷰의 Enforcement status 열을 사용해 집행을 검토할 수도 있어요. 자세한 내용은 Snowsight에서 사용자별 할당량 모니터링 을 참고해요.
또한 ACCOUNT_USAGE.QUOTA_ACCESS_BLOCK_HISTORY 뷰에서 할당량 전반의 모든 차단된 사용자 목록을 볼 수 있어요.
참고: GET_CONFIG 는 기존 구성과 함께 BLOCK_ENFORCEMENT_ENABLED , PER_USER_LIMIT_WEEKLY , PER_USER_LIMIT_DAILY 값을 포함해요.
에스컬레이션에 대응
할당량은 정책이에요. 하나의 한도가 할당량의 모든 사용자에게 적용되며 단일 할당량 내에는 사용자별 재정의가 없어요. 차단된 사용자에게 더 많은 여유가 필요할 때 두 가지 옵션이 있어요.
할당량의 모든 사용자에 대한 한도를 올려요. 별도의 차단 해제 호출이 필요하지 않아요. 한도를 올리고 변경이 전파되면(약 5~10분) 파이프라인은 이제 새 한도 아래에 있는 사용자의 차단을 자동으로 지우고 여전히 초과한 사용자의 차단은 유지해요.
CALL my_quota!SET_PER_USER_LIMIT(2000);
한 사용자를 더 높은 한도의 할당량으로 이동해요. 서로 다른 usage_tier 태그 값으로 두 할당량 모두에 INTERSECTION 모드를 사용해 사용자 집합이 겹치지 않게 해요. 사용자의 usage_tier 태그를 변경하면 사용자가 첫 번째 할당량의 범위에서 벗어나 더 높은 한도의 할당량 범위로 이동해요. 파이프라인은 사용자의 차단을 첫 번째 할당량에서 지우고 새 한도에 대해 평가하며, 이중 차단이나 수동 차단 해제가 없어요.
-- Default quota: cost_center = analytics AND usage_tier = standard.
CALL my_quota!SET_USER_TAGS(
[
[(SELECT SYSTEM$REFERENCE('TAG', 'cost_mgmt_db.tags.cost_center', 'SESSION', 'APPLYBUDGET')), 'analytics'],
[(SELECT SYSTEM$REFERENCE('TAG', 'cost_mgmt_db.tags.usage_tier', 'SESSION', 'APPLYBUDGET')), 'standard']
],
'INTERSECTION'
);
CALL my_quota!SET_PER_USER_LIMIT(1000);
CALL my_quota!SET_BLOCK_ENFORCEMENT_ENABLED(TRUE, TRUE);
-- Tag the user who needs more headroom.
ALTER USER alice SET TAG usage_tier = 'high';
-- Higher-limit quota scoped to the intersection of both tags.
CALL high_tier_quota!SET_USER_TAGS(
[
[(SELECT SYSTEM$REFERENCE('TAG', 'cost_mgmt_db.tags.cost_center', 'SESSION', 'APPLYBUDGET')), 'analytics'],
[(SELECT SYSTEM$REFERENCE('TAG', 'cost_mgmt_db.tags.usage_tier', 'SESSION', 'APPLYBUDGET')), 'high']
],
'INTERSECTION'
);
CALL high_tier_quota!SET_PER_USER_LIMIT(5000);
CALL high_tier_quota!SET_BLOCK_ENFORCEMENT_ENABLED(TRUE);
참고: 여러 할당량이 같은 사용자를 차단할 수 있어요. 집행이 활성화된 둘 이상의 할당량에 사용자가 포함되면 각 할당량이 자체 차단을 독립적으로 평가하고 기록해요. 한 할당량의 차단을 지워도 다른 할당량의 차단은 지워지지 않아요. 시간에 따라 어떤 사용자가 어떤 할당량에 차단되었는지 보려면 snowflake.account_usage.quota_access_block_history 뷰를 쿼리해요.
알림 구성
할당량은 두 가지 유형의 알림을 지원해요. 사용자가 임계값에 접근하거나 초과할 때 경고하는 개별 사용자 알림과 관리자에게 집계 보고서를 제공하는 관리자 요약 알림이에요.
개별 사용자 알림
사용자가 사용자별 할당량의 지정된 임계값을 초과할 때 개별 사용자에게 전송되는 알림을 구성할 수 있어요. 각 임계값에 대해 다음을 지정해요.
- 임계값 백분율(예: 할당량의 80%인 경우 80).
- 임계값 유형: PROJECTED(기본값) 또는 ACTUAL .
- 사용자에게 직접 알릴지 여부(TRUE 또는 FALSE ).
- 알림의 기준이 되는 한도('MONTHLY' , 'WEEKLY' 또는 'DAILY' ).
알림 임계값을 추가해요.
CALL my_quota!ADD_NOTIFICATION_THRESHOLD(80, 'PROJECTED', TRUE, 'MONTHLY');
알림 임계값을 제거해요.
CALL my_quota!REMOVE_NOTIFICATION_THRESHOLD(80, 'PROJECTED');
구성된 모든 알림 임계값을 봐요.
CALL my_quota!GET_NOTIFICATION_THRESHOLDS();
다음 열을 반환해요.
| 열 이름 | 데이터 타입 | 설명 |
|---|---|---|
| THRESHOLD | NUMBER | 알림이 트리거되는 임계값 백분율. |
| SPEND_STRATEGY | VARCHAR | 임계값 유형: PROJECTED 또는 ACTUAL . |
| NOTIFY_USER | BOOLEAN | 사용자가 임계값을 초과할 때 알림을 받는지 여부를 나타냄. |
| ADDED_TIMESTAMP | TIMESTAMP_TZ(9) | 알림이 추가된 시기를 나타냄. |
참고: 예상 지출 임계값에 대한 알림은 24시간 기간 내에 임계값당 최대 한 번 전송돼요. 다만 한 명 이상의 사용자가 반복적으로(24시간 기간마다 한 번씩) 할당량에 도달할 것으로 예상되면 예상 지출에 대한 알림이 계속 전송돼요. 실제 지출 임계값에 대한 알림은 사용자가 실제로 지출 임계값에 도달할 때 주기당 최대 한 번 전송돼요.
관리자 요약 알림
할당량 관리자는 사용자별 할당량 임계값을 위반한 사용자의 집계 보고서를 받기 위해 관리자 요약 알림을 구성할 수 있어요. 요약은 새 임계값 위반이 감지될 때 할당량 평가 후 전송돼요.
각 요약에는 다음이 포함돼요.
- 사용자 이름
- 위반한 임계값
- 임계값 유형(Actual 또는 Projected)
- 평가 시점의 사용자 크레딧 사용량
알림은 알림 통합 및/또는 이메일 수신자 목록을 통해 전달될 수 있어요. 둘 다 null이면 요약 알림이 억제돼요.
관리자 요약용 알림 통합을 구성해요.
CALL my_quota!ADD_NOTIFICATION_INTEGRATION('my_notification_integration');
알림 통합을 제거해요.
CALL my_quota!REMOVE_NOTIFICATION_INTEGRATION('my_notification_integration');
구성된 알림 통합을 봐요.
CALL my_quota!GET_NOTIFICATION_INTEGRATIONS();
관리자 요약용 이메일 수신자를 구성해요.
CALL my_quota!SET_ADMIN_EMAILS('[email protected], [email protected]');
사용자 지정 작업 구성
할당량 관리자는 사용자가 사용자별 할당량 임계값을 위반할 때 실행되는 사용자 지정 작업을 구성할 수 있어요. 사용자 지정 작업은 저장 프로시저로 구현돼요. 임계값이 위반되면 임계값을 초과한 각 사용자에 대해 저장 프로시저가 호출돼요.
사용자 지정 작업은 월별 사용자별 한도에 대해서만 평가돼요. SQL로 모든 리소스 범위에 대해 구성할 수 있지만, Snowsight는 웨어하우스에 범위가 지정된 할당량에 대해서만 제공해요.
할당량 평가 프로세스는 현재 할당량 실행 중에 할당량 임계값을 초과한 사용자 ID 목록을 저장 프로시저의 첫 번째 인자로 전달해요. 모든 할당량 실행은 현재 월의 시작부터 할당량 실행 시점까지의 집계 사용량을 다뤄요. 추가로 구성된 파라미터는 사용자 ID 목록 뒤에 전달돼요.
참고: 사용자 지정 작업으로 사용되는 저장 프로시저는 EXECUTE AS OWNER 를 사용해야 하며 등록 전에 SNOWFLAKE 애플리케이션에 USAGE 가 부여되어야 해요.
지정된 임계값에서 사용자 지정 작업을 추가해요.
CALL my_quota!ADD_CUSTOM_ACTION(
SYSTEM$REFERENCE('PROCEDURE',
'cost_mgmt_db.actions.disable_user_proc(VARCHAR)'), -- stored procedure
[], -- additional arguments
'ACTUAL', -- spend strategy
100 -- threshold percentage
);
사용자 지정 작업을 제거해요.
-- Remove all custom actions configured on the quota:
CALL my_quota!REMOVE_CUSTOM_ACTIONS();
-- Remove all custom actions at a specific threshold (both ACTUAL and PROJECTED):
CALL my_quota!REMOVE_CUSTOM_ACTIONS(100);
-- Remove a specific stored procedure at a specific threshold:
CALL my_quota!REMOVE_CUSTOM_ACTIONS(100, 'cost_mgmt_db.actions.disable_user_proc(varchar)');
참고: 저장 프로시저 이름에는 인자 시그니처가 포함되어야 해요. GET_CUSTOM_ACTIONS() 의 PROCEDURE_FQN 열에서 값을 복사해요. 제거 호출이 일치 항목을 찾지 못하면 "0 custom actions removed"라는 성공 메시지를 반환해요.
구성된 모든 사용자 지정 작업을 봐요.
CALL my_quota!GET_CUSTOM_ACTIONS();
다음 열을 반환해요.
| 열 이름 | 데이터 타입 | 설명 |
|---|---|---|
| ACTION_ID | VARCHAR | 다양한 작업을 구분하는 내부 ID. |
| PROCEDURE_FQN | VARCHAR | 저장 프로시저의 정규화된 이름. |
| PROCEDURE_ARGS | ARRAY | 저장 프로시저에 전달되는 추가 파라미터의 JSON 배열. |
| SPEND_STRATEGY | VARCHAR | 지출 전략: PROJECTED 또는 ACTUAL . |
| THRESHOLD | NUMBER | 사용자 지정 작업이 트리거되는 임계값 백분율. |
| LAST_TRIGGER_ATTEMPT_TIME | TIMESTAMP_TZ(9) | 사용자 지정 작업이 마지막으로 트리거된 시기를 지정. |
| ADDED_TIMESTAMP | TIMESTAMP_TZ(9) | 사용자 지정 작업이 할당량에 추가된 시기를 지정. |
참고: 예상 지출 임계값의 경우 사용자 지정 작업은 24시간 기간 내에 사용자당 최대 한 번 트리거돼요. 실제 지출 임계값의 경우 작업은 할당량 주기당 사용자당 한 번 트리거돼요.
예제: 할당량의 100%에서 사용자 접근 비활성화
다음 예제는 할당량을 초과한 사용자를 비활성화하는 저장 프로시저를 만든 다음 실제 지출 100%에서 사용자 지정 작업으로 구성해요.
-- Create a stored procedure that disables users.
-- The first argument is automatically populated by the quota's custom-action
-- executor with a JSON-encoded array of the user IDs that breached the
-- threshold (for example, '[101,102,103]'). The procedure must use
-- EXECUTE AS OWNER, otherwise registration is rejected.
CREATE OR REPLACE PROCEDURE cost_mgmt_db.actions.disable_users_by_id(user_ids VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
EXECUTE AS OWNER
AS
$$
DECLARE
arr VARIANT := PARSE_JSON(:user_ids);
i INT := 0;
cnt INT := ARRAY_SIZE(:arr);
user_id VARCHAR;
user_name VARCHAR;
sql_stmt VARCHAR;
disabled INT := 0;
skipped INT := 0;
BEGIN
WHILE (i < cnt) DO
user_id := :arr[:i]::VARCHAR;
-- Resolve user_id to user name.
user_name := NULL;
SELECT name INTO :user_name
FROM snowflake.account_usage.users
WHERE user_id = :user_id
AND deleted_on IS NULL
LIMIT 1;
IF (user_name IS NOT NULL) THEN
sql_stmt := 'ALTER USER ' || :user_name || ' SET DISABLED = TRUE';
EXECUTE IMMEDIATE :sql_stmt;
disabled := disabled + 1;
ELSE
skipped := skipped + 1;
END IF;
i := i + 1;
END WHILE;
RETURN 'Disabled: ' || :disabled
|| ', Skipped (not found): ' || :skipped
|| ', Total: ' || :cnt;
END;
$$;
-- Grant USAGE on the procedure to the SNOWFLAKE application.
GRANT USAGE ON PROCEDURE cost_mgmt_db.actions.disable_users_by_id(VARCHAR)
TO APPLICATION SNOWFLAKE;
CALL my_quota!ADD_CUSTOM_ACTION(
SYSTEM$REFERENCE(
'PROCEDURE',
'cost_mgmt_db.actions.disable_users_by_id(VARCHAR)'
), -- SPROC_REF
ARRAY_CONSTRUCT(), -- SPROC_ARGS: no extra arguments
'ACTUAL', -- SPEND_STRATEGY
100 -- THRESHOLD percentage
);
-- Verify the action is registered.
CALL my_quota!GET_CUSTOM_ACTIONS();
-- Confirm the quota's owner role can invoke the procedure.
CALL my_quota!CONFIRM_CUSTOM_ACTIONS_ACCESS();
-- Remove the action when no longer needed.
CALL my_quota!REMOVE_CUSTOM_ACTIONS(
100,
'COST_MGMT_DB.ACTIONS.DISABLE_USERS_BY_ID(VARCHAR)'
);
주기 시작(초기화) 작업 구성
할당량 관리자는 각 UTC 역월의 시작에 자동으로 실행되는 주기 시작 작업을 선택적으로 구성할 수 있어요. 초기화 작업은 저장 프로시저로 구현되며 사용자 재활성화나 리소스 접근 복원 같은 할당량 집행으로 영향을 받은 상태를 복원하기 위한 것이에요.
주기 시작 작업은 월별 주기에만 실행돼요. SQL로 모든 리소스 범위에 대해 구성할 수 있지만, Snowsight는 웨어하우스에 범위가 지정된 할당량에 대해서만 제공해요.
할당량당 초기화 작업은 하나만 구성할 수 있어요. 초기화 작업은:
- 각 UTC 역월의 시작에 한 번 실행돼요.
- 사용자 수준 임계값 평가와 독립적으로 실행돼요.
- 관리자가 정의한 구성된 파라미터를 받아요.
주기 시작 작업을 설정해요.
CALL my_quota!SET_CYCLE_START_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'cost_mgmt_db.actions.reset_users_proc()'),
[]
);
현재 주기 시작 작업을 봐요.
CALL my_quota!GET_CYCLE_START_ACTION();
주기 시작 작업을 제거해요.
CALL my_quota!REMOVE_CYCLE_START_ACTION();
예제: 새 주기 시작 시 사용자 재활성화
-- Create a stored procedure that re-enables all previously disabled users.
CREATE OR REPLACE PROCEDURE cost_mgmt_db.actions.reset_users_proc()
RETURNS VARCHAR
LANGUAGE SQL
EXECUTE AS OWNER
AS
$$
BEGIN
-- Your reset logic here, for example re-enabling users.
RETURN 'Users re-enabled for new cycle';
END;
$$;
-- Grant the SNOWFLAKE application access to invoke the reset procedure.
GRANT USAGE ON PROCEDURE cost_mgmt_db.actions.RESET_USERS_PROC() TO APPLICATION SNOWFLAKE;
-- Configure the reset action.
CALL my_quota!SET_CYCLE_START_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'cost_mgmt_db.actions.reset_users_proc()'),
[]
);
사용자 지출 보기
할당량 관리자는 최종 확정된 사용량 데이터에 대해 GET_SPENDING_DETAILS_BY_USERS 를 사용해 할당량에 포함된 사용자의 지출 데이터를 검색할 수 있어요.
GET_SPENDING_DETAILS_BY_USERS
지정된 날짜 범위 내에서 사용자 및 리소스별 최종 확정된 세분화된 사용량 레코드를 반환해요.
CALL my_quota!GET_SPENDING_DETAILS_BY_USERS('2026-04-01', '2026-04-30');
다음 열을 반환해요.
| 열 이름 | 데이터 타입 | 설명 |
|---|---|---|
| USER_ID | NUMBER | 사용자 ID. |
| USER_NAME | VARCHAR | 사용자의 이름. |
| SERVICE_TYPE | VARCHAR | 리소스 유형(예: WAREHOUSE_METERING 또는 CORTEX_AGENTS ). |
| ENTITY_TYPE | VARCHAR | 엔티티의 유형. |
| ENTITY_NAME | VARCHAR | 웨어하우스 이름이나 AI 함수 이름 같은 엔티티의 이름. |
| CREDITS_SPEND | FLOAT | 소비된 크레딧. |
| USAGE_TIMESTAMP | TIMESTAMP_TZ(9) | 기본 지출의 사용량 시간. |
참고: 데이터가 반환되려면 날짜 범위가 현재 월 또는 이전 역월에 속해야 해요. 이전 달 이전의 날짜는 결과를 반환하지 않아요.
할당량 이벤트 모니터링
할당량 관련 운영 이벤트는 Snowflake 이벤트 테이블에 기록되며, 알림과 사용자 지정 작업이 성공적으로 실행되었는지에 대한 가시성을 제공해요. 이벤트에는 다음이 포함돼요.
- INFO : 성공적인 사용자별 알림 전달, 사용자 지정 작업 및 주기 시작 작업의 성공적인 실행.
- ERROR : 사용자 지정 작업 또는 주기 시작 작업의 실패, 잘못되었거나 접근할 수 없는 관리자 알림 통합, 검증되지 않은 관리자 이메일 수신자.
할당량에 대한 적절한 관리자 역할을 가진 사용자만 해당 할당량의 이벤트에 접근할 수 있어요.
이벤트 테이블에서 할당량 이벤트를 쿼리하려면:
SELECT
RECORD:name::STRING AS event_name,
VALUE:message::STRING AS message,
RESOURCE_ATTRIBUTES,
*
FROM snowflake.telemetry.events
WHERE SCOPE['name'] = 'snow.cost.quota'
AND TIMESTAMP > DATEADD('day', -1, CURRENT_TIMESTAMP())
ORDER BY TIMESTAMP DESC;
할당량 메서드 참조
다음 표는 할당량 객체에서 사용할 수 있는 메서드를 나열해요. 각 메서드를 <quota_name>!
할당량 만들기
| 명령 | 설명 |
|---|---|
| CREATE SNOWFLAKE.CORE.QUOTA |
사용자별 할당량 객체를 만들어요. SQL로 사용자별 할당량 만들기 를 참고해요. |
모니터링 도메인
| 메서드 | 설명 |
|---|---|
| ADD_SHARED_RESOURCE(' |
할당량에 모니터링 도메인 또는 도메인 내 특정 리소스를 추가해요. 지원 도메인 을 참고해요. |
사용자 범위
| 메서드 | 설명 |
|---|---|
| SET_USER_TAGS([[<tag_ref>, ' |
범위 안의 사용자를 정의하는 사용자 태그와 연산자(UNION 또는 INTERSECTION )를 설정해요. 범위 안의 사용자 지정 을 참고해요. |
| EXCLUDE_USERS('TAG', [[<tag_ref>, ' |
모든 사용자를 범위에 유지하지만 주어진 태그와 일치하는 사용자를 제외해요. |
| INCLUDE_USERS([' |
이름으로 특정 사용자를 할당량에 추가하거나 이전 제외를 되돌려요. 개별 사용자 포함 또는 제외 를 참고해요. |
| EXCLUDE_USERS('USER', [' |
이름으로 특정 사용자를 할당량에서 제외해요. 개별 사용자 포함 또는 제외 를 참고해요. |
| GET_QUOTA_SCOPE() | 연결된 모니터링 도메인, 이름으로 포함 및 제외된 사용자, 구성된 사용자 태그와 연산자를 반환해요. |
| GET_USERS() | 할당량의 범위로 현재 해석된 사용자를 반환해요. |
지출 한도
| 메서드 | 설명 |
|---|---|
| SET_PER_USER_LIMIT( |
사용자별 크레딧 한도를 설정해요. 선택적 주기 인자는 'WEEKLY' 또는 'DAILY' 를 받으며, 기본값은 월별이에요. 사용자별 지출 한도 설정 을 참고해요. |
| UNSET_PER_USER_LIMIT(' |
주기('WEEKLY' , 'DAILY' 또는 월별)에 대한 사용자별 한도를 제거해요. |
| GET_CONFIG() | PER_USER_LIMIT , PER_USER_LIMIT_WEEKLY , PER_USER_LIMIT_DAILY , BLOCK_ENFORCEMENT_ENABLED 를 포함한 할당량 구성을 반환해요. |
집행
| 메서드 | 설명 |
|---|---|
| SET_BLOCK_ENFORCEMENT_ENABLED(<block_enforcement_boolean>,<email_notification_boolean>) | 기본 제공 차단 집행을 켜거나 꺼요. 첫 번째 인자는 차단 집행을 활성화할지 여부를 결정하는 부울이에요. 두 번째 인자는 사용자가 차단될 때 이메일을 보낼지 여부를 지정하는 부울이에요. 한도에서 사용자 차단 을 참고해요. |
| GET_ACTIVE_BLOCKS_V2() | 이 할당량이 현재 차단한 사용자를 반환해요. |
| GET_ENFORCEMENT_HISTORY(' |
날짜 범위에 걸친 이 할당량의 차단 및 차단 해제 이력을 반환해요. |
알림
| 메서드 | 설명 |
|---|---|
| ADD_NOTIFICATION_THRESHOLD( |
개별 사용자 알림 임계값을 추가해요. 주기는 'MONTHLY' , 'WEEKLY' 또는 'DAILY' 를 받아요. 알림 구성 을 참고해요. |
| REMOVE_NOTIFICATION_THRESHOLD( |
알림 임계값을 제거해요. |
| GET_NOTIFICATION_THRESHOLDS() | 구성된 알림 임계값을 나열해요. |
| ADD_NOTIFICATION_INTEGRATION(' |
관리자 요약용 알림 통합을 추가해요. |
| REMOVE_NOTIFICATION_INTEGRATION(' |
알림 통합을 제거해요. |
| GET_NOTIFICATION_INTEGRATIONS() | 구성된 알림 통합을 나열해요. |
| SET_ADMIN_EMAILS(' |
관리자 요약 이메일 수신자를 설정해요. |
사용자 지정 작업
| 메서드 | 설명 |
|---|---|
| ADD_CUSTOM_ACTION(<sproc_ref>, |
임계값을 초과할 때 실행할 저장 프로시저를 등록해요. 사용자 지정 작업 구성 을 참고해요. |
| REMOVE_CUSTOM_ACTIONS([ |
모든 사용자 지정 작업, 특정 임계값의 작업, 또는 특정 임계값의 특정 프로시저를 제거해요. |
| GET_CUSTOM_ACTIONS() | 구성된 사용자 지정 작업을 나열해요. |
| CONFIRM_CUSTOM_ACTIONS_ACCESS() | 할당량의 소유자 역할이 구성된 프로시저를 호출할 수 있는지 확인해요. |
주기 시작 작업
| 메서드 | 설명 |
|---|---|
| SET_CYCLE_START_ACTION(<sproc_ref>, |
각 UTC 역월의 시작에 실행할 프로시저를 설정해요. 주기 시작(초기화) 작업 구성 을 참고해요. |
| GET_CYCLE_START_ACTION() | 구성된 주기 시작 작업을 반환해요. |
| REMOVE_CYCLE_START_ACTION() | 주기 시작 작업을 제거해요. |
지출 보기
| 메서드 | 설명 |
|---|---|
| GET_SPENDING_DETAILS_BY_USERS(' |
날짜 범위에 대한 최종 확정된 사용자별 사용량을 반환해요. 사용자 지출 보기 를 참고해요. |
Snowsight 사용
Snowsight에서 SQL을 작성하지 않고 사용자별 할당량을 만들고 모니터링할 수 있어요. 할당량은 Budgets 탭에서 예산(budgets)과 함께 관리돼요. 시작하려면 Snowsight에 로그인하고 왼쪽 메뉴를 통해 Admin » Cost management 로 이동한 다음 Budgets 탭을 선택해요.
Snowsight에서 할당량 만들기
시작하기 전에 대상 데이터베이스와 스키마에서 할당량 객체를 만들 권한이 있는 역할을 사용하고 있는지 확인해요. 태그로 할당량을 범위 지정할 계획이라면 관련 사용자가 태그되어 있는지 확인해요.
시작하려면 오른쪽 위에서 + Budget 을 선택한 다음 Quota 를 선택해요. 이렇게 하면 왼쪽 레일에 진행 상황을 추적하는 4단계 마법사가 열려요.
할당량 범위(Quota scope)
Quota scope 페이지는 할당량이 모니터링하는 사용자와 리소스를 결정해요.
- 모니터링할 사용자 지정 : All users in the account 또는 사용자 태그로 범위 지정할 A group of users (through tags) 를 선택해요. 모든 사용자를 모니터링할 때 특정 태그를 가진 사용자를 선택적으로 제외할 수 있어요.
- 추적할 리소스 지정 : AI 함수, Snowflake CoCo, Cortex Agents, Snowflake CoWork, AI Gateway를 모니터링할 AI-related features (모두 또는 각각 내 특정 리소스 선택)를 선택하거나 웨어하우스 컴퓨팅을 모니터링할 Warehouses 를 선택해요.
기본 정보(Basic information)
Basic information 페이지는 할당량의 이름, 위치, 한도를 설정해요.
- Name : 할당량의 설명 이름. Budgets 목록에 표시되는 이름이에요.
- Location : 할당량 객체를 소유하는 데이터베이스와 스키마.
- Monthly credit limit : 범위 안의 각 사용자의 월별 크레딧 상한. 사용량은 매월 1일마다 초기화돼요.
- Weekly credit limit : 범위 안의 각 사용자의 주별 크레딧 상한. 사용량은 월요일 00:00 UTC에 초기화돼요. AI 기능을 모니터링할 때 이 필드가 나타나요.
- Daily credit limit : 범위 안의 각 사용자의 일별 크레딧 상한(사용자당 하루 크레딧). 사용량은 매일 00:00 UTC에 초기화돼요. AI 기능을 모니터링할 때 이 필드가 나타나요. AI 기능의 경우 일별 또는 월별 크레딧 한도 중 하나 이상을 설정해요.
참고: 사용할 수 있는 한도 필드는 Quota scope 페이지에서 선택한 리소스 범위에 따라 달라져요. AI 관련 기능의 경우 Monthly credit limit , Weekly credit limit , Daily credit limit 이 나타나며 하나 이상이 필요해요. 웨어하우스의 경우 Monthly credit limit 만 나타나며 필수예요.
경고 알림(Alert notifications)
Alert notifications 페이지는 지출이 임계값에 도달할 때 누가 알림을 받는지 구성해요. 여러 경고를 추가할 수 있으며 각각은 독립적으로 평가돼요. 월별 한도를 설정하면 경고 알림을 사용할 수 있어요.
- Alert based on : 누적 사용량에 경고할 Actual spend 또는 사용자의 현재 지출 추세에 경고할 Projected spend 를 사용해요.
- Alert at : 경고를 트리거하는 한도의 백분율.
- Notify affected user : 범위 안의 사용자에게 이메일을 보내요. 요약 수신자에게만 알리려면 선택 해제해 두어요.
- Summary emails : 경고 중 하나 이상이 트리거될 때 요약을 받는 이메일 주소.
집행 및 작업(Enforcement and actions)
Enforcement and actions 페이지는 한도가 집행되는 방식을 구성하고 사용자 지정 자동 작업을 추가해요.
- Enable enforcement : 활성화되면 한도에 도달한 사용자를 차단해 할당량의 사용자별 한도가 집행돼요. 관리자는 최종 사용자가 차단될 때 이메일을 받는지 여부를 구성할 수 있어요. 자세한 내용은 한도에서 사용자 차단 을 참고해요.
- Custom actions : 월별 지출이 임계값에 도달하면 저장 프로시저를 트리거해요. 사용자 지정 작업은 월별 크레딧 한도에 대해 평가되며 경고 알림과 독립적이에요. 자세한 내용은 사용자 지정 작업 구성 을 참고해요.
참고: 이 페이지의 옵션은 선택한 리소스 범위에 따라 달라져요. AI 관련 범위는 Enable enforcement 를 보여주는데, 마법사가 AI 관련 범위에 대해 사용자 지정 작업을 제공하지 않기 때문이에요. 웨어하우스 범위는 차단 집행이 웨어하우스에 적용되지 않으므로 Custom actions 를 보여줘요.
완료되면 Create 를 선택해요. Snowflake가 할당량을 프로비저닝하고 범위 안의 모든 사용자에 대한 소비 평가를 시작해요.
Snowsight에서 할당량 모니터링
Snowsight는 세 가지 수준의 모니터링을 제공해요. 계정의 모든 할당량 목록, 단일 할당량에 대한 딥다이브, 개별 사용자 지출에 대한 딥다이브예요.
할당량 목록
Budgets 탭은 계정의 모든 할당량과 예산을 나열해요. 할당량은 예산과 함께 추적되므로 한 곳에서 모든 지출 제어를 관리할 수 있어요. 이 보기에는 다음이 포함돼요.
- 요약 카드 : Total budgets (지출을 추적하는 지출 제어), Over limit , No limit configured . 각 카드는 사용자 지정 예산과 할당량 간의 비율을 보여줘요.
- 필터 탭 : All budgets , Custom budgets , Quotas 사이를 전환하고 Type 및 Status 로 목록을 필터링해요.
- 목록 열 : 열은 탭에 따라 달라져요. All budgets 에서 목록은 Name , Type , Status , Spend (credits) , Limit (credits) 를 보여주며, 할당량 행에 대해서는 주기별 지출과 한도를 보여줘요. Quotas 에서 목록은 Name , Quota status , Monthly per-user limit , Weekly per-user limit , Daily per-user limit , Users in quota , Enforcement , Users blocked 를 보여줘요. 한도가 설정되지 않은 주기는 Not configured 로 표시돼요.
할당량의 이름을 선택하면 할당량 딥다이브 뷰가 열려요.
할당량 딥다이브
할당량 딥다이브 뷰는 단일 할당량에 대해 범위 안의 모든 사용자에 걸친 지출과 집행을 요약해요. 이 보기에는 다음이 포함돼요.
- Avg monthly utilization , This week's avg utilization , Today's avg utilization : 각 주기에 대한 범위 안의 사용자의 평균 사용률로, 해당 주기의 사용자별 한도에 대해 측정돼요.
- User status : 상태별 범위 안의 사용자 분류: On track , Over monthly , Over weekly , Over daily , Over multiple .
- Enforcement breakdown : 사용자별 한도에 대해 차단된 사용자 수 같은 집행 작업이 적용된 사용자의 분류.
- Top user spend over time : 사용자별 한도에 대해 그린 현재 주기에서 가장 지출이 많은 사용자의 그래프.
- Quota details : 할당량의 구성. 다음을 포함해요.
- Per-user limit : 각 주기에 구성된 한도(예: 10,000 credits / month 및 5,000 credits / day).
- 범위 안의 사용자에 걸친 Monthly avg user spend 및 Monthly highest user spend .
- Quota scope : 범위 안의 사용자(계정의 모든 사용자 또는 적용된 태그 기반 필터)와 AI 함수, Snowflake CoCo, Cortex Agents, Snowflake CoWork, AI Gateway 같은 모니터링 도메인.
- Notifications : 구성된 알림 임계값.
- User table : 범위 안의 모든 사용자의 검색·필터 가능한 목록. 각 사용자에 대해 테이블은 Enforcement , 구성된 각 주기에 대한 사용률과 지출(Monthly utilization 및 Monthly spend , Weekly utilization 및 Weekly spend , Today's utilization 및 Today's spend ), Matched tags 를 보여줘요.
테이블에서 사용자를 선택하면 사용자 딥다이브 뷰가 열려요.
사용자 딥다이브
사용자 딥다이브 뷰는 할당량 내 단일 사용자의 지출 세부 정보를 보여줘요. 이 보기에는 다음이 포함돼요.
- Monthly utilization : 사용자의 월별 한도 대비 지출.
- Weekly utilization : 사용자의 주별 한도 대비 지출.
- Today's utilization : 오늘 현재 사용자의 일별 한도 대비 지출.
- Spend by type : AI 함수 같은 모니터링 도메인별 사용자 지출의 분류.
- User details : 각 주기의 Per-user limit , 사용자의 Current spend , Avg weekly spend 및 Avg daily spend .
- Matched tags : 할당량의 태그 범위와 일치한 사용자 태그.
- Spend by day : 주기 전체에 걸친 사용자 지출의 그래프와 테이블. Daily spend , Weekly spend , Aggregated spend 사이를 전환해 그래프를 그리는 방식을 변경해요. 테이블은 각 날짜의 Monthly utilization , Aggregated spend , Weekly utilization , Weekly spend , Daily utilization , Daily spend 를 분류해 보여줘요.
Snowflake CoCo 사용
Snowflake CoCo의 Cost Intelligence 스킬을 통해 SQL을 작성하거나 Snowsight 마법사를 거치지 않고 자연어로 사용자별 할당량을 작업할 수도 있어요. Cost Intelligence 스킬은 Snowflake CoCo UI와 Snowflake CoCo CLI 모두에서 사용할 수 있어요.
스킬을 사용해 원하는 것을 평이한 언어로 설명해 할당량을 만들고 구성하고, 사용자별 지출과 사용률을 검토하며, 집행 상태를 확인해요. 스킬은 요청을 이 토픽에서 설명한 기본 할당량 작업으로 변환해요.
Cost Intelligence 스킬에 대한 자세한 내용은 Cost Intelligence 를 참고해요.
더 알아보기 (Learn more)
- 예산으로 크레딧 사용량 모니터링 — 예산 개요
- 사용자 지정 예산 — 사용자 지정 예산
- 예산용 알림 — 예산 알림
- 예산용 사용자 지정 작업 — 예산 사용자 지정 작업
- 예산용 주기 시작 작업 — 예산 주기 시작 작업
- 예산 역할 및 권한 — 예산 역할과 권한