SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS
SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS (검색 최적화 비용 추정)
주어진 테이블에 검색 최적화를 추가하고 특정 컬럼을 검색 최적화용으로 구성할 때의 예상 비용을 반환해요.
중요: SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS 함수가 반환하는 비용 추정치는 최선의 노력(best effort)으로 제공돼요. 실제 실현 비용은 추정치에서 최대 50%(드물게는 몇 배)까지 달라질 수 있어요.
- 구축(build) 및 저장(storage) 비용 추정치는 테이블의 행 부분집합을 샘플링한 것을 기반으로 해요.
- 유지보수(maintenance) 비용 추정치는 테이블의 최근 생성·삭제·업데이트 활동을 기반으로 해요.
출처: Snowflake SQL Reference - SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS
본문
구문
SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('<table_name>' [ , '<search_method_with_target>' ])
인자
필수:
table_name
검색 최적화 비용을 추정하려는 테이블이에요. 테이블 이름이 정규화되지 않았다면(db_name.schema_name.table_name 또는 schema_name.table_name 형식), 함수는 세션의 현재 스키마에서 테이블을 찾아요. 전체 이름은 작은따옴표로 묶어야 해요.
선택:
search_method_with_target
ALTER TABLE … ADD SEARCH OPTIMIZATION 명령의 ON 절에 지정할 수 있는 것과 유사한, 컬럼 구성에 대한 검색 방법과 대상을 지정해요. 이 전체 인자는 작은따옴표로 묶어야 해요. 이 문자열 안에서 필요한 곳에는 컬럼 이름 주위에 큰따옴표를 사용해요.
출력
이 함수는 아래에 설명된 속성을 가진 JSON 객체를 반환해요:
| 속성 | 설명 |
|---|---|
| tableName | 테이블의 이름 |
| searchOptimizationEnabled | 테이블 또는 그 안의 일부 컬럼에 검색 최적화가 활성화되어 있으면 true, 그렇지 않으면 false |
| costPositions | 테이블 또는 그 컬럼에 검색 최적화를 추가하는 예상 비용을 설명하는 객체 배열 |
costPositions 배열의 각 객체는 다른 유형의 비용 추정치를 나타내요:
...
"costPositions" : [
{
"name" : "BuildCosts",
...
}, {
"name" : "StorageCosts",
...
}, {
"name" : "Benefit",
...
}, {
"name" : "MaintenanceCosts",
...
}
]
...
name 속성은 객체가 나타내는 비용 유형을 식별해요. name은 다음 중 하나일 수 있어요:
| costPositions의 객체 name | 설명 |
|---|---|
| BuildCosts | 테이블에 대한 검색 액세스 경로를 구축하는 예상 비용을 설명하는 객체. 테이블 또는 모든 지정 컬럼에 이미 검색 최적화가 추가된 경우 이 객체에는 비용 정보가 없어요. |
| StorageCosts | 테이블의 검색 액세스 경로에 필요한 예상 저장 공간(TB)을 설명하는 객체 |
| Benefit | 테이블에 검색 최적화가 활성화된 경우에만 나타나는 객체. 지금은 정보를 포함하지 않아요. |
| MaintenanceCosts | 행이 삽입·삭제·수정될 때 테이블의 검색 액세스 경로를 유지하는 예상 비용을 설명하는 객체. 테이블이 최근에 생성된 경우 비용 정보는 보고되지 않아요. |
costPositions 배열의 각 객체는 다음 속성을 가질 수 있어요:
| 속성 | 설명 |
|---|---|
| name | 이 객체가 나타내는 비용 정보 유형을 식별하는 이름 |
| costs | 다음 속성으로 예상 비용을 설명하는 객체: |
| value | 예상 비용의 양 |
| unit | 비용의 측정 단위(예: 컴퓨팅 비용의 "Credits", 저장 비용의 "TB" 등) |
| perTimeUnit | 유지보수 비용의 경우, 예상 비용이 다루는 시간 단위(예: 월별 비용의 "MONTH") |
| computationMethod | 여러 방법을 사용할 수 있는 경우 비용을 추정하는 데 사용된 방법 |
| comment | 예상 비용에 대한 추가 정보 |
사용 참고 사항
- searchOptimizationEnabled 속성은 테이블 또는 그 안의 일부 컬럼에 검색 최적화가 활성화되어 있으면 true예요.
- 구축 비용의 경우 이 함수는 지정한 테이블의 데이터 샘플에 대한 검색 액세스 경로 구축을 기반으로 한 근사치를 반환해요.
- 유지보수 비용의 경우 이 함수는 테이블에 대한 최근 변경 사항(시간에 따른 바이트 변경)을 기반으로 추정치를 계산해요.
- 이 함수를 호출하려면 사용 중인 웨어하우스가 있어야 해요. 현재 사용 중인 웨어하우스가 없으면 함수는 다음 오류를 보고해요:
웨어하우스 크기는 이 함수의 성능에 영향을 주지 않으므로 X-Small 웨어하우스를 사용할 수 있어요.No active warehouse selected in the current session. Select an active warehouse with the 'use warehouse' command. - 이 함수는 웨어하우스를 사용하므로 이 함수에 대한 웨어하우스 사용량이 청구돼요.
- 이 함수는 완료되는 데 약 20초에서 10분이 걸릴 수 있어요. 더 큰 웨어하우스를 사용해도 실행이 빨라지지 않아요.
예시
다음 예시는 테이블에 검색 최적화를 추가하는 예상 비용을 보여줘요:
SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('table_without_search_opt') AS estimate_for_table_without_search_optimization;
+---------------------------------------------------------------------------+
| ESTIMATE_FOR_TABLE_WITHOUT_SEARCH_OPTIMIZATION |
|---------------------------------------------------------------------------|
| { |
| "tableName" : "TABLE_WITHOUT_SEARCH_OPT", |
| "searchOptimizationEnabled" : false, |
| "costPositions" : [ { |
| "name" : "BuildCosts", |
| "costs" : { "value" : 11.279, "unit" : "Credits" }, |
| "computationMethod" : "Estimated", |
| "comment" : "estimated via sampling" |
| }, { |
| "name" : "StorageCosts", |
| "costs" : { "value" : 0.070493, "unit" : "TB" }, |
| "computationMethod" : "Estimated", |
| "comment" : "estimated via sampling" |
| }, { |
| "name" : "MaintenanceCosts", |
| "costs" : { "value" : 30.296, "unit" : "Credits", "perTimeUnit" : "MONTH" }, |
| "computationMethod" : "Estimated", |
| "comment" : "Estimated from historic change rate over last ~11 days." |
| } ] |
| } |
+---------------------------------------------------------------------------+
다음 예시는 EQUALITY 검색 방법을 사용해 테이블의 세 특정 컬럼에 대한 검색 최적화를 추정한 출력을 보여줘요(즉, 이 컬럼들에 대한 동등 비교에만 검색 최적화를 활성화하는 추정치예요):
SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('table_without_search_opt', 'EQUALITY(C1, C2, C3)') AS estimate_for_columns_without_search_optimization;