Trino 0.60 릴리스 노트

Trino 0.60 릴리스 노트

Trino 0.60 릴리스 노트입니다. 이번 릴리스에서는 JDBC 개선, USE 문 지원, TPC-H 커넥터, 여러 최적화와 버그 수정이 포함돼 있어요.

출처: 문서

본문

JDBC 개선 (JDBC improvements)

Presto 버전의 JDBC DatabaseMetaData 인터페이스에 이제 getTables, getSchemas, getCatalogs의 적절한 구현이 포함돼요.

JDBC 드라이버는 이제 항상 의존성 없는 단독(standalone) jar로 패키징돼요. 이전에는 이 아티팩트가 Maven 분류자(classifier) standalone으로 게시됐어요. 새 빌드는 더 이상 이 아티팩트를 게시하지 않아요.

USE CATALOG와 USE SCHEMA

명령줄 인터페이스가 이제 USE CATALOGUSE SCHEMA를 지원해요.

TPC-H 커넥터

TPC-H 사양에 따라 합성 데이터를 생성하는 새 커넥터를 추가했어요. 이 커넥터는 테스트와 버그 리포트용 대규모 데이터셋 생성을 쉽게 해 줘요. 버그 리포트를 생성할 때 이 카탈로그를 사용하도록 권장해요. 문제 재현 과정을 쉽게 만들기 때문이에요. 데이터는 각 쿼리에 대해 동적으로 생성되므로 이 커넥터는 디스크 공간을 사용하지 않아요. 시스템에 tpch 카탈로그를 추가하려면 코디네이터와 워커 양쪽에 다음 내용으로 카탈로그 속성 파일 etc/catalog/tpch.properties를 만드세요:

connector.name=tpch

또한 워커의 구성 속성 파일 etc/config.properties에서 datasources 속성을 갱신해 tpch를 포함하세요.

SPI

Connector 인터페이스에 이제 쿼리 엔진이 기대하는 서비스를 제공하는 명시적 메서드가 있어요. 이전에는 이 처리가 일반적인 getService 메서드로 처리됐어요.

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

또한 SPI에 NodeManager 인터페이스를 추가해 플러그인이 Presto 클러스터의 모든 노드를 감지할 수 있게 했어요. 이는 커넥터가 노드 수를 알기만 하면 테이블을 모든 노드에 고르게 나눌 수 있는 일부 커넥터에 중요해요. 노드 매니저에 접근하려면 Plugin 클래스에 다음을 추가하세요:

@Inject
public void setNodeManager(NodeManager nodeManager)
{
    this.nodeManager = nodeManager;
}

최적화 (Optimizations)

DISTINCT LIMIT

다음 형태의 쿼리에 대해:

SELECT DISTINCT ...
FROM T
LIMIT N

N개의 고유 행이 발견되면 즉시 쿼리를 멈추는 최적화를 추가했어요.

범위 조건자 (Range predicates)

조인을 최적화할 때 Presto는 조인의 각 쪽 파티션 범위를 분석해 이 범위를 다른 쪽으로 푸시해요. 테이블에 파티션이 많으면 각 파티션에 대한 표현식 하나로 매우 큰 필터가 생길 수 있어요. 최적화기는 이제 조건자 범위를 요약해 필터 복잡도를 줄여요.

복합 필터 (Compound filters)

AND, OR, NOT을 포함한 복잡한 표현식이 이제 표현식 최적화기로 최적화돼요.

윈도우 함수 (Window functions)

PARTITION BY 절이 있는 윈도우 함수가 이제 파티션 키에 따라 분산돼요.

버그 수정 (Bug fixes)

  • 스케줄링: 스플릿을 배치로 스케줄링하는 변경에서 노드 간 작업 부하가 불균형해져 쿼리 지연 시간이 늘어나는 버그 두 개를 도입했어요. 첫 번째 문제는 배치 스케줄링 중 노드의 대기 스플릿 수를 검사하지 않은 것이고, 두 번째 문제는 작업 실행기에서 생성을 기다리는 스플릿을 세지 않은 것이었어요.
  • 복합 Hive 타입의 JSON 변환: Presto는 복합 Hive 타입(array, map, struct, union)을 JSON으로 변환해요. 이전에는 맵의 숫자 키가 문자열이 아닌 숫자로 변환됐는데, JSON은 객체 키에 문자열만 허용하므로 이는 잘못됐어요. 이 때문에 JSON 함수와 연산자가 동작하지 않았어요.
  • Hive 숨김 파일: Presto는 이제 밑줄 _나 점 .으로 시작하는 Hive의 파일을 무시해요. 이는 Hadoop MapReduce / Hive의 동작과 일치해요.
  • 데이터 없음으로 잘못 보고된 실패: 특정 유형의 실패가 쿼리가 성공한 것처럼 보이고 불완전한 결과(종종 0행)를 반환하게 했어요. 오류 전파와 쿼리 종료 사이에 경쟁 조건이 있었어요. 어떤 경우에는 예외가 코디네이터에 도달하기 전에 쿼리가 종료됐어요. 이는 쿼리 종료 최적화 작업 중 도입된 회귀였어요. 이제 이런 유형의 버그를 잡는 테스트가 있어요.
  • 교환 클라이언트 누수: 쿼리가 일찍 끝났을 때(예: limit 또는 실패) 교환 연산자가 다른 노드의 데이터를 기다리며 차단되어 있으면 교환이 제대로 닫히지 않았어요. 이로 인해 지속적으로 실패하는 HTTP 요청이 발생해 자원이 누수되고 큰 로그 파일이 생성됐어요.
  • 해시 파티셔닝: GROUP BY 항목이 많은 쿼리가 해시 함수의 오버플로로 실패할 수 있었어요.
  • 컴파일된 NULL 리터럴: CAST(NULL AS varchar) 같은 선택 표현식이 있는 쿼리가 표현식 컴파일러의 출력 타입 감지 코드 버그로 인해 실패할 수 있었어요.

더 알아보기 (Learn more)

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