Release 346

Release 346 (2020년 11월 10일)

Presto 346 릴리스예요. 윈도우 프레임 확장(RANGE BETWEEN ... PRECEDING ... FOLLOWING, GROUPS 기반), ALTER TABLE ... SET AUTHORIZATION, 스키마에 대한 GRANT·REVOKE 문법, NaN 처리 일관성 등이 담겼어요.

출처: Trino Release 346

본문

General

  • RANGE BETWEEN <value> PRECEDING AND <value> FOLLOWING 윈도우 프레임 지원을 추가했어요(#609).
  • GROUPS 기반 윈도우 프레임 지원을 추가했어요(#5713).
  • time with time zone 값에 대해 TIMEZONE_HOUR·TIMEZONE_MINUTEextract()하는 것을 지원하게 됐어요(#5668).
  • 스키마에 대한 GRANT·REVOKE SQL 문법을 추가했어요. 아직 어떤 커넥터에서도 사용되지는 않아요(#4396).
  • 테이블 소유자를 변경할 수 있는 ALTER TABLE ... SET AUTHORIZATION 문법을 추가했어요(#5717).
  • timestamp나 timestamp with time zone 상수가 포함된 쿼리에 대해 EXPLAIN을 더 읽기 쉽게 만들었어요(#5683).
  • 부등식(inequality) 조건이 있는 쿼리 성능을 개선했어요(#2674).
  • 비상관(un-correlated) IN 절이 포함된 쿼리 성능을 개선했어요(#5582).
  • least(), greatest(), array_min(), array_max(), min(), max(), min_by(), max_by()에 대해 일관된 NaN 동작을 사용하도록 했어요. NaN은 오직 유일한 값일 때만 반환돼요(집계 함수에서 무시되는 null은 제외)(#5851).
  • least()greatest()의 이전 null 처리 방식을 복원했어요(#5787).
  • array_min()array_max()의 이전 null 처리 방식을 복원했어요(#5787).
  • 설정 속성 arrayagg.implementation, multimapagg.implementation, histogram.implementation을 제거했어요(#4581).
  • time with time zone 타입에 대한 음수 오프셋 처리 문제를 고쳤어요(#5696).
  • 정밀도가 6보다 높을 때 time(p)timestamp(p)로 캐스팅하면 잘못된 결과가 나오던 문제를 고쳤어요(#5736).
  • timestamp 컬럼을 timestamp with time zone 상수와 비교할 때 잘못된 쿼리 결과가 나오던 문제를 고쳤어요(#5685).
  • 모든 필드를 선택하는 쿼리에서 잘못된 테이블 별칭 가시성 문제를 고쳤어요(#5660).
  • 쿼리 파라미터가 람다 표현식에 나타날 때 실패하던 문제를 고쳤어요(#5640).
  • DISTINCT *ORDER BY 절의 정규화된(fully-qualified) 컬럼 이름을 포함한 쿼리 실패를 고쳤어요(#5647).
  • INNER JOIN, GROUP BY, 상관 서브쿼리가 포함된 특정 쿼리의 계획 실패를 고쳤어요(#5846).
  • 쿼리가 일찍 중단(abort)됐을 때 쿼리 완료 이벤트 기록을 고쳤어요(#5815).
  • QueryManager의 내보내진 JMX 이름을 고쳤어요(#5702).
  • approx_distinct()이 고정밀 timestamp(p)·timestamp(p) with time zone·time(p) with time zone 데이터 타입과 함께 쓰일 때 실패하던 문제를 고쳤어요(#5392).

Web UI

  • Worker 페이지의 "Capture Snapshot" 버튼을 고쳤어요(#5759).

JDBC 드라이버

  • decimal 값뿐 아니라 숫자로 명확히 해석될 수 있는 char·varchar 값에 대해 ResultSet.getLong()·ResultSet.getDouble() 같은 숫자 접근자 메서드를 지원하게 됐어요(#5509).
  • SSL 검증을 설정할 수 있는 SSLVerification JDBC 연결 파라미터를 추가했어요(#5610).
  • 레거시 useSessionTimeZone JDBC 연결 파라미터를 제거했어요(#4521).
  • ResultSet.getRow()를 구현했어요(#5769).

Server RPM

  • RPM 제거 후 남은 빈 디렉터리를 정리하도록 했어요(#5782).

BigQuery 커넥터

  • 쿼리 최적화 중 일부 컬럼 참조가 프루닝되면 쿼리가 잘못된 결과를 반환할 수 있던 문제를 고쳤어요(#5618).

Cassandra 커넥터

  • 배치 문(batch statement)으로 INSERT 쿼리 성능을 개선했어요. 배치 크기는 cassandra.batch-size 설정 속성으로 설정할 수 있어요(#5047).

Elasticsearch 커넥터

  • 인덱스 매핑에 properties 섹션이 없을 때 실패하던 문제를 고쳤어요(#5807).

Hive 커넥터

  • 테이블 소유자를 변경하는 ALTER TABLE ... SET AUTHORIZATION SQL 문법 지원을 추가했어요(#5717).
  • 밀리초에 더해 마이크로초·나노초 정밀도의 타임스탬프 쓰기를 지원하게 됐어요(#5283).
  • Glue 메타스토어 클라이언트 요청 메트릭에 대한 JMX 통계를 내보내도록 했어요(#5693).
  • 정밀도가 3보다 큰 timestamp(p) 컬럼에 대해 ANALYZE 중과 테이블에 데이터가 삽입됐을 때 컬럼 통계를 수집하도록 했어요(#5392).
  • 동적 버킷 프루닝(dynamic bucket pruning) 지원을 추가해 쿼리 성능을 개선했어요(#5634).
  • 더 이상 쓰이지 않는 parquet.fail-on-corrupted-statistics(이전 이름 hive.parquet.fail-on-corrupted-statistics)를 제거했어요. 잘못된 메타데이터를 가진 Parquet 파일을 다루려면 새 설정 속성 parquet.ignore-statistics를 쓸 수 있어요(#3077).
  • timestamp 컬럼에 대해 min/max 통계를 쓰지 않도록 했어요(#5858).
  • hive.metastore.uri로 여러 메타스토어 URI가 정의됐다면 가장 최근에 정상 동작한 것이 확인된 메타스토어로 연결하는 것을 선호하도록 했어요. 이는 하나 이상의 메타스토어가 오작동할 때 쿼리 실패를 방지해요(#5795).
  • 카탈로그 이름이 hive가 아닐 때 Hive 뷰 접근 문제를 고쳤어요(#5785).
  • 파티션 스키마의 varchar(n) 컬럼 선언 길이가 테이블 스키마와 다를 때 실패하던 문제를 고쳤어요(#5484).
  • 복잡한 표현식에 대한 Glue 메타스토어 pushdown을 고쳤어요(#5698).

Iceberg 커넥터

  • 구체화된 뷰(materialized views) 지원을 추가했어요(#4832).
  • 더 이상 쓰이지 않는 parquet.fail-on-corrupted-statistics(이전 이름 hive.parquet.fail-on-corrupted-statistics)를 제거했어요. 잘못된 메타데이터를 가진 Parquet 파일을 다루려면 parquet.ignore-statistics를 쓸 수 있어요(#3077).

Kafka 커넥터

  • 잘못된 컬럼 주석을 고쳤어요(#5751).

Kudu 커넥터

  • LIMIT 절만 있는 쿼리 성능을 개선했어요(#3691).

MySQL 커넥터

  • varbinary 컬럼에 대한 조건자가 있는 쿼리 성능을 개선했어요(#5672).

Oracle 커넥터

  • 컬럼 주석 설정 지원을 추가했어요(#5399).
  • oracle.remarks-reporting.enabled 설정 속성으로 remarks 보고를 활성화할 수 있게 했어요(#5720).

PostgreSQL 커넥터

  • timestamp with time zone 정밀도가 3보다 높을 때 timestamp 컬럼을 timestamp with time zone 상수와 비교하는 쿼리 성능을 개선했어요(#5543).

기타 커넥터

  • PostgreSQL, MySQL, Oracle, Redshift, SQL Server 커넥터에서 계산을 기본 데이터베이스로 push down할 수 있을 때 DISTINCT·LIMIT이 있는 쿼리나, 집계 함수 없이 GROUP BYLIMIT이 있는 쿼리의 성능을 개선했어요(#5522).

SPI

  • 커넥터 세션 속성이 ConnectorNodePartitioningProvider로 전파되는 문제를 고쳤어요(#5690).
  • 쿼리 이벤트에 사용자 그룹(user groups)을 추가했어요(#5643).
  • 쿼리 완료 이벤트에 계획(planning) 시간을 추가했어요(#5643).

더 알아보기 (Learn more)

RANGE BETWEEN ... PRECEDING ... FOLLOWINGGROUPS 기반 윈도우 프레임은 최신 Trino SQL 윈도우 문서에서 자세히 확인할 수 있어요. ALTER TABLE ... SET AUTHORIZATION은 소유권 관리에 유용한 문법이에요.