26Z07c

Young-Kyoo Kim·2026년 8월 7일

prefix 컬럼이 단일 직계 부모 경로(예: a/b/c)만 문자열로 저장되어 있어, 단순 GROUP BY prefix로는 상위 경로(a/ 또는 a/b/)가 하위 경로들의 합계를 포함하는 계층구조(Hierarchy)를 인지하지 못하기 때문에 발생하는 문제입니다.

StarRocks에서 특정 Prefix 이하의 모든 하위 객체를 재귀적(Recursive)으로 포함하여 즉시 집계하는 가장 효율적인 방법은 아래 2가지입니다.


방법 1. Direct Query (LIKE 'prefix/%') — 가장 빠른 표준 방식

View 대신 object_key에 Prefix 범위 검색(LIKE)을 적용합니다. StarRocks는 Prefix Index를 지원하여 수억 건의 데이터에서도 Sub-second 단위로 즉시 재귀 집계를 반환합니다.

-- 'photos/2026/' 및 그 하위 모든 폴더/파일 재귀 집계
SELECT 
    bucket,
    'photos/2026/' AS search_prefix,
    COUNT(1) AS total_object_count,
    SUM(size_bytes) AS total_size_bytes
FROM object_current_state
WHERE bucket = 'my-bucket'
  AND object_key LIKE 'photos/2026/%' -- 핵심: %를 붙여 하위 전 경로 포함
  AND __deleted = 0;

방법 2. N-Depth(폴더 깊이별) 집계 View

특정 Depth(예: 1단계 상위 폴더, 2단계 상위 폴더) 기준으로 하위 전체를 묶어서 보고 싶다면, split_part() 함수를 활용하여 Depth별 재귀 집계 뷰를 생성할 수 있습니다.

1단계 Depth(최상위 폴더) 기준 하위 전체 재귀 집계 뷰

CREATE VIEW v_top_prefix_summary AS
SELECT 
    bucket,
    -- 경로의 첫 번째 슬래시 이전(최상위 폴더명) 추출
    if(locate('/', object_key) > 0, split_part(object_key, '/', 1), '') AS top_level_prefix,
    COUNT(1) AS total_object_count,
    SUM(size_bytes) AS total_size_bytes
FROM object_current_state
WHERE __deleted = 0
GROUP BY bucket, split_part(object_key, '/', 1);

요약 및 추천 사용법

  1. 특정 경로 지정 검색 API / Query: 방법 1 (object_key LIKE 'prefix/%')이 별도 뷰 생성 없이 가장 유연하며 성능이 가장 뛰어납니다.
  2. Dashboard / 대시보드 표현: 1 depth, 2 depth 등 고정된 계층 레벨로 표현할 때는 방법 2 (split_part)를 적용한 View를 활용하세요.

0개의 댓글