prefix 컬럼이 단일 직계 부모 경로(예: a/b/c)만 문자열로 저장되어 있어, 단순 GROUP BY prefix로는 상위 경로(a/ 또는 a/b/)가 하위 경로들의 합계를 포함하는 계층구조(Hierarchy)를 인지하지 못하기 때문에 발생하는 문제입니다.
StarRocks에서 특정 Prefix 이하의 모든 하위 객체를 재귀적(Recursive)으로 포함하여 즉시 집계하는 가장 효율적인 방법은 아래 2가지입니다.
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;
특정 Depth(예: 1단계 상위 폴더, 2단계 상위 폴더) 기준으로 하위 전체를 묶어서 보고 싶다면, split_part() 함수를 활용하여 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);
object_key LIKE 'prefix/%')이 별도 뷰 생성 없이 가장 유연하며 성능이 가장 뛰어납니다.split_part)를 적용한 View를 활용하세요.