Trino 0.55 릴리스 노트

Trino 0.55 릴리스 노트

Trino 0.55 릴리스 노트입니다. 이번 릴리스에서는 RC 바이너리 디코딩 성능, 해시 분산 집계, DISTINCT 집계, 범위 조건자 푸시다운 등이 포함돼 있어요.

출처: 문서

본문

RC 바이너리 CPU 효율 2-4배 향상

Presto는 특정 Hive 파일 형식에 대해 커스텀 고속 디코딩 로직을 사용해요. 이 릴리스에서는 Binary SerDe(LazyBinaryColumnarSerDe)를 사용할 때 RCFile에 대한 고속 경로(fast path)를 추가했어요. 마이크로 벤치마크에서 일반(느린) 경로에 비해 CPU 효율이 2배에서 4배 향상됐어요. Hive 데이터 디코딩이 CPU 시간의 상당 부분을 차지하므로, RC 바이너리 인코딩 데이터에 대한 대부분의 쿼리에서 측정 가능한 개선을 기대할 수 있어요. 단, 클러스터가 네트워크나 디스크 I/O에 묶여 있다면 이 최적화가 지연 시간 감소로 이어지지 않을 수 있어요.

해시 분산 집계 (Hash distributed aggregations)

GROUP BY 집계가 이제 고정된 수의 머신에 분산돼요. 이는 코디네이터와 워커의 etc/config.properties에 설정된 query.initial-hash-partitions 속성으로 제어돼요. 값이 쿼리 스케줄링 중 사용 가능한 머신 수보다 크면 Presto는 사용 가능한 모든 머신을 사용해요. 기본값은 8이에요.

집계의 최대 메모리 크기는 이제 query.initial-hash-partitions 곱하기 task.max-memory예요.

단순 DISTINCT 집계 (Simple distinct aggregations)

집계 함수에 대한 DISTINCT 인자 한정자 지원을 추가했어요. 이는 현재 GROUP BY 절이 없는 쿼리와 모든 집계 함수가 같은 입력 표현식을 가지는 경우로 제한돼요. 예:

SELECT count(DISTINCT country)
FROM users

완전한 DISTINCT 기능 지원은 로드맵에 포함돼 있어요.

범위 조건자 푸시다운 (Range predicate pushdown)

단순 동등 조건자 외에도 범위 조건자를 지원하도록 커넥터 API를 수정했어요. 이는 범위 스캔을 지원하는 시스템(HBase, Cassandra, JDBC 등)에 대한 커넥터를 추가하는 기반을 마련해요.

범위 조건자를 받는 것 외에도 커넥터는 쿼리 최적화기에서 사용하기 위해 각 파티션의 범위를 다시 통보할 수 있어요. 이는 조인의 한쪽에 파티션이 몇 개 없는 JOIN 쿼리에서 큰 성능 향상이 될 수 있어요. 예:

SELECT * FROM data_1_year JOIN data_1_week USING (ds)

data_1_yeardata_1_week가 둘 다 ds로 분할되어 있다면, 커넥터는 한 테이블에는 365일의 파티션이 있고 다른 테이블에는 7일의 파티션만 있다고 보고해요. 그러면 최적화기는 data_1_year 테이블의 스캔을 실제로 일치할 수 있는 7일로 제한해요. 이러한 제약은 쿼리의 다른 조건자와 결합되어 스캔할 데이터를 더 줄여요.

참고: 이는 이전 커넥터 SPI와 호환되지 않는 변경이에요. 커넥터를 작성했다면 이 릴리스를 배포하기 전에 코드를 업데이트해야 해요.

json_array_get 함수

json_array_get() 함수는 스칼라 json 배열에서 단일 요소를 쉽게 가져올 수 있게 해 줘요.

예약되지 않은 키워드 (Non-reserved keywords)

DATE, TIME, TIMESTAMP, INTERVAL 키워드는 문법에서 더 이상 예약 키워드가 아니에요. 이는 식별자를 따옴표로 묶지 않고도 date라는 컬럼에 접근할 수 있다는 뜻이에요.

CLI 소스 옵션 (CLI source option)

Presto CLI에 이제 쿼리 소스를 설정하는 옵션이 있어요. 소스 값은 UI에 표시되고 이벤트에 기록돼요. 셸 스크립트에서 CLI를 사용할 때 --source 옵션을 설정해 정상 사용자와 셸 스크립트를 구분하는 것이 유용해요.

SHOW SCHEMAS FROM

문서에 SHOW SCHEMAS [FROM catalog] 문법이 포함되어 있었지만 구현되지 않았어요. 이 릴리스에서 이 문을 올바르게 구현했어요.

Hive 버킷화 테이블 수정 (Hive bucketed table fixes)

Hive 버킷화 테이블에 대한 쿼리에서 Presto는 WHERE 절과 일치하는 행을 포함할 수 있는 버킷으로 스캔을 제한하려고 해요. 아쉽게도 버킷을 선택하는 데 사용하던 알고리즘이 올바르지 않아 때로는 잘못된 파일을 선택하거나 파일을 전혀 선택하지 못하기도 했어요. 알고리즘을 Hive와 일치하도록 조정했고 이제 최적화가 예상대로 동작해요.

제대로 버킷화되지 않은 테이블을 감지하는 알고리즘도 개선했어요. Hive 메타데이터에 버킷화를 선언했지만 실제로는 HDFS에서 버킷화되지 않은 테이블이 흔해요. Presto가 이 경우를 감지하면 파티션 전체 스캔으로 폴백해요. 이 변경은 버킷화를 더 안전하게 만들 뿐 아니라, 모든 데이터를 다시 쓰지 않고도 테이블이 버킷화를 사용하도록 마이그레이션하기 쉽게 해 줘요.

더 알아보기 (Learn more)

Trino 0.55의 변경 사항을 더 자세히 확인하고 싶다면 공식 릴리스 노트를 참고해 주세요.