Release 341

Release 341 (2020년 9월 8일)

Presto 341 릴리스예요. Iceberg 커넥터 추가와 타임스탬프 의미론의 SQL 표준 준수 변경이라는 두 가지 큰 변화가 담긴 버전이에요. 시간대 처리 방식이 바뀌어 업그레이드 시 주의가 필요해요.

출처: Trino Release 341

본문

General

  • 가변 정밀도(variable-precision) TIME 타입 지원을 추가했어요(#4381).
  • 가변 정밀도 TIME WITH TIME ZONE 타입 지원을 추가했어요(#4905).
  • Iceberg 커넥터를 추가했어요.
  • human_readable_seconds() 함수를 추가했어요(#4344).
  • VARBINARY에 대한 reverse() 함수를 추가했어요(#4741).
  • time zone이 있는 timestamp(p)에서 p가 3이 아닌 값에 대한 extract() 지원을 추가했어요(#4867).
  • 재귀 쿼리에서 상관 서브쿼리(correlated subqueries) 지원을 추가했어요(#4877).
  • runtime.optimizer_rule_stats 시스템 테이블을 추가했어요(#4659).
  • 동적 필터 통계를 보고하도록 했어요(#4440).
  • 클러스터에 새 노드를 추가할 때 쿼리 확장성을 개선했어요(#4294).
  • JSON 파싱 실패 시 오류 메시지를 개선했어요(#4616).
  • 동적 필터링을 사용할 때 지연 시간을 줄였어요(#4924).
  • TIME WITH TIME ZONE 타입에서 정치적 시간대(political time zones) 지원을 제거했어요(#191).
  • 더 이상 쓰이지 않는 reorder_joins 세션 속성을 제거했어요(#5027).
  • deprecated.legacy-timestamp 설정 속성과 legacy_timestamp 세션 속성을 제거했어요(#4799).
  • 타임스탬프 연산을 SQL 표준과 일치하도록 변경했어요. TIMESTAMP 타입의 값은 세션 시간대의 영향을 받지 않아요(#37).
  • TIMESTAMP 타입 값에 AT TIME ZONE을 적용할 때 정밀도를 보존하도록 했어요(#4866).
  • 오래된 Presto 클라이언트에 대한 ROW, MAP, ARRAY 타입의 NULL 값 직렬화 문제를 고쳤어요(#4778).
  • 집계 쿼리에 중복 표현식이 포함됐을 때 실패하던 문제를 고쳤어요(#4872).
  • 정밀도가 6보다 큰 타임스탬프를 질의할 때 컴파일러 실패를 고쳤어요(#4824).
  • 일광 절약 시간(daylight saving) 변경으로 인한 타임스탬프 파싱 실패를 고쳤어요(#37).
  • TIMESTAMP WITH TIME ZONE 타입에 대해 TIMEZONE_HOURTIMEZONE_MINUTEextract()를 호출할 때 실패하던 문제를 고쳤어요(#4867).
  • 동적 필터를 기다리는 커넥터에 대한 쿼리 교착 상태(deadlock)를 고쳤어요(#4946).
  • TIME·TIMESTAMP 뺄셈이 음수 값을 반환할 때 실패하던 문제를 고쳤어요(#4847).
  • DISTINCT 절에 중복 표현식이 나타날 때 실패하던 문제를 고쳤어요(#4787).
  • 스필링 중이거나 사용 가능한 메모리가 적을 때 특정 조인 쿼리가 실패하던 문제를 고쳤어요(#4994).
  • query.max-scan-physical-bytes 설정 속성이 정의되지 않았을 때 query_max_scan_physical_bytes 세션 속성이 무시되던 문제를 고쳤어요(#5009).
  • TABLESAMPLE이 분수 백분율과 함께 쓰일 때 샘플 비율을 올바르게 계산하도록 했어요(#5074).
  • TABLESAMPLE이 숫자가 아닌 샘플 비율과 함께 쓰일 때 적절한 오류 메시지로 쿼리를 실패시키도록 했어요(#5074).
  • 특정 연산에서 OutOfMemoryError 대신 명시적 오류로 실패하도록 했어요(#4890).

Security

  • Salesforce 비밀번호 인증을 추가했어요(#4372).
  • access-control.properties에 시크릿 보간(interpolating secrets)을 지원하게 됐어요(#4854).
  • 인증서 인증이 활성화됐을 때만 HTTPS 클라이언트 인증서를 요청하도록 했어요(#4804).
  • 사용자 이름을 대문자화·소문자화하는 User mapping 지원을 추가했어요(#4736).

Web UI

  • 상세 쿼리 뷰의 물리 입력 읽기 시간 표시 문제를 고쳤어요(#4962).

JDBC 드라이버

  • ResultSet.getStatement()를 구현했어요(#4957).

BigQuery 커넥터

  • 시간 단위 파티션(hourly partitioned) 테이블 지원을 추가했어요(#4968).
  • 서버 로그에서 bigquery.credentials-key 값을 가리도록(redact) 했어요(#4968).

Cassandra 커넥터

  • Cassandra TIMESTAMP 타입을 Presto TIMESTAMP(3) WITH TIME ZONE 타입으로 매핑했어요(#2269).

Hive 커넥터

  • ORC 파일의 타임스탬프 통계를 기반으로 스트라이프와 행 그룹을 건너뛰도록 했어요(#1147).
  • hive.s3.skip-glacier-objects가 활성화됐을 때 Glacier 스토리지 클래스에 더해 DeepArchive 스토리지 클래스의 S3 객체도 건너뛰도록 했어요(#5002).
  • 정렬된 버킷팅(sorted bucketed) 테이블에 쓸 때 임시 파일에 임시 스테이징 디렉터리를 사용하도록 했어요. 덕분에 임시 파일에 더 효율적인 파일 시스템을 쓸 수 있어요(#3434).
  • GRANTREVOKE에 대한 메타스토어 캐시 무효화 문제를 고쳤어요(#4768).
  • 이진 타임스탬프 값을 특정 시간대로 조정하는 Parquet·RCBinary 설정 속성 hive.parquet.time-zonehive.rcfile.time-zone을 추가했어요. Hive 3.1+에서는 이 값을 UTC로 설정해야 해요. 기본값은 이전 Hive 버전과의 하위 호환성을 위해 JVM 기본 시간대예요(#4799).
  • time zone을 선언하지 않은 레거시 ORC 파일의 기본 시간대를 설정하는 ORC 설정 속성 hive.orc.time-zone을 추가했어요(#4799).
  • hive.time-zone 설정 속성을 형식별 속성 hive.orc.time-zone, hive.parquet.time-zone, hive.rcfile.time-zone으로 대체했어요(#4799).
  • S3 보안 매핑과 함께 클러스터 기본 역할을 사용할 수 있게 했어요(#4931).
  • timestamp에 대한 버킷팅 지원을 제거했어요. timestamp의 해시 함수 정의가 저장 시간대에 부정확하게 의존해 잘못된 결과를 낼 수 있기 때문이에요(#4759).
  • 파티션을 가져올 때 Glue 메타스토어로의 요청 수를 줄였어요. 이는 속도 제한(rate limits)에 걸리는 것을 피하고 서비스 비용을 줄여요(#4938).
  • HDFS에서 새 파일을 만들 때 테이블·파티션의 기존 사용자·그룹을 일치시키도록 했어요(#4414).
  • Text, Avro, SequenceFile, JSON, CSV 형식의 중첩 데이터에 대한 잘못된 타임스탬프 값을 고쳤어요(#4799).
  • ORC ACID 테이블이 경미한 테이블 컴팩션(minor compaction)을 거친 후 필터와 함께 그 테이블을 읽을 때 쿼리가 실패하던 문제를 고쳤어요(#4622).
  • 삭제된 행이 있고 경미한 컴팩션을 거친 ORC ACID 테이블을 읽을 때 잘못된 쿼리 결과가 나오던 문제를 고쳤어요(#4623).
  • 스토리지 캐싱이 활성화되고 쿼리 실행 중 캐시된 데이터가 축출(evicted)될 때 쿼리가 실패하던 문제를 고쳤어요(#3580).

JMX 커넥터

  • 히스토리 테이블의 timestamp 컬럼 타입을 TIMESTAMP WITH TIME ZONE으로 변경했어요(#4753).

Kafka 커넥터

  • TIMESTAMP WITH TIME ZONE 값을 파싱할 때 시간대를 보존하도록 했어요(#4799).

Kinesis 커넥터

  • TIMESTAMP WITH TIME ZONE 값을 파싱할 때 시간대를 보존하도록 했어요(#4799).

Kudu 커넥터

  • decimal 타입의 기본 키를 가진 테이블에 delete를 적용할 때의 문제를 고쳤어요(#4683).

Local File 커넥터

  • timestamp 컬럼 타입을 TIMESTAMP WITH TIME ZONE으로 변경했어요(#4752).

MySQL 커넥터

  • 집계 계산을 MySQL 데이터베이스로 push해 집계 쿼리 성능을 개선했어요. 현재 다음 집계 함수가 pushdown 대상이에요: count, min, max, sum, avg(#4138).

Oracle 커넥터

  • 풀링된 연결이 닫히기 전에 비활성 상태로 있을 수 있는 시간을 지정하는 oracle.connection-pool.inactive-timeout 설정 속성을 추가했어요. 기본값은 20분이에요(#4779).
  • 데이터베이스 국제화(internationalization) 지원을 추가했어요(#4775).
  • 일시적인 연결 인증 문제에 대한 탄력성(resilience)을 추가했어요(#4947).
  • 특정 타입을 VARCHAR로 강제 매핑할 수 있게 했어요. jdbc-types-mapped-to-varchar 설정 속성을 타입 이름의 쉼표 구분 목록으로 설정하면 활성화돼요(#4955).
  • 많은 수의 conjunct를 포함한 조건자의 pushdown으로 인한 쿼리 실패를 방지했어요(#4918).

Phoenix 커넥터

  • 그 컬럼을 지정하지 않고 insert를 적용했을 때 이전 값을 덮어쓰던 문제를 고쳤어요(#4670).

Pinot 커넥터

  • REALINTEGER 타입 지원을 추가했어요(#4725).
  • pass-through 쿼리의 함수 지원을 추가했어요(#4801).
  • Pinot에서 가져오는 행 수에 제한을 두도록 했어요. pinot.max-rows-per-split-for-segment-queries 설정 속성으로 설정할 수 있어요(#4723).
  • count(*) 쿼리의 잘못된 결과를 고쳤어요(#4802).
  • long, int, float 타입 컬럼에 대한 avg()가 포함된 쿼리의 잘못된 결과를 고쳤어요(#4802).
  • pass-through 쿼리의 컬럼이 선택된 컬럼과 일치하지 않을 때 잘못된 결과가 나오던 문제를 고쳤어요(#4802).

Prometheus 커넥터

  • timestamp 컬럼의 타입을 TIMESTAMP(3) WITH TIME ZONE 타입으로 변경했어요(#4799).

PostgreSQL 커넥터

  • 가능한 경우 필터링과 집계 계산을 모두 PostgreSQL 서버로 push해 조건자가 있는 집계 쿼리 성능을 개선했어요(#4111).
  • unsupported-type-handlingCONVERT_TO_VARCHAR로 설정됐을 때 PostgreSQL 배열 처리 문제를 고쳤어요(#4981).

Raptor 커넥터

  • Presto의 레거시 타임스탬프 의미론을 우회하는 데 쓰이던 storage.shard-day-boundary-time-zone 설정 속성을 제거했어요(#4799).

Redis 커넥터

  • TIMESTAMP WITH TIME ZONE 값을 파싱할 때 시간대를 보존하도록 했어요(#4799).

SPI

  • TIMESTAMP 타입은 proleptic 그레고리력에서 1970-01-01 00:00:00부터의 분수 초(fractional seconds) 수로 인코딩돼요. 이 값은 더 이상 세션 시간대로 조정되지 않아요. 정밀도가 3 이하인 타임스탬프는 이제 마이크로초 단위로 표현돼요(#4799).
  • ConnectorSession에서 isLegacyTimestamp()를 제거했어요(#4799).
  • 커넥터가 워커 노드에서 데이터를 만들기 전에 동적 필터를 기다릴 수 있게 했어요(#3414).

더 알아보기 (Learn more)

이 릴리스의 타임스탬프 의미론 변경(SQL 표준 준수)은 이후 Trino의 시간대 처리 표준으로 정착했어요. Iceberg 커넥터 추가와 함께, 최신 Trino의 타임스탬프 타입과 Iceberg 커넥터 문서를 함께 확인해 보세요.