릴리스 348

릴리스 348 (2020년 12월 14일)

이번 릴리스에서는 상관 서브쿼리와 ORDER BY ... LIMIT 성능이 개선됐고, JDBC 드라이버의 타입 처리와 웹 UI 인증이 다듬어졌어요.

출처: Trino 릴리스 348 문서

본문

일반 (General)

  • 상관 서브쿼리 안의 집계에서 DISTINCT 절을 지원해요. (#5904)
  • 임의의 쿼리에 대한 SHOW STATS를 지원해요. (#3109)
  • 워커 간 통신 오버헤드를 줄여 쿼리 성능을 개선했어요. (#6126)
  • ORDER BY ... LIMIT 쿼리의 성능을 개선했어요. (#6072)
  • 조인이 포함된 쿼리의 메모리 부담을 줄이고 성능을 개선했어요. (#6176)
  • 브로드캐스트 조인이 포함된 특정 쿼리의 EXPLAIN ANALYZE를 고쳤어요. (#6115)
  • 외부 조인과 FILTER (WHERE ) 구문을 쓰는 집계가 포함된 쿼리의 계획 실패를 고쳤어요. (#6141)
  • 조인 안의 상관 서브쿼리에 array_aggchecksum 같은 집계 함수가 있을 때 결과가 잘못 나오던 문제를 고쳤어요. (#6145)
  • 정밀도가 3보다 높은 timestamp with time zone 상수를 서로 다른 시간대의 같은 시점에 대해 쓸 때 쿼리 결과가 잘못 나오던 문제를 고쳤어요. (#6318)
  • 쿼리가 일찍 실패하면 쿼리 완료 이벤트가 중복 보고되던 문제를 고쳤어요. (#6103)
  • 뷰에 접근할 때 현재 세션이 기본 스키마·카탈로그를 지정하지 않으면 쿼리가 실패하던 문제를 고쳤어요. (#6294)

웹 UI (Web UI)

  • OAuth2 인가 지원을 추가했어요. (#5355)
  • Stage Performance 뷰의 잘못된 연산자 통계를 고쳤어요. (#6114)

JDBC 드라이버

  • ResultSet.getObject(int column, Class type) 메서드로 timestamp with time zone 값을 ZonedDateTime으로 읽을 수 있게 했어요. (#307)
  • PreparedStatement.setObject(int, Object)에서 java.time.LocalDate를 받아들이도록 했어요. (#6301)
  • PreparedStatement.setObject(int, Object, int)를 확장해 나노초보다 정밀도가 높은 time·timestamp 값을 설정할 수 있게 했어요. 유효한 SQL 리터럴을 나타내는 String 값을 넘기면 돼요. (#6300)
  • row 값의 표현을 바꿨어요. ResultSet.getObject는 이제 반환 값을 더 잘 나타내는 io.prestosql.jdbc.Row 클래스 인스턴스를 반환해요. 이전에는 row 값이 Map 인스턴스로 표현됐고 이름 없는 필드가 field0, field1처럼 불렸어요. ResultSet 객체에서 getObject(column, Map.class)를 호출하면 이전 동작을 쓸 수 있어요. (#4588)
  • ResultSet.getString에서 varbinary 값을 16진수 문자열로 표현하도록 했어요. 이전에는 반환 값이 "B@2de82bf8"처럼 쓸모없었어요. (#6247)
  • DatabaseMetaData#getColumns가 반환한 결과 집합의 DECIMAL_DIGITS 컬럼에 time(p), time(p) with time zone, timestamp(p), timestamp(p) with time zone의 정밀도를 보고하도록 했어요. (#6307)
  • DatabaseMetaData#getColumns가 반환한 결과 집합의 time(p)·time(p) with time zone에 대한 DATA_TYPE 컬럼 값을 고쳤어요. (#6307)
  • 초 단위 이하 값이 999999999500 피코초 이상인 timestamptimestamp with time zone 값을 읽을 때 발생하던 실패를 고쳤어요. (#6147)
  • 초 단위 이하 값이 999999999500 피코초 이상인 time 값을 읽을 때 발생하던 실패를 고쳤어요. (#6204)
  • ResultSet.getArray가 반환한 배열의 요소 표현을 ResultSet.getObject와 일관되게 고쳤어요. 이전에는 내부 클라이언트 표현(예: String)으로 나타냈어요. (#6048)
  • timestamp with time zone에 대한 ResultSetMetaData.getColumnType을 고쳤어요. 이전에는 java.sql.Types.TIMESTAMP로 잘못 분류됐어요. (#6251)
  • time with time zone에 대한 ResultSetMetaData.getColumnType을 고쳤어요. 이전에는 java.sql.Types.TIME으로 잘못 분류됐어요. (#6251)
  • ResultSetSphericalGeography 지리공간 타입 인스턴스가 반환될 때 발생하던 실패를 고쳤어요. (#6240)

CLI

  • 이름 없는 필드를 가진 row 값 렌더링을 고쳤어요. 이전에는 field0, field1 같은 가짜 필드 이름으로 출력했어요. (#4587)
  • 쿼리 진행 보고를 고쳤어요. (#6119)
  • SphericalGeography 지리공간 타입 인스턴스가 클라이언트로 반환될 때 발생하던 실패를 고쳤어요. (#6238)

Hive 커넥터

  • 보안 매핑에서 S3 엔드포인트를 구성할 수 있게 했어요. (#3869)
  • S3 스트리밍 업로드 지원을 추가했어요. 로컬 임시 파일에 스테이징하는 대신 쓰는 대로 S3로 데이터가 업로드돼요. 이 기능은 기본적으로 꺼져 있고 hive.s3.streaming.enabled 구성값으로 켤 수 있어요. (#3712, #6201)
  • 백그라운드 캐시 새로고침이 켜진 상태에서 metastore 부하를 줄였어요. (#6101, #6156)
  • 버켓 테이블을 읽을 때 데이터가 올바른 버켓 파일에 있는지 확인하도록 했어요. 잘못된 버케팅은 잘못된 쿼리 결과를 낼 수 있어 기본으로 켜져 있지만, hive.validate-bucketing 구성값이나 validate_bucketing 세션 속성으로 끌 수 있어요. (#6012)
  • hive.legacy-hive-view-translation 구성값이나 legacy_hive_view_translation 세션 속성으로 레거시 Hive 뷰 변환 로직으로 대체할 수 있게 했어요. (#6195)
  • 이벤트 리스너에 노출되는 스플릿 정보에 역직렬화기 클래스 이름을 추가했어요. (#6006)
  • 심볼릭 링크를 포함한 테이블 조회 성능을 개선했어요. (#6158, #6213)

Iceberg 커넥터

  • 비파티션 컬럼에 대한 필터가 포함된 쿼리의 성능을 개선했어요. 그런 필터는 이제 스플릿 생성과 테이블 스캔 최적화에 쓰여요. (#4932)
  • Google Cloud Storage와 Azure Storage 지원을 추가했어요. (#6186)

Kafka 커넥터

  • milliseconds-since-epochseconds-since-epoch JSON 인코더를 사용해 컬럼에 timestamp with time zone 값을 쓸 수 있게 했어요. (#6074)

기타 커넥터 (Other connectors)

  • PostgreSQL, MySQL, SQL Server, Redshift, MemSQL, Phoenix 커넥터의 테이블 메타데이터 캐싱이 효과가 없던 문제를 고쳤어요. (#6081, #6167)

SPI

  • SystemAccessControl#filterColumnsConnectorAccessControl#filterColumns 메서드가 컬럼 이름 집합을 받아 표시할 컬럼 이름 집합을 반환하도록 바꿨어요. (#6084)
  • 이벤트 리스너의 스플릿 완료 이벤트를 통해 스플릿에 해당하는 카탈로그 이름을 노출했어요. (#6006)

더 알아보기 (Learn more)