Release 342

Release 342 (2020년 9월 24일)

Presto 342 릴리스예요. from_iso8601_timestamp_nanos() 함수, S3 암호화 파일 지원, Hive 타임스탬프 마이크로·나노초 정밀도, Iceberg 커넥터 수정 등이 담겼어요.

출처: Trino Release 342

본문

General

  • from_iso8601_timestamp_nanos() 함수를 추가했어요(#5048).
  • DECIMAL 타입을 사용하는 쿼리 성능을 개선했어요(#4886).
  • 동적 필터링 지원을 확장해 서브쿼리가 있는 IN이 포함된 쿼리 성능을 개선했어요(#5017).
  • 동적 필터를 활용하는 쿼리의 성능과 지연 시간을 개선했어요(#4988).
  • 비용 기반 최적화(기본 활성화) 시 컬럼 통계가 없거나 불완전한 테이블을 조인하는 쿼리 성능을 개선했어요(#5141).
  • 큰 테이블의 브로드캐스트 조인을 수행하는 쿼리의 지연 시간을 줄였어요(#5237).
  • enable-large-dynamic-filters 설정 속성이나 enable_large_dynamic_filters 세션 속성으로 큰 build 쪽이 있는 조인에 대한 동적 필터 수집을 허용하게 됐어요(#5262).
  • 람다 표현식이 점(dot)을 포함한 테이블 컬럼을 참조할 때 쿼리가 실패하던 문제를 고쳤어요(#5087).

Atop 커넥터

  • 쿼리에 start_time이나 end_time 컬럼에 대한 조건자가 포함됐을 때 잘못된 결과가 나오던 문제를 고쳤어요(#5125).

Elasticsearch 커넥터

  • 문자열로 저장된 boolean 값을 읽을 수 있게 했어요(#5269).

Hive 커넥터

  • S3 암호화 파일 지원을 추가했어요(#2536).
  • ABFS OAuth 인증 지원을 추가했어요(#5052).
  • 마이크로초·나노초 정밀도의 타임스탬프 읽기를 지원하게 됐어요. hive.timestamp-precision 설정 속성으로 활성화할 수 있어요(#4953).
  • hive.insert-existing-partitions-behavior 설정 속성으로 기본적으로 insert 시 덮어쓰기(overwrite)를 허용하게 됐어요(#4999).
  • 동적 필터링을 더 효율적으로 수행할 수 있을 때까지 테이블 스캔을 지연할 수 있게 했어요. hive.dynamic-filtering-probe-blocking-timeout 설정 속성이나 dynamic_filtering_probe_blocking_timeout 세션 속성으로 설정할 수 있어요(#4991).
  • HDFS에서 새 파일을 만들 때 테이블·파티션의 기존 사용자·그룹을 일치시키는 기능을 기본적으로 비활성화했어요. 이 기능은 341에서 추가됐는데 이제 기본적으로 꺼져 있어요. hive.fs.new-file-inherit-ownership 설정 속성으로 활성화할 수 있어요(#5187).
  • RCTEXT나 RCBINARY 형식의 작은 파일을 읽을 때 성능을 개선했어요(#2536).
  • Glue 메타스토어를 쓸 때 파티션 컬럼에 대한 비등식(non-equality) 필터가 있는 쿼리의 계획 시간을 개선했어요(#5060).
  • JSON과 CSV 파일 형식 읽기 성능을 개선했어요(#5142).

Iceberg 커넥터

  • 1970년 이전 날짜에 대한 시간 컬럼의 파티션 변환 문제를 고쳤어요(#5273).

Kafka 커넥터

  • 메시지 헤더를 MAP(VARCHAR, ARRAY(VARBINARY)) 타입의 _headers 컬럼으로 노출했어요(#4462).
  • JSON 인코더를 쓸 때 Kafka 커넥터의 TIME, TIME WITH TIME ZONE, TIMESTAMP, TIMESTAMP WITH TIME ZONE 쓰기 지원을 추가했어요(#4743).
  • 무의미한 input-format-type/data-type 조합에 대한 JSON 디코더 지원을 제거했어요. 다음 조합은 더 이상 지원되지 않아요(#4743):
    • rfc2822: DATE, TIME, TIME WITH TIME ZONE
    • milliseconds-since-epoch: TIME WITH TIME ZONE, TIMESTAMP WITH TIME ZONE
    • seconds-since-epoch: TIME WITH TIME ZONE, TIMESTAMP WITH TIME ZONE

MySQL 커넥터

  • MySQL에서 GTID 모드가 비활성화됐을 때 INSERT 쿼리 성능을 개선했어요(#4995).

PostgreSQL 커넥터

  • 가변 정밀도 TIMESTAMPTIMESTAMP WITH TIME ZONE 타입 지원을 추가했어요(#5124, #5105).

SQL Server 커넥터

  • VARBINARY 컬럼에 NULL을 삽입할 때 실패하던 문제를 고쳤어요(#4846).
  • SQL Server 데이터베이스 안에서 집계를 계산해 집계 쿼리 성능을 개선했어요. 현재 다음 집계 함수가 pushdown 대상이에요: count, min, max, sum, avg(#4139).

SPI

  • 동적 필터가 완전한지, isBlocked() 메서드로 기다릴 수 있는지 여부를 반환하는 DynamicFilter.isAwaitable() 메서드를 추가했어요(#5043).
  • 커넥터가 split을 만들기 전에 복제된 조인(replicated joins)에서 파생된 동적 필터를 기다릴 수 있게 했어요(#4685).

더 알아보기 (Learn more)

동적 필터링의 다양한 세부 설정은 이후 Trino의 쿼리 성능 튜닝에서 자주 등장해요. Hive 타임스탬프 정밀도와 Iceberg 커넥터는 최신 커넥터 문서에서 확인해 보세요.