릴리스 405

릴리스 405 (2022년 12월 28일)

이번 릴리스에서는 ALTER COLUMN ... SET DATA TYPE 지원과 그룹 기반 보안, INSERT 성능 개선이 눈에 띄어요. Parquet 읽기 성능 개선도 여러 커넥터에 걸쳐 있어요.

출처: Trino 릴리스 405 문서

본문

일반 (General)

  • EXPLAIN 출력에 Trino 버전을 추가했어요. (#15317)
  • EXPLAIN ANALYZE VERBOSE 출력에 태스크 입출력 크기 분포를 추가했어요. (#15286)
  • EXPLAIN ANALYZE 출력에 스테이지 왜곡(skewness) 경고를 추가했어요. (#15286)
  • ALTER COLUMN ... SET DATA TYPE 문 지원을 추가했어요. (#11608)
  • resource-groups.refresh-interval 구성값으로 데이터베이스 리소스 그룹 관리자의 새로고침 간격을 구성할 수 있게 했어요. (#14514)
  • date 컬럼을 timestamp(n) with time zone 리터럴과 비교하는 쿼리의 성능을 개선했어요. (#5798)
  • 테이블 삽입 시 성능·리소스 활용을 개선했어요. (#14718, #14874)
  • 오류 허용 실행이 켜졌을 때 INSERT 쿼리 성능을 개선했어요. (#14735)
  • GROUP BY 절이 많은 쿼리의 계획 성능을 개선했어요. (#15292)
  • 대형 클러스터·왜곡 쿼리의 쿼리 성능을 개선했어요. (#15369)
  • node-scheduler.max-pending-splits-per-task 구성값을 node-scheduler.min-pending-splits-per-task로 이름을 바꿨어요. (#15168)
  • 구성된 태스크 재시도 수가 126보다 크지 않도록 했어요. (#14459)
  • 허용 값 범위 상단 근처의 time(n)·time(n) with time zone 값 반올림 문제를 고쳤어요. (#15138)
  • PARTITION BY 없는 윈도우 함수 뒤에 PARTITION BY·ORDER BY가 있는 윈도우 함수가 이어지는 쿼리의 잘못된 결과를 고쳤어요. (#15203)
  • timestamp with time zoneinterval을 더하거나 뺄 때 잘못된 결과가 나오던 문제를 고쳤어요. (#15103)
  • 인덱스된 컬럼과 비인덱스된 컬럼에 동시에 조인할 때 발생할 수 있는 잘못된 결과를 고쳤어요. (#15334)
  • MATCH_RECOGNIZE가 포함된 쿼리의 잠재적 실패를 고쳤어요. (#15343)
  • EXPLAIN ANALYZE VERBOSE 출력의 Projection CPU time 보고를 고쳤어요. (#15364)
  • SET TIME ZONE LOCAL이 클라이언트 세션의 초기 시간대로 올바르게 재설정되도록 고쳤어요. (#15314)

보안 (Security)

  • 가장(impersonation) 규칙의 일부로 문자열 치환을 지원해요. (#14962)
  • HTTPS로 접근 제어 규칙을 가져오는 것을 지원해요. (#14008)
  • 일부 system.metadata 테이블이 사용자가 접근할 수 없는 카탈로그 이름을 잘못 표시하던 문제를 고쳤어요. (#14000)
  • USE 문이 사용자가 접근할 수 없는 카탈로그·스키마 이름을 잘못 노출하던 문제를 고쳤어요. (#14208)
  • OAuth 2.0 토큰 리프레시 후 부적절한 HTTP 리다이렉트를 고쳤어요. (#15336)

웹 UI (Web UI)

  • "Stage Performance" 탭에 연산자 CPU 시간을 표시해요. (#15339)

JDBC 드라이버

  • DatabaseMetaData.getColumns 결과의 NULLABLE 컬럼에 올바른 값을 반환하도록 했어요. (#15214)

BigQuery 커넥터

  • BigQuery에서 읽을 때 Apache Arrow 직렬화에 대한 실험적 지원으로 읽기 성능을 개선했어요. bigquery.experimental.arrow-serialization.enabled 카탈로그 구성값으로 켤 수 있어요. (#14972)
  • bigquery.project-id 카탈로그 속성에 지정된 프로젝트 ID 대신 자격 증명에 지정된 프로젝트 ID로 쿼리가 잘못 실행되던 문제를 고쳤어요. (#14083)

Delta Lake 커넥터

  • 뷰 지원을 추가했어요. (#11609)
  • parquet.max-read-block-row-count 구성값이나 parquet_max_read_block_row_count 세션 속성으로 Parquet 파일 읽기의 배치 크기를 구성할 수 있게 했어요. (#15474)
  • S3 호환 스토리지에서 vacuum 프로시저를 실행할 때 성능을 개선하고 저장 요구 사항을 줄였어요. (#15072)
  • INSERT, MERGE, CREATE TABLE ... AS SELECT 쿼리의 메모리 회계를 개선했어요. (#14407)
  • boolean, tinyint, short, int, long, float, double, short decimal, UUID, time, decimal, varchar, char 데이터 타입의 Parquet 파일 읽기 성능을 개선했어요. parquet.optimized-reader.enabled 카탈로그 구성값으로 끌 수 있어요. (#14423, #14667)
  • 일부 컬럼에 nulls fraction 통계가 없을 때 쿼리 성능을 개선했어요. (#15132)
  • Parquet 파일 읽기 성능을 개선했어요. (#15257, #15474)
  • 필터가 있는 쿼리용 Parquet 파일 읽기 성능을 개선했어요. (#15268)
  • AWS S3에 저장된 테이블의 DROP TABLE 성능을 개선했어요. (#13974)
  • timestamp·timestamp with timezone 데이터 타입의 Parquet 파일 읽기 성능을 개선했어요. (#15204)
  • 적은 수의 컬럼을 읽는 쿼리와 큰 Parquet 행 그룹·ORC 스트라이프가 있는 테이블을 처리하는 쿼리의 성능을 개선했어요. (#15168)
  • Parquet 파일에서 읽을 때 안정성을 개선하고 최대 메모리 요구량을 줄였어요. (#15374)
  • register_table 프로시저로 metastore에 기존 테이블 파일을 등록할 수 있게 했어요. (#13568)
  • 기존 테이블 콘텐츠로 새 테이블을 만드는 것을 지원 중단(deprecated) 처리했어요. delta.legacy-create-table-with-existing-location.enabled 구성값이나 legacy_create_table_with_existing_location_enabled 세션 속성으로 다시 켤 수 있어요. (#13568)
  • 큰 행 그룹이 있는 Parquet 파일을 읽을 때 쿼리가 실패하던 문제를 고쳤어요. (#5729)
  • Databricks 런타임이 만들고 S3에 저장된 관리 테이블에서 DROP TABLE이 파일을 남기던 문제를 고쳤어요. (#13017)
  • 경로에 특수 문자가 있을 때 쿼리가 실패하던 문제를 고쳤어요. (#15183)
  • S3에 저장된 테이블의 잠재적 INSERT 실패를 고쳤어요. (#15476)

Google Sheets 커넥터

  • gsheets.read-timeout 구성값으로 읽기 타임아웃을 설정하는 것을 지원해요. (#15322)
  • gsheets.credentials-key 구성값으로 base64 인코딩된 자격 증명을 지원해요. (#15477)
  • credentials-path 구성값을 gsheets.credentials-path로, metadata-sheet-idgsheets.metadata-sheet-id로, sheets-data-max-cache-sizegsheets.max-data-cache-size로, sheets-data-expire-after-writegsheets.data-cache-ttl로 이름을 바꿨어요. (#15042)

Hive 커넥터

  • UNIONTYPE Hive 타입 컬럼의 중첩 필드 참조를 지원해요. (#15278)
  • parquet.max-read-block-row-count 구성값이나 parquet_max_read_block_row_count 세션 속성으로 Parquet 파일 읽기의 배치 크기를 구성할 수 있게 했어요. (#15474)
  • INSERT, MERGE, CREATE TABLE AS SELECT 쿼리의 메모리 회계를 개선했어요. (#14407)
  • boolean, tinyint, short, int, long, float, double, short decimal, UUID, time, decimal, varchar, char 데이터 타입의 Parquet 파일 읽기 성능을 개선했어요. parquet.optimized-reader.enabled 카탈로그 구성값으로 끌 수 있어요. (#14423, #14667)
  • 여러 파티션에 데이터를 쓰는 쿼리의 성능을 개선했어요. (#15241, #15066)
  • Parquet 파일 읽기 성능을 개선했어요. (#15257, #15474)
  • 필터가 있는 쿼리용 Parquet 파일 읽기 성능을 개선했어요. (#15268)
  • AWS S3에 저장된 테이블의 DROP TABLE 성능을 개선했어요. (#13974)
  • timestamp·timestamp with timezone 데이터 타입의 Parquet 파일 읽기 성능을 개선했어요. (#15204)
  • 적은 수의 컬럼을 읽는 쿼리와 큰 Parquet 행 그룹·ORC 스트라이프가 있는 테이블을 처리하는 쿼리의 성능을 개선했어요. (#15168)
  • Parquet 파일에서 읽을 때 안정성을 개선하고 최대 메모리 요구량을 줄였어요. (#15374)
  • Hive metastore를 쓰지 않을 때 트랜잭션 테이블 생성을 금지했어요. (#14673)
  • 큰 행 그룹이 있는 Parquet 파일을 읽을 때 쿼리가 실패하던 문제를 고쳤어요. (#5729)
  • 새 스키마 생성 시 클라이언트 타임아웃으로 인한 잘못된 schema already exists 오류를 고쳤어요. (#15174)
  • Glue metastore에서 테이블·뷰를 나열할 때 접근 거부 예외가 발생하면 실패하던 문제를 고쳤어요. (#14746)
  • Apache Hive 3.1.2를 metastore로 쓸 때 ORC ACID 테이블의 INSERT 실패를 고쳤어요. (#7310)
  • char 타입이 있는 Hive 뷰를 읽을 때 발생하던 실패를 고쳤어요. (#15470)
  • S3에 저장된 테이블의 잠재적 INSERT 실패를 고쳤어요. (#15476)

Hudi 커넥터

  • boolean, tinyint, short, int, long, float, double, short decimal, UUID, time, decimal, varchar, char 데이터 타입의 Parquet 파일 읽기 성능을 개선했어요. parquet.optimized-reader.enabled 카탈로그 구성값으로 끌 수 있어요. (#14423, #14667)
  • 필터가 있는 쿼리용 Parquet 파일 읽기 성능을 개선했어요. (#15268)
  • timestamp·timestamp with timezone 데이터 타입의 Parquet 파일 읽기 성능을 개선했어요. (#15204)
  • 적은 수의 컬럼을 읽는 쿼리와 큰 Parquet 행 그룹·ORC 스트라이프가 있는 테이블을 처리하는 쿼리의 성능을 개선했어요. (#15168)
  • Parquet 파일에서 읽을 때 안정성을 개선하고 최대 메모리 요구량을 줄였어요. (#15374)
  • 큰 행 그룹이 있는 Parquet 파일을 읽을 때 쿼리가 실패하던 문제를 고쳤어요. (#5729)

Iceberg 커넥터

  • parquet.max-read-block-row-count 구성값이나 parquet_max_read_block_row_count 세션 속성으로 Parquet 파일 읽기의 배치 크기를 구성할 수 있게 했어요. (#15474)
  • Iceberg REST 카탈로그 지원을 추가했어요. (#13294)
  • INSERT, MERGE, CREATE TABLE AS SELECT 쿼리의 메모리 회계를 개선했어요. (#14407)
  • boolean, tinyint, short, int, long, float, double, short decimal, UUID, time, decimal, varchar, char 데이터 타입의 Parquet 파일 읽기 성능을 개선했어요. parquet.optimized-reader.enabled 카탈로그 구성값으로 끌 수 있어요. (#14423, #14667)
  • Parquet 파일 읽기 성능을 개선했어요. (#15257, #15474)
  • 필터가 있는 쿼리용 Parquet 파일 읽기 성능을 개선했어요. (#15268)
  • AWS S3에 저장된 테이블의 DROP TABLE 성능을 개선했어요. (#13974)
  • timestamp·timestamp with timezone 데이터 타입의 Parquet 파일 읽기 성능을 개선했어요. (#15204)
  • 적은 수의 컬럼을 읽는 쿼리와 큰 Parquet 행 그룹·ORC 스트라이프가 있는 테이블을 처리하는 쿼리의 성능을 개선했어요. (#15168)
  • Parquet 파일에서 읽을 때 안정성을 개선하고 최대 메모리 요구량을 줄였어요. (#15374)
  • Parquet 파일의 row 컬럼 조건이 커넥터로 프러시다운될 때 잘못된 결과가 나오던 문제를 고쳤어요. (#15408)
  • 큰 행 그룹이 있는 Parquet 파일을 읽을 때 쿼리가 실패하던 문제를 고쳤어요. (#5729)
  • 비Iceberg 테이블을 기반으로 한 구체화된 뷰의 REFRESH MATERIALIZED VIEW 실패를 고쳤어요. (#13131)
  • Glue metastore에서 테이블·뷰를 나열할 때 접근 거부 예외가 발생하면 실패하던 문제를 고쳤어요. (#14971)
  • S3에 저장된 테이블의 잠재적 INSERT 실패를 고쳤어요. (#15476)

Kafka 커넥터

  • Protobuf 인코딩 지원을 추가했어요. (#14734)

MongoDB 커넥터

  • 오류 허용 실행 지원을 추가했어요. (#15062)
  • truststore·keystore의 파일 경로와 비밀번호 설정을 지원해요. (#15240)
  • query 테이블 함수에서 대소문자 무시 이름 매칭을 지원해요. (#15329)
  • mongodb.ssl.enabled 구성값을 mongodb.tls.enabled로 이름을 바꿨어요. (#15240)
  • 최소 요구 MongoDB 버전을 4.2로 올렸어요. (#15062)
  • 컬럼을 삭제할 때 컬렉션에서 MongoDB 필드도 지우도록 했어요. 이전에는 커넥터가 메타데이터만 삭제했어요. (#15226)
  • 지원 중단된 mongodb.seeds·mongodb.credentials 구성값을 제거했어요. (#15263)
  • 스키마·테이블 나열 시 무단 예외가 발생하면 실패하던 문제를 고쳤어요. (#1398)
  • query 테이블 함수에서 컬럼 이름에 대문자가 포함된 경우 NullPointerException이 나던 문제를 고쳤어요. (#15294)
  • 단일 쿼리 안에서 objectid 함수를 두 번 이상 쓸 때 잘못된 결과가 나올 수 있던 문제를 고쳤어요. (#15426)

MySQL 커넥터

  • query 테이블 함수에 WITH 절이 포함된 경우 발생하던 실패를 고쳤어요. (#15332)

PostgreSQL 커넥터

  • FULL JOIN이 프러시다운될 때 쿼리가 실패하던 문제를 고쳤어요. (#14841)

Redshift 커넥터

  • 집계·조인·ORDER BY ... LIMIT 프러시다운을 지원해요. (#15365)
  • DELETE 지원을 추가했어요. (#15365)
  • 스키마·테이블·컬럼 이름 길이 검사를 추가했어요. (#15365)
  • Redshift 타입에 대한 전체 타입 매핑을 추가했어요. 이전 동작은 redshift.use-legacy-type-mapping 구성값으로 되돌릴 수 있어요. (#15365)

SPI

  • 지원 중단된 ConnectorNodePartitioningProvider.getBucketNodeMap() 메서드를 제거했어요. (#14067)
  • 엔진에서 DELETE·UPDATE 실행에 MERGE API를 쓰도록 했어요. 커넥터가 beginMerge()와 관련 API를 구현하도록 요구해요. 사용되지 않고 구현할 필요 없는 beginDelete(), beginUpdate(), UpdatablePageSource를 지원 중단 처리했어요. (#13926)

더 알아보기 (Learn more)