Release 330
Release 330 (2020년 2월 18일)
Presto 330 릴리스예요. Java 11+ 요구, User mapping·Impersonation 도입, 보안 내부 통신의 공유 시크릿 전환, 선호 쓰기 파티셔닝 등 큰 변경이 담긴 버전이에요.
본문
General
char값에 대한format()의 잘못된 동작을 고쳤어요. 이전에는 함수가 포맷되는 값의 뒤쪽 공백(trailing whitespace)을 보존하지 않았어요(#2629).- 집계가 조인의 양쪽 입력을 쓸 때 일부 경우 쿼리가 실패하던 문제를 고쳤어요(#2560).
- 동적 필터링이 활성화되고 쿼리에 복잡한 다중 레벨 조인이 포함됐을 때 쿼리가 실패하던 문제를 고쳤어요(#2659).
- 동적 필터링이 활성화됐을 때 특정 co-located 조인에서 쿼리가 실패하던 문제를 고쳤어요(#2685).
- 조건자에 빈 값이 쓰일 때
SHOW문이나information_schema스키마 테이블에 접근하는 쿼리가 실패하던 문제를 고쳤어요(#2575). EXECUTE가 함수 호출을 포함한 표현식과 함께 쓰일 때 쿼리가 실패하던 문제를 고쳤어요(#2675).- 사용자가 어떤 카탈로그도 볼 권한이 없을 때
SHOW CATALOGS가 실패하던 문제를 고쳤어요(#2593). - 비용 기반 최적화가 활성화됐을 때 일부 조인 쿼리의 성능을 개선했어요(#2722).
- 재분배(redistribution)나 라이터 스케일링이 활성화된 채 데이터를 쓸 때 발생할 수 있는 데이터의 고르지 못한 분포를 방지했어요(#2788).
- 주석(comment)을 가진
CREATE VIEW지원을 추가했어요(#2557). ST_Points()에 모든 주요 지오메트리 타입 지원을 추가했어요(#2535).- 쿼리 처리가 시작되기 전에 클러스터에 존재해야 하는 워커 수를 제어하는
required_workers_count와required_workers_max_wait_time세션 속성을 추가했어요(#2484). system.runtime.tasks테이블에physical_input_bytes컬럼을 추가했어요(#2803).USE문에 대해 대상 스키마가 존재하는지 검증하도록 했어요(#2764).SET ROLE실행 시 세션 카탈로그가 존재하는지 검증하도록 했어요(#2768).
Server
- Java 11 이상에서 실행해야 하도록 요구했어요. 이 요구 사항은 Presto JVM 설정에
-Dpresto-temporarily-allow-java8=true를 추가해 일시적으로 완화할 수 있어요. 이 폴백은 2020년 3월 이후의 향후 Presto 버전에서 제거될 예정이에요(#2751). - Linux aarch64(ARM64)에서 실행하는 실험적 지원을 추가했어요(#2809).
Security
- Principal 규칙(principal rules)을 deprecate했고 향후 릴리스에서 제거될 예정이에요. 이 규칙들은, 복잡한 인증 사용자 이름을 Presto용 단순 사용자 이름으로 매핑하는 방법을 정하는 User mapping과, 사용자가 다른 사용자를 가장(impersonate)하는 능력을 제어하는 Impersonation 규칙으로 대체됐어요(#2215).
- 보안 내부 통신(Secure internal communication)을 쓸 때 이제 공유 시크릿(shared secret)이 필수예요(#2202).
- 보안 내부 통신용 Kerberos가 새 공유 시크릿 메커니즘으로 대체됐어요.
internal-communication.kerberos.enabled와internal-communication.kerberos.use-canonical-hostname설정 속성을 제거해야 해요(#2202). - 인증이 비활성화됐을 때, 표준 HTTP 기본 인증(basic authentication)에 빈 비밀번호를 써서 Presto 사용자를 설정할 수 있게 됐어요(#2653).
Web UI
- 상세 쿼리 뷰에 물리 읽기 시간(physical read time)을 표시하도록 했어요(#2805).
JDBC 드라이버
- JDK 11+에서 HTTP/2로 연결할 때의 성능 문제를 고쳤어요(#2633).
Calendar를 받는PreparedStatement.setTimestamp()변형을 구현했어요(#2732).- 카탈로그 인가 역할을 위한
roles속성을 추가했어요(#2780). - 시스템·카탈로그 세션 속성 설정을 위한
sessionProperties속성을 추가했어요(#2780). - 리소스 그룹 선택을 위한 클라이언트 태그를 설정하는
clientTags속성을 추가했어요(#2468). extraCredentials속성으로 지정된 추가 자격 증명 값 안에서:문자를 사용할 수 있게 했어요(#2780).
CLI
- JDK 11+에서 HTTP/2로 연결할 때의 성능 문제를 고쳤어요(#2633).
Cassandra 커넥터
- 식별자를 인용(quote)해야 할 때 쿼리가 실패하던 문제를 고쳤어요(#2455).
Hive 커넥터
- Kerberos를 쓸 때 HDFS에서 심링크(symlinks)를 읽는 문제를 고쳤어요(#2720).
- 파티션 통계를 갱신할 때 Hive 메타스토어 부하를 줄였어요(#2734).
- 파티션 키를 기준으로 버킷팅되지 않은 파티션된 테이블의 쓰기를 재분배해 파티션당 단일 라이터가 되도록 허용했어요. 이는 메모리 사용량을 줄이고 파티션당 파일 하나를 만들며 열린 라이터 한도에 걸리지 않고 많은 수의 파티션을 쓸 수 있게 해요. 다만 단일 라이터로 큰 파티션을 쓰는 것은 훨씬 오래 걸릴 수 있어 이 기능은 필요할 때만 활성화해야 해요. 이 기능을 활성화하려면
use-preferred-write-partitioning시스템 설정 속성이나use_preferred_write_partitioning시스템 세션 속성을true로 설정하면 돼요(#2358). - 텍스트 기반, SequenceFile, Avro 파일 타입을 쓴 후의 추가 파일 상태 호출을 제거했어요(#1748).
- 모든 파일 형식에서 라이터 스케일링(writer scaling)을 사용할 수 있게 했어요. 이전에는 텍스트 기반, SequenceFile, Avro 형식에서 지원되지 않았어요(#2657).
- Avro 파일이 있는 심링크 기반 테이블 지원을 추가했어요(#2720).
- 존재하지 않는 데이터 디렉터리를 가진 파티션을 무시하는 것을 지원하게 됐어요.
hive.ignore-absent-partitions=true설정 속성이나ignore_absent_partitions세션 속성으로 설정할 수 있어요(#2555). hive.non-managed-table-creates-enabled와hive.non-managed-table-writes-enabled둘 다true로 설정됐을 때CREATE TABLE AS로 데이터가 있는 외부 테이블을 생성할 수 있게 했어요. 이전에는CREATE TABLE과INSERT를 별도의 문으로 실행해야 했어요(#2669).- Azure WASB, ADLS Gen1(ADL), ADLS Gen2(ABFS) 파일 시스템 지원을 추가했어요(#2494).
- 기본 Hive 뷰를 실행하는 실험적 지원을 추가했어요. 이 기능을 활성화하려면
hive.views-execution.enabled설정 속성을true로 설정해야 해요(#2715). - 파티션된 테이블에 파티션을 추가·제거하는
register_partition과unregister_partition프로시저를 추가했어요(#2692). - 기본 테이블 통계만 수집하는
ANALYZE를 실행할 수 있게 했어요(#2762).
Elasticsearch 커넥터
LIMIT절이 포함된 쿼리 성능을 개선했어요(#2781).- 중첩(nested) 데이터 타입 지원을 추가했어요(#754).
PostgreSQL 커넥터
- PostgreSQL
money데이터 타입 읽기 지원을 추가했어요. 이 타입은 Presto에서varchar로 매핑돼요(#2601).
기타 커넥터
- 테이블에 쓸 때
DEFAULT컬럼 절을 존중하도록 했어요(#1185).
SPI
- 프로시저가 기본값을 가진 선택적 인자를 가질 수 있게 했어요(#2706).
SystemAccessControl.checkCanSetUser()를 deprecate하고 User mapping과SystemAccessControl.checkCanImpersonateUser()로 대체했어요(#2215).
더 알아보기 (Learn more)
User mapping·Impersonation은 현재 Trino 보안의 핵심 개념이에요. 보안 내부 통신의 공유 시크릿과 선호 쓰기 파티셔닝도 운영에서 중요한 주제니 최신 문서를 참고해 보세요.