카테고리
Version
생성자
U
Untitled- 4.0.16
- 동작 변경
- 개선 사항
- 버그 수정
- 4.0.14
- 동작 변경
- 개선 사항
- 버그 수정
- 4.0.13
- 동작 변경
- 개선 사항
- 버그 수정
- 4.0.12
- 동작 변경
- 개선 사항
- 버그 수정
- 4.0.11
- 동작 변경
- 개선 사항
- 버그 수정
- 4.0.10
- 동작 변경
- 개선 사항
- 버그 수정
- 4.0.9
- 동작 변경
- 개선 사항
- 버그 수정
- 4.0.8
- 동작 변경
- 개선 사항
- 버그 수정
- 4.0.7
- 동작 변경
- 개선 사항
- 버그 수정
- 4.0.6
- 개선 사항
- 버그 수정
- 4.0.5
- 개선 사항
- 버그 수정
- 4.0.4
- 개선 사항
- 버그 수정
- 4.0.3
- 개선 사항
- 버그 수정
- 4.0.2
- 새로운 기능
- 개선 사항
- 버그 수정
- 동작 변경
- 4.0.1
- 개선 사항
- 버그 수정
- 동작 변경
- 4.0.0
- Data Lake Analytics
- Security and Authentication
- Storage Optimization and Cluster Management
- Query and Performance Improvement
- Functions and SQL Syntax
- Behavior Changes
- 4.0.0-RC
- 데이터 레이크 분석
- 보안 및 인증
- 스토리지 최적화 및 클러스터 관리
- 쿼리 및 성능 개선
- 함수 및 SQL 구문
4.0.16
출시일: 2026년 9월 30일
동작 변경
- AWS SDK의 기본 HTTP 클라이언트가 Poco에서 SDK 자체 클라이언트로 다시 전환되었습니다. 이에 따라
enable_poco_client_for_aws_sdk의 기본값이false로 변경되었으며, 이전 동작으로 되돌리려면true로 설정합니다. #78375 - jemalloc의 전용 oversize arena가 기본적으로 활성화되어, 대용량 할당이 더 이상 호출 스레드의 CPU별 arena에 배치되지 않습니다. 이를 통해 대용량 버퍼의 재사용이 개선되고 단편화가 줄어들며, BE 및 CN 메모리가 arena 간에 분배되는 방식이 변경됩니다. #78396
- 통합 txn log가 완전히 기록되지 않은 Shared-data 트랜잭션은 이제 커밋 시점에 거부됩니다. 이전에는 커밋된 뒤
txn log list does not contain txn log of tablet오류와 함께 publish가 영구적으로 실패했습니다. 또한replication_num이 더 이상 Shared-data 쓰기 쿼럼을 약화시키지 않습니다. #78162 - Shared-data 파티션이 이제 배치 publish 시 각 중간 버전을 거치지 않고 최종 버전으로 바로 진행합니다. 따라서 쿼리가 태블릿 메타데이터 객체가 없는 중간 버전을 요청하여
The specified key does not exist오류가 발생하는 문제가 더 이상 발생하지 않습니다. #79175 - 계속 실패하는 Shared-data publish는 이제 매 시도마다
previous publish version task has not finished메시지를 출력하는 대신 백오프하며 재시도 로그 출력을 제한합니다. 이전에는 장애 상황에서 이 메시지가 FE Leader의 CPU와 로그 용량을 대부분 차지할 수 있었습니다. #79299 - 사용자 오류로 취소된 Shared-data 로드는 이제 파생된
AsyncDeltaWriter has been closed오류 대신 원래 오류를 보고합니다. #78632 - HDFS 파일을 닫기 전에 더 이상
hsync를 수행하지 않습니다.hsync는 별도 변경으로 이미 수정된 크래시에 대한 우회책이었으며, 파일을 닫을 때마다 모든 DataNode 복제본에서fsync()를 강제했습니다. #78864 - NULL 개수를 실제보다 적게 보고하는 Parquet
null_count를 디코딩 및 프루닝 과정에서 더 이상 그대로 신뢰하지 않습니다. 이전에는 구버전 parquet-mr로 작성된 파일에서 손상된 값이 반환되거나 행이 누락되었습니다. #78329 !=,NOT IN,IS NOT NULL에 대한 List 파티션 프루닝이 더 이상 값 목록에NULL이 포함되어 있다는 이유만으로 다중 값 파티션을 제외하지 않습니다. 이러한 테이블에 대한 쿼리(조인 키에IS NOT NULL을 도출하는 조인 포함)가 이전에 누락되던 non-null 행을 반환합니다. #78946- 이제 Batch DDL로 유효한
DATE값인0000년부터 시작하는 날짜 Range 파티션을 생성할 수 있습니다. 이전에는 이러한 구문이the range of the partition is invalid오류로 실패했습니다. #78746 - 직렬화된 datetime 파티션 경계가 이제 마이크로초를 유지합니다. 이전에는 연산자 우선순위 오류로 인해 소수 초가 시프트된 값이 아닌 시프트 거리에 더해져 경계가 손상되었고, 메타데이터 replay가 차단될 수 있었습니다. #78922
max_partitions_in_one_batch및 파티션 개수 제한이 이제 현재 요청이 생성하려는 파티션까지 포함하여 계산합니다. 크기가 초과된 배치는 허용된 후 다음 배치에서야 실패하는 대신 사전에 거부됩니다. #79379- 스트리밍 집계 튜닝이 이제
HAVING이후 남은 행 수가 아닌 group-by 카디널리티를 기준으로 수행됩니다. 따라서HAVING절이 대부분의 그룹을 걸러내는 쿼리에서 더 이상 로컬 사전 집계(pre-aggregation)가 사라지지 않습니다. #79064 - 외부 Iceberg 또는 Hive 테이블이나
FILES()테이블 함수를 대상으로 하는 DML, 그리고 비동기 머티리얼라이즈드 뷰 새로 고침에 대해 감사 로그 행에 이제scanBytes,scanRows,returnRows,cpuCostNs,memCostBytes가 기록됩니다. 이전에는 이 필드들이0으로 보고되었습니다. #74072 #74954 information_schema.materialized_views및SHOW MATERIALIZED VIEWS를 채우는 동안 실행되는 내부 쿼리가 이제statistic_collect_query_timeout(기본값 1시간) 대신 외부 구문의query_timeout으로 제한됩니다. 따라서 이러한 구문이 자체 타임아웃을 훨씬 넘겨 멈춰 있는 문제가 더 이상 발생하지 않습니다. #77585- SQL 블랙리스트 검증이 매칭 중에 더 이상 전역 읽기 잠금을 보유하지 않습니다. 따라서 비용이 큰 패턴이나 동시에 실행되는
ADD/DELETE SQLBLACKLIST로 인해 SQL 진입 지점에서 모든 쿼리가 지연되는 문제가 더 이상 발생하지 않습니다. #78476 paimon.option.cache-enabled = false설정으로 다시 Paimon 메타데이터 캐시를 비활성화할 수 있습니다. #78271- Paimon 카탈로그의 백그라운드 메타데이터 새로 고침이 이제 매 주기마다 전체 웨어하우스를 열거하고 다시 로드하는 대신, 최근에 접근되었고 변경된 테이블만 확인합니다. StarRocks에서 한 번도 쿼리되지 않은 테이블은 더 이상 새로 고침되지 않습니다. #78057
- Paimon 테이블의
VARCHAR컬럼이 이제 잘못된 길이 대신 Paimon 스키마에 선언된 길이를 보고합니다. #68383 - Iceberg REST 카탈로그에서
ALTER TABLE ... RENAME이 더 이상NullPointerException으로 실패하지 않습니다. #76498 DECIMAL파티션 필드가 있거나 nulltimestamptz파티션 값이 있는 Iceberg 테이블의$partitions메타데이터 테이블을 읽을 때 더 이상NullPointerException으로 실패하지 않습니다. #77742- 오래된(stale) 파티션이 많은 테이블의 통계 상태(health)가 더 이상
1.0근처에 고정되어 보고되지 않으므로, 필요한 시점에 자동 ANALYZE가 트리거됩니다. 이전에 정상으로 간주되던 테이블이 이제 다시 분석될 수 있습니다. #76927 - 이름에
#등 특수 문자가 포함된 컬럼이 더 이상 저카디널리티 딕셔너리 수집 쿼리를ParsingException으로 실패시키지 않습니다. 생성되는 별칭(alias)이 따옴표로 감싸집니다. #77132 - group-by 키로 다른 집계와 조인되는
GROUPING SETS집계가 더 이상 플래닝 단계에서no executable plan for this sql오류로 실패하지 않습니다. #77296 encode_sort_key가 이제 저장된 단일 요소를 모든 행 버퍼에 기록하는 대신 상수 인수를 행마다 한 번씩 확장합니다. #77847- Leader FE로 전달된 구문이 이제 감사 로그와 쿼리 프로파일에서 AST로부터 재구성된 형태 대신 원래의 SQL 텍스트를 유지합니다. #77982
- FE별 24비트 카운터가 순환(wrap)된 연결 ID가 더 이상 활성 연결과 충돌하지 않습니다. 이전에는 이로 인해 기존 세션이 가려지고 전역 및 사용자별 연결 수 집계가 어긋났습니다. #78217
- 태블릿 스키마에 없는 컬럼이 더 이상 술어(predicate) 푸시다운 중에 BE를 중단시키지 않으며, 해당 술어는 단순히 푸시다운되지 않습니다. #79234
OlapTableSink초기화가 실패하면, 부분적으로 초기화된 sink가 더 이상 전체 close 경로를 거치지 않습니다. 이전에는 생성되지 않은 상태를 역참조하여 BE가 중단될 수 있었습니다. 대신 원래의 초기화 오류가 반환됩니다. #79370- Short key 인덱스 페이지 구조(geometry)가 이제 32비트 오버플로 없이 검증되므로, 손상된 페이지 footer가 값이 순환(wrap)되어 힙 범위 초과 쓰기를 유발하는 대신 거부됩니다. #79048
- TLS 핸드셰이크가 타임아웃된 HTTPS 요청이 더 이상 연결된 것으로 간주되어 동일한 소켓에서 재시도되지 않습니다. 정체된 요청은 이제
connect_timeout과 두 번의 수신 타임아웃을 합한 시간이 아니라 약 한 번의 타임아웃 후에 실패합니다. #79369 - 저카디널리티 컬럼에 대해
ARRAY또는STRUCT를 반환하는 표현식이 더 이상 딕셔너리 ID 기반으로 동작하도록 재작성되지 않습니다. 이전에는 이로 인해 fragment prepare 단계에서 BE가 크래시되었습니다. #78488 - Shared-nothing 클러스터에서 FE 재시작 후
starrocks_fe_max_tablet_compaction_score가 올바르게 보고됩니다. 활성get_tablets_info응답에 이제 태블릿 최대 컴팩션 점수가 포함됩니다. #78496 - FE feature 로그 파일이 일반 로그 디렉터리 대신
feature_log_dir아래에 기록됩니다. #77221 - 끝에 개행 문자가 없는 마지막 줄의
be.conf및fe.conf항목이 이제 조용히 무시되지 않고 정상적으로 읽힙니다. #78065
개선 사항
- 머티리얼라이즈드 뷰에 대한 Fast Schema Evolution을 지원합니다. #67915
- grouping-sets 푸시다운 규칙을
MAX,MIN,SUM에 더해AVG와COUNT로 확장하여, 3단계를 초과하는ROLLUP,CUBE,GROUPING SETS쿼리의 속도를 높였습니다. #77832 - lake 세그먼트 메타데이터 캐시 앞단의 프로세스 전역 잠금을 제거하고, 샤딩된 LRU 캐시가 자체적으로 잠금을 처리하도록 했습니다. #78260
- 컴팩션 및 복제(replication)가 rowset을
compaction_inputs에 보관할 때 한 번도 읽히지 않는delete_predicate를 제거하여, Shared-data 클러스터에서 태블릿 메타데이터 비대화를 근본적으로 해소합니다. #76870 - 모든 spill 가능한 연산자의 spill 활동을 집계하고 로컬 및 원격 스토리지 백엔드별로 구분하는 서버 수준 spill 메트릭을 추가했습니다. #71827
- 가장 뒤처진 Follower 또는 Observer가 replay한 journal ID 기준으로 Leader보다 얼마나 뒤처져 있는지를 보고하는 Leader FE 게이지
max_journal_replay_lag를 추가했습니다. #78382 - BE 또는 CN이 시작될 때 사용된 jemalloc 런타임 옵션을 이제
jemalloc_conf설정 항목을 통해 확인할 수 있으며,dirty_decay_ms,muzzy_decay_ms등 변경 가능한 옵션은 재시작 없이 런타임에 변경할 수 있습니다. #75344 #78333 - jemalloc 관측성을 확장했습니다. dirty 및 muzzy 페이지 메트릭을 추가하고, 메타데이터 총량을 extent 메타데이터와 rtree로 세분화했으며,
be.INFO에stats.mapped와stats.retained를 출력하고,/memz가 jemalloc 자체 통계 옵션을 받을 수 있도록 하여 실행 중인 BE에서 arena별 섹션과 extent size-class 세부 내역을 확인할 수 있습니다. #78159 #78225 #78320 #79090 - arm64에서 64K 페이지 jemalloc과 함께 4K 페이지 jemalloc 변형도 빌드되어 런타임에 선택되므로, 일반적인 4K 페이지 커널에서 64K 페이지 단위로 인한 메모리 오버헤드를 방지합니다. jemalloc 라이브러리는 이제 런타임 심볼릭 링크 조작 대신
LD_LIBRARY_PATH로 선택되는 전용 디렉터리에 위치합니다. #77886 #67667
버그 수정
다음 이슈들이 수정되었습니다:
SHOW PROFILELIST,ANALYZE PROFILE,get_query_profile(),/api/profile이 인증된 모든 사용자에게 다른 사용자의 SQL 텍스트와 실행 계획을 포함한 캐시된 모든 프로파일을 반환하는 문제를 수정했습니다. 새로운 FE 설정authorization_enable_query_profile_access_check는 캐시된 프로파일에 대한 접근을 해당 쿼리를 실행한 사용자와SYSTEM OPERATE권한 보유자로 제한합니다. #79375- Ranger 모드에서 외부 테이블 기반의 뷰 및 머티리얼라이즈드 뷰에 대한 컬럼 권한 검사가 잘못 처리되는 문제를 수정했습니다. #56316
- 보안 취약점(CVE)을 해결했습니다: Apache Ranger를 2.9.0으로, Bouncy Castle을 1.85로, Apache HttpClient5를 5.6.4로, HttpCore를 5.4.3으로, Netty를 4.1.137.Final로, ZooKeeper를 3.8.7 및 3.9.6으로, Broker의 Tomcat을 9.0.121로, commons-lang3를 3.20.0으로 업그레이드했으며, 모든
io.grpc아티팩트를grpc-bom을 통해 버전을 정렬했습니다. 또한 테스트 범위(test-scope) jar 파일은 더 이상 java-extensions reader lib 디렉터리에 포함되지 않습니다. #79331 #79538 #77753 #78287 #79707 #79719 #77748 #77171 #77752 - StarOS, starlet, starcache를 v4.0.8로 업그레이드했습니다. #79478 #77717
- 권한 부여(authorization) 검사,
INSERT계획 수립, 뷰 확장, 권한 검사,inspect_mv_refresh_info,CREATE TABLE AS SELECT의FILES()스키마 추론이 모두 FE 메타데이터 락을 보유한 상태에서 외부 카탈로그와 왕복 통신을 수행하여, 메타스토어가 느릴 경우 동일한 락을 기다리는 모든 DDL이 지연되는 문제를 수정했습니다. 이제 해당 호출은 락 외부에서 수행됩니다. #79319 #79226 #78772 lock()이 도중에 실패했을 때PlannerMetaLocker가 성공적으로 락을 획득하지 못한 메타데이터까지 언락하는 문제를 수정했습니다. #74041FULL OUTER JOIN ... USING (c1, c2, ...)이 잘못된 값을 반환하는 문제를 수정했습니다. 첫 번째USING컬럼만 올바르고 이후의 모든 컬럼은 직전 컬럼의 값을 담고 있었으며, 동일한 쿼리에ORDER BY <ordinal>을 추가하면IndexOutOfBoundsException으로 실패했습니다. #79298GROUPING SETS,ROLLUP,CUBE가 UNION으로 재작성될 때HAVING술어가 유실되어, 필터링되어야 할 행이 쿼리 결과로 반환되는 문제를 수정했습니다. #79415GROUP BY ROLLUP(a, b, a), 그리고 하나의 세트 내에서 같은 컬럼을 두 번 지정한CUBE또는GROUPING SETS가 동일한 키를 두 번 포함하는 그룹핑 세트를 생성하는 문제를 수정했습니다. #78261- Aggregate 키 테이블 위의 집계를 제거할 때 쿼리의
LIMIT이 스토리지 계층에 도달하기 전에 누락되어, BE가 테이블 전체를 읽는 문제를 수정했습니다. #79414 OR조인을 UNION으로 분할할 때, UNION의 출력 컬럼과 첫 번째 브랜치는 컬럼 ID 순으로 정렬된 반면 나머지 브랜치는 프로젝션 맵의 순회 순서를 따르면서 브랜치 간 컬럼 정렬이 일관되지 않는 문제를 수정했습니다. #79473- 스큐 조인(skew-join) 재작성이 외부 조인의 보존(preserved) 측을 복제하여, 하나의 입력 행이 여러 번 반환되고 실행할 때마다 결과가 달라지는 문제를 수정했습니다. 이제 이 경우에는 솔팅(salting)을 건너뜁니다. #79168
- 브랜치가 비트맵 인덱스로 부분적으로만 커버되는
OR하위의 술어가 비트맵 범위 적용 후 제거되어,(a = 1 AND b = 2) OR (a = 2 AND b = 3)이(a = 1, b = 3)과 매칭되는 등의 거짓 양성(false positive)이 발생하는 문제를 수정했습니다. #76275 OR서브트리 내부의 술어에서만 읽는 컬럼이 GIN 역인덱스 필터링 이후 읽기 대상 집합에서 제거(prune)되어, 남은 술어가 실제로 읽지 않은 컬럼을 대상으로 평가되는 문제를 수정했습니다. #77659- 가드가 수집 주기 완료 여부만 확인하고 해당 RPC의 성공 여부는 확인하지 않아, 술어가 없는
COUNT(*)가 visible 버전을 커버하지 않는 태블릿 행 수로부터 폴딩(folding)될 수 있는 문제를 수정했습니다. #77190 - 윈도우 집계 위의
SELECT DISTINCT에서 DISTINCT를 윈도우 아래로 푸시다운한 후 프로젝션에 제거된 컬럼이 남는 문제를 수정했습니다. #77218 - 집계 윈도우와 순위(rank) 관련 윈도우가 동일한 정렬 그룹에 속하지 않는 경우에도 순위 윈도우 사전 집계(pre-aggregation)가 적용되는 문제를 수정했습니다. #77068
bitmap_union_count()와 같이 항상 NULL이 아닌 집계 위의 윈도우가 선언된 NULL 허용 여부(nullability)를 잃어, 그 위의DISTINCT또는GROUP BY가error nullablel column으로 실패하는 문제를 수정했습니다. #79009FOLLOWING오프셋에서 시작하는 분석(analytic) 프레임이 현재 행을 누락하는 문제를 수정했습니다. #77342- 윈도우의
PARTITION BY또는ORDER BY절에 있는 서브쿼리가slot type shouldn't be invalid오류로 계획 수립에 실패하는 문제를 수정했습니다. #77087 Analytor::prepare()가 함수 목록을 맨 마지막에서야 채우기 때문에, 도중에 오류가 발생하면 소멸자가 빈 벡터의 범위를 넘어 읽어 BE가 종료되는 문제를 수정했습니다. #77758- 병합(merge) 단계 집계가 이미 대체된 상수 인자를 다시 추가하여, 이후의 모든 상수 인자가 한 슬롯씩 오른쪽으로 밀리는 문제를 수정했습니다. #77069
- decimal 배열에 대한
count()가INVALID결과 타입을 생성하여slot type shouldn't be invalid오류로 실패하는 문제를 수정했습니다. #77092 - 다중 컬럼
count(DISTINCT)를 위해 생성된if()가 decimal 타입을 잃어, BE가DECIMAL(-1,-1)타입의 표현식을 받고 중단(abort)되는 문제를 수정했습니다. #77346 - 공통 플랜 퓨전(common plan fusion)이
_if콤비네이터 폴백 검사를 건너뛰고GROUP BY규칙이 표현식의 일부 자식에만 적용되어,SELECT max(s) LIKE s FROM t가Invalid plan으로 실패하는 문제를 수정했습니다. #77099 - 분석(analysis) 이후 옵티마이저가 인자를 상수로 폴딩할 때
corr,covar_pop,covar_samp로 인해 BE가 크래시되는 문제를 수정했습니다. #77216 percentile_cont병합이 소진(exhaustion) 여부를 위치가 아닌 값으로 추적하여 BE가 중단될 수 있는 문제를 수정했습니다. #77261- 집계 상태(aggregate-state) 컬럼에 글로벌 딕셔너리가 사용되고 해당 하위 필드가 제거(prune)되어, 두 경우 모두 다운캐스트 실패로 BE가 중단되는 문제를 수정했습니다. #77096 #77901
- 합성(synthetic) 하위 필드 컬럼에 집계 타입이 없어, Aggregate 테이블에서 JSON 하위 필드 집계가 원시
NullPointerException으로 실패하는 문제를 수정했습니다. #77952 - 자식이 value 연산자일 때
CTEAnchor가 제거(prune)되지 않아MultiCastPlanFragment don't support return result오류가 발생하는 문제를 수정했습니다. #64491 - 플랜 복제기(duplicator)가 limit을 집합 연산자로 취급하여, 플랜 복제 시 모든
LogicalLimit에서ClassCastException이 발생하는 문제를 수정했습니다. #77692 - 조인 재정렬(join reorder) 중 UKFK 제약 조건이 조건부로 수집되어
enable_ukfk_join_reorder가NullPointerException으로 실패할 수 있는 문제를 수정했습니다. #77197 - 옵티마이저 실행 중에 colocate 그룹 안정성이 재평가되어, colocate 테이블에 대한 쿼리 계획 수립이
Cannot invoke "PhysicalPropertySet.equals(Object)" because "enforcedProperty" is null오류로 실패할 수 있는 문제를 수정했습니다. #77091 - 소스가 로컬 셔플을 수행할 수 없는 브랜치가 그룹화된 exchange 없이 colocate 실행 그룹에 남아, colocate
UNION,EXCEPT,INTERSECT가 행(hang) 상태에 빠질 수 있는 문제를 수정했습니다. #77025 - 양수가 아닌 순위(ranking) 술어가 TopN으로 푸시되어 BE가 중단되는 문제를 수정했습니다. #77445
- 병렬 스트리밍 DISTINCT 인스턴스들이 공유하는 글로벌 limit이 결과를 잘못 잘라내는 문제를 수정했습니다. #77086
DeferProjectAfterTopNRule이 스캔의 액세스 경로(access path)를 컬럼 ID가 아닌 컬럼 이름으로 매칭하여, 이름이 변경된 컬럼의 하위 필드 프루닝이 누락되는 문제를 수정했습니다. #77987- BE가 액세스 경로로 프루닝하지 않은 경우에도 OLAP 스캔의 복합 타입이 축소(narrow)되어, 다운스트림 연산자가 BE가 실제로 구체화하지 않은 타입으로 컬럼을 생성하는 문제를 수정했습니다. #77894
- 술어 표현식 재사용으로 스캔에서 끌어올려진 사용되지 않는(dead) 하위 필드 슬롯이 제거되지 않아 BE가 중단되는 문제를 수정했습니다. #77456
PruneComplexTypeUtil이 복합 컬럼에 대한CASE WHEN처럼 기술할 수 없는 표현식을 하나라도 만나면 문장 내 모든 컬럼에 대해 복합 타입 하위 필드 프루닝을 비활성화하는 문제를 수정했습니다. 이제 이러한 중단(bail-out)은 원인이 된 표현식으로 범위가 한정됩니다. #79181- 스캔의 heavy-expression 결과 컬럼이 슬롯의 NULL 허용 여부에 맞게 정규화되지 않아 BE가 크래시되는 문제를 수정했습니다. #77242
- 쿼리 캐시가
SortNode에서 생성된TOPN_FILTER아래에서 구축된 항목을 제공할 수 있고, 캐시 다이제스트가 스캔 스키마, ASOF 조인의 시간 조건, 조인 술어의 공통 하위 표현식, ANN 검색 사양을 포함하지 않아 서로 관련 없는 쿼리가 충돌할 수 있는 문제를 수정했습니다. #77404 #77559 #77563 #77565 #77586 - 쿼리 캐시가 파티션된 해시 조인에 레인(lane)을 재사용할 때 BE가 크래시되고, 레인의 조인 빌드 측이 비어 있을 때 행(hang) 상태에 빠지는 문제를 수정했습니다. #77564 #77571
- 부분적으로 재작성된 뷰 기반 머티리얼라이즈드 뷰 재작성이 스캔을 인라인된 플랜으로 다시 대체할 때 뷰 스캔의 프로젝션이 누락되는 문제를 수정했습니다. #77613
- 파티션 술어가 푸시다운되지 않아 Paimon 베이스 테이블에 대한 머티리얼라이즈드 뷰 새로 고침이 전체 스캔을 수행하는 문제를 수정했습니다. #61813
- 머티리얼라이즈드 뷰에
partition_retention_condition이 있을 때REFRESH MATERIALIZED VIEW ... FORCE가 아무런 오류 없이 아무것도 새로 고치지 않는 문제를 수정했습니다. #77671 - 파티션 또는 스키마 DDL 수행 시 컬럼 min/max 통계 캐시가 무효화되지 않아, 오래된 항목이 무기한 제공될 수 있는 문제를 수정했습니다. #77441
- 카탈로그, 데이터베이스, 테이블 이름으로 인해 인코딩된
table_uuid기본 키가 BE 제한을 초과하면, 외부 테이블에 대한 백그라운드 자동 ANALYZE가primary key size exceed the limit오류로 실패할 수 있는 문제를 수정했습니다. 이제table_uuid는 해시 처리됩니다. #75735 CancelableAnalyzeTask.cancel()이 원자적 compare-and-set 없이 상태를 읽고 써서, 둘 이상의 호출자가 취소에 성공할 수 있는 문제를 수정했습니다. #78593- 메타스토어 또는 AWS Glue가 컬럼 통계 읽기 권한을 거부하면 Hive 계열 카탈로그가 완전히 실패하는 문제를 수정했습니다. 이제 빈 통계로 대체(degrade)됩니다. 또한 Glue 컬럼 통계 요청에
catalogId가 포함되어, 크로스 계정 배포 환경에서 설정된 카탈로그로부터 통계를 읽습니다. #78455 #78461 - Elasticsearch 외부 테이블과 Elasticsearch 카탈로그가 버전 8 또는 9를 실행하는 클러스터를
Unsupported/Unknown ES Cluster version오류로 거부하고, 동시 실행 쿼리가 서로의 요청 URL 파라미터를 덮어써Column 'id' cannot be resolved와 같은 관련 없는 분석 오류가 발생할 수 있는 문제를 수정했습니다. #78267 #79391 - Paimon 테이블의
DECIMAL컬럼에 대한 술어가 해당 컬럼의 PaimonDecimalType이 아닌 StarRocks 타입 계열의 기본 정밀도(precision)와 스케일(scale)로 변환되어, 리터럴이 값을 표현할 수 없는 문제를 수정했습니다. #78760 - Iceberg 뷰 메타데이터에
default-catalog가 기록되어 있지 않은 경우, 그리고 뷰 본문이 CTE를 참조하는 경우 커넥터 뷰 내부의 테이블 참조가 잘못 한정(qualify)되는 문제를 수정했습니다. #77887 - 메타데이터 파일이 스토리지에서 누락된 Iceberg 테이블을
DROP TABLE IF EXISTS ... FORCE로도 삭제할 수 없는 문제를 수정했습니다. #77786 - 필터가 파티션 경계와 일치하지 않을 때 Iceberg 테이블에 대한
ALTER TABLE ... EXECUTE rewrite_data_files() WHERE <filter>가 아무런 오류 없이 행을 유실하는 문제를 수정했습니다. #77797 - Hadoop 설정 키에 스킴(scheme)이 포함되어, 엔드포인트가 전체 URL로 설정된 경우 Azure Blob 자격 증명 조회가 실패하는 문제를 수정했습니다. 이제 엔드포인트는 파일 시스템 authority로 정규화됩니다. #78241
- 풀링된 Poco 세션이 재사용될 때 오브젝트 스토리지 요청에 대해 계산된 송신 및 수신 타임아웃이 누락되어, 연결 타임아웃만 적용되는 문제를 수정했습니다. #78361
- 커넥터 스캔을 통해
FIXED_LEN_BYTE_ARRAY로 저장된 ParquetDECIMAL컬럼을 쿼리할 때, 동일한 쿼리를 실행할 때마다 비결정적으로 손상된 값을 반환하고 아무런 오류 없이 행을 유실할 수 있는 문제를 수정했습니다. #78685 - 손상된
DELTA_BINARY_PACKED페이지 헤더가 반환되지 않고 throw되었으며,Status는 예외 타입이 아니므로 아무 곳에서도 이를 catch하지 못하는 문제를 수정했습니다. #77446 - Parquet 디코더 스크래치 버퍼가 스택 상의 가변 길이 배열로 할당되어, 큰 데이터 페이지에서 오버플로가 발생할 수 있는 문제를 수정했습니다. #77616
'[0].value.url'처럼 배열 인덱스를 포함한 JSON 경로가 배열 길이가 인덱스보다 짧은 모든 행에 대해 C++ 예외를 발생시켜, 대규모 스캔이 스택 언와인더(unwinder) 내부에서 락 콘보이(lock convoy)로 변하는 문제를 수정했습니다. 이제 인덱스의 범위를 검사합니다. #78569- 세그먼트 간 flat JSON 스키마가 다를 때
JsonColumn::append가 범위를 벗어나 읽고 아무런 오류 없이 행을 유실하는 문제를 수정했습니다. #77090 - 집합 연산이 키를 역직렬화할 때 JSON 키 컬럼이 재구성되지 않아 BE가 중단되는 문제를 수정했습니다. #77215
- 병합기(merger)가 이전 결과 컬럼을 유지하고 루트 메타데이터가 자식들을 고려하지 않아, Shared-data 모드에서 Flat JSON 수직(vertical) 컴팩션이 필요 이상으로 많은 메모리를 사용하는 문제를 수정했습니다. #77682
- 내부 람다가 끌어올린(hoist) 공통 하위 표현식이 이를 정의한 스코프를 벗어나, 중첩된
array_map및array_sort람다가Input dependency cols check failed또는Expr evaluate meet error: slot_id N not found오류로 계획 수립 또는 평가에 실패하는 문제를 수정했습니다. #78645 #78769 #78915 array_sort의 람다 비교자(comparator)가 정렬을 범위 밖으로 진행시킬 수 있고, 비교자 검증이 드라이버 간에 하나의 오류Status를 공유하여 이중 해제(double-free)가 발생할 수 있는 문제를 수정했습니다. #77687 #78314unnest및multi_unnest가 배열 오프셋을 부호 있는 32비트 정수로 읽어,2^31이상의 오프셋이 음수로 반환되고 BE가 크래시되는 문제를 수정했습니다. #78480 #78479- 입력이 잘린 UTF-8 선행 바이트로 끝날 때
substr,left,lpad,rpad,translate가 인접 행의 바이트를 반환하고,locate가 값의 끝을 넘어 검색하는 문제를 수정했습니다. #78722 strpos가INT32_MINinstance 인자에 대해 범위를 벗어난 인덱스에 접근하는 문제를 수정했습니다. #77260- 두 인자가 같은 월 또는 같은 연도에 속하고 두 번째 인자가 더 이른 시점일 때
timestampdiff(MONTH, ...),timestampdiff(YEAR, ...),months_diff,years_diff가0대신-1을 반환하는 문제를 수정했습니다. #79037 DateValue::weekday()가 범위를 벗어난 율리우스(Julian) 값에 대해 음수 인덱스를 반환하여,trunc_to_week()가 조회 테이블의 시작 이전 위치를 읽는 문제를 수정했습니다. #77310- Teradata 및 Joda 날짜/시간 파서가 입력 문자열의 끝을 넘어 읽어 BE가 중단되는 문제를 수정했습니다. #77098
generate_series(0, -2147483648, -1)처럼 표현할 수 없는 스텝 수에 대해generate_series가 크래시되는 문제를 수정했습니다. #77103- BE를 크래시시키는
tokenize및ngram_search의 상수 인자를 이제 거부하도록 수정했습니다. #77102 - 키 개수를 자식 수로부터 추론하여, 여러 키를 사용하는
dictionary_get호출에 대해EXPLAIN이 잘못된 딕셔너리 키 개수를 출력하는 문제를 수정했습니다. #78706 - run-sort 단계와 run-merge 단계가 서로 반대되는 NULL 규칙을 적용하여,
ARRAY,MAP,STRUCT컬럼의 내림차순 정렬에서 NULL 위치가 일관되지 않는 문제를 수정했습니다. #77679 EXCEPT및INTERSECT가 청크 내 가장 큰 행을 기준으로 직렬화 버퍼 크기를 결정하여, 하나의 큰 행 때문에 메모리 풀에 수백 GB를 요청할 수 있는 문제를 수정했습니다. 이제 이러한 경우 키를 행 단위로 직렬화합니다. #77821- Nested-loop 조인이 빈 청크에 대해 conjunct를 평가하고, null-aware anti join이 조인된 청크에 매칭된 행이 없을 때 프로브 행을 유실하여, 다중 BE 클러스터에서
NOT IN쿼리가 아무런 오류 없이 행을 누락하는 문제를 수정했습니다. #77344 #77970 - 세그먼트가 문자열 컬럼을 글로벌 딕셔너리 ID로 강제 인코딩해야 할 때 BE가
_switch_context에서 출력 스키마의 끝을 넘어 읽는 문제를 수정했습니다. #77660 - 이미 데이터가 있는 테이블에서 일반 컬럼과 생성 컬럼(generated column)을 하나의 문장으로 추가하는
ALTER TABLE이 BE를 종료시키는 문제를 수정했습니다. #77436 - Aggregate 테이블에서 집계 함수나
KEY키워드 없이ALTER TABLE ... ADD COLUMN을 실행하면 아무런 알림 없이 키 컬럼이 생성되어 테이블의 집계 단위(grain)가 변경되는 문제를 수정했습니다. 이제 이러한 문장은 모호한 것으로 간주되어 거부됩니다. #78359 - 인자 목록이 비어 있는
PARTITION BY RANGE(<partition-function>())가 파싱 오류 대신 원시IndexOutOfBoundsException을 발생시키는 문제를 수정했습니다. #75080 - 속성 키가 원래의 대소문자 그대로 BE에 전달되어,
CREATE TABLE에서USING GIN("IMP_LIB" = "builtin")이 허용된 후 모든INSERT가Can not get inverted imp type오류로 실패하는 문제를 수정했습니다. #77818 - 검사되지 않은
StatusOr언랩(unwrap)으로 인해 복구 가능한 오류가 예외로 바뀌어 파이프라인으로 전파되고, 자식 표현식 오류가 전파되지 않고 BE를 중단시키며, Thrift 프로세서를 벗어난 예외가 BE를 중단시키는 문제를 수정했습니다. #77052 #77442 #78805 GroupedExecutionSinkOperator::push_chunk가 로컬 exchanger가 반환한 상태를 무시하여, 스필(spill) 실패 및 exchanger 종료 상태가 보고되지 않는 문제를 수정했습니다. #77737SystemMetrics::update()가getline()버퍼를 스레드 간에 공유하여 이중 해제(double-free)가 발생할 수 있는 문제를 수정했습니다. #71040malloc_usable_size가 스레드별 데이터(thread-specific data)를 전체 조회하여 BE와 CN이 관련 없는 스택과 함께 jemalloc 내부에서 크래시될 수 있는 문제를 수정했습니다. 또한 힙 프로파일 토글이prof.thread_active_init에 값을 쓰고has_enable_heap_profile()이 boolean 타입인prof.active노드를int로 읽어, 프로파일링이 비활성화된 것으로 보고되고 이후의 프로파일이 손상되는 문제도 수정했습니다. #77625 #78384 #78820toString바인딩이 getter가 아닌 메서드로 등록되어, 스크립트의 외부 객체(foreign object)에 대한System.print()가 객체의 텍스트 대신instance of <Class>를 출력하는 문제를 수정했습니다. #78877ALTER SYSTEM DROP FOLLOWER또는DROP OBSERVER로 제거된 FE가 종료되지 않고 좀비 상태가 되어 계속 선거(election)를 수행하는 문제를 수정했습니다. #78215TabletInvertedIndex.markTabletsForceDelete()가 인덱스 쓰기 락을 보유한 상태에서 태블릿의 백엔드 ID를 조회하여, 레플리카 삭제와 함께 FE 교착 상태(deadlock)가 발생할 수 있는 문제를 수정했습니다. #78102- 스토리지 매체(storage medium)를 보고하지 않는 디스크에서 태블릿 스케줄러가
NullPointerException을 발생시키는 문제를 수정했습니다. #76966 - 자동 증가(auto-increment) 맵 삭제가 종료된 BE 및 CN을 기다려, 등록된 노드가 다운된 경우 해당 작업이 60초 타임아웃 전체 동안 블로킹되는 문제를 수정했습니다. #78561
- 머티리얼라이즈드 뷰 플랜 컨텍스트가 자체 스레드 풀에서 생성되는 경우처럼 옵티마이저에 쿼리 ID가 없을 때
PrepareCollectMetaTask가NullPointerException을 발생시키는 문제를 수정했습니다. #77051 - 선행 트랜잭션이 아직 존재하는 상태에서 트랜잭션을 의존성 그래프에서 제거하면 그래프가 손상되어, 이후 동일 테이블의 트랜잭션이 의존성 간선을 잃을 수 있는 문제를 수정했습니다. #78077
- 세 가지 FE 경로가 해석된 주소 대신 원시 컴퓨트 노드 호스트 이름을 BE에 전달하여, 컴퓨트 노드가 피어 호스트 이름을 직접 해석하게 되고 컨테이너 환경 배포에서 DNS 서버에 과부하를 일으킬 수 있는 문제를 수정했습니다. #78390
getLoadsRPC가 모든 로드 레코드를 단일 메시지로 반환하여, 부하가 많은 클러스터에서 리더 로그가FE RPC failure ... MaxMessageSize reached로 가득 차고loads_history아카이브가 롤백되어 행이 영구적으로 유실되는 문제를 수정했습니다. 이제 해당 RPC는 작업 ID 기준으로 페이지네이션됩니다. #78898task_runs를 읽는 동안 대기 큐, 실행 맵, 인메모리 이력, 아카이브 이력 사이를 이동한 task run이 두 번 보고될 수 있는 문제를 수정했습니다. #79438SHOW ALTER TABLE ROLLUP및SHOW ALTER MATERIALIZED VIEW가WHERE,ORDER BY,LIMIT을 허용하지만 실제로는 무시하는 문제를 수정했습니다(이전에는SHOW ALTER TABLE COLUMN만 이를 적용했습니다). 또한SHOW ALTER TABLE ROLLUP술어에서FinishedTime을 사용할 수 있습니다. #79281 #79498- 클라이언트 연결 해제가 워커가 아닌 XNIO I/O 스레드에서 인라인으로 처리되어, 실행 중인 쿼리를 종료(kill)할 때 이벤트 루프가 블로킹되는 문제를 수정했습니다. #77590
- SQL 블랙리스트를 로딩할 때 규칙마다 불변(immutable) 스냅샷을 재구성하고 정렬하여, 규칙 수에 대해 제곱 시간 복잡도를 가지며 이것이 매 FE 시작 및 체크포인트 시마다 실행되는 문제를 수정했습니다. #78752
- 컨슈머 스레드가 인터럽트된 후
hasMoreOutput을 해제하지 않은 채 인터럽트가 무시되어,AsyncTaskQueue가getOutputs()와tryGetOutputs()사이에서 바쁜 대기(busy-spin)를 하는 문제를 수정했습니다. #79297 TableKeeper가 JRE에 존재하지 않는jdk.jshell예외 타입을 선언하여, 해당 클래스에 대한 리플렉션이NoClassDefFoundError로 실패하는 문제를 수정했습니다. #79520- 다중 테이블 트랜잭션 Stream Load 인터페이스를 통해 표현식 파티션 테이블에 로딩할 때, BE가 파티션을 생성해야 하는 경우 커밋 단계에서
automatic create partition failed. error: txn ... not exist오류로 실패하는 문제를 수정했습니다. #78790 - 완료된 merge-commit 로드가
information_schema.loads에서 merge window 진행률을 완전하지 않게 보고할 수 있는 문제를 수정했습니다. #78723 - UTF-8이 아닌 바이트를 포함하는
VARCHAR컬럼으로 인해, 모든 태블릿 writer open RPC에서 딕셔너리 단어마다 protobuf가invalid UTF-8 data경고를 기록하는 문제를 수정했습니다. #78657 - 중간 쿼리 통계에 데이터 캐시 읽기 카운터가 누락되어, Shared-data 모드에서 감사 로그 필드
CacheHitRatio와 FE 캐시 적중률 메트릭이 실제보다 낮게 보고되는 문제를 수정했습니다. #77696 - Combined txn log 모드에서 로드가 취소되었을 때 자체 end-of-stream이 먼저 도착한 코디네이터가 txn log collector를 무기한 기다릴 수 있고, 파일 번들링이 쓰기를 건너뛰는 컴팩션 txn log가 캐시되지 않는 문제를 수정했습니다. #79389 #77578
- 기본 키(primary-key) 인덱스 SST 컴팩션 또는 delvec 페이지 체크섬에서 손상이 감지되면 재시도할 때마다 손상된 로컬 캐시 사본을 다시 읽어, 해당 항목이 우연히 제거(evict)될 때까지 작업이 같은 방식으로 실패하는 문제를 수정했습니다. 이제 손상된 항목을 삭제하고 읽기를 재시도합니다. #77481 #78086
- 복사(copy)로 축소된 부분 업데이트(partial-update) 재작성이 소스의 암호화 메타데이터를 누락하여, 어떤 리더도 열 수 없고 컴팩션으로도 재작성할 수 없는 세그먼트가 남는 문제를 수정했습니다. #79053
shutdown_staros_worker()가 글로벌 워커를 해제한 후 진행 중인 로드가 StarOS 기반 파일 시스템에 접근하면, 정상 종료(graceful shutdown) 중에 CN이 SIGSEGV로 크래시될 수 있는 문제를 수정했습니다. #79058AsyncFlushOutputStream::close()가 스트림 자체의 뮤텍스를 보유한 채로 promise를 완료하여, 대기자가 스트림을 소멸시킨 후 I/O 스레드가 해제된 메모리의 futex를 깨우는 문제를 수정했습니다. #79182- 샤드 그룹을 공유하는 스냅샷 보호 물리 파티션과 스냅샷 이후 물리 파티션에서, StarMgr 메타데이터 동기화가 스냅샷의 샤드를 삭제할 수 있어 스냅샷 복원이 안전하지 않고 태블릿 누락 오류가 발생할 수 있는 문제를 수정했습니다. 또한 휴지통(recycle bin)에서 이미 제거된 샤드 그룹은 메타 동기화 중 무시됩니다. #78800 #76604
- 파티션 마커의 키가 생성자(producer)와 리더(reader)에서 다르게 지정되어, 번들된 태블릿 메타데이터 리더가 번들된 파티션에 존재하지 않는 태블릿별 객체를 먼저 조회하고 불필요한 HTTP 404를 발생시키는 문제를 수정했습니다.
NotFoundlake 태블릿 메타데이터 읽기에 대한 BE 카운터가 추가되었습니다. #78466 #78451 - 후보가 최대 태블릿 점수 기준으로 정렬되지 않아, 클러스터에서 가장 높은 컴팩션 점수를 가진 Shared-data 파티션이 매 스케줄링 라운드마다 승인되지만 실제로는 시작되지 않을 수 있는 문제를 수정했습니다. 또한
compact_threads를 런타임에 변경할 때 리미터가 축소되면 토큰이 유실되는 문제도 수정했습니다. #77482 #78087 - 대기 중인 온라인 재작성 작업을 재실행(replay)할 때 테이블 상태 예약이 복원되지 않아, FE 페일오버 후 lake alter 작업이 멈출 수 있는 문제를 수정했습니다. #78517
- 지연 로딩(lazy-loaded)된 인덱스로 세그먼트 메모리 사용량이 증가한 후에도 Rowset 메타데이터 캐시 항목이 초기 charge 값을 유지하여, 캐시가 실제 사용량을 낮게 보고하는 문제를 수정했습니다. #77893
- 기본 키 컴팩션이 압축된 디스크 크기와 아직 로드되지 않은 Rowset 메타데이터를 기반으로 읽기 청크 크기를 추정하는 문제를 수정했습니다. #78192
Tablet::get_average_row_size()가 해당 맵 선언에 명시된 규약과 달리_meta_lock을 보유하지 않고_rs_version_map을 순회하는 문제를 수정했습니다. #79250- 읽기 스키마에 복합 타입 컬럼이 포함되고 술어 평가를 위해 재정렬된 경우
CACHE SELECT가 CN을 크래시시킬 수 있는 문제를 수정했습니다. #77245 - v3.5.0 이후 BE
/metrics출력에서pipe_driver_queue_len메트릭이 누락된 문제를 수정했습니다. #77890 - 프로파일 딕셔너리에 BE가 출력하는 값과 일치하지 않는 오타 키
ZoneMapIndexFiter가 포함되어 있고, 스캔SampleTime카운터가 경과 시간 대신 블록 수를 보고하는 문제를 수정했습니다. #78728 #78732 BinaryColumnBase::replicate가 전체 크기를 계산할 때 32비트 정수 오버플로가 발생하여 BE가 크래시되는 문제를 수정했습니다. #77545JAVA_OPTS_FOR_JDK_11및JAVA_OPTS_FOR_JDK_9_AND_LATER에 대한 경고 메시지가 이 변수들이JAVA_OPTS를 완전히 덮어쓴다는 점과 향후 지원이 제거될 예정이라는 점을 충분히 알리지 못하는 문제를 수정했습니다. #78328sys_log_level이 변경 가능(mutable) 항목으로 문서화되어 있음에도, 런타임 변경 사항이 설정에는 기록되지만 실제로 적용되지 않는 문제를 수정했습니다. #79200paimon-reader가 관리되는libthrift버전을 상속하지 않는 문제를 수정했습니다. #78747
4.0.14
출시일: 2026년 8월 11일
동작 변경
- Iceberg 또는 Hive 테이블에 대한
INSERT의 정적 파티션 절은 대상 컬럼 목록이 지정된 경우에도 이제 검증됩니다. 테이블의 파티션 컬럼이 아닌 컬럼을 지정한 절은 조용히 무시되는 대신 명확한 오류와 함께 거부됩니다. 이전에 허용되던 모든INSERT형태는 여전히 허용됩니다. #76659 ARRAY및MAP생성자는 단일 청크의 평탄화된 결과가 주소 지정 가능한 바이트 한도를 초과하면 이제CapacityLimitExceed오류로 실패합니다. 이전에는CREATE TABLE AS SELECT,INSERT또는 머티리얼라이즈드 뷰 새로 고침이 영구 저장할 수 있는 손상된 값을 조용히 반환했습니다. 영향을 받는 쿼리의 경우chunk_size를 줄이거나 생성자 표현식을 분할하십시오. #76419- 제수가 상수가 아닌 나눗셈 표현식(예:
10 DIV c)은 더 이상 단조(monotonic)로 취급되지 않으며, 이에 따라 안전하지 않은 Zone Map 프루닝이 술어를 만족하는 행을 제거하는 문제가 방지됩니다. 이러한 표현식으로 필터링하는 쿼리는 이전 버전보다 더 많은 행을 반환할 수 있으며, 이전 결과는 잘못된 것이었습니다.c DIV 10과 같은 단조 형태는 여전히 프루닝의 이점을 얻습니다. #76744 - GIN 역색인이 있는 컬럼에서
NOT MATCH는 더 이상 값이NULL인 행을 반환하지 않으며, 이는 SQL 3치 논리(three-valued logic)와 일치합니다. 이전 동작에 의존하던 쿼리는 더 적은 행을 반환합니다. #75578 "compression" = "zstd"설정에서 flat JSON 하위 컬럼과ARRAY,MAP,STRUCT컬럼의 합성 null 및 offset 하위 컬럼이 이제 압축됩니다. 이전에는 원시 페이지로 기록되어 ZSTD 테이블이 LZ4로 압축된 동일 테이블보다 디스크에서 더 커질 수 있었습니다. 업그레이드 이후 기록된 세그먼트만 영향을 받으므로, 기존 테이블은 세그먼트가 재작성되면서 점진적으로 축소됩니다. #76949- Iceberg 파티션 캐시는 이제 새 카탈로그 속성
iceberg_partition_cache_memory_usage_ratio(기본값0.1)를 통해 항목 수 대신 메모리로 제한되며, 그 사용량이/api/memory_usage와 분 단위 메모리 로그에 보고됩니다. 메모리 압박 상황에서 캐시는 이전보다 더 적은 항목을 보유할 수 있으며, 이전 사용량으로 복원하려면 비율을 높이십시오. #76165 - FE 메모리 추정은 이제 샘플링된 키, 값, 요소뿐만 아니라 맵과 컬렉션의 내부 오버헤드(항목별 노드와 백킹 테이블)도 함께 계산합니다. 따라서 Iceberg 메타데이터 캐시와 같은 가중치 기반 캐시는 실제 사용량을 보고하고 동일한
*_memory_usage_ratio에서 더 일찍 제거(evict)를 수행하므로, FE 메모리 사용량은 낮아지지만 캐시 미스가 증가할 수 있습니다. #75971 - keep-alive GC가
close_scanner를 호출하지 않고 종료된 Spark 또는 Flink 커넥터 리더가 남긴 만료된 외부 스캔 컨텍스트를 회수할 때, 이제 해당 파이프라인 프래그먼트를 취소합니다. 버퍼링된 스캔 메모리는query_timeout까지 고정되어 있는 대신keep_alive_min에 GC 간격 하나를 더한 시간 내에 해제됩니다. #76535 - Leader FE로 전달된 문의 감사 로그는 이제 Leader가 해석한 관계(relation)를 기록하므로,
QueriedRelations에는 Leader가 로그에 기록하는 것과 동일하게 CTE 참조가 제외된 정규화된 테이블 이름이 포함됩니다. Follower는 문이 로컬에서 실행되었거나 Leader가 목록을 반환하지 않은 경우(예: 롤링 업그레이드 중)에만 로컬 수집으로 대체합니다. #76387 SHOW ALTER TABLE OPTIMIZE의Operation컬럼은 이제com.starrocks.sql.ast.OptimizeClause@b5dc069와 같은 내부 객체 주소 대신 optimize 작업에 대한 읽기 쉬운 설명을 표시합니다. #75948
개선 사항
- Paimon 테이블에서 복합 타입(
ARRAY,MAP,STRUCT)을 지원합니다. 이전에는 이러한 컬럼을 쿼리하면 BE가 크래시될 수 있었습니다. #66784 information_schema.materialized_views와SHOW MATERIALIZED VIEWS에LAST_REFRESH_TIME컬럼을 추가했습니다. 이 컬럼은mv_rewrite_staleness_second검사에 사용되는 데이터 최신성 타임스탬프를 보고하며, 기존의LAST_REFRESH_FINISHED_TIME(새로 고침 작업 실행이 완료된 시각)과는 다릅니다. #71642- S3 및 Azure Blob 클라이언트 캐시의 하드코딩된 용량을 대체하는 변경 가능한 BE 구성 항목
object_storage_client_cache_size(기본값8)를 추가했습니다. #75851 INSERT ... SELECT로 트리거되는 파일시스템 기반 외부 테이블의 메타데이터 새로 고침이 더 이상 FE 내부 메타데이터 락을 보유한 상태에서 실행되지 않으므로, 느린 원격 메타데이터 접근이 동일 경로의 관련 없는 작업을 더 이상 지연시키지 않습니다. #73391- 다중 문(다중 테이블) 트랜잭션 Stream Load는 이제 각 테이블을 순서대로 디스패치하고 대기하는 대신 모든 테이블별 채널을 먼저 디스패치한 후 대기하므로, 하나의 레이블로 여러 테이블에 쓰는 CDC 파이프라인의 커밋 시간이 단축됩니다. #76715
- 각 단계에서 보유하는 테이블 수준 락을 완화하거나 단축하여
INSERT OVERWRITE코드 경로 전반의 락 경합을 줄였습니다. #75828 - 대형 컬럼 용량 한도에 대한 오류 메시지에 드라이버 주소 및 연산자 체인과 같은 내부 진단 정보가 더 이상 포함되지 않으며, 공유 상태 문자열의
Capaticy오타가 수정되었습니다. #76303 - Shared-data Primary Key 퍼블리시는 이제
op_write.seg_delvecs에 포함된 세그먼트별 delete vector를 적용하므로, 이 버전을 실행하는 BE는 중복된 Primary Key 행을 활성 상태로 남기는 대신 해당 메타데이터를 올바르게 소비합니다. #76474 - 보안 취약점(CVE)을 해결했습니다: Thrift를 0.24.0으로, Netty를 4.1.136.Final로 업그레이드하고, PostgreSQL JDBC 드라이버를 42.7.12로 올렸으며, 수정된 버전과 함께 배포되던 취약한 전이 의존성인
bcprov-jdk15on, 수명이 종료된 OkHttp 2.x 계열,avro-ipc(jQuery 1.4.2를 번들), Jetty client 및 security jar를 제거했습니다. #76922 #76555 #76783 #76097 #76270
버그 수정
다음 이슈들이 수정되었습니다:
- 쿼리 캐시가 불완전한 태블릿별 결과를 저장하고 이후 쿼리에 제공하여 잘못된 결과를 반환할 수 있었던 문제를 수정했습니다. #77066 #77404
enable_bucket_aware_execution_on_lake가 활성화되고GROUP BY목록이 버킷 컬럼의 상위 집합인 경우,bucket()으로 파티셔닝된 Iceberg 테이블에서COUNT(DISTINCT)가 과대 집계된 값을 반환하던 문제를 수정했습니다. #76601- 동일 컬럼의 두 하위 필드 키가 대소문자만 다른 경우(예:
get_json_string(c, 'Campaign')과get_json_string(c, 'campaign')), 생성된 컬럼 이름이 대소문자를 구분하지 않고 해석되어 JSON 하위 필드 푸시다운이 잘못된 결과를 반환하던 문제를 수정했습니다. 이러한 충돌은 이제 푸시다운에서 제외됩니다. #76594 #76593 - 정수 입력에 대한
array_difference가BIGINT결과 타입으로 확장하기 전에 32비트 입력 타입으로 각 인접 차이를 계산하여,INT범위를 벗어나는 차이가 오버플로되어 잘못된 값을 반환하던 문제를 수정했습니다. #76569 - 전체
STRUCT컬럼을ROLLUP,CUBE또는GROUPING SETS와 함께 집계할 때 플랜 시점에StructType SlotRef must have an non-empty usedStructFiledPos오류로 실패하던 문제를 수정했습니다. #76804 - 옵티마이저에서 논리 윈도우 연산자를 재구성할 때
inputIsBinary플래그가 누락되어, 랭킹 윈도우 사전 집계에서 선택된 바이너리 입력 병합 동작이 손실되던 문제를 수정했습니다. #77058 - PARTITION TOP-N 노드의 partition-by 컬럼이 해당 노드 아래에서 이미 디코딩된 딕셔너리 슬롯으로 재작성되어 쿼리가
Expr evaluate meet error: slot_id N not found오류로 실패할 수 있었던 문제를 수정했습니다. #75956 col > X AND col < X와 같은 모순된 범위 술어가 빈 값 집합으로 축소되고 동일 컬럼이 컬럼 간 조인 술어에서도 참조되는 경우,EXPLAIN을 포함한 쿼리 플래닝이IllegalStateException으로 중단되던 문제를 수정했습니다. #75011- null이 아닌 상수
ELSE절을 가진 다중 분기CASE에 대한 집계를 조인 아래로 푸시다운하는 것을 고려할 때 플래닝이 중단되던 문제를 수정했습니다. #75037 - 정의가 순환을 형성하는 뷰(
ALTER VIEW로 생성될 수 있음)에서 조회할 때StackOverflowError로 인한 불명확한Unknown error로 실패하던 문제를 수정했습니다. 순환 정의는 이제 감지되어 보고됩니다. #75033 GROUP BY ROLLUP,CUBE,GROUPING SETS의 그룹화 키 컬럼이 분석 시점에 non-nullable로 보고되어 Arrow Flight SQL 클라이언트에 잘못된 결과 스키마가 생성되던 문제를 수정했습니다. #76149- 첫 번째 인수가 타입이 지정되지 않은
NULL리터럴인 경우array_contains와array_position이class com.starrocks.type.NullType cannot be cast to class com.starrocks.type.ArrayType오류로 실패하던 문제를 수정했습니다. #76970 - 16개를 초과하는 분리항(disjunct)을 가진
OR술어에서 컬럼의 병합된 null 비율이 피연산자 null 비율의 평균 대신 항상1로 추정되어 카디널리티 추정이 왜곡되던 문제를 수정했습니다. #75864 - 전역
sql_mode에ERROR_IF_OVERFLOW가 포함된 경우, 저장된 빈 min/max 문자열을 컬럼 타입으로 캐스팅할 수 없어 값이 모두NULL인 컬럼의 컬럼 통계 로드가 실패하던 문제를 수정했습니다. #76684 - FE 스캔 범위 힙 안전성 검사가 스캔 노드당 한 번이 아니라 물리 파티션당 한 번 실행되어, 수만 개의 물리 파티션을 가진 테이블에서 플랜 시도당 수 분의 FE CPU를 소모하던 문제를 수정했습니다. #76978
CAST(json_col->'$.x' AS char)와 같은 와일드카드CHAR컬럼에 대한 술어에서 컬럼의 선언 길이-1이 0 패딩에 사용되어std::length_error가 발생하던 문제를 수정했습니다. #77444- 스캔 술어가
array_map람다를 통해 위로 끌어올려질 때 재작성이 람다 본문 내부로 내려가 BE가 크래시되던 문제를 수정했습니다. #76380 - 다른 소비자가 입력 배열을 완전히 머티리얼라이즈된 상태로 유지하는 경우,
UNNEST의STRUCT출력이 BE가 입력 배열에 대해 머티리얼라이즈하는 요소 타입보다 더 좁게 프루닝될 수 있었던 문제를 수정했습니다. #76002 __iceberg_transform_truncate또는__iceberg_transform_bucket을 분석할 때 공유 내장 함수 객체가 제자리에서 변경되어, 와일드카드 decimal 시그니처에 첫 번째로 분석된 쿼리의 precision과 scale이 고정되던 문제를 수정했습니다. #76777- 동기 머티리얼라이즈드 뷰 또는 롤업의 동일 기반 컬럼에 대해
min(c)와max(c)처럼 두 개의 집계가 있는 쿼리를 재작성할 때 비용 추정 중missing statistic of col: ... mv_min_c오류로 실패하던 문제를 수정했습니다. #75528 - 음수 staleness가
mv_rewrite_staleness_second허용 범위 내로 인정되어, Iceberg 기반 테이블에서rollback_to_snapshot이후 머티리얼라이즈드 뷰가 오래된 결과를 제공할 수 있었던 문제를 수정했습니다. #75924 mv_rewrite_staleness_second가 설정되고query_rewrite_consistency = checked인 경우, 최근 커밋된 하나의 파티션에 대한 연쇄 부분 새로 고침이 다른 파티션이 허용 범위를 훨씬 넘어 지연되는 동안에도 전체 머티리얼라이즈드 뷰의 최신성을 계속 갱신하던 문제를 수정했습니다. staleness 기준 시점은 이제 뷰가 마지막으로 최신임이 확인된 시각입니다. #76758- 파티셔닝되지 않은 Delta Lake 또는 Kudu 테이블에 정의된 머티리얼라이즈드 뷰가 새로 고침에 성공한 후에도 쿼리 재작성에 전혀 사용되지 않던 문제를 수정했습니다. #76359
- FE Iceberg 매니페스트 데이터 파일 캐시가 활성 데이터 파일이 누락된 캐시된 파일 집합을 제공하면서도 읽기 측 완전성 검사를 통과하여, 스캔 플래닝이 해당 파일을 조용히 제외하고 쿼리가 부족한 결과를 반환하던 문제를 수정했습니다. #76215
- 삭제된 V1 파티션 필드가 void 변환과 함께 spec에 유지되고 소스 컬럼의 이름을 그대로 가지기 때문에, 파티션 필드가 삭제된 후 Iceberg V1 테이블에 대한 쿼리가 실패하던 문제를 수정했습니다. #75149
- OAuth2 클라이언트 자격 증명으로 구성된 Iceberg REST 카탈로그가 백그라운드 토큰 갱신의 재시도 예산을 소진한 후 카탈로그를 다시 생성할 때까지 모든 요청이 실패하던 문제를 수정했습니다. 카탈로그는 이제 세션을 재구성하고 요청을 한 번 재시도하며, 재구성은 60초당 최대 한 번입니다.
jwt보안 또는 정적 토큰을 사용하는 카탈로그는 영향을 받지 않습니다. #76457 - 쿼리 취소 시 발생하는, 실행자 스레드가 아직 소비 중인 Iceberg 증분 스캔 범위 반복자를 닫는 동작이 안전하지 않았던 문제를 수정했습니다. #75953
- gcs-connector 3.x 구성 키의 이름이 변경되어 GCS용 Iceberg REST 카탈로그 vended credential이 무시되고 FE 메타데이터 읽기가
403 Forbidden으로 실패하던 문제를 수정했습니다. #75979 getTable()폴백이 읽기 타임아웃 후 재연결 없이 동일한 Thrift 연결을 재사용하여, Hive 카탈로그의 테이블 쿼리가 간헐적으로out of sequence response이후Unknown table로 실패하던 문제를 수정했습니다. #76456CASE표현식에 대한 비교처럼 변환할 수 없는 Paimon 술어가 변환 가능한 논리곱 항(conjunct)을 유지하는 대신 전체 논리곱을 버리던 문제를 수정했습니다. #66038- Parquet 컬럼 인덱스 min/max 디코더에
BOOLEAN케이스가 없어BOOLEAN컬럼이 Parquet 파일의 페이지 수준 술어 푸시다운에서 제외되던 문제를 수정했습니다. #74752 - 싱크가 제한 메모리 모드로 다운그레이드될 때 고정되는 메모리 예산이 한 번만 계산되어
0으로 고정될 수 있었기 때문에,enable_spill = true로 실행되는 스트리밍 사전 집계가 메모리 부족에 빠질 수 있었던 문제를 수정했습니다. #76702 - 데이터 로드 경로와 컬럼 모드 부분 업데이트 경로가
ARRAY또는 문자열 컬럼이 주소 지정 가능한 크기를 초과하는 청크를 생성하여, offset이 더 이상 해당 버퍼를 올바르게 기술하지 못하게 되던 문제를 수정했습니다. 두 경로 모두 이제 청크 용량을 제한하고 검사합니다. #77163 - Parquet 파일에서 누락된 컬럼이 제한된 청크 크기 대신 전체 Arrow 배치 크기로 null 패딩되어, 여러 청크에 걸쳐 처리되는 배치에서 한 청크 내 컬럼 길이가 서로 달라져 크래시되던 문제를 수정했습니다. #75981
DECOMMISSION상태의 레플리카가 로드의 primary 레플리카로 선출될 수 있었던 문제를 수정했습니다. 이 레플리카는 로드가 실행 중인 동안 제거될 가능성이 가장 높기 때문에, 쓰기 쿼럼이 단일 레플리카 실패를 흡수하는 대신 전체 로드가Fail to get tablet ...오류로 실패했습니다. 이러한 레플리카는 이제 다른 정상 후보가 없는 경우를 제외하고 건너뜁니다. #77035LoadChunkSpiller가 동기화되지 않은 null 검사를 초기화 플래그로 사용하여, 경쟁하는 memtable 플러시 스레드가 serde가 아직 준비되지 않은 spiller를 사용하게 되어 로드 스필 중 BE가 크래시되던 문제를 수정했습니다. #76098- 버퍼 확장 경계에 걸친 다중 문자 CSV 구분자가 CSV 리더에서 heap use-after-free를 일으키던 문제를 수정했습니다. 이 문제는
FILES()테이블 함수, Broker Load, Hive 텍스트 커넥터를 통해 발생할 수 있었습니다. #76718 - 데이터 품질 오류 메시지가 경계가 없는 원시 JSON 포인터로부터 생성되어, 잘못된 형식의 JSON을 로드할 때 heap buffer overflow로 BE가 크래시되던 문제를 수정했습니다. #76752
- 싱크의
close_wait가 멱등(idempotent)하지 않아,jaeger_endpoint를 통해 트레이싱이 활성화된 상태에서 로드를 취소하면 BE 또는 CN이 SIGSEGV로 크래시되던 문제를 수정했습니다. #76869 - 중단 경로가 테이블 함수 테이블에는 존재하지 않는 데이터베이스를 조회하여, 실패한
INSERT INTO FILES()를 중단할 때 무시된 NPE가 발생하던 문제를 수정했습니다. #75983 - 대상 테이블이 테이블 쓰기 락을 획득하기 전에 해석되어,
INSERT OVERWRITE가비지 컬렉션이 이미 삭제된 테이블에 대해 실패 상태 변경을 저널에 기록할 수 있었던 문제를 수정했습니다. #77212 SHOW CREATE ROUTINE LOAD가jsonpaths값의 큰따옴표를 이스케이프하지 않고 출력하여 파싱하거나 재실행할 수 없는 DDL을 생성하던 문제를 수정했습니다. #75755- 파일 번들링이 적용된 Primary Key 테이블에서 집계 퍼블리시를 재시도할 때 메타데이터 캐시에만 존재하는 버전을 원격 스토리지에서 조회하여
prev_garbage_version이 댕글링 상태로 남을 수 있었던 문제를 수정했습니다. 새 기준 버전을 계산할 때 이제 영구 메타데이터를 읽습니다. #75904 - Shared-data 퍼블리시가 태블릿 페이지가 누락된 번들 태블릿 메타데이터 파일을 기록할 수 있어, 파티션의 퍼블리시가
can not find tablet ... from shared tablet metadata오류로 영구적으로 멈추던 문제를 수정했습니다. 이러한 파일은 이제 거부되므로 실패는 일시적이며 재시도 가능한 상태로 유지됩니다. #76850 SparseRangeIterator::has_more()가 null-safe하지 않고 일시적인 lake 세그먼트 로드 실패가 재시도 가능한 오류로 표면화되지 않고 무시되어, 빈 태블릿에 대한 물리 분할 스캔에서 CN이 크래시되던 문제를 수정했습니다. #75985- 이전 FE 버전이
gram_num속성 없이 영구 저장한 레거시 NGRAMBF 인덱스를 가진 머티리얼라이즈드 뷰의 세그먼트를 빌드하는 동안 CN이 크래시되던 문제를 수정했습니다. #76989 - 집계
IN런타임 필터의 빌드 측이 상수 컬럼인 경우 BE가 크래시되던 문제를 수정했습니다. #74941 - 런타임 상태가 이미 취소된 경우에도
set_finishing이 스필 시작 경로를 실행하여, 쿼리 취소 시 스필 가능한 해시 조인 빌드 연산자에서 use-after-free가 발생할 수 있었던 문제를 수정했습니다. #76633 - 버려진 파이프라인 드라이버의 전역 런타임 필터 타이머가 스케줄 해제되지 않아, BE 또는 CN이 종료 중
std::bad_weak_ptr로 중단될 수 있었던 문제를 수정했습니다. #76252 - bRPC stub 캐시 정리 타이머 태스크가 스케줄 해제되었지만 제거되지 않아 메모리가 누수되던 문제를 수정했습니다. #75973
- 쿼리의
ConnectContext가 참조하는 전체ExecPlan객체 그래프와 함께 풀링된 쿼리 배포 워커의 thread-local에 고정된 채 남아 있던 문제를 수정했습니다. #76366 PipeObservable::defer_notify_sink()가 sink 이벤트 대신 source 이벤트를 발생시켜,OUTPUT_FULL로 블로킹된 드라이버가 관련 없는 이벤트가 도착할 때까지 블로킹 상태로 남을 수 있었던 문제를 수정했습니다. #76782ThreadPool태스크에서 발생한 예외가 기본적으로 무시되고 태스크가 여전히 완료된 것으로 집계되던 문제를 수정했습니다. #76863- fatal 시그널 핸들러가 시그널을 다시 발생시키기 전에 멈춘 경우, BE가 crashing 플래그가 설정된 상태로 계속 실행되어 FE에
SHUTDOWN을 계속 보고하던 문제를 수정했습니다. 이제 프로세스는 강제로 종료됩니다. #76491 - 카탈로그 삭제가 읽기 락 하에서 존재 여부를 확인하고 별도의 쓰기 락 하에서 제거하여, 동일 카탈로그에 대한 두 개의 동시 삭제가 모두 검사를 통과할 수 있었던 문제를 수정했습니다. #76778
- JDK 21에서 해당 private 생성자가 제거되어, JDK 21 이상에서 Java UDF가
NoSuchMethodException: java.nio.DirectByteBuffer.(long,int)오류로 실패하던 문제를 수정했습니다. #75666 - 다른 FE로 전달된
CreatePreparedStatement또는ClosePreparedStatement가 Flight SQL 액션 타입 대신 protobuf 메시지 이름을 전달하여, 로드 밸런서 뒤에서 prepared statement로 시작하는 모든 ADBC 클라이언트가 실패하던 문제를 수정했습니다. #76310 - Arrow Flight SQL 서비스의 FE 클래스패스에 Arrow LZ4 및 ZSTD IPC 코덱이 누락되어 있던 문제를 수정했습니다. #76921
4.0.13
출시일: 2026년 7월 16일
동작 변경
- 상수 피연산자를 가진
LIKE술어(FE에서 폴딩됨)의 이스케이프 처리가 이제 MySQL 8과 일치합니다:SELECT 'a\\b' LIKE 'a\\\\b'는1을 반환하고SELECT 'a\\b' LIKE 'a\\b'는0을 반환합니다. 이전의 비 MySQL 이스케이프 시맨틱에 의존하던 쿼리는 다른 결과를 반환합니다. #74814 SHOW [FULL] FUNCTIONS는 이제 UDF의 Properties 컬럼에 항상isolation속성(shared또는isolated)을 포함하므로, 사용자는 함수를 다시 생성하지 않고도 속성이 설정되어 있는지 확인할 수 있습니다. #75255- vended credential을 사용하는 Iceberg REST 카탈로그가 테이블 메타데이터 캐시를 다시 사용합니다. 이는 모든
getTable()을 REST 카탈로그로 보내 AWS Lake FormationRate exceeded실패를 유발했던 이전의 캐시 우회를 되돌린 것입니다. 캐시된 테이블은 이제 매 새로 고침 주기마다 자격 증명을 갱신하며, REST 카탈로그의 테이블 캐시 만료 시간은 추가로 3000초로 제한됩니다. #75431
개선 사항
- Shared-data 태블릿 메타데이터와 트랜잭션 로그에 체크섬 보호를 추가했습니다. #74924
FRONTEND_STREAMING로드에 대한 결합 트랜잭션 로그/파일 번들링을 지원합니다. #74460- 락 경합을 줄이기 위해 Shared-data 스키마 변경 작업 락의 범위를 테이블로 한정했습니다. #75087
- 태블릿 강제 삭제 일괄 표시가 이제 태블릿당 한 번이 아니라 배치당 한 번
TabletInvertedIndex쓰기 락을 획득합니다. #75616 - 커밋된 트랜잭션의 최대 퍼블리시 대기 시간에 대한 FE 메트릭을 추가했습니다. #75025
- 윈도우 연산자 처리에서 컬럼 업그레이드에 대한 메모리 한도 검사를 추가했습니다. #75821
- 배열 컬럼의 offset 전용 읽기 경로에서 불필요한 행별 seek를 제거했습니다. #75861
- Iceberg 테이블의 포그라운드 행 수 추정이 이제 모든 데이터 파일을 열거하지 않고 매니페스트 메타데이터로부터 계산됩니다. #75280
- 보안 취약점(CVE)을 해결했습니다: Hadoop 전이 의존성에서 취약한
org.jline:jline(jline-remote-telnet)을 제외하고, jackson-databind를 2.21.4로 업그레이드했습니다. #75066 #75373
버그 수정
다음 이슈들이 수정되었습니다:
- 증분 스캔 범위 스케줄링이 배포된 프래그먼트 인스턴스를 재사용할 때 다른 드라이버별 레이아웃을 다시 계산하여, 스캔 범위 일부가 소비되지 않고 행이 손실될 수 있었던 문제(예: Hive에서 INSERT)를 수정했습니다. #74674
FILES()또는 Broker Load를 통해 읽은 Parquet 파일에서 ARRAY/MAP/STRUCT 내부에 중첩된 INT96 타임스탬프가 세션 시간대 변환을 거치지 않아 시간대 오프셋만큼 이동된 값으로 반환되던 문제를 수정했습니다(최상위 INT96 컬럼은 정상이었습니다). #74868- 감사 로그가
SELECT INTO OUTFILE의 내보낸 행 수를 기록하지 않던 문제를 수정했습니다. #74467 - strict cast가 무시되어야 할 NULL 행의 기저 데이터로부터 오버플로 오류를 발생시킬 수 있었던 문제를 수정했습니다. #74903
parse_json이 잘못된 입력을 처리할 때ALLOW_THROW_EXCEPTION설정을 준수하지 않던 문제를 수정했습니다. #74976- 전역적으로 비활성화된 상태에서 테이블별로 첫 로드 통계 수집을 활성화할 수 없던 문제를 수정했습니다. 명시적으로 설정된 테이블 속성이 이제 전역 구성
enable_statistic_collect_on_first_load보다 우선합니다. #74794 - 태블릿 스키마가 트랜잭션 스키마와 달라진 경우 Shared-data 테이블의 부분 컬럼 업데이트가 BE를 크래시시키거나 데이터를 조용히 손상시킬 수 있었던 문제를 수정했습니다. #74005
- 예기치 않은 BE 프로세스 재시작 문제를 수정했습니다. #74424
- width 또는 bucket 수가 0인 경우 Iceberg
truncate/bucket파티션 변환에서 BE가 크래시(SIGFPE)되던 문제를 수정했습니다. #74998 FragmentContext::set_final_status에서 nulldriver_executor로 인해 BE가 크래시되던 문제를 수정했습니다. #75030- 트랜잭션 시작과 autovacuum 간의 경쟁 조건으로 아직 필요한 트랜잭션 로그가 삭제되어 파티션의 퍼블리시가 영구적으로 멈추던 문제("Both txn_log and corresponding tablet_meta missing")를 수정했습니다. #74906
avg(DISTINCT x)가 sum/count 머티리얼라이즈드 뷰를 사용하도록 잘못 재작성되어 잘못된 결과를 반환하던 문제를 수정했습니다. #75071- TopN RANK 정렬의 경계 버그로 잘못된 결과가 생성될 수 있었던 문제를 수정했습니다. #75045
- 빈 구분자를 가진
split/split_part/str_to_map이 잘못된 UTF-8 입력에서 범위를 벗어난 읽기를 수행할 수 있었던 문제를 수정했습니다. #75068 - 존재하지 않는 컬럼에 대한
ALTER TABLE ... MODIFY COLUMN ... AFTER가 이제 명확한 오류 메시지를 반환합니다. #75073 - 타입의 최솟값을 -1로 나눈 나머지를 계산할 때
mod()/pmod()에서 BE가 크래시(SIGFPE)되던 문제를 수정했습니다. #74980 bar()가 음수 또는 매우 큰 width에서 메모리를 무한히 증가시키던 문제(잠재적 DoS)를 수정했습니다. 이러한 입력은 이제 오류와 함께 거부됩니다. #75143- 다중 문 Stream Load 태스크가 제거될 때 트랜잭션 상태 콜백이 등록 해제되지 않던 문제를 수정했습니다. #75188
- 스필 파티션 정렬 중 쿼리가 취소될 때 크래시되던 문제를 수정했습니다. #75140
- 테이블 함수 실행 중 쿼리 메모리 한도가 적용되지 않던 문제를 수정했습니다. #75179
floor또는ceil이라는 이름의 컬럼을 조회할 때 파싱 시점에 ClassCastException으로 실패하던 문제를 수정했습니다. #75241- 이전 청크가 다운스트림에서 변경될 때
OrderedPartitionExchanger에서 heap-use-after-free가 발생하던 문제를 수정했습니다. #75279 - FE 메타데이터 락 정확성 관련 세 가지 경쟁 조건을 수정했습니다. #74968
- 로드 스필이 스필 메트릭을 기록할 때 존재하지 않는 쿼리 컨텍스트를 역참조할 수 있었던 문제를 수정했습니다. #75236
- 계층 네임스페이스가 없는 스토리지 계정에서의 ADLS2
ListPaths가 CN 크래시와 vacuum 실패를 유발하던 문제를 수정했습니다. #75166 - BE/CN JVM 메트릭이 유효하지 않은 Prometheus
# TYPE줄을 출력하던 문제를 수정했습니다. #75240 - JIT 코드 생성이 LARGEINT 리터럴을 64비트로 잘라 잘못된 결과를 생성하던 문제를 수정했습니다. #75137
- 외부 Iceberg 테이블에 대한 결합 ALTER TABLE이 이미 대기열에 있는 작업을 다시 실행하던 문제를 수정했습니다. #74036
- 빌드 측 컬럼의 nullability 불일치로 인한 nested-loop join 크래시를 수정했습니다. #75343
- 과도한 FE 메모리 사용을 방지하기 위해 Iceberg 매니페스트 컬럼 통계가 이제 선택적으로 캐시됩니다. #75395
addPhysicalPartition이 호출당 하나의 물리 파티션만 생성할 수 있어 랜덤 분산 테이블의 물리 파티션 백필이 매우 느리던 문제를 수정했습니다. #75430information_schema.task_runs술어 조회의 SQL 인젝션 취약점을 수정했습니다. #75520- 한 쿼리에서 여러 UNNEST 호출이 동일한 배열 컬럼을 참조할 때 BE가 크래시(SIGSEGV)되던 문제를 수정했습니다. #75012
- 익스체인지 노드 간에 중첩된 딕셔너리 인코딩 표현식이 잘못 변환되던 문제를 수정했습니다. #75246
- 옵티마이저가 표현식을 복제할 때 조인 skew 힌트가 손실되던 문제를 수정했습니다. #68964
- 뷰가 참조하는 테이블을 수집할 때 CTE 참조를 건너뛰지 않던 문제를 수정했습니다. #74813
- struct 필드 이름이 유효한 JSON 경로가 아닌 경우
CAST(json AS STRUCT<...>)에서 BE가 중단(abort)되던 문제를 수정했습니다. #75355 - 임시 Parquet 딕셔너리 코드 컬럼이 실행 플랜의 상위 레이어로 누출될 수 있었던 문제를 수정했습니다. #74452
- 정렬 컬럼 제거 최적화로 인해 잘못된 결과가 발생하던 문제를 수정했습니다. #74983
- UNNEST 결과 struct 타입이 입력 배열 요소 타입과 일관되게 축소되지 않던 문제를 수정했습니다. #75445
- FE EOS 취소와 BE 2단계 배포 간의 경쟁 조건으로 성공적으로 완료된 쿼리가 취소된 것으로 표시될 수 있었던 문제를 수정했습니다. #75009
- 조인 재정렬 프루닝이 술어에서 여전히 참조하는 컬럼을 제거할 수 있었던 문제를 수정했습니다. #74791
- 메타데이터 이미지 덤프가 일부 데이터베이스 락 획득에 실패했을 때 전역 메타데이터 락이 해제되지 않아 이후 메타데이터 작업이 블로킹되던 문제를 수정했습니다. #75488
StringSearch::_pattern이 초기화되지 않은 상태로 남아 있고split_debug_symbol로그 출력이 잘못되었던 문제를 수정했습니다. #75614- GIN 역색인이 있는 컬럼에서 단일 문자 와일드카드
_를 사용한LIKE가 잘못된 결과를 반환하던 문제를 수정했습니다. #75551 - Shared-data Primary Key 인덱스 재구축 중 세그먼트 반복자 벡터의 위치가 어긋날 수 있었던 문제를 수정했습니다. #74887
- 파일 번들링이 활성화된 경우, 고아 상태의 번들 세그먼트가 공유로 표시되지 않아 vacuum이 형제 태블릿에서 여전히 참조하는 번들 파일을 삭제할 수 있었고, 이후 퍼블리시가 "Object ... does not exist" 오류로 실패하던 문제를 수정했습니다. #75689
histogram()이 양수가 아닌 bucket 수에서 크래시되던 문제를 수정했습니다. 이제 오류를 반환합니다. #75041- flat JSON 컬럼이 NOT NULL에서 nullable로 변경될 때 컴팩션 크래시(
JsonMergeIterator의 CHECK 실패)가 발생하던 문제를 수정했습니다. #75680 - 조인 튜닝 가이드가 조인을 재구성할 때 공통 술어 연산자가 손실되던 문제를 수정했습니다. #75773
OptExpression의 불변 inputs 목록으로 인해ApplyTuningGuideRule에서UnsupportedOperationException이 발생하던 문제를 수정했습니다. #70785- Shared-data 테이블에서
SHOW PARTITIONS와partitions_meta가 물리 파티션별 버킷 수 대신 논리 파티션 버킷 수를 보고하던 문제를 수정했습니다. #75734 NLJoinProbeOperator::pull_chunk의 메모리 할당 예외가 쿼리를 실패시키는 대신 BE를 크래시시키던 문제를 수정했습니다. #75788SHOW CREATE ROUTINE LOAD가 첫 번째 로드 속성 절 앞에 불필요한 쉼표를 출력하여 출력이 실행 불가능하던 문제를 수정했습니다. #75522- CTAS(
CREATE TABLE AS SELECT)가ENGINE절을 허용하지 않아 Unified 카탈로그로의 CTAS가 불가능하던 문제를 수정했습니다. #75771 - null-safe equal(
<=>) 조인 조건에 대한 OR 술어가UNION ALL로 잘못 재작성되어 잘못된 결과를 반환하던 문제를 수정했습니다. #75038 - 하위 파티션이 있는 테이블에서 쿼리 캐시 정규화 크래시가 발생하던 문제를 수정했습니다. #75789
- null이 아닌 모든 입력 배열이 비어 있을 때
array_map/transform이 NULL 행을 누락하던 문제를 수정했습니다. #75141 regexp_extract_all이 길이가 0인 캡처 그룹에서 무한 루프에 빠지던 문제를 수정했습니다. #75798- flat JSON 하위 필드 읽기가 이름에
.이 포함된 키에 대해 NULL을 반환하고, 술어가 푸시다운될 때 조용한 행 손실도 유발할 수 있었던 문제를 수정했습니다. #75583 - UNNEST 출력 struct 하위 필드가 입력 배열의 접근 그룹이 아닌 출력 자체의 접근 그룹에 의해 프루닝되어, 여전히 필요한 하위 필드가 프루닝될 수 있었던 문제를 수정했습니다. #76002
- FE Iceberg 매니페스트 데이터 파일 캐시가 불완전한 파일 집합을 제공하여 스캔 플래닝에서 데이터 파일을 조용히 제외하고 쿼리 결과가 부족하게 집계되던 문제를 수정했습니다. #76215
- INSERT 커밋 후 Iceberg 테이블 메타데이터 캐시가 무효화되지 않아 이후 쿼리가 최신 스냅샷을 놓칠 수 있었던 문제를 수정했습니다. #67230
4.0.12
출시일: 2026년 6월 25일
동작 변경
isAdjustedToUTC=false(타임존 정보 없음)로 기록된 Parquet 파일에서 INT64 타임스탬프를 읽을 때,SELECT FROM FILES()및 broker/stream LOAD가 더 이상 세션 타임존 오프셋만큼 값을 이동시키지 않습니다. 이제 이러한 타임스탬프는 Trino, Spark, Impala와 일관되게 벽시계(wall-clock) 값으로 읽힙니다. 이전에는 세션 타임존이 UTC가 아닐 때마다 값이 어긋났습니다. #73674- CTAS(
CREATE TABLE AS SELECT)가 소스에 명시적인 사용자 지정 길이(카탈로그 컬럼 참조,CAST AS VARCHAR(N), 또는 문자열 리터럴)가 있을 경우 이를VARCHAR(1048576)으로 확장하지 않고 선언된VARCHAR(N)길이를 그대로 유지합니다. 이를 통해 길이 제약 조건이 계속 적용될 수 있게 되고 DDL이 dbt 스키마 계약과 일치합니다. 구체화 뷰(materialized view) 구체화는 이전과 동일하게 컬럼을 확장합니다. #73498 - 이제 Paimon 커넥터가 스캔 스플릿을 계산할 때 항상 기본값을 사용하는 대신 세션 변수
connector_max_split_size를 준수하므로, 이 값을 튜닝하면 Paimon 스캔 병렬성에 영향을 줍니다. #71756
개선 사항
- 상수 입력에 대해 상수 평가 시점에 변환을 폴딩하도록
base64_to_bitmap을 최적화했습니다. #74684 - 이제
ngram_search가 상수가 아닌 needle을 지원합니다(검색어가 상수뿐 아니라 컬럼 표현식일 수 있습니다). #74675 - 이제 Arrow-to-JSON 변환기가
LARGE_LIST및FIXED_SIZE_LIST타입을 지원합니다. #73714 - 통계 수집 중 메모리 부담을 줄이기 위해 넓은 문자열(wide-string) 컬럼을 격리하는 옵트인 옵션을 추가했습니다. #73258
- 이제
information_schema.COLUMNS가DATETIME_PRECISION필드를 채웁니다. #74623 - 동시성 향상을 위해
InformationSchemaDataSource및FrontendServiceImpl의 데이터베이스 읽기 잠금을 테이블 범위의 집중 잠금(intensive lock)으로 완화했습니다. #73936 #73913 - shared-nothing 클러스터에서 데이터베이스 쓰기 잠금을 테이블 범위의 집중 쓰기 잠금으로 좁히고, 복제본 행 수(row-count) 업데이트를 테이블 잠금 범위로 한정했습니다. #74523 #74521
- 경합을 줄이기 위해 routine-load broker RPC를 작업별(per-job) 쓰기 잠금 밖으로 이동했습니다. #73591
- JDBC 카탈로그의 메타데이터 접근 속도를 높이기 위해 JDBC
REMARKS조회를getTable()핫 경로 밖으로 지연시켰습니다. #73488 information_schema.tables_config쿼리에 대해table_name조건자를 푸시다운했습니다. #73210BackendLoadStatistic에서 단일 매체(single-medium) BE에 대한 복제본별 스캔을 건너뛰었습니다. #73555- 연결이 멈추는 것을 방지하기 위해 MySQL 채널 결과 전송 경로에 쓰기 타임아웃을 추가했습니다. #73646
- 카탈로그 휴지통(recycle bin) 크기 게이지 메트릭을 추가했습니다. #74440
- vacuum 배치 크기 및 재시도 횟수 메트릭을 추가하고, 재시도 폭주를 줄이기 위해 lake vacuum 재시도 백오프에 비상관 지터(decorrelated jitter)를 추가했습니다. #74112 #74108
- 보안 취약점(CVE) 해결을 위해 서드파티 종속성을 업그레이드했습니다: Netty를 4.1.135.Final로, Tomcat을 9.0.118로, Thrift를 0.23.0으로 업그레이드했습니다. #74668 #73797 #73625
버그 수정
다음 이슈들이 수정되었습니다:
- 성공적으로 커밋된 다중 문장 트랜잭션(multi-statement transaction) stream load가
information_schema.loads및SHOW STREAM LOAD에서 계속PREPARING으로 표시되던 문제. #74386 - 로드 시간이 BE/FE thrift 경계를 넘어 타임존 정보 없는 벽시계 문자열로 교환되었기 때문에, 세션 타임존이 Asia/Shanghai와 다른 클러스터에서
information_schema.loads의 행이 조용히 누락되던 문제. #73365 - 단위 불일치로 인해 명시적 트랜잭션의
COMMIT이 데이터베이스 쓰기 잠금을 (초 단위가 아니라)query_timeout밀리초 동안만 대기하던 문제. #73549 current_timestamp/now()컬럼 기본값이ALTER TABLE ... ADD COLUMN이후 고정된 리터럴로 표시되고 FE 재시작 또는 edit-log 재생(replay) 시 유실될 수 있던 문제. #73455OPERATE ON SYSTEM권한 없이sys.fe_memory_usage/sys.fe_locks를 조회할 때 명확한 접근 거부 오류 대신 오해를 유발하는 RPC 실패 메시지가 반환되던 문제. #73567- 파티션이 많은 테이블의 경우 키별(per-key) Hive 파티션 통계 자동 갱신이 Hive Metastore에 과부하를 줄 수 있던 문제. #73563
- 스키마 변경 중 GTID를 읽을 때 발생하는 null 포인터 문제. #74855
- 중복 제거(distinct) 집계 푸시다운 후 빈 분석(analytic) 연산자가 정리(prune)되지 않던 문제. #74810
- 0(zero) 행 수가 파티션 통계를 손상시킬 수 있던 문제. #74801
- 벡터 인덱스 재작성(rewrite)이 공유 테이블 스키마를 오염시킬 수 있던 문제. #74785
- 병렬 프로파일 수집 중 발생하는
IllegalStateException. Tracer를 fork-aware로 만들어 수정했습니다. #74746 - FE 호출자의 타임아웃이 경과한 후에도 BE vacuum 작업이 중단되지 않던 문제. #74694
ChunksPartitioner의 파티션 컨슈머 오류가 전파되지 않고 유실되던 문제. #74693blockingAddTabletCtxToScheduler의 잠금 불일치 문제. #74596azure_adls2_oauth2_client_endpoint구성 필드 이름의 오타. #74581- 놓친 연산자 상태 전환(operator state transition)에 대해 파이프라인 옵저버가 통지받지 못하던 문제. #74557
- retain-boundary 메타데이터가 사라졌을 때 보고된 vacuum 워터마크가 잘못되던 문제. #74429
updateSchemaBackendId중MaterializedIndexMeta에 대한 데이터 경합(data race). #74412- 비 기본 키(non-primary-key) 복제본이 영구적인 버전 홀(version hole)에 갇힐 수 있던 문제. 이제 자가 복구됩니다. #74408
- JIT 컴파일 실패 시
LLVMContext의 use-after-free 문제. #74396 ADMIN SHOW REPLICA STATUS의 누락된 복제본(missing-replica) 행에서의 컬럼 불일치. #74393- float/int가 혼합된 WHEN 및 결과 타입을 가진
CASE WHEN에 대해 잘못된 JIT IR이 생성되던 문제. #74382 - 클러스터 스냅샷이 계속 실패할 때
CatalogRecycleBin이 멈추던 문제. #74379 - 이제 동일한 명시적 트랜잭션에서 앞서 수정된 테이블을 대상으로 하는 부분 업데이트(partial update)가 명확한 오류와 함께 거부됩니다. #74344
- 불변 파티션(immutable-partition) 업데이트가 트랜잭션의 컴퓨트 리소스를 사용하지 않던 문제. #74316
- 파티션 조인(partitioned join)으로 인해 발생할 수 있던 잠재적 out-of-bounds 오류. #74315
- FE follower에 대해 데이터베이스 수준 UDF가 이름이 변경된 대상 데이터베이스로 복원되지 않던 문제. #74313
- 루트가 아닌(non-root) 복합 조건자가
NotPushDown대신EOF를 반환하던 문제. #74218 - routine load
origStmt를 저장할 때 테이블 이름이 백쿼트(backquote)되지 않던 문제. #74188 - assert-num-rows에서의 어설션 이름 조회 오류. #74178
- 집계에서 타입이 일치하지 않는 집계 함수를 사용하던 문제. #74159
- 강제 종료된(force-killed) task 실행이 아카이브되지 않고, 세션 접두사가 붙은(session-prefixed) task-run 타임아웃이 준수되지 않던 문제. #74146
- 이제 (테이블 및 구체화 뷰에 대한)
RENAME및SWAP이 동시 수정(concurrent-modification) 문제를 피하기 위해 데이터베이스 쓰기 잠금을 획득합니다. #74100 - 기본 키(primary-key) 다중 문장 트랜잭션에서 op_writes를 배칭할 때 복합 rowset(composite-rowset) 통계가 합산되지 않던 문제. #74059
- 중복 제거(distinct) 집계 소스가 완료되었을 때 sink에 통지되지 않던 문제. #74055
_statistics_가 삭제되었을 때pipe_file_list가 다시 생성되지 않던 문제. #73970TabletInvertedIndex.deleteTablets의 크래시. 빈 입력을 빠른 경로(fast-path)로 건너뛰어 수정했습니다. #73955- task 관리자가 task 실행에 대해 잘못된 edit log를 기록할 수 있던 문제. #73882
- 데이터 디렉터리 로드 스레드에서의
set_thread_name경합. #73862 TabletSinkSender::_send_chunk_by_node의 경합 조건(race condition). #73820OlapTableSink의 잘못된 메모리 계산(accounting). #73807- 잘못된 커넥터 bytes-read 통계. #73799
BACKUP ON (ALL FUNCTION)/(ALL EXTERNAL CATALOGS)실패. #73790- 모든 값이 null일 때
NullableColumnUnaryFunction이 decimal 스케일을 잃던 문제. #73789 - 서브라이터(subwriter)에 append가 없을 때 발생하던 FlatJSON 크래시. #73730
- broker load 중
LargeList/FixedSizeList를 JSON 컬럼으로 변환할 수 없던 문제. #73718 - JSON 로드 중 중첩 타입(nested type)의 부분 append가 실패하던 문제. #73715
- 파티션이 동시에 삭제될 때
StatisticsCalcUtils에서 발생하던 NPE. #73711 RuntimeProfileParser에서 decimal 값을 가진 단위 카운터가 파싱되지 않던 문제. #73683- 중첩 구체화 뷰(nested materialized view) 갱신 중 발생하던 NPE. #73644
- lake
publish_log_version에서 다중 문장 트랜잭션이 올바르게 처리되지 않던 문제. #73423 - 이제 빈
ALTER TABLE절이 거부되며,OPTIMIZE재생(replay)이 개선되었습니다. #73352 - Iceberg 메타데이터 항목이 고정(pin)될 때 발생하던 디스크 캐시 오버플로. #71651
4.0.11
출시일: 2026년 6월 5일
동작 변경
- 이제
ALLOW_THROW_EXCEPTION하에서 암시적 VARCHAR-to-JSON 파싱이 실패할 때get_json_string및 기타get_json_*함수가 NULL 대신 JSON 파싱 오류를 반환합니다. 기본 동작(모드가 비활성화되어 있을 때 NULL 반환)은 변경되지 않았습니다. #73199 - 이제
pipeline_enable_large_column_checker가 기본적으로 활성화됩니다. #72798
개선 사항
- lake 쓰기 경로(write-path) 로드 스필(spill) 파일이 이제 각 파일 이름에 트랜잭션 ID가 포함된 평면적(flat) 단일 레벨 디렉터리 레이아웃을 사용하며, txn-id 기반 vacuum 패스로 회수됩니다. 이를 통해 대량 삭제가 쓰기 핫 경로에서 분리되고, BE 크래시로 인해 누출된 스필 파일을 vacuum이 정리할 수 있게 됩니다. #73064
- 이제 SHOW 문(예:
SHOW GRANTS및SHOW WAREHOUSES)이 명시적 트랜잭션 내에서 허용되므로, SHOW를 자동으로 실행하는 BI/JDBC 클라이언트가 더 이상 트랜잭션 흐름을 깨뜨리지 않습니다. #72954 - 이제 Java UDAF 및 UDTF가 STRUCT 인수 및 반환 타입을 지원합니다. #72911
- 이제 스칼라 Java UDF가 STRUCT 인수를 지원합니다. #72620
- 이제 Java UDF가 DATE 및 DATETIME 타입을 지원합니다. #72337
- 이제 Java UDF가 중첩 ARRAY/MAP 타입을 지원합니다. #72283
- FE 구성
deploy_serialization_min_thread_pool_size를 추가했습니다. #72274 add_partition_value중복 제거(deduplication) 히트가 발생할 때 불필요한 파티션 키 표현식 구성을 건너뛰었습니다. #73156PaimonMetadata#getTableVersionRange에서 불필요한latestSnapshot()호출을 방지했습니다. #72892- 스칼라 연산자 공통 부분식 제거(common subexpression elimination)에서 교환 가능한(commutative) AND/OR 표현식을 중복 제거했습니다. #72823
버그 수정
다음 이슈들이 수정되었습니다:
- UDAF 캐시로 인해 발생한 메모리 누수. #74025
- 집계 결합 함수(aggregate combined functions)의 잘못된 구현. #74169
- shared-data 결합 txn log 모드에서 파티션별 코디네이터 클레임(claim)이 모든 sender의 open마다 다시 기록되지 않아 txn log가 유실될 수 있던 문제. #73962
- 사용자 지정
LocationProvider를 사용하는 Iceberg 테이블에서의 읽기 실패.SerializableTable에서LocationProvider를 지연 초기화(lazily initializing)하여 수정했습니다. #73482 de.javakaffeeUnmodifiableCollectionsSerializer로 인한 직렬화 실패. 이제 Java 17 호환 버전으로 교체되었습니다. #73458- 이제
HdfsFsManager복사 오류 메시지에 근본 원인(underlying cause)이 포함됩니다. #73414 DeltaWriter::commit()에서의 동시SegmentFlushTask경합. #73371- 이제 정렬 병합 provider(sort merge provider) 오류가 유실되지 않고 fragment 컨텍스트로 전파됩니다. #73337
- Hive 뷰에 대한 Ranger 행 필터/마스킹(row-filter/masking) 정책이 건너뛰어져 뷰 또는 그 기본 테이블(base table)의 정책이 적용되지 않던 문제. #73265
- 보안 취약점(CVE) 해결을 위해 libthrift를 0.23.0으로 업그레이드했습니다. #73243
- FE 파일 디스크립터(file-descriptor) 누수.
HttpClient인스턴스를 재사용하여 수정했습니다. #73239 - 이제 Parquet broker load 오류에 파일/컬럼/행 컨텍스트가 포함됩니다. #73236
- Spark 커넥터 외부 스캔(external scan)에서 빈
col_name을 가진 출력 슬롯(output slot)에 대한 슬롯 조회 실패. #73225 - 정상 종료(graceful exit) 중
SinkBuffer에서의 크래시. #73202 - 쿼리 캐시가 로컬 셔플 집계(local shuffle aggregation)와 충돌하던 문제. #73194
- fragment teardown 전반에 걸친 Hive 파티션 디스크립터의 use-after-free. #73176
- lake vacuum의 스레드 안전성 문제.
localtime_r을 사용하여 수정했습니다. #73088 - 쿼리 컨텍스트 소멸 중
PipelineTimerTask의doRun과 스케줄 해제(unscheduling) 사이의 경합 조건. #73082 - 읽기 전용 쿼리 엔진 경로에서의 잠금 경합. DB 잠금을 완화하여 줄였습니다. #73067
- JDBC 카탈로그의 SQL Server 테이블에서 발생하던 구체화 뷰 갱신 실패. #72962
JDBCScanner::_init_jdbc_scanner의 JNI 로컬 참조(local-reference) 누수. #72913- 파티션 TopN이 자식(child)의 출력 컬럼을 잃을 수 있던 문제. #72848
- INSERT OVERWRITE 재계획(re-planning) 전에
LambdaArgument.transformedOp를 초기화하지 않아 발생하던 잘못된 계획. #72832 - 외부 리소스 정리(cleanup) 중 코디네이터 잠금이 유지되던 문제. #72830
- 이제
Locker롤백이 예외에 안전(exception-safe)하며 잠금 해제 순서가 수정되었습니다. #72789 ColumnDict.merge의 잘못된 바이트 순서(byte order). 이제 부호 없는(unsigned) 바이트 순서를 사용합니다. #72778- 임시
std::string으로 포맷팅할 때 발생하던 스택 버퍼 오버플로(stack-buffer-overflow). #72728 - 이제 작은 LIMIT에서 집계 스필(aggregation spill)을 비활성화할 때 HAVING 절이 확인됩니다. #72705
- runtime_filter worker를 드레인(drain)할 때 전달된(forwarded) RPC를 조인하면서 발생하던 행(hang). #72626
- 외부 조인(outer join) 위의 구체화 뷰에 대한 잘못된 지연 구체화(lazy-materialization) 슬롯 nullability. #72621
- 일반 rowset 커밋을 적용할 때
merge_condition이 보존되지 않던 문제. #72542 - clone 중
TabletScheduler/TabletSchedCtx핫 경로에서의 잠금 경합. DB 잠금을 완화하여 줄였습니다. #72475 Locker가 부분적인 집중 잠금(intensive-lock) 획득을 롤백하지 않던 문제. #72423- 스필 가능한(spillable) 해시 조인 probe 크래시. #72397
- 이제 JOIN USING 변환기(transformer)에서 COALESCE 자식(children)이 공통 타입으로 캐스팅됩니다. #72338
- 단일 테이블 proc 디렉터리에 대해 DB READ 잠금이 너무 넓게 유지되던 문제. 이제 테이블별로 완화되었습니다. #72334
- 구체화 뷰 계획 컨텍스트(plan context)를 캐싱할 때 발생하던 메모리 누수. #72300
- FSE-v2가 shared-data 정렬 스키마 변경(sorted schema change)에 대해 스키마를 설정하지 않던 문제. #72235
ConsistencyChecker가 주기적 스캔에서 DB READ 잠금을 너무 넓게 유지하던 문제. 이제 테이블별 READ로 완화되었습니다. #72218information_schema.warehouse_queries를 조회할 때 발생하던 BE 크래시. #72019- CRLF CSV 입력에서 닫는 enclose 앞의 후행
\r이 제거되지 않던 문제. #71866 - 외부 카탈로그를 쿼리할 때 Paimon 기본 키 컬럼이 잘못 non-nullable로 표시되던 문제. #71660
- URI가 이미 후행 슬래시로 끝나는 경우 JDBC URL을 구성할 때 중복된 이중 슬래시가 생성되어 ClickHouse와 같은 엄격한 드라이버가 깨지던 문제. #70992
4.0.10
출시일: 2026년 5월 9일
동작 변경
INSERT INTO FILES가 생성하는 오류 메시지에서 클라우드 스토리지 자격 증명이 이제 마스킹되어, 오류 로그와SHOW LOAD출력에 시크릿이 실수로 노출되는 것을 방지합니다. #71245- StarRocks는 이제 Hive catalog의 insert-only ACID Hive 테이블에 대한 쿼리를 더 이상 허용하지 않습니다. 이전에는 INSERT OVERWRITE 작업이 인식되지 않아 이러한 쿼리가 실제로 보이는 것보다 더 많은 행을 조용히 반환할 수 있었습니다. 영향을 받는 테이블은 이제 잘못된 결과 대신 명시적인 오류를 반환합니다. #71460
개선 사항
- 파티션이 많은 테이블에서 파티션 로드 중 중복되는 Jackson
ObjectMapper할당을 제거하기 위해 IcebergPartitionData생성에 Avro 스키마 캐시를 추가했습니다. #72215 CatalogRecycleBin.getAdjustedRecycleTimestamp를 최적화하여 호출할 때마다 table-id 맵을 다시 구축하지 않도록 함으로써 휴지통 정리 및 tablet 스케줄링 오버헤드를 줄였습니다. #72128OlapTableSink.createLocation이 이제 shared-data 모드에서 tablet 위치 조회를 일괄 처리하여, 이전에 플래너의 임계 영역(critical section)을 정체시키던 tablet별 StarOS RPC를 제거합니다. #72041- Java UDAF 인스턴스가 이제 쿼리당 한 번 로드 및 초기화되어 여러 파이프라인 드라이버 인스턴스에서 재사용되므로, 높은
pipeline_dop에서 발생하던 선형적인 드라이버 준비 오버헤드가 제거됩니다. #72038 - 로컬 캐시가 미스되어 StarOS 워커가
starmgr에서 shard 정보를 가져오는 폴백을 수행하는 경우를 추적하기 위해 BE 메트릭starrocks_be_staros_shard_info_fallback_total및starrocks_be_staros_shard_info_fallback_failed_total을 추가했습니다. #71620 - 파일 번들 쓰기가 이제 tablet 로컬 aggregator를 우선적으로 사용하므로, 번들된 tablet 메타데이터 경로에서 노드 간 shard 정보 조회가 필요하지 않습니다. #71613
- 감사 로그 항목이 이제 각 쿼리가 참조하는 조회된 테이블과 뷰를 포함합니다. #71596
INSERT INTO FILES의 CSV 내보내기가 이제 필드 인용(quoting) 및 이스케이프를 제어하기 위한csv.enclose및csv.escape속성을 지원합니다. #71589- DN 패턴을 통한 LDAP 직접 바인드(direct bind) 인증을 추가하여, 단일 테넌트 LDAP 구성에서 관리자 검색 계정 요구 사항을 제거했습니다. #71559
- shared-nothing 메트릭 세트와 일치시키기 위해 shared-data 클러스터용
starrocks_fe_tablet_num메트릭을 추가했습니다. #71444 star_mgr_meta_sync_interval_sec가 이제ADMIN SET FRONTEND CONFIG를 통해 런타임에 변경 가능하며, 새로운 간격은 FE 재시작 없이 다음 동기화 주기에 적용됩니다. #71675
버그 수정
다음 이슈들이 수정되었습니다:
- shared-data combined txn log 모드에서 파티션별 coordinator 디스패치로의 INSERT가 정상적인 txn 로그를 orphan으로 분류하여 삭제함으로써 트랜잭션이 non-VISIBLE 상태로 멈추던 경합(race)을 수정했습니다. #72237
- shared-data combined txn log 모드에서 레거시 "sender_id == 0이 모든 로그를 수집한다" 규칙이 incremental 채널에는 적용되지 않아
_incremental_open_node_channel채널이 txn 로그를 조용히 누락시키던 이슈를 수정했습니다. #71992 - 프로파일 직렬화 중 다른 스레드가 카운터의 min/max 값을 재설정할 때
RuntimeProfile::to_thrift()가std::bad_optional_access로 BE를 크래시시킬 수 있던 이슈를 수정했습니다. #72904 - 한쪽이 빈 값을 제공할 때 flat JSON 병합 결과에서 발생하던 불일치를 수정했습니다. #72973
- 사용자가
PROPERTIES에format-version을 명시적으로 지정했을 때 Iceberg 테이블에 대한CREATE TABLE이 "Multiple entries with same key: format-version" 오류로 실패하던 이슈를 수정했습니다. #72828 - 단일 테이블 임계 작업 전반에 걸쳐 DB 전체 READ 락을 보유하여 동일 데이터베이스 내 다른 테이블에 대한 동시 DDL을 차단하던
CompactionScheduler.startCompaction의 락 범위를 수정했습니다. DB에 대한 IS 락과 대상 테이블에 대한 READ 락으로 전환했습니다. #72178 StarMgrMetaSyncer.syncTableMetaInternal및syncTableColocationInfo가 외부 StarOS RPC 전반에 걸쳐 DB READ/WRITE 락을 보유하여 각 RPC가 지속되는 동안 데이터베이스 내 모든 테이블에 대한 CREATE/DROP/ALTER/RENAME을 멈추게 하던 이슈를 수정했습니다. #72108StarMgrMetaSyncer.getAllPartitionShardGroupId가 모든 cloud-native 테이블과 물리 파티션을 전체 순회하는 동안 DB READ 락을 보유하여, 대규모 catalog에서 DB write 락을 기다리는 FE 스레드를 정체시키던 이슈를 수정했습니다. #71614getTableNamesViewWithLock의 불필요한 DB READ 락을 수정했습니다. 기반이 되는nameToTable은ConcurrentHashMap이므로, 이를 감싸는 락은 정확성에 대한 이점 없이 경합만 추가했습니다. #72042proximateRowCount()계산에는 불필요했던 읽기 전용/api/{db}/{table}/_countREST 엔드포인트의 DB WRITE 락을 수정했습니다. #72053- tablet split, 스키마 변경, alter 작업 등이 대응되는 publish 없이
nextVersion을 증가시켜 예약함으로써 발생한 파티션 버전 간극으로 인한 배치 publish 데드락을 수정했습니다. #71483 - 캐시가 가득 차 상태에서 rowset 메타데이터용 LRU 캐시를 워밍업할 때 shared-nothing 모드에서 발생하던 데드락을 수정했습니다. #71459
- consumer 등록과 finished 시그널링 간의 잘못된 순서로 인해
waitUtilFinished에서 멈추어 있을 수 있던PipelineTimerTask를 수정했습니다. #72058 _writer_count에 대한 벡터 범위 초과(out-of-bounds) 접근을 통해 SIGSEGV로 BE를 크래시시키던ConnectorSinkPassthroughExchanger::accept의 조건 경합(condition race)을 수정했습니다. #71848- 임시
shared_ptr의 소멸로 인해 발생한LoadChannel::get_load_replica_status의 use-after-free를 수정했습니다. #71843 - 비동기 RPC closure 처리에서 참조 카운트 증가가 누락되어 발생한 information schema sink의 use-after-free를 수정했습니다. #71513
- decimal 값 너비의 부적절한 처리로 인해 발생한
reverse(DecimalV3)의 BE 크래시를 수정했습니다. #71834 UNNEST가 define-expression에 ARRAY 타입을 포함하는 컬럼을 생성하여 다운스트림의 전역 사전(global dictionary) 생성과 호환되지 않을 때 발생하던 BE 크래시를 수정했습니다. #72027bucket(4, region)과 같이 잘못된 transform 인자 순서로 Iceberg 외부 테이블을 생성할 때 FE에서 발생하던 NPE를 수정했습니다. 이제 FE는 일반적인 analyzer 오류를 반환합니다. #71917- 테이블에 대한 첫 번째 쿼리가 통계를 요청하지 않은 경우(예:
SELECT *) Iceberg manifest 데이터 파일 캐시 항목에 컬럼 통계가 누락되던 이슈를 수정했습니다. #71913 PruneHDFSScanColumnRule이 placeholder 구체화 컬럼을 주입하여, 테이블이bucket(col, N)으로 파티션된 경우 Iceberg min/max 최적화가 조용히 건너뛰어지던 이슈를 수정했습니다. #71863- identity 대신
Table.getId()가 비교되었고 connector 테이블 id가 플랜 재구축 시 변경될 수 있어AggregateJoinPushDownRule이 Iceberg 베이스 테이블 위의 구체화 뷰를 재작성(rewrite)하지 못하던 이슈를 수정했습니다. #71856 - metastore가 파일 시스템에 더 이상 존재하지 않는 위치를 가진 파티션을 나열할 때 Hive 동적 파티션으로의 INSERT OVERWRITE가 실패하던 이슈를 수정했습니다. 이제 누락된 파티션 디렉터리는 커밋 전에 생성됩니다. #71810
- Arrow가 array, struct, map 내부에 중첩된 사전을 포함하여 dictionary 타입의 컬럼을 반환할 때 발생하던 Parquet 스캐너 실패(
Illegal converting from arrow type(dictionary) ...)를 수정했습니다. #71855 - 이전 배치의 오래된 스캔 범위가
ColocatedBackendSelector.Assignment의 incremental 배치에 걸쳐 잔존하여 파일이 다시 배포되고 다시 스캔되던 이슈를 수정했습니다. #71789 PruneShuffleColumnRule이 Exchange shuffle 컬럼을 가지치기(prune)한 후 JoinoutputProperty를 업데이트하지 않아 잘못된 다운스트림 분배(distribution)를 초래하던 이슈를 수정했습니다. #72003- 다단계 MV 재작성의 첫 번째 단계에서
PushDownJoinOnExpressionToChildProject가 비활성화되었을 때 project 노드 누락으로 인해 발생한 잘못된 shuffle 분배를 수정했습니다. #71075 - predicate 정규화로 동일한 scalar-subquery placeholder가 여러 번 나타날 때
ReplaceSubqueryRewriteRule에서 발생하던 중복Apply첨부(attachment)를 수정했습니다. #71155 - 완료된 join probe가 파이프라인이 finished 상태로 전환되는 것을 막을 수 있던
EventScheduler의 short-circuit 이슈를 수정했습니다. #71740 aws.s3.iam_role_arn을 통해 구성된 AWS assume-role이 JNI 스캐너(RCFile / Avro / SequenceFile / Hudi)에 적용되지 않아 S3 403 오류를 유발하던 이슈를 수정했습니다. #71422- 날짜 리터럴이 Oracle NLS 형식과 일치하지 않아 Oracle JDBC predicate 푸시다운이 잘못된 SQL을 생성하던 이슈를 수정했습니다. 이제 리터럴은
date '...'형태로 출력됩니다. #71412 - shared-data 모드에서 follower FE가 DDL을 leader로 전달하고 FE journal 재생만 기다려 StarMgr journal을 놓치면서, 테이블 생성 직후 이어지는 쿼리에 대해 "no queryable replica" 오류를 발생시키던 이슈를 수정했습니다. #71263
- Primary Key tablet에 대한
get_tablet_stats가get_del_vec_in_meta()를 통해 모든 세그먼트마다 전체TabletMetadata를 반복적으로 다시 로드하던 이슈를 수정했습니다. #71672 - 실제 스키마 대신 placeholder 이름이 출력되어 빈 결과 집합이
r이라는 컬럼 이름을 반환하던 Arrow Flight 이슈를 수정했습니다. #71534 - CLONE 스레드 풀 크기를 조정할 때
parallel_clone_task_per_path업데이트가 store-path 수를 포함하지 않던 이슈를 수정했습니다. #71484 - 리소스 그룹 사용자 분류기(classifier)가
CREATE USER에서는 허용하는 숫자로 시작하는 사용자 이름을 거부하던 이슈를 수정했습니다. 이제 분류기는CREATE USER와 동일한 검증 규칙을 사용합니다. #71470 isRegistered()가 false일 때HttpServerHandler.channelInactive가unregisterConnection을 건너뛰어, 조기에 실패하는 요청에 대한 connection-map 항목이 누수되던 이슈를 수정했습니다. #72006- Java UDF JNI 호출(
NewObject,NewArray,NewStringUTF등)이 예외나 null 반환을 확인하지 않아 조용한 실패 또는 정의되지 않은 동작을 초래하던 이슈를 수정했습니다. #71734 be_tablets.DATA_SIZE가 rowset 컬럼 데이터 바이트 대신total_disk_size(rowset에 내장된 인덱스 및 lake PK tablet의 영구 PK 인덱스 포함)를 보고하던 이슈를 수정했습니다. #70735- 삭제할 shard가 없는 경우에도
StarMgrMetaSyncer가 출력하던 불필요한 "Failed to batch drop tablets" 경고를 수정했습니다. #72209 - CVE-2026-42198(pgjdbc) 및 CVE-2026-5598(BouncyCastle):
org.postgresql:postgresql을 42.7.11로, BouncyCastle을 1.84로 업그레이드했습니다. #72797 - netty의 CVE: netty를 4.1.133.Final로 업그레이드했습니다. #72905
- broker의 netty / jetty / awssdk / jackson 의존성을 업그레이드하여 broker의 CVE를 정리했습니다. #72184
- 이전 jetty-http 버전의 알려진 CVE를 해결하기 위해 jetty-http를 9.4.58.v20250814로 업그레이드했습니다. #71762
- jetty 9.x가 EOL이고 업스트림 수정이 게시되지 않았으므로, 빌드 차단을 해제하기 위해 CVE-2026-2332를 임시로 마스킹했습니다. #71914
4.0.9
출시일: 2026년 4월 16일
동작 변경
- VARBINARY 컬럼이 중첩 타입(ARRAY, MAP, STRUCT) 내부에 나타날 때, StarRocks는 이제 MySQL 결과 집합에서 해당 값을 바이너리 형식으로 올바르게 인코딩합니다. #71346
- Routine Load 작업은 이제 Primary Key 크기 제한을 초과하게 만드는 행과 같은 재시도 불가능한(non-retryable) 오류가 발생하면 자동으로 일시 중지됩니다. #71161
SHOW CREATE TABLE및DESC문이 이제 Paimon 외부 테이블의 Primary Key 컬럼을 표시합니다. #70535- Cloud-native tablet 메타데이터 가져오기 작업(
get_tablet_stats및get_tablet_metadatas등)은 이제 공유UPDATE_TABLET_META_INFO풀 대신 전용 스레드 풀을 사용합니다. #70492
개선 사항
- MySQL 프로토콜 응답에서 VARBINARY 값의 인코딩 동작을 제어하기 위한 세션 변수를 추가했습니다. #71415
- 스냅샷 복원 전 무결성 검증을 지원하기 위해 클러스터 스냅샷에
snapshot_meta.json마커 파일을 추가했습니다. #71209 - 조용한 실패에 대한 관찰 가능성(observability)을 개선하기 위해
WarehouseManager에서 조용히 삼켜지던 예외에 대한 경고 로그를 추가했습니다. #71215 - 성능 모니터링 및 진단을 지원하기 위해 Iceberg 메타데이터 테이블 쿼리에 대한 메트릭을 추가했습니다. #70825
regexp_replace()함수가 이제 FE 쿼리 계획 수립 중 상수 폴딩(constant folding)을 지원하여, 상수 문자열 인자를 가진 쿼리의 계획 수립 오버헤드를 줄입니다. #70804- 모니터링 및 성능 분석을 개선하기 위해 Iceberg time travel 쿼리에 대한 분류된 메트릭을 추가했습니다. #70788
- update compaction이 일시 중단될 때 로그 출력을 추가하여 compaction 수명 주기에 대한 가시성을 개선했습니다. #70538
SHOW COLUMNS가 이제 PostgreSQL 외부 테이블의 컬럼 주석을 반환합니다. #70520- 쿼리에서 예외가 발생할 때 쿼리 실행 계획을 덤프하는 기능을 지원하여 런타임 실패의 진단 가능성을 개선했습니다. #70387
- DDL 작업 중 tablet 삭제가 이제 일괄 처리되어 tablet 메타데이터에 대한 write 락 경합을 줄입니다. #70052
- 오류 상태에 멈추 정상적인 방법으로 삭제할 수 없는 동기식 구체화 뷰를 위한 Force Drop 복구 메커니즘을 추가했습니다. #70029
버그 수정
다음 이슈들이 수정되었습니다:
- 프로파일의
START_TIME및END_TIME이 세션 타임존으로 표시되지 않던 이슈를 수정했습니다. #71429 - CASE-WHEN/IF 표현식을 처리할 때 잘못된 쿼리 결과를 유발할 수 있던
PushDownAggregateRewriter의 공유 객체 변형(shared-object mutation) 버그를 수정했습니다. #71309 - 스레드 생성이 실패할 때 발생하던
ThreadPool::do_submit의 use-after-free 버그를 수정했습니다. #71276 information_schema.tables가 등식 predicate에서 특수 문자를 올바르게 이스케이프하지 않아 잘못된 결과를 유발하던 이슈를 수정했습니다. #71273- 구체화 뷰가 비활성 상태가 된 후에도 구체화 뷰 스케줄러가 계속 실행되던 이슈를 수정했습니다. #71265
- 동시 ALTER 작업 간에 스키마 업데이트 작업이 건너뛰어질 수 있던
UpdateTabletSchemaTask의 작업 시그니처 충돌을 수정했습니다. #71242 - MCV(Most Common Values) 항목만 포함하는 히스토그램에 대해 행 수 추정이 NaN 값을 생성하던 이슈를 수정했습니다. #71241
- AWS SDK 통합에서 AWS S3 Transfer Manager에 대한 누락된 의존성을 수정했습니다. #71230
TaskManager스케줄러 콜백이 현재 노드가 leader인지 확인하지 않아 follower 노드에서 중복 작업 실행을 유발할 수 있던 이슈를 수정했습니다. #71156- leader로 전달된 요청이 완료된 후
ConnectContext정보가 정리되지 않던 thread-local 캄텍스트 오염 이슈를 수정했습니다. #71141 - short-circuit 포인트 조회에서 파티션 predicate가 누락되어 잘못된 쿼리 결과를 유발하던 이슈를 수정했습니다. #71124
- generated 컬럼 표현식이 참조하는 컬럼이 로드 스키마에 없는 경우 Stream Load 또는 Broker Load 중 generated 컬럼을 분석할 때 발생하던 NullPointerException을 수정했습니다. #71116
- 병렬 세그먼트 및 rowset 로딩의 오류 처리 경로에서 발생하던 use-after-free 버그를 수정했습니다. #71083
- 동일한 publish 배치에서 쓰기 작업이 compaction보다 먼저 수행될 때 delvec orphan 항목이 남겨지던 이슈를 수정했습니다. #71049
- 쿼리 진행 상황을 내부적으로 확인할 때 HTTP 루프백을 통해 쿼리가
current_queries결과에 나타나던 이슈를 수정했습니다. #71032 - CVE-2026-33870 및 CVE-2026-33871을 수정했습니다. #71017
SharedDataStorageVolumeMgr의 read 락 누수를 수정했습니다. #70987locate()함수의 입력 컬럼과 결과 컬럼이 BinaryColumns 내부에서 동일한 NullColumn 참조를 공유하여 잘못된 결과를 유발하던 이슈를 수정했습니다. #70957- share-nothing 모드에서 ALTER 작업 중 안전 tablet 삭제 검사가 잘못 적용되던 이슈를 수정했습니다. #70934
- 전역 런타임 필터가 올바르게 적용되지 못하게 할 수 있던
_all_global_rf_ready_or_timeout의 경합 조건(race condition)을 수정했습니다. #70920 - 메트릭 값이 조용히 오버플로되게 하던
ACCUMULATED메트릭 매크로의 int32 오버플로를 수정했습니다. #70889 - 사전 인코딩된 merge GROUP BY 쿼리에서 발생하던 잘못된 집계 결과를 수정했습니다. #70866
- CVE-2025-54920을 수정했습니다. #70862
set_finishing중 잘못된 해시 테이블 상태 처리로 인해 발생한 집계 spill의 잠재적 데이터 손실 이슈를 수정했습니다. #70851proxy_pass_request_body가 비활성화되었을 때content-length헤더가 재설정되지 않던 이슈를 수정했습니다. #70821- 로드 작업의 spill 디렉터리가
DeltaWriter::close()중이 아니라 객체 소멸자에서 정리되어 spill 데이터가 조기에 삭제될 수 있던 이슈를 수정했습니다. #70778 FILES()로부터의INSERT INTO ... BY NAME이 부분 컬럼 집합에 대해 스키마를 올바르게 푸시다운하지 않던 이슈를 수정했습니다. #70774- connector 스캔 노드가 쿼리 재시도 시 스캔 범위 소스를 재설정하지 않아 재시도 시 잘못된 결과를 유발하던 이슈를 수정했습니다. #70762
- A→B→A 형태의 디스크 재마이그레이션 중 GC 경합으로 인해 발생한 Primary Key 모델 tablet의 잠재적 rowset 메타데이터 손실을 수정했습니다. #70727
- 쿼리 범위의 warehouse 힌트가
ConnectContext의ComputeResource객체를 누수시켜 동일 연결의 후속 쿼리에 영향을 줄 수 있던 이슈를 수정했습니다. #70706 MySqlScanNode및JDBCScanNode의 중복 conjunct가VectorizedInPredicate타입 불일치와 관련된 BE 오류를 유발하던 이슈를 수정했습니다. #70694- Ubuntu 런타임 환경에서 누락된
libssl-dev의존성을 수정했습니다. #70688 - Iceberg manifest 캐시의 완전성이 읽기 시 검증되지 않아 캐시가 부분적으로 채워졌을 때 잘못된 스캔 결과를 초래하던 이슈를 수정했습니다. #70675
- use-after-free를 유발할 수 있던
_tablet_multi_get_rpc의 중복 closure 참조를 수정했습니다. #70657 - 불완전한 캐시 항목과 잘못된 스캔 동작을 초래할 수 있던 Iceberg
ManifestReader의 부분 manifest 캐시 쓰기를 수정했습니다. #70652 - null 리터럴 요소를 포함하는 배열을 처리할 때 발생하던
array_map()의 크래시를 수정했습니다. #70629 - 큰 입력을 처리할 때 발생하던
to_base64()함수의 스택 오버플로를 수정했습니다. #70623 FILES()로부터의INSERT INTO ... BY NAME이 이름 기반 매핑 대신 위치 기반 컬럼 매핑을 사용하여 데이터가 잘못된 컬럼에 기록되던 이슈를 수정했습니다. #70622NOT NULL제약 조건이FILES()에서 추론된 스키마로 잘못 푸시다운되어 nullable 컬럼에 대한 로드 실패를 유발하던 이슈를 수정했습니다. #70621- 정밀(precise) 외부 구체화 뷰 새로 고침이 Iceberg 유형의 connector에 대해 올바르게 폴백하지 않던 이슈를 수정했습니다. #70589
- 데이터 읽기 오류를 유발할 수 있던, 부분 tablet 스키마 구성 시 발생하던
num_short_key_columns불일치를 수정했습니다. #70586 MaskMergeIterator에서 자식 iterator가 소진되었을 때 발생하던 BE 크래시를 수정했습니다. #70539- 구체화 뷰 새로 고침 작업이 해당 Iceberg 스냅샷이 만료된 파티션을 반복적으로 새로 고치던 이슈를 수정했습니다. #70523
- starlet 구성 파라미터를 설정할 수 없던 이슈를 수정했습니다. #70482
- lock-free 구체화 뷰 재작성 경로가 live 메타데이터로 잘못 폴백하여 일관되지 않는 재작성 동작을 유발하던 이슈를 수정했습니다. #70475
JoinHashTable::merge_ht에서 표현식 기반 join 키 컬럼에 대해 dummy 행이 건너뛰어지지 않아 잘못된 join 결과를 유발하던 이슈를 수정했습니다. #70465- 특정 쿼리에서 잘못된 결과를 생성할 수 있던
InformationFunction의 잘못된 등식 비교를 수정했습니다. #70464 __iceberg_transform_bucket내부 함수의 컬럼 타입 불일치를 수정했습니다. #70443- Iceberg 스냅샷 타임스탬프가 비단조(non-monotonic)일 때 Iceberg 구체화 뷰 새로 고침이 실패하던 이슈를 수정했습니다. #70382
- 사용자 인증 자격 증명이 감사 로그 및 SQL 마스킹(redaction) 출력에 노출되던 이슈를 수정했습니다. #70360
- 물리 분할(physical split)이 활성화된 상태에서 빈 tablet을 스캔할 때 발생하던 CN 크래시를 수정했습니다. #70281
- 쿼리 최적화 중 중복 CAST가 제거된 후 VARCHAR 컬럼 길이가 보존되지 않던 이슈를 수정했습니다. #70269
- brpc 연결 재시도 로직이 래핑된
NoSuchElementException을 올바르게 처리하지 않아 재시도 후 연결 실패를 유발하던 이슈를 수정했습니다. #70203 - outer join 컬럼의 null 비율(null fraction)이 통계 추정 중 보존되지 않아 최적이 아닌 쿼리 계획을 초래하던 이슈를 수정했습니다. #70144
- poller 스레드에서 실행되는 connector sink 작업의 메모리 트래커 누수를 수정했습니다. #70121
4.0.8
출시일: 2026년 3월 25일
동작 변경
- 0으로 나누기 및 날짜 파싱 실패에 대한
sql_mode처리가 강화되었습니다. 이제 조용히 무시되는 대신 오류를 반환합니다. #70004 FORBID_INVALID_DATE모드 설정 시INSERT VALUES에서 유효하지 않은 날짜가 거부됩니다. #69803- Expression Partition으로 생성된 컬럼이
DESC및SHOW CREATE TABLE출력에서 숨겨집니다. #69793 - 감사 로그에서 클라이언트 ID가 제거되었습니다. #69383
개선 사항
- Exchange 버퍼 크기를 제한하는
local_exchange_buffer_mem_limit_per_driver설정이 추가되었습니다. #70393 - 스토리지 I/O를 줄이기 위해 파일 존재 확인 결과를 캐시합니다. #70364
- 내림차순 TopN 런타임 필터의 분할 및 역방향 스캔 범위 비활성화를 지원합니다. #70307
- Trino 방언에서
INSERT에 대한EXPLAIN및EXPLAIN ANALYZE지원이 추가되었습니다. #70174 - Position delete가 있는 Iceberg 읽기 성능이 최적화되었습니다. #69717
- 분산 키 기반 Materialized View best-selector 전략이 강화되었습니다. #69679
버그 수정
다음 이슈들이 수정되었습니다:
- 지원되지 않는 캐스트에 대한 JDBC MySQL 푸시다운 실패. #70415
- Materialized View 새로고침 시 타입 불일치;
mv_refresh_force_partition_type설정 추가. #70381 - 백업 복원 시
dataVersion이 올바르게 설정되지 않는 이슈. #70373 - Materialized View 새로고침 작업에서 중복 파티션 이름 이슈. #70354
- SLF4J 파라미터화된 로깅 이슈. #70330
- Hive 테이블 생성 시 코멘트가 설정되지 않는 이슈. #70318
- 느린 HDFS 작업에서
FileSystemExpirationChecker가 차단되는 이슈. #70311 - 파티션 간 Distribute 컬럼 검증이 적용되지 않는 이슈. #70310
- 상수 폴딩에서 double 오버플로우 시 INF가 생성되는 이슈. #70309
- Iceberg 테이블 생성의 "common" vs "comment" 타이핑 오류. #70267
- Root 사용자 권한 검사가 불완전한 이슈. #70254
query_pool메모리 트래커가 음수가 되는 이슈. #70228AuditEventProcessor스레드 크래시 이슈. #70206SplitTopNRule파티션 프루닝 이슈. #70154- 스키마 변경 시 범위 초과 접근 이슈. #70132
- 삭제된 파티션을 무시하는 Materialized View 재작성 이슈. #70130
- 타입 불일치로 인한 예상치 못한 파티션 프루닝. #70097
str_to_date마이크로초 정밀도 손실 이슈. #70068- Join Spill 크래시 이슈. #70030
- 커넥터 업그레이드 후 GCS 인증 실패 이슈. #70012
DeltaWriter::close()에서 DCHECK 실패. #69960AsyncDeltaWriteruse-after-free 이슈. #69940 #69770- Write 트랜잭션 로깅의 레이스 컨디션. #69899
- CVE 보안 취약점 수정. #69863
- Follower FE Journal 리플레이 이슈. #69834
- 백슬래시 이스케이프가 포함된 LIKE 패턴 매칭 이슈. #69775
- 파티션 컬럼 이름 변경 후 표현식 분석 실패. #69771
- Local Partition TopN 크래시. #69752
PartitionColumnMinMaxRewriteRule동작 이슈. #69751- CSV 압축 파일명 중복 이슈. #69749
lake_capture_tablet_and_rowsets게이팅 이슈. #69748- Shadow 파티션이 있는 파티션 min 프루닝 이슈. #69641
- Java UDTF/UDAF 제네릭 타입 크래시. #69197
- 쿼리별 메타데이터가 해제되지 않아 FE OOM 발생 이슈. #68444
- 쿼리 범위 Warehouse 힌트 리소스 누수 이슈. #70706
- Lock-free Materialized View 재작성 폴백 이슈. #70475
- 중복 Closure 참조 이슈. #70657
ReplaceColumnRefRewriter에서 무한 재귀 이슈. #66974FILES()에 대한NOT NULL제약조건 푸시다운 이슈. #70621num_short_key_columns불일치 이슈. #70586COLUMN_UPSERT_MODE체크섬 오류. #65320__iceberg_transform_bucket컬럼 타입 불일치. #70443- Starlet 설정 항목이 적용되지 않는 이슈. #70482
- 부분 업데이트에서 DCG 데이터 읽기 오류. #61529
4.0.7
출시일: 2026년 3월 12일
동작 변경
- Iceberg 뷰 기반 머티리얼라이즈드 뷰 생성을 허용하지 않도록 변경했습니다. #69471
- 다중 구문(multi-statement) Stream Load 트랜잭션 동작의 불일치를 수정했습니다. #68542
개선 사항
- Publish 단계에서
LakePersistentIndex에 대한 세분화된 트레이스 카운터를 추가했습니다. #69640 - 재구축(rebuild) 행 수가 임계값을 초과하면
LakePersistentIndex에서 조기 플러시(early flush)를 트리거합니다. #69698 meta_tool에dump_lake_persistent_index_sst작업을 추가했습니다. #69682REPAIR TABLE기능과SHOW TABLET상태 표시를 개선했습니다. #69656- 클라우드 네이티브 테이블에 대해
ADMIN SHOW TABLET STATUS를 지원합니다. #69616 hadoop-client를 3.4.2에서 3.4.3으로 업그레이드했습니다. #69503- 역직렬화 불일치 발생 시 크래시가 발생하지 않도록 방지했습니다. #69481
information_schema.loads조회 시 술어(predicate)를 FE로 푸시다운합니다. #69472- 머티리얼라이즈드 뷰 새로고침 TaskRun에 표시되는 SQL을 최적화했습니다. #69437
- vended credentials가 활성화된 경우
CachingIcebergCatalog의 캐싱을 우회합니다. #69434 - 락 경합을 줄이기 위해
canTxnFinished에서 타임아웃이 있는tryLock을 사용합니다. #69427 - 전역 읽기 전용 변수
@@run_mode를 추가했습니다. #69247 DeltaLakeMetastore에서 Estimator를 사용해 캐시 엔트리 가중치를 추정합니다. #69244- AWS Glue
GetDatabasesAPI에 대한 리소스 공유 유형(resource share type) 지원을 추가했습니다. #69056 convert_tz를 포함한 스칼라 서브쿼리에서 범위 술어를 추출합니다. #69055- ByteBuffer Estimator를 추가했습니다. #69042
- Shared-data 클러스터에서 Lake DeltaWriter의 빠른 취소(fast cancel)를 지원합니다. #68877
- 랜덤 분산 테이블에 물리 파티션을 추가하는 인터페이스를 지원합니다. #68503
- SQL 트랜잭션을 세션 변수
enable_sql_transaction(기본값: true)으로 제어하도록 했습니다. #63535 - 외부 테이블 조회 시 파티션 스캔 수 제한을 추가했습니다. #68480
버그 수정
다음 이슈들이 수정되었습니다:
- 리소스가 바쁠 때 메트릭
g_publish_version_failed_tasks값이 잘못되는 이슈. #69526 - 스냅샷이 만료된 경우
IcebergCatalog.getPartitionLastUpdatedTime에서 발생하는 NPE. #68925 - bthread 컨텍스트에서 호출될 때
DeltaWriter::close()에서 발생하는 DCHECK 실패. #70057 - 여러 use-after-free 이슈. #69968
- AsyncDeltaWriter close/finish 라이프사이클에서의 use-after-free 경쟁 조건(race condition). #69961
- PK SST 테이블의 손상된 캐시가 정리되지 않는 이슈. #69693
AsyncFlushOutputStreamuse-after-free 이슈. #69688disableRecoverPartitionWithSameName에서 보존 시계(retention clock)가 리셋되고 스캔이 불완전한 이슈. #69677- 역직렬화 이후
StreamLoadMultiStmtTask.cancelAfterRestart에서 발생하는 NPE. #69662 SchemaBeTabletsScanner의 잘못된 로직으로 인한 불필요한 RPC 및 메타데이터 쿼리. #69645- Graceful exit로 인해 서로 다른 트랜잭션이 동일한 버전을 publish하는 이슈. #69639
- Primary Key 인덱스에 컴팩션된 rowset을 가리키는 오래된 엔트리가 있을 때
TabletUpdates::get_column_values가 SIGSEGV로 크래시되는 이슈. #69617 KILL ANALYZE가ANALYZE TABLE작업을 중지하지 못하는 이슈. #69592- RowGroupWriter의 모든 예외가 처리되지 않아 발생하는 예기치 않은 동작. #69568
- 머티리얼라이즈드 뷰의 웨어하우스 변경 후 TaskRun 웨어하우스 표시 이슈. #69567
- Aggregate 및 Unique 테이블의 스키마 변경 후 정렬 키에 새로 추가된 키 컬럼이 포함되지 않는 이슈. #69529
isInternalCancelError가equals를 사용하여 발생하는 이슈. #69523ALTER MATERIALIZED VIEW이후 TaskManager 스케줄링 버그. #69504ParquetFileWriter::close의 모든 예외가 처리되지 않아 파이프라인이 블로킹되거나 크래시되는 이슈. #69492- 파티션 테이블에 대한 머티리얼라이즈드 뷰 강제 새로고침 버그. #69488
- 일부 writer가 데이터 플러시에 실패했을 때 잘못된 상태가 반환되는 이슈. #69473
- Primary Key 태블릿이 휴지통(trash)으로 이동될 때 rowset 파일이 삭제되는 이슈. #69438
- 자동 파티션의 범위가 기존 병합 파티션에 포함될 때 INSERT가 실패하는 이슈. #69429
- FE 리더와 팔로워 간 머티리얼라이즈드 뷰 태블릿 메타 불일치. #69428
- 함수 필드 관련 동시성 버그. #69315
computeMinActiveTxnId에서 롤업 핸들러의 활성 트랜잭션 ID를 고려하지 않아 데이터가 조기 삭제되는 이슈. #69285- 동시 SWAP 이후 이름 기반 테이블 조회로 인해
addPartitions에서 발생하는 락 누수. #69284 DROP FUNCTION IF EXISTS가ifExists플래그를 무시하는 이슈. #69216- TypeParser에서
CAST(... AS SIGNED)사용 시 StarRocks와 MySQL 호환 구문 간 동작이 일치하지 않는 이슈. #69181 - 쿼리 테이블 복사 시 대소문자를 구분하지 않는 파티션 조회 이슈. #69173
- MIN/MAX 통계 재작성 실패 시 집계 함수가 누락되는 이슈. #69149
- CVE-2025-67721. #69138
- 동기식 머티리얼라이즈드 뷰의 전체 NULL 값 처리 버그. #69136
- 공유 가변 상태로 인해 머티리얼라이즈드 뷰 재작성에서 프로젝션이 누락되는 이슈. #69063
- Iceberg 캐시 Weigher의 잘못된 추정. #69058
- 상수 서브쿼리와 함께 사용한
FULL OUTER JOIN USING이슈. #69028 - 중복 상수에 대한
DISTINCT ORDER BY별칭 해석 이슈. #69014 - 머티리얼라이즈드 뷰가 reload 시 외부 카탈로그에 접근하는 이슈. #68926
- Iceberg
getPartitions에서 발생하는 NPE. #68907 - Azure ABFS/WASB FileSystem 캐시 키에 컨테이너가 제대로 포함되지 않는 이슈. #68901
- Shared-data 클러스터에서
CHAR컬럼 길이 변경 후 쿼리 결과가 잘못되는 이슈. #68808 - LDAP 인증에서 사용자 이름의 대소문자 구분 이슈. #67966
- 테이블에
storage_cooldown_ttl을 추가한 후 파티션을 생성할 수 없는 이슈. #60290
4.0.6
출시일: 2026년 2월 14일
개선 사항
- 괄호를 포함한 파티션 변환 방식(예:
PARTITION BY (bucket(k1, 3)))으로 Iceberg 테이블 생성을 지원합니다. #68945 - Iceberg 테이블에서 파티션 컬럼이 반드시 컬럼 목록의 마지막에 위치해야 하는 제약을 제거하여 임의 위치에서 정의 가능하도록 변경되었습니다. #68340
- Iceberg 테이블 싱크에 호스트 수준 정렬 기능이 도입되었습니다. 시스템 변수
connector_sink_sort_scope(기본값: FILE)를 통해 제어하며, 읽기 성능 향상을 위한 데이터 레이아웃 최적화를 지원합니다. #68121 - 인수 개수가 잘못된 경우 Iceberg 파티션 변환 함수(예:
bucket,truncate)의 오류 메시지가 개선되었습니다. #68349 - Iceberg 테이블에서 다양한 파일 형식(ORC/Parquet) 및 압축 코덱 지원을 개선하기 위해 테이블 속성 처리 로직이 리팩토링되었습니다. #68588
- 세분화된 제어를 위한 테이블 수준 쿼리 타임아웃 설정
table_query_timeout이 추가되었습니다 (우선순위: 세션 > 테이블 > 클러스터). #67547 - 자동화된 스냅샷 상태 및 스케줄을 확인하기 위한
ADMIN SHOW AUTOMATED CLUSTER SNAPSHOT구문을 지원합니다. #68455 SHOW CREATE VIEW에서 주석을 포함한 사용자 정의 원본 SQL을 표시하도록 지원합니다. #68040- Merge Commit이 활성화된 Stream Load 작업이
information_schema.loads에 노출되어 가시성이 향상되었습니다. #67879 - FE 메모리 추정을 위한 유틸리티 API
/api/memory_usage가 도입되었습니다. #68287 - 파티션 재활용 중
CatalogRecycleBin의 불필요한 로깅이 줄어들었습니다. #68533 - 베이스 테이블에서 Swap/Drop/Replace Partition 작업이 발생하면 연관된 비동기 Materialized View가 갱신(refresh) 트리거됩니다. #68430
VARBINARY타입에 대한count distinct유사 집계 함수를 지원합니다. #68442- 의미론적으로 안전한 표현식(예:
cast(k as bigint) + 10)에 대해 히스토그램 MCV를 전파하도록 표현식 통계가 강화되어 스큐 탐지 정확도가 향상되었습니다. #68292
버그 수정
다음 이슈들이 수정되었습니다:
- Skew Join V2 런타임 필터에서 발생하는 잠재적 크래시. #67611
- Low Cardinality 재작성으로 인한 조인 조건 타입 불일치(예: INT = VARCHAR). #68568
- 쿼리 큐 할당 시간 및 대기 타임아웃 로직 관련 이슈. #65802
- 스키마 변경 후 Flat JSON 확장 컬럼의
unique_id충돌. #68279 OlapTableSink.complete()에서 파티션 동시 접근 이슈. #68853- 수동으로 다운로드한 클러스터 스냅샷 복원 시 잘못된 메타데이터 추적. #68368
- 리포지토리 경로가
/로 끝날 때 백업 경로에 이중 슬래시가 포함되는 이슈. #68764 SHOW CREATE CATALOG출력에서 OBS AK/SK 자격증명이 마스킹되지 않는 이슈. #65462
4.0.5
출시일: 2026년 2월 3일
개선 사항
- Paimon 버전이 1.3.1로 업그레이드되었습니다. #67098
- DP 통계 추정에서 누락된 최적화가 복원되어 불필요한 계산이 감소되었습니다. #67852
- DP Join 재순서화의 프루닝이 개선되어 비용이 높은 후보 플랜을 더 일찍 건너뜁니다. #67828
- JoinReorderDP의 파티션 열거 최적화로 객체 할당이 줄어들고 원자 수 상한(≤62)이 추가되었습니다. #67643
- DP 조인 재순서화 프루닝 최적화 및 스트림 연산 오버헤드 감소를 위한 BitSet 검사가 추가되었습니다. #67644
- DP 통계 추정 중 조건자 컬럼 통계 수집을 건너뛰어 CPU 오버헤드가 감소되었습니다. #67663
- 상관 Join 행 수 추정 최적화로
Statistics객체 반복 생성이 방지됩니다. #67773 Statistics.getUsedColumns에서 메모리 할당이 감소되었습니다. #67786- 행 수만 업데이트될 때 불필요한
Statistics맵 복사가 방지됩니다. #67777 - 쿼리에 집계가 없는 경우 집계 푸시다운 로직을 건너뛰어 오버헤드가 감소되었습니다. #67603
- 윈도우에서의 COUNT DISTINCT 기능 개선, 퓨즈드 멀티 디스팅트 집계 지원 추가, CTE 생성 최적화가 이루어졌습니다. #67453
- Trino 방언에서
map_agg함수를 지원합니다. #66673 - Shared-data 클러스터에서 물리적 계획 수립 시 LakeTablet 위치 정보를 일괄 조회하여 RPC 호출이 감소되었습니다. #67325
- Shared-nothing 클러스터에서 Publish Version 트랜잭션에 스레드 풀이 추가되어 동시성이 향상되었습니다. #67797
- LocalMetastore 잠금 세분화 최적화로 데이터베이스 수준 잠금이 테이블 수준 잠금으로 변경되었습니다. #67658
- MergeCommitTask 생명주기 관리가 리팩토링되고 작업 취소 지원이 추가되었습니다. #67425
- 자동화된 클러스터 스냅샷에 인터벌 설정을 지원합니다. #67525
- MemTrackerManager에서 미사용
mem_pool항목이 자동으로 정리됩니다. #67347 - Warehouse 유휴 상태 확인 시
information_schema쿼리가 무시됩니다. #67958 - Iceberg 테이블 싱크에서 데이터 분산에 따른 글로벌 셔플 동적 활성화를 지원합니다. #67442
- 커넥터 싱크 모듈에 대한 Profile 메트릭이 추가되었습니다. #67761
- Profile에서 로드 스필 메트릭 수집 및 표시가 개선되어 로컬/원격 I/O가 구분됩니다. #67527
- 반복적인 경고 로그를 방지하기 위해 Async-Profiler 로그 레벨이 Error로 변경되었습니다. #67297
- BE 종료 시 Starlet에 알림을 전송하여 StarMgr에 SHUTDOWN 상태를 보고합니다. #67461
버그 수정
다음 이슈들이 수정되었습니다:
- 하이픈(
-)을 포함하는 합법적인 단순 경로를 지원하지 못하는 이슈. #67988 - JSON 타입을 포함한 그루핑 키에서 집계 푸시다운 발생 시 런타임 오류. #68142
- JSON 경로 재작성 규칙이 파티션 조건자에서 참조된 파티션 컬럼을 잘못 프루닝하는 이슈. #67986
- 통계를 이용한 단순 집계 재작성 시 타입 불일치 이슈. #67829
- 파티션 Join에서 발생하는 잠재적 힙 버퍼 오버플로우. #67435
- 무거운 표현식 푸시다운 시 중복
slot_ids생성. #67477 - 사전 조건 검사 부재로 인한 ExecutionDAG 프래그먼트 연결에서 Division-by-zero 오류. #67918
- 단일 BE에 대한 프래그먼트 병렬 준비로 인한 잠재적 이슈. #67798
- RawValuesSourceOperator에
set_finished메서드 누락으로 연산자가 잘못 종료되는 이슈. #67609 - 컬럼 애그리게이터에서 지원되지 않는 DECIMAL256 타입(정밀도 > 38)으로 인한 BE 크래시. #68134
- Shared-data 클러스터에서 DELETE 작업에 대한 Fast Schema Evolution v2가
schema_key를 요청에 포함하지 않는 이슈. #67456 - Shared-data 클러스터에서 동기식 Materialized View 및 기존 스키마 변경에 대한 Fast Schema Evolution v2 미지원 이슈. #67443
- FE 다운그레이드 중 파일 번들링이 비활성화된 경우 Vacuum이 파일을 잘못 삭제할 수 있는 이슈. #67849
- MySQLReadListener에서의 잘못된 graceful exit 처리. #67917
4.0.4
출시일: 2026년 1월 16일
개선 사항
- 운영자 및 드라이버에 대한 병렬 준비(Parallel Prepare)와 단일 노드 배치 프래그먼트 배포가 지원되어 쿼리 스케줄링 성능이 향상되었습니다. #63956
- 대용량 파티션 테이블에 대해 지연 평가(lazy evaluation)를 사용하여
deltaRows계산이 최적화되었습니다. #66381 - 순차 반복 및 경로 파생 개선으로 Flat JSON 처리가 최적화되었습니다. #66941 #66850
- 그룹 실행에서 메모리 사용량을 줄이기 위해 Spill 연산자 메모리를 더 일찍 해제하는 기능을 지원합니다. #66669
- 문자열 비교 오버헤드를 줄이기 위한 로직이 최적화되었습니다. #66570
GroupByCountDistinctDataSkewEliminateRule및SkewJoinOptimizeRule에서 히스토그램 및 NULL 기반 전략을 지원하여 스큐 탐지 기능이 강화되었습니다. #66640 #67100- Move 시맨틱스를 사용하여 Chunk에서의 컬럼 소유권 관리가 강화되어 Copy-On-Write 오버헤드가 감소되었습니다. #66805
- Shared-data 클러스터에서 FE
TableSchemaService추가 및MetaScanNode업데이트로 Fast Schema Evolution v2 스키마 조회를 지원합니다. #66142 #66970 - 더 나은 리소스 격리를 위해 Multi-Warehouse Backend 리소스 통계 및 병렬성(DOP) 계산을 지원합니다. #66632
- StarRocks 세션 변수
connector_huge_file_size를 통한 Iceberg 분할 크기 설정을 지원합니다. #67044 QueryDumpDeserializer에서 레이블 형식 통계를 지원합니다. #66656- Shared-data 클러스터에서 Full Vacuum 비활성화를 위한 FE 설정
lake_enable_fullvacuum(기본값:false)이 추가되었습니다. #63859 - lz4 의존성이 v1.10.0으로 업그레이드되었습니다. #67045
- 행 수가 0일 때 샘플 타입 카디널리티 추정을 위한 폴백 로직이 추가되었습니다. #65599
array_sort에서 람다 비교자에 대한 Strict Weak Ordering 속성이 검증되었습니다. #66951- 외부 테이블 메타데이터(Delta/Hive/Hudi/Iceberg) 가져오기 실패 시 근본 원인을 표시하는 오류 메시지가 개선되었습니다. #66916
- 쿼리 타임아웃 시 파이프라인 상태를 덤프하고 FE에서 TIMEOUT 상태로 취소하는 기능을 지원합니다. #66540
- SQL 블랙리스트 오류 메시지에서 매칭된 규칙 인덱스가 표시됩니다. #66618
EXPLAIN출력의 컬럼 통계에 레이블이 추가되었습니다. #65899- 정상적인 쿼리 완료(예: LIMIT 도달)에서 "cancel fragment" 로그가 필터링됩니다. #66506
- Warehouse 일시 중단 시 Backend 하트비트 실패 로그가 감소되었습니다. #66733
ALTER STORAGE VOLUME구문에서IF EXISTS를 지원합니다. #66691
버그 수정
다음 이슈들이 수정되었습니다:
- Low Cardinality 최적화에서
withLocalShuffle누락으로 인한DISTINCT및GROUP BY결과 오류. #66768 - Lambda 표현식을 포함한 JSON v2 함수의 재작성 오류. #66550
- 상관 서브쿼리에서 Null-aware Left Anti Join에 Partition Join이 잘못 적용되는 이슈. #67038
- Meta Scan 재작성 규칙에서의 잘못된 행 수 계산. #66852
- 통계로 Meta Scan 재작성 시 Union Node에서 Nullable 속성 불일치. #67051
PARTITION BY와ORDER BY가 없을 때 Ranking 윈도우 함수 최적화 로직으로 인한 BE 크래시. #67094- 윈도우 함수가 있는 Group Execution Join에서의 잘못된 결과. #66441
- 특정 필터 조건에서
PartitionColumnMinMaxRewriteRule의 잘못된 결과. #66356 - 집계 이후 Union 연산에서 잘못된 Nullable 속성 추론. #65429
percentile_approx_weighted에서 압축 파라미터 처리 시 크래시. #64838- 대용량 문자열 인코딩 시 스필(spill) 중 크래시. #61495
- 로컬 TopN 푸시다운 시
set_collector가 여러 번 호출되어 발생하는 크래시. #66199 - LowCardinality 재작성 로직에서의 의존성 추론 오류. #66795
- 로우셋 커밋 실패 시 Rowset ID 누수. #66301
- Metacache 잠금 경합. #66637
- 컬럼 모드 부분 업데이트(Partial Update)와 조건부 업데이트 함께 사용 시 인제스션 실패. #66139
- ALTER 작업 중 태블릿 삭제로 인한 동시 가져오기 실패. #65396
- RocksDB 반복 타임아웃으로 인한 태블릿 메타데이터 로드 오류. #65146
- Shared-data 클러스터에서 테이블 생성 및 Schema Change 시 압축 설정이 적용되지 않는 이슈. #65673
- 업그레이드 중 Delete Vector CRC32 호환성 이슈. #65442
- 클론 작업 실패 후 파일 정리에서의 상태 확인 로직 오류. #65709
INSERT OVERWRITE이후 비정상적인 통계 수집 로직. #65327 #65298 #65225- FE 재시작 후 외래 키 제약 조건이 손실되는 이슈. #66474
- Warehouse 삭제 후 메타데이터 조회 오류. #66436
- 높은 선택도 필터 조건에서 감사 로그 스캔 통계 부정확. #66280
- 쿼리 오류율 메트릭 계산 로직 오류. #65891
- 작업 종료 시 MySQL 연결 누수 가능성. #66829
- SIGSEGV 크래시 시 BE 상태가 즉시 업데이트되지 않는 이슈. #66212
- LDAP 사용자 로그인 중 NPE 발생. #65843
- HTTP SQL 요청에서 사용자 전환 시 부정확한 오류 로그. #65371
- TCP 연결 재사용 중 HTTP 컨텍스트 누수. #65203
- Follower에서 전달된 쿼리에 대한 Profile 로그에서 QueryDetail 누락. #64395
- 감사 로그에서 Prepare/Execute 세부 정보 누락. #65448
- HyperLogLog 메모리 할당 실패로 인한 크래시. #66747
trim함수의 메모리 예약 이슈. #66477 #66428- CVE-2025-66566 및 CVE-2025-12183 보안 취약점. #66453 #66362 #67053
- Exec Group 드라이버 제출에서의 레이스 컨디션. #66099
- Pipeline 카운트다운에서의 use-after-free 위험. #65940
- 큐가 닫힐 때
MemoryScratchSinkOperator가 멈추는 이슈. #66041 - 파일시스템 캐시 키 충돌 이슈. #65823
SHOW PROC '/compactions'에서 잘못된 서브태스크 수. #67209- Query Profile API에서 통합된 JSON 형식이 반환되지 않는 이슈. #67077
- Materialized View 검사에 영향을 미치는
getTable의 부적절한 예외 처리. #67224 - 네이티브 테이블과 클라우드 네이티브 테이블 간
DESC구문의Extra컬럼 출력 불일치. #67238 - 단일 노드 배포에서의 레이스 컨디션. #67215
- 서드파티 라이브러리에서의 로그 누수. #67129
- 인증 실패를 유발하는 REST Catalog 인증 로직 오류. #66861
4.0.3
출시일: 2025년 12월 25일
개선 사항
- STRUCT 데이터 타입에 대한
ORDER BY절을 지원합니다. #66035 - 속성을 포함한 Iceberg 뷰 생성과
SHOW CREATE VIEW출력에 속성 표시를 지원합니다. #65938 ALTER TABLE ADD/DROP PARTITION COLUMN을 사용하여 Iceberg 테이블 파티션 스펙 변경을 지원합니다. #65922- 프레임 윈도우(예:
ORDER BY/PARTITION BY)에서COUNT/SUM/AVG(DISTINCT)집계 최적화 옵션을 지원합니다. #65815 - 단일 문자 구분자에 대해
memchr를 사용하여 CSV 파싱 성능이 최적화되었습니다. #63715 - 네트워크 오버헤드를 줄이기 위해 Partial TopN을 Pre-Aggregation 단계로 푸시다운하는 옵티마이저 규칙이 추가되었습니다. #61497
- Data Cache 모니터링이 강화되었습니다:
- 메모리/디스크 쿼터 및 사용량에 대한 새로운 메트릭이 추가되었습니다. #66168
api/datacache/statHTTP 엔드포인트에 Page Cache 통계가 추가되었습니다. #66240- 네이티브 테이블에 대한 히트율 통계가 추가되었습니다. #66198
- OOM 시나리오에서 빠른 메모리 해제를 지원하도록 Sort 및 Aggregation 연산자가 최적화되었습니다. #66157
- Shared-data 클러스터에서 CN이 필요에 따라 특정 스키마를 가져올 수 있도록 FE에
TableSchemaService가 추가되었습니다. #66142 - 모든 종속 인제스션 작업이 완료될 때까지 히스토리 스키마를 유지하도록 Fast Schema Evolution이 최적화되었습니다. #65799
- 모든 파티션이 필터링되는 것을 방지하기 위해 NULL 파티션 값을 적절히 처리하도록
filterPartitionsByTTL이 강화되었습니다. #65923 - 리셋 시 연관된 MemPool을 클리어하도록
FusedMultiDistinctState가 최적화되었습니다. #66073 - Iceberg REST Catalog에서
ICEBERG_CATALOG_SECURITY속성 검사가 대소문자를 구분하지 않도록 변경되었습니다. #66028 - Shared-data 클러스터에서 StarOS Service ID를 조회하기 위한 HTTP 엔드포인트
GET /service_id가 추가되었습니다. #65816 - Kafka 컨슈머 설정에서 deprecated된
metadata.broker.list가bootstrap.servers로 교체되었습니다. #65437 - Full Vacuum Daemon 비활성화를 위한 FE 설정
lake_enable_fullvacuum(기본값: false)이 추가되었습니다. #66685 - lz4 라이브러리가 v1.10.0으로 업데이트되었습니다. #67080
버그 수정
다음 이슈들이 수정되었습니다:
- 배치 Publish 중
latest_cached_tablet_metadata로 인해 버전이 잘못 건너뛰어지는 이슈. #66558 - Shared-nothing 클러스터에서
CatalogRecycleBin의ClusterSnapshot관련 검사로 인한 잠재적 이슈. #66501 - Spill 작업 중 Iceberg 테이블에 복잡한 데이터 타입(ARRAY/MAP/STRUCT) 쓰기 시 BE 크래시. #66209
- Writer 초기화 또는 초기 쓰기 실패 시 Connector Chunk Sink가 멈추는 이슈. #65951
PartitionChunkWriter초기화 실패 시 close 중 null 포인터 역참조를 발생시키는 Connector Chunk Sink 버그. #66097- 존재하지 않는 시스템 변수 설정이 오류 대신 조용히 성공하는 이슈. #66022
- Data Cache 손상 시 Bundle 메타데이터 파싱 실패. #66021
- 결과가 비어있을 때 MetaScan이 count 컬럼에 0 대신 NULL을 반환하는 이슈. #66010
- 이전 버전에서 생성된 리소스 그룹에 대해
SHOW VERBOSE RESOURCE GROUP ALL이default_mem_pool대신 NULL을 표시하는 이슈. #65982 flat_json테이블 설정 비활성화 후 쿼리 실행 시RuntimeException발생. #65921- Schema Change 후
min/max통계를 MetaScan으로 재작성할 때 Shared-data 클러스터에서 발생하는 타입 불일치 이슈. #65911 PARTITION BY와ORDER BY가 없을 때 ranking window 최적화로 인한 BE 크래시. #67093- 런타임 필터 병합 시 잘못된
can_use_bf검사로 인한 잘못된 결과 또는 크래시. #67062 - 중첩된 OR 조건자에 런타임 bitset 필터를 푸시다운할 때 잘못된 결과 발생. #67061
- DeltaWriter 완료 후 write 또는 flush 작업으로 인한 잠재적 데이터 레이스 및 데이터 손실 이슈. #66966
- 단순 집계를 MetaScan으로 재작성할 때 nullable 속성 불일치로 인한 실행 오류. #67068
- MetaScan 재작성 규칙의 잘못된 행 수 계산. #66967
- 일관되지 않은 캐시된 태블릿 메타데이터로 인해 배치 Publish 중 버전이 잘못 건너뛰어질 수 있는 이슈. #66575
- HyperLogLog 작업에서 메모리 할당 실패에 대한 부적절한 오류 처리. #66827
4.0.2
출시일: 2025년 12월 4일
새로운 기능
- 새로운 리소스 그룹 속성
mem_pool이 도입되었습니다. 여러 리소스 그룹이 동일한 메모리 풀을 공유하고 해당 풀에 대한 통합 메모리 제한을 적용할 수 있습니다. 이 기능은 하위 호환성을 지원합니다.mem_pool을 지정하지 않으면default_mem_pool이 사용됩니다. #64112
개선 사항
- File Bundling 활성화 시 Vacuum 중 원격 스토리지 액세스가 감소되었습니다. #65793
- File Bundling 기능이 최신 태블릿 메타데이터를 캐시합니다. #65640
- long-string 시나리오에 대한 안전성과 안정성이 개선되었습니다. #65433 #65148
- 성능 저하를 방지하기 위해
SplitTopNAggregateRule로직이 최적화되었습니다. #65478 - Iceberg/DeltaLake 테이블 통계 수집 전략이 다른 외부 데이터 소스에 적용되어, 단일 테이블인 경우 통계 수집을 건너뜁니다. #65430
- Data Cache HTTP API
api/datacache/app_stat에 Page Cache 메트릭이 추가되었습니다. #65341 - 단일 대용량 ORC 파일의 병렬 스캔을 가능하게 하는 ORC 파일 분할을 지원합니다. #65188
- 옵티마이저에서 IF 조건자에 대한 선택도 추정이 추가되었습니다. #64962
- FE에서 DATE 및 DATETIME 타입에 대한 hour, minute, second의 상수 평가를 지원합니다. #64953
- 단순 집계를 MetaScan으로 재작성하는 기능이 기본적으로 활성화되었습니다. #64698
- shared-data 클러스터에서 다중 복제본 할당 처리가 개선되어 신뢰성이 향상되었습니다. #64245
- 감사 로그와 메트릭에 캐시 히트율이 노출됩니다. #63964
- 조건자와 조인에 대해 더 정확한 NDV를 제공하기 위해 HyperLogLog 또는 샘플링을 사용하여 히스토그램의 버킷별 고유 값 수를 추정합니다. #58516
- SQL 표준 시맨틱스를 따르는
FULL OUTER JOIN USING을 지원합니다. #65122 - 진단을 위해 옵티마이저 타임아웃 시 메모리 정보를 출력합니다. #65206
버그 수정
다음 이슈들이 수정되었습니다:
- DECIMAL56 mod 관련 이슈. #65795
- Iceberg 스캔 범위 처리 관련 이슈. #65658
- 임시 파티션과 랜덤 버킷에 대한 MetaScan 재작성 이슈. #65617
- 투명 Materialized View 재작성 후 JsonPathRewriteRule이 잘못된 테이블을 사용하는 이슈. #65597
partition_retention_condition이 생성된 컬럼을 참조할 때 Materialized View 새로고침 실패. #65575- Iceberg min/max 값 타이핑 이슈. #65551
enable_evaluate_schema_scan_rule이 true로 설정된 경우 서로 다른 데이터베이스 간information_schema.tables및 views 쿼리 이슈. #65533- JSON 배열 비교 시 정수 오버플로우. #64981
- MySQL Reader가 SSL을 지원하지 않는 이슈. #65291
- SVE 빌드 비호환성으로 인한 ARM 빌드 이슈. #65268
- 버킷된 Iceberg 테이블에 대해 bucket-aware 실행 기반 쿼리가 멈추는 현상. #65261
- OLAP 테이블 스캔에서 메모리 제한 검사 부재로 인한 강건한 오류 전파 및 메모리 안전성 이슈. #65131
동작 변경
- Materialized View가 비활성화되면 시스템이 이에 종속된 Materialized View들을 재귀적으로 비활성화합니다. #65317
- SHOW CREATE 출력 생성 시 원본 Materialized View 쿼리 SQL(주석/포맷팅 포함)을 사용합니다. #64318
4.0.1
출시일: 2025년 11월 17일
개선 사항
- 알려진 변수만 처리하도록 TaskRun 세션 변수 처리가 최적화되었습니다. #64150
- 기본적으로 메타데이터에서 Iceberg 및 Delta Lake 테이블의 통계 수집을 지원합니다. #64140
- bucket 및 truncate 파티션 변환이 있는 Iceberg 테이블의 통계 수집을 지원합니다. #64122
- 디버깅을 위한 FE
/proc프로파일 검사를 지원합니다. #63954 - Iceberg REST 카탈로그에 대한 OAuth2 및 JWT 인증 지원이 강화되었습니다. #63882
- 번들 태블릿 메타데이터 검증 및 복구 처리가 개선되었습니다. #63949
- 스캔 범위 메모리 추정 로직이 개선되었습니다. #64158
버그 수정
다음 이슈들이 수정되었습니다:
- 번들 태블릿 퍼블리싱 시 트랜잭션 로그가 삭제되는 이슈. #64030
- 조인 후 정렬 속성이 재설정되지 않아 조인 알고리즘이 정렬 속성을 보장하지 못하는 이슈. #64086
- 투명 Materialized View 재작성 관련 이슈. #63962
동작 변경
- Iceberg 카탈로그에
enable_iceberg_table_cache속성이 추가되어 선택적으로 Iceberg 테이블 캐시를 비활성화하고 항상 최신 데이터를 읽을 수 있습니다. #64082 INSERT ... SELECT가 계획 전 외부 테이블을 새로고침하여 최신 메타데이터를 읽도록 보장합니다. #64026- lock table 슬롯이 256으로 증가하고 slow-lock 로그에 rid가 추가되었습니다. #63945
- 이벤트 기반 스케줄링과의 비호환성으로 인해
shared_scan이 일시적으로 비활성화되었습니다. #63543 - 기본 Hive 카탈로그 캐시 TTL이 24시간으로 변경되고 사용되지 않는 파라미터가 제거되었습니다. #63459
- 세션 변수와 삽입되는 컬럼 수에 따라 Partial Update 모드가 자동으로 결정됩니다. #62091
4.0.0
출시일: 2025년 10월 17일
Data Lake Analytics
- BE 메타데이터에 대한 통합 Page Cache 및 Data Cache를 구현하고 스케일링을 위한 적응형 전략 채택. #61640
- Iceberg 통계에 대한 메타데이터 파일 파싱을 최적화하여 반복 파싱 방지. #59955
- Iceberg 메타데이터에 대한 COUNT/MIN/MAX 쿼리를 최적화하여 데이터 파일 스캔을 효율적으로 건너뛰어 대규모 파티션 테이블의 집계 쿼리 성능을 크게 향상하고 리소스 소비 감소. #60385
rewrite_data_files프로시저를 통한 Iceberg 테이블 compaction 지원.- Hidden partition이 있는 Iceberg 테이블 생성, 쓰기 및 읽기 지원. #58914
- Iceberg 테이블 생성 시 sort key 설정 지원.
- Iceberg 테이블의 sink 성능 최적화.
- Iceberg Sink가 대용량 연산자 spilling, global shuffle, local sorting을 지원하여 메모리 사용을 최적화하고 작은 파일 문제 해결. #61963
- Iceberg Sink가 Spill Partition Writer 기반 local sorting을 최적화하여 쓰기 효율성 향상. #62096
- Iceberg Sink가 파티션에 대한 global shuffle을 지원하여 작은 파일 추가 감소. #62123
- Iceberg 테이블에 대한 bucket-aware 실행을 강화하여 bucketed 테이블의 동시성 및 분산 기능 개선. #61756
- Paimon 카탈로그에서 TIME 데이터 타입 지원. #58292
- Iceberg 버전을 1.10.0으로 업그레이드. #63667
Security and Authentication
- JWT 인증과 Iceberg REST Catalog가 사용되는 시나리오에서 StarRocks가 후속 데이터 액세스 인증을 위해 REST Session Catalog를 통해 사용자 로그인 정보를 Iceberg로 전달하는 것을 지원. #59611 #58850
- Iceberg 카탈로그에 대한 vended credentials 지원.
- Group Provider를 통해 얻은 외부 그룹에 StarRocks 내부 역할 부여 지원. #63385 #63258
- 외부 테이블 새로 고침 권한을 제어하기 위해 REFRESH 권한 추가. #63385
Storage Optimization and Cluster Management
- Shared-data 클러스터의 cloud-native 테이블에 대한 File Bundling 최적화를 도입하여 로딩, Compaction 또는 Publish 작업으로 생성된 데이터 파일을 자동으로 묶어 외부 스토리지 시스템에 대한 고빈도 액세스로 인한 API 비용 감소. File Bundling은 v4.0 이상에서 생성된 테이블에 대해 기본적으로 활성화됨. #58316
- 사용자가 INSERT, UPDATE 및 DELETE 작업의 원자적 제출을 제어할 수 있도록 Multi-Table Write-Write Transaction 지원. 트랜잭션은 Stream Load 및 INSERT INTO 인터페이스를 지원하며 ETL 및 실시간 쓰기 시나리오에서 테이블 간 일관성을 효과적으로 보장. #61362
- Routine Load에 대한 Kafka 4.0 지원.
- Shared-nothing 클러스터의 Primary Key 테이블에 대한 전문 역색인 지원.
- Aggregate 테이블의 aggregate key 수정 지원. #62253
- 카탈로그, 데이터베이스, 테이블, 뷰 및 Materialized view 이름에 대한 대소문자 구분 없는 처리 활성화 지원. #61136
- Shared-data 클러스터에서 Compute Node 블랙리스트 지원. #60830
- 글로벌 연결 ID 지원. #57256
- 복구 가능한 삭제된 메타데이터를 표시하기 위해 Information Schema에
recyclebin_catalogs메타데이터 뷰 추가. #51007
Query and Performance Improvement
- DECIMAL256 데이터 타입을 지원하여 정밀도 상한을 38비트에서 76비트로 확장. 256비트 스토리지는 고정밀 금융 및 과학 컴퓨팅 시나리오에 더 나은 적응성을 제공하며 매우 큰 집계 및 고차 연산에서 DECIMAL128의 정밀도 오버플로 문제를 효과적으로 완화. #59645
- 기본 연산자의 성능 개선. #61691 #61632 #62585 #61405 #61429
- JOIN 및 AGG 연산자의 성능 최적화. #61691
- [Preview] 사용자가 쿼리 플랜을 쿼리에 바인딩할 수 있도록 SQL Plan Manager 도입으로 시스템 상태 변경(주로 데이터 업데이트 및 통계 업데이트)으로 인한 쿼리 플랜 변경을 방지하여 쿼리 성능 안정화. #56310
- Partition-wise Spillable Aggregate/Distinct 연산자를 도입하여 정렬된 집계 기반의 원래 Spill 구현을 대체하여 복잡하고 높은 카디널리티의 GROUP BY 시나리오에서 집계 성능을 크게 향상하고 읽기/쓰기 오버헤드 감소. #60216
- Flat JSON V2:
- 테이블 수준에서 Flat JSON 구성 지원. #57379
- V1 메커니즘을 유지하면서 페이지 및 세그먼트 수준 인덱스(ZoneMaps, Bloom filters), late materialization을 사용한 조건자 pushdown, 딕셔너리 인코딩, low-cardinality 글로벌 딕셔너리 통합을 추가하여 JSON 컬럼 스토리지를 강화하여 실행 효율성을 크게 향상. #60953
- STRING 데이터 타입에 대한 적응형 ZoneMap 인덱스 생성 전략 지원. #61960
- 쿼리 관찰성 강화:
- EXPLAIN ANALYZE 출력을 최적화하여 가독성을 높이기 위해 그룹 및 연산자별로 실행 메트릭 표시. #63326
- QueryDetailActionV2 및 QueryProfileActionV2가 JSON 형식을 지원하여 FE 간 쿼리 기능 향상. #63235
- 모든 FE에서 Query Profile 정보 검색 지원. #61345
- SHOW PROCESSLIST 문이 Catalog, Query ID 및 기타 정보 표시. #62552
- 쿼리 큐 및 프로세스 모니터링 강화로 Running/Pending 상태 표시 지원. #62261
- Materialized view 재작성이 원본 테이블의 분산 및 sort key를 고려하여 최적 Materialized view 선택 개선. #62830
Functions and SQL Syntax
다음 함수들이 추가되었습니다:
bitmap_hash64#56913bool_or#57414strpos#57278to_datetime및to_datetime_ntz#60637regexp_count#57182tokenize#58965format_bytes#61535encode_sort_key#61781column_size및column_compressed_size#62481
다음 구문 확장을 제공합니다:
- CREATE ANALYZE FULL TABLE에서 IF NOT EXISTS 키워드 지원. #59789
- SELECT에서 EXCLUDE 절 지원. #57411
- 집계 함수에서 FILTER 절을 지원하여 조건부 집계의 가독성 및 실행 효율성 향상. #58937
Behavior Changes
- Materialized view 매개변수
auto_partition_refresh_number의 로직을 조정하여 자동 갱신 또는 수동 갱신에 관계없이 갱신할 파티션 수를 제한. #62301 - Flat JSON이 기본적으로 활성화됨. #62097
- 시스템 변수
enable_materialized_view_agg_pushdown_rewrite의 기본값이 true로 설정되어 Materialized view 쿼리 재작성에 대한 aggregation pushdown이 기본적으로 활성화됨. #60976 - 해당 데이터에 더 잘 맞도록
information_schema.materialized_views의 일부 컬럼 타입 변경. #60054 split_part함수가 구분 기호가 일치하지 않을 때 NULL 반환. #56967- CTAS/CREATE MATERIALIZED VIEW에서 고정 길이 CHAR를 STRING으로 대체하여 잘못된 컬럼 길이 추론을 방지하여 Materialized view 갱신 실패를 방지. #63114 #62476
- Data Cache 관련 설정이 단순화됨. #61640
datacache_mem_size및datacache_disk_size가 이제 유효함.storage_page_cache_limit,block_cache_mem_size,block_cache_disk_size는 더 이상 사용되지 않음.- Hive 및 Iceberg 메타데이터 캐시에 사용되는 메모리 리소스를 제한하기 위해 새로운 카탈로그 속성(Hive용
remote_file_cache_memory_ratio, Iceberg용iceberg_data_file_cache_memory_usage_ratio및iceberg_delete_file_cache_memory_usage_ratio) 추가하고 기본값을 0.1(10%)로 설정. 메타데이터 캐시 TTL을 24시간으로 조정. #63459 #63373 #61966 #62288 - SHOW DATA DISTRIBUTION이 이제 동일한 bucket 순서 번호를 가진 모든 Materialized index의 통계를 병합하지 않음. Materialized index 수준의 데이터 분산만 표시. #59656
- 자동 bucket 테이블의 기본 bucket 크기가 4GB에서 1GB로 변경되어 성능 및 리소스 활용도 향상. #63168
- 시스템이 해당 세션 변수와 INSERT 문의 컬럼 수를 기반으로 Partial Update 모드를 결정. #62091
- Information Schema의
fe_tablet_schedules뷰 최적화. #62073 #59813 TABLET_STATUS컬럼을SCHEDULE_REASON으로,CLONE_SRC컬럼을SRC_BE_ID로,CLONE_DEST컬럼을DEST_BE_ID로 이름 변경.CREATE_TIME,SCHEDULE_TIME및FINISH_TIME컬럼의 데이터 타입이 DOUBLE에서 DATETIME으로 변경됨.- 일부 FE 메트릭에
is_leader레이블이 추가됨. #63004 - Microsoft Azure Blob Storage 및 Data Lake Storage Gen 2를 객체 스토리지로 사용하는 Shared-data 클러스터는 v4.0으로 업그레이드한 후 Data Cache 실패가 발생함. 시스템이 캐시를 자동으로 다시 로드함.
4.0.0-RC
출시일: 2025년 9월 9일
데이터 레이크 분석
- BE 메타데이터용 통합 페이지 캐시와 데이터 캐시를 도입하고, 적응형 스케일링 전략을 채택했습니다. #61640
- 반복적인 구문 분석을 방지하기 위해 Iceberg 통계에 대한 메타데이터 파일 구문 분석을 최적화했습니다. #59955
- 데이터 파일 스캔을 효율적으로 건너뛰어 Iceberg 메타데이터에 대한 COUNT/MIN/MAX 쿼리를 최적화하여 대규모 분할 테이블에서 집계 쿼리 성능을 크게 향상시키고 리소스 소비를 줄였습니다. #60385
rewrite_data_files프로시저를 통해 Iceberg 테이블의 압축을 지원합니다.- 숨겨진 파티션이 있는 Iceberg 테이블의 생성, 쓰기 및 읽기를 지원합니다. #58914
- Paimon 카탈로그에서 TIME 데이터 타입을 지원합니다. #58292
보안 및 인증
- JWT 인증 및 Iceberg REST 카탈로그를 사용하는 시나리오에서 StarRocks는 REST 세션 카탈로그를 통해 Iceberg에 사용자 로그인 정보를 전달하여 후속 데이터 액세스 인증을 지원합니다. #59611 #58850
- Iceberg 카탈로그의 벤디드 자격 증명을 지원합니다.
스토리지 최적화 및 클러스터 관리
- 공유 데이터 클러스터의 클라우드 네이티브 테이블에 대한 파일 번들링 최적화를 도입하여 로드, 압축 또는 게시 작업으로 생성된 데이터 파일을 자동으로 번들링함으로써 외부 저장 시스템에 대한 고빈도 액세스로 인한 API 비용을 줄입니다. #58316
- Routine Load를 위한 Kafka 4.0을 지원합니다.
- 공유 없는 클러스터의 프라이머리 키 테이블에서 전체 텍스트 역색인을 지원합니다.
- 카탈로그, 데이터베이스, 테이블, 뷰 및 구체화된 뷰의 이름에 대한 대소문자 구분 없는 처리를 활성화하는 것을 지원합니다. #61136
- 공유 데이터 클러스터에서 컴퓨트 노드의 블랙리스트 설정을 지원합니다. #60830
- 글로벌 연결 ID를 지원합니다. #57276
쿼리 및 성능 개선
- DECIMAL256 데이터 타입을 지원하여 정밀도의 상한을 38비트에서 76비트로 확장합니다. 256비트 스토리지는 고정밀 금융 및 과학 컴퓨팅 시나리오에 대한 적응성을 향상시키며, 매우 큰 집계와 고차 연산에서 DECIMAL128의 정밀도 오버플로우 문제를 효과적으로 완화합니다. #59645
- JOIN 및 AGG 연산자의 성능을 최적화했습니다. #61691
- [미리보기] SQL 계획 관리자를 도입하여 사용자가 쿼리에 쿼리 계획을 바인딩할 수 있게 함으로써 시스템 상태 변경(주로 데이터 업데이트 및 통계 업데이트)으로 인한 쿼리 계획 변경을 방지하여 쿼리 성능을 안정화합니다. #56310
- 파티션별 스필러블 집계/고유 연산자를 도입하여 정렬된 집계를 기반으로 한 기존의 스필 구현을 대체함으로써 복잡하고 높은 카디널리티 GROUP BY 시나리오에서 집계 성능을 크게 향상시키고 읽기/쓰기 오버헤드를 줄입니다. #60216
- Flat JSON V2:
- 테이블 레벨에서 Flat JSON 구성을 지원합니다. #57379
- V1 메커니즘을 유지하면서 페이지 및 세그먼트 수준 인덱스(ZoneMaps, Bloom 필터), 지연 구체화가 있는 조건자 푸시다운, 사전 인코딩 및 낮은 카디널리티 글로벌 사전 통합을 추가하여 JSON 컬럼형 스토리지를 향상시켜 실행 효율성을 크게 높입니다. #60953
- STRING 데이터 타입에 대한 적응형 ZoneMap 인덱스 생성 전략을 지원합니다. #61960