Trino 0.75 릴리스 노트

Trino 0.75 릴리스 노트

Trino 0.75 릴리스 노트입니다. 이번 릴리스에서는 Hive 개선, 새 집계 프레임워크, 스케줄러 변경, row_number 최적화 등이 포함돼 있어요.

출처: 문서

본문

Hive

  • Hive S3 파일 시스템에 새 구성 옵션 hive.s3.max-connections가 있어 S3에 대한 최대 연결 수를 설정해요. 기본값이 50에서 500으로 늘었어요.
  • Hive 커넥터가 이제 테이블 이름 변경을 지원해요. 기본적으로 이 기능은 활성화되지 않아요. 활성화하려면 Hive 카탈로그 속성 파일에서 hive.allow-rename-table=true를 설정하세요.

일반 (General)

  • 상수가 있는 count()를 훨씬 빠른 count(*)로 실행되도록 최적화했어요.
  • JDBC 드라이버에 바이너리 타입 지원을 추가했어요.
  • 레거시 바이트코드 컴파일러를 제거했어요.
  • 새 집계 프레임워크(~10% 더 빠름)
  • max_by() 집계 함수를 추가했어요.
  • approx_avg() 함수를 제거했어요. 대신 avg()를 사용하세요.
  • DISTINCTALL을 모두 사용하는 UNION 쿼리 파싱을 수정했어요.
  • 특정 쿼리 형태의 크로스 조인 계획 오류를 수정했어요.
  • varbinary용 hex와 base64 변환 함수를 추가했어요.
  • LIKE 연산자가 여러 줄을 포함한 값과 올바르게 일치하도록 수정했어요. 이전에는 첫 번째 개행 문자에서 일치를 멈췄어요.
  • ALTER TABLE 문으로 테이블 이름 변경을 지원해요.
  • INSERT 문으로 데이터 삽입의 기본 지원을 추가했어요. 현재는 Raptor 커넥터에서만 지원돼요.

JSON 함수

json_extract()json_extract_scalar() 함수가 이제 대괄호 문법을 지원해요:

SELECT json_extract(json, '$.store[book]');
SELECT json_extract(json, '$.store["book name"]');

이 변경의 일환으로 대괄호가 없는 경로 세그먼트에 허용되는 문자 집합이 영숫자, 밑줄, 콜론으로 제한됐어요. 또한 콜론은 따옴표가 없는 대괄호 경로 세그먼트에 사용할 수 없어요. 특수 문자가 포함된 요소와 일치하려면 따옴표가 있는 새 대괄호 문법을 사용하세요.

스케줄러 (Scheduler)

스케줄러가 이제 모든 쿼리에 걸친 노드의 현재 부하에 따라 스플릿을 노드에 할당해요. 이전에는 스케줄러가 쿼리별 수준으로 노드 간에 스플릿을 부하 분산했어요. 각 노드는 node-scheduler.max-splits-per-node만큼의 스플릿을 가질 수 있어요. 작은 쿼리의 굶김(starvation)을 피하기 위해, 노드가 이미 최대 허용 스플릿을 가졌다면 각 작업은 node-scheduler.max-pending-splits-per-node-per-task만큼의 스플릿만 노드에 스케줄링할 수 있어요.

Row number 최적화 (Row number optimizations)

row_number() 함수를 사용하는 쿼리가 두 종류의 쿼리에서 훨씬 빨라지고 더 큰 결과 집합에서 실행될 수 있어요.

파티션별로 N개의 임의 행을 선택하는 분할 limit은 스트리밍 연산이에요. 다음 쿼리는 각 orderstatus에 대해 orders에서 임의의 다섯 행을 선택해요:

SELECT * FROM (
    SELECT row_number() OVER (PARTITION BY orderstatus) AS rn,
        custkey, orderdate, orderstatus
    FROM orders
) WHERE rn <= 5;

각 파티션에서 최대 또는 최소 N행을 선택하는 분할 top-N은 이제 훨씬 적은 메모리를 사용해요. 다음 쿼리는 각 orderstatus에 대해 orders에서 orderdate 기준으로 가장 오래된 다섯 행을 선택해요:

SELECT * FROM (
    SELECT row_number() OVER (PARTITION BY orderstatus ORDER BY orderdate) AS rn,
        custkey, orderdate, orderstatus
    FROM orders
) WHERE rn <= 5;

EXPLAIN 문으로 이러한 최적화 중 하나가 쿼리에 적용됐는지 확인하세요.

SPI

코어 Presto 엔진이 count(*) 쿼리에 대해 더 이상 컬럼을 자동으로 추가하지 않아요. 대신 RecordCursorProvider가 빈 컬럼 핸들 목록을 받아요.

TypeBlock API가 이 릴리스에서 대대적으로 리팩터링됐어요. 리팩터링의 주요 초점은 모든 타입별 인코딩 로직을 타입 자체에 통합해 타입 구현을 훨씬 쉽게 만드는 것이었어요. 가까운 시일 내에 추가 변경이 예상되므로 TypeBlock을 베타 API로 간주해야 해요.

API를 단순화하기 위해 ConnectorOutputHandleResolverConnectorHandleResolver에 병합했어요. 또한 ConnectorHandleResolver, ConnectorRecordSinkProvider, ConnectorMetadata를 insert를 지원하도록 수정했어요.

참고: 이는 이전 커넥터와 타입 SPI에 호환되지 않는 변경이에요. 커넥터나 타입을 작성했다면 이 릴리스를 배포하기 전에 코드를 업데이트해야 해요. 특히 커넥터가 빈 컬럼 핸들 목록을 처리할 수 있는지 확인하세요(커넥터의 테이블에서 SELECT count(*)를 실행해 확인할 수 있어요).

더 알아보기 (Learn more)

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