Release 330

Release 330 (2020년 2월 18일)

Presto 330 릴리스예요. Java 11+ 요구, User mapping·Impersonation 도입, 보안 내부 통신의 공유 시크릿 전환, 선호 쓰기 파티셔닝 등 큰 변경이 담긴 버전이에요.

출처: Trino Release 330

본문

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_countrequired_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.enabledinternal-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-enabledhive.non-managed-table-writes-enabled 둘 다 true로 설정됐을 때 CREATE TABLE AS로 데이터가 있는 외부 테이블을 생성할 수 있게 했어요. 이전에는 CREATE TABLEINSERT를 별도의 문으로 실행해야 했어요(#2669).
  • Azure WASB, ADLS Gen1(ADL), ADLS Gen2(ABFS) 파일 시스템 지원을 추가했어요(#2494).
  • 기본 Hive 뷰를 실행하는 실험적 지원을 추가했어요. 이 기능을 활성화하려면 hive.views-execution.enabled 설정 속성을 true로 설정해야 해요(#2715).
  • 파티션된 테이블에 파티션을 추가·제거하는 register_partitionunregister_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 보안의 핵심 개념이에요. 보안 내부 통신의 공유 시크릿과 선호 쓰기 파티셔닝도 운영에서 중요한 주제니 최신 문서를 참고해 보세요.