릴리스 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_agg나checksum같은 집계 함수가 있을 때 결과가 잘못 나오던 문제를 고쳤어요. (#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 피코초 이상인
timestamp나timestamp 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)ResultSet에SphericalGeography지리공간 타입 인스턴스가 반환될 때 발생하던 실패를 고쳤어요. (#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-epoch나seconds-since-epochJSON 인코더를 사용해 컬럼에timestamp with time zone값을 쓸 수 있게 했어요. (#6074)
기타 커넥터 (Other connectors)
- PostgreSQL, MySQL, SQL Server, Redshift, MemSQL, Phoenix 커넥터의 테이블 메타데이터 캐싱이 효과가 없던 문제를 고쳤어요. (#6081, #6167)
SPI
SystemAccessControl#filterColumns와ConnectorAccessControl#filterColumns메서드가 컬럼 이름 집합을 받아 표시할 컬럼 이름 집합을 반환하도록 바꿨어요. (#6084)- 이벤트 리스너의 스플릿 완료 이벤트를 통해 스플릿에 해당하는 카탈로그 이름을 노출했어요. (#6006)