릴리스 0.153

릴리스 0.153 (Release 0.153)

이 릴리스에서는 여러 정확성·안정성 수정과 함께 Accumulo 커넥터, 플러그형 자원 그룹, 다양한 기능 추가가 포함돼 있어요.

출처: 문서

본문

일반 (General)

  • task.concurrency가 1보다 클 때 grouping sets의 잘못된 결과를 고쳤어요.
  • INTEGER를 큰 DECIMAL 타입으로 캐스팅할 때 조용한 숫자 오버플로를 고쳤어요.
  • 입력에 행이 없으면 GROUP BY ()가 결과를 만들지 못하던 문제를 고쳤어요.
  • array(bigint) 타입에 array_distinct()을 적용할 때의 null 처리를 고쳤어요.
  • json_array_get()의 요소 인덱스로 -2^63을 처리하는 문제를 고쳤어요.
  • TRY_CAST 입력이 null로 평가될 때의 정확성 문제를 고쳤어요. boolean, 숫자, 날짜, 타임스탬프 같은 타입에 대해 null을 반환하는 대신 false, 0, 1970-01-01 같은 타입별 기본값이 반환됐어요.
  • 코디네이터의 잠재적 스레드 데드락을 고쳤어요.
  • task.concurrency가 1일 때 단일 스레드 right 조인에서 집계할 때 드물게 발생하던 정확성 문제를 고쳤어요.
  • null 값을 가진 map을 캐스팅할 때 쿼리가 실패하던 문제를 고쳤어요.
  • 뷰 컬럼 이름에 대문자가 포함될 때의 실패를 고쳤어요.
  • TINYINT, SMALLINT, INTEGER, BIGINT, REAL, DOUBLE, COLOR, DATE, INTERVAL, TIME, TIMESTAMP 타입의 컬럼으로 그룹핑하거나 조인할 때 skew로 인한 잠재적 성능 회귀를 고쳤어요.
  • delete 쿼리의 잠재적 메모리 누수를 고쳤어요.
  • 쿼리 통계가 계획 수립 시간에 큐 시간을 포함하지 않도록 고쳤어요.
  • 쿼리 완료 이벤트가 쿼리의 최종 통계를 로그하도록 고쳤어요.
  • 쿼리가 중단될 때의 가짜 로그 메시지를 고쳤어요.
  • date_format()date_parse()의 깨진 %w 지정자를 제거했어요.
  • 기본 데이터가 딕셔너리 인코딩일 때 ARRAY의 성능을 개선했어요.
  • 비동등 기준을 가진 outer 조인의 성능을 개선했어요.
  • 태스크 동시성과 태스크 라이터 개수가 2의 거듭제곱이어야 하도록 했어요.
  • array_sort()에 nulls-last 정렬을 사용하게 했어요.
  • TRY가 정확히 하나의 인자와 함께 사용되는지 검증하게 됐어요.
  • early-access Java 버전으로 Presto를 실행할 수 있게 했어요.
  • Accumulo 커넥터를 추가했어요.

함수와 언어 기능 (Functions and language features)

  • 비동등 outer 조인 기준에서 서브쿼리를 허용하게 됐어요.
  • CREATE SCHEMA, DROP SCHEMA, ALTER SCHEMA를 지원하게 됐어요.
  • 상관 서브쿼리에 대한 초기 지원을 추가했어요.
  • 프리페어드 스테이트먼트의 실행 지원을 추가했어요.
  • DOUBLE 타입의 별칭으로 DOUBLE PRECISION을 추가했어요.
  • 표현식 타입을 알아내는 typeof()를 추가했어요.
  • avg(), ceil(), floor(), round(), truncate(), abs(), mod(), sign()에 decimal 지원을 추가했어요.
  • 배열용 shuffle() 함수를 추가했어요.

플러그형 자원 그룹 (Pluggable resource groups)

자원 그룹 관리는 이제 플러그형이에요. PlugingetResourceGroupConfigurationManagerFactories()를 통해 관리 팩토리를 제공할 수 있고, 팩토리는 etc/resource-groups.properties 설정 파일에서 resource-groups.configuration-manager 프로퍼티를 설정해 활성화할 수 있어요. 예시는 presto-resource-group-managers 플러그인을, 자세한 내용은 Resource groups 문서를 참고해요.

웹 UI (Web UI)

  • null 중첩 데이터 구조로 인한 렌더링 실패를 고쳤어요.
  • 클러스터 개요 페이지의 활성 워커 수에 코디네이터를 포함하지 않도록 했어요.
  • 쿼리 상세 페이지의 버퍼 skew 지표를 스케줄된 시간 skew로 대체했어요.
  • 쿼리 상세 페이지의 스테이지 통계에 스테이지 총 버퍼, 대기 태스크, 벽시계 시간을 추가했어요.
  • 쿼리 상세 페이지에서 상태별로 태스크 목록을 필터링하는 옵션을 추가했어요.
  • 쿼리 상세 페이지에 쿼리 텍스트, 쿼리 ID, 사용자용 복사 버튼을 추가했어요.

JDBC 드라이버

  • Java float 타입에 해당하는 real 데이터 타입을 지원하게 됐어요.

CLI

  • HTTPS Truststore를 구성하는 기능을 지원하게 됐어요.

Hive

  • SQL-standard 인증을 사용할 때 새 테이블의 권한 문제를 고쳤어요.
  • 딕셔너리 인코딩된 MAP을 디코딩할 때 ORC 리더의 성능을 개선했어요.
  • 파티션을 삭제한 뒤 다시 만드는 것과 같은 일부 쿼리 조합을 트랜잭션 비슷한 방식으로 실행할 수 있게 했어요. Hive 설계의 근본적 한계로 인해 원자성은 보장되지 않아요.
  • Hive metastore의 트랜잭션별 캐시를 지원하게 됐어요.
  • 파티션 컬럼 이름을 바꾸려는 쿼리가 실패하도록 했어요.
  • 프레디킷 push down에서 ORC bloom 필터를 지원하게 됐어요. hive.orc.bloom-filters.enabled 설정 프로퍼티나 orc_bloom_filters_enabled 세션 프로퍼티로 켤 수 있어요.
  • 새 최적화 RCFile 리더를 추가했어요. hive.rcfile-optimized-reader.enabled 설정 프로퍼티나 rcfile_optimized_reader_enabled 세션 프로퍼티로 켤 수 있어요.
  • Hive float 타입에 해당하는 Presto real 타입을 지원하게 됐어요.
  • char(x) 타입을 지원하게 됐어요.
  • 스키마(데이터베이스) 만들기, 삭제, 이름 바꾸기를 지원하게 됐어요. 스키마를 만들 때 파일시스템 위치를 지정할 수 있어, 예를 들어 S3에 테이블을 쉽게 만들 수 있어요.
  • Presto가 쓴 테이블이나 파티션에 대해 trino_query_id 테이블/파티션 프로퍼티로 Presto 쿼리 ID를 기록하게 됐어요.
  • 디렉터리 나열 실패 시 오류 메시지에 경로 이름을 포함시켰어요.
  • allow-all 인증 메서드를 legacy로 이름을 바꿨어요. 이 메서드는 더 이상 사용되지 않고 향후 릴리스에서 제거될 거예요.
  • 의도적으로 중단된 S3 요청을 재시도하지 않도록 했어요.
  • S3 요청의 user agent 접미사를 presto로 설정했어요.
  • hive.s3.user-agent-prefix 설정 프로퍼티로 S3 요청의 user agent 접두사를 구성할 수 있게 했어요.
  • hive.s3.endpointhive.s3.signer-type 설정 프로퍼티로 S3 호환 스토리지를 지원하게 됐어요.
  • hive.s3.kms-key-id 설정 프로퍼티로 S3와 함께 AWS KMS를 암호화 자료 공급자로 사용하는 기능을 지원하게 됐어요.
  • hive.s3.encryption-materials-provider 설정 프로퍼티로 사용자 정의 S3 암호화 자료 공급자를 구성할 수 있게 했어요.

JMX

  • history 테이블의 이름 구성을 대소문자 구분 없이 만들었어요.

MySQL

  • 단일 테이블을 설명할 때 컬럼 이름 가져오기를 최적화했어요.
  • char(x)와 real 데이터 타입을 지원하게 됐어요.

PostgreSQL

  • 단일 테이블을 설명할 때 컬럼 이름 가져오기를 최적화했어요.
  • char(x)와 real 데이터 타입을 지원하게 됐어요.
  • 구체화된 뷰(materialized view)를 조회하는 기능을 지원하게 됐어요.

Blackhole

  • page_processing_delay 테이블 프로퍼티를 추가했어요.

SPI

  • ConnectorMetadataschemaExists() 메서드를 추가했어요.
  • ConnectorAccessControl의 grant/revoke에 트랜잭션을 추가했어요.
  • NodeisCoordinator()getVersion() 메서드를 추가했어요.
  • Plugin에서 setOptionalConfig() 메서드를 제거했어요.
  • ServerInfo 클래스를 제거했어요.
  • NodeManager를 커넥터 인스턴스에 특화되도록 만들었어요.
  • ConnectorFactoryContextConnectorContext로 교체했어요.
  • 함수에 @Nullable 대신 @SqlNullable을 사용하게 했어요.
  • 플러그인이 JDK(부트스트랩 클래스)나 SPI의 일부가 아닌 클래스를 보지 못하도록 했어요.
  • 플러그인의 Maven 패키징·수명주기를 제공하는 presto-maven-plugin을, 모든 SPI 의존성이 provided scope로 표시되고 provided scope를 쓰는 게 SPI 의존성뿐임을 검증하도록 업데이트했어요. 이는 런타임이 아니라 빌드 시간에 잠재적 의존성·클래스 로더 문제를 찾는 데 도움을 줘요.

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

더 알아보기 (Learn more)

이어서 릴리스 0.154에서 LIKE·DESCRIBE INPUT 지원을 확인해 보세요.