Trino 0.66 릴리스 노트
Trino 0.66 릴리스 노트
Trino 0.66 릴리스 노트입니다. 이번 릴리스에서는 완전히 확장 가능한 타입 시스템, 표준 SQL 날짜/시간 타입, 여러 최적화와 SPI 변경이 포함돼 있어요.
출처: 문서
본문
타입 시스템 (Type system)
이 릴리스에서는 기존의 단순한 고정 타입 시스템을 완전히 확장 가능한 타입 시스템으로 교체하고 몇 가지 새 타입을 추가했어요. 또한 커스텀 산술, 비교, 캐스팅 연산자를 지원하도록 함수 시스템을 확장했어요. 예를 들어 새 날짜/시간 타입에는 TIMESTAMP에 INTERVAL을 더하는 연산자가 포함돼요.
기존 함수들은 새로 추가된 타입으로 동작하고 반환하도록 업데이트됐어요. 예를 들어 ANSI 색상 함수는 이제 COLOR 타입으로 동작하고, 날짜/시간 함수는 표준 SQL 날짜/시간 타입(아래 설명)으로 동작해요.
마지막으로 플러그인이 커넥터와 함수 외에도 커스텀 타입과 연산자를 제공할 수 있게 됐어요. 이 기능은 매우 실험적이므로 다음 몇 릴리스에서 인터페이스가 바뀔 것으로 예상하세요. 또한 SQL에는 타입 네임스페이스가 하나뿐이므로, 가까운 시일 내에 Presto에 다른 일반 SQL 타입을 추가할 예정이기 때문에 커스텀 타입 이름을 고유하게 만드는 데 주의해야 해요.
날짜/시간 타입 (Date/time types)
Presto가 이제 모든 표준 SQL 날짜/시간 타입(DATE, TIME, TIMESTAMP, INTERVAL)을 지원해요. 모든 날짜/시간 함수와 언어 구성이 이제 BIGINT 대신 이 타입들로 동작하고 시간 계산을 올바르게 수행해요. 이전에는 예를 들어 인자가 DATE인지 TIMESTAMP인지 감지할 수 없어 잘못됐어요. 이 변경은 날짜/시간 함수에서 반환된 BIGINT 값에 직접 산술 연산을 수행하는 기존 쿼리를 깨뜨리는 대가를 치렀어요.
이 작업의 일환으로 데이터를 시간 간격으로 그룹화하는 데 편리한 date_trunc() 함수도 추가했어요. 예를 들어 시간별로 집계할 수 있어요:
SELECT date_trunc('hour', timestamp_column), count(*)
FROM ...
GROUP BY 1
시간대 (Time zones)
이 릴리스는 날짜/시간 계산을 올바르게 수행하는 데 필요한 시간대 규칙을 완전히 지원해요. 일반적으로 세션 시간대가 시간 계산에 사용돼요. 이는 쿼리를 제출하는 클라이언트 컴퓨터의 시간대(사용 가능한 경우)이며, 그렇지 않으면 Presto 코디네이터를 실행하는 서버의 시간대예요.
일광 절약 시간을 따르는 시간대에서 동작하는 쿼리는 예상치 못한 결과를 낼 수 있어요. 예를 들어 America/Los_Angeles 시간대에서 24시간을 더하는 다음 쿼리를 실행하면:
SELECT date_add('hour', 24, TIMESTAMP '2014-03-08 09:00:00');
-- 2014-03-09 10:00:00.000
타임스탬프가 23시간만 진행된 것처럼 보여요. 3월 9일에 America/Los_Angeles의 시계가 1시간 앞으로 당겨져 3월 9일이 23시간밖에 없기 때문이에요. 타임스탬프의 날짜 부분을 진행하려면 day 단위를 사용하세요:
SELECT date_add('day', 1, TIMESTAMP '2014-03-08 09:00:00');
-- 2014-03-09 09:00:00.000
이것은 date_add() 함수가 타임스탬프를 필드 목록으로 취급하고 지정된 필드에 값을 더한 뒤 오버플로를 다음 상위 필드로 넘기기 때문에 동작해요.
시간대는 타임스탬프의 파싱과 출력에도 필요해요. 이 기능을 사용하는 쿼리도 예상치 못한 결과를 낼 수 있어요. 예를 들어 같은 머신에서:
SELECT TIMESTAMP '2014-03-09 02:30:00';
위 쿼리는 일광 절약 시간 전환 때문에 America/Los_Angeles의 3월 9일 오전 2:30이 없어 오류를 일으켜요.
일반 TIMESTAMP 값 외에도 Presto는 모든 값이 명시적 시간대를 가지는 TIMESTAMP WITH TIME ZONE 타입도 지원해요. 예를 들어 다음 쿼리는 TIMESTAMP WITH TIME ZONE을 만들어요:
SELECT TIMESTAMP '2014-03-14 09:30:00 Europe/Berlin';
-- 2014-03-14 09:30:00.000 Europe/Berlin
AT TIME ZONE 절을 사용해 기존 타임스탬프의 시간대를 바꿀 수도 있어요:
SELECT TIMESTAMP '2014-03-14 09:30:00 Europe/Berlin'
AT TIME ZONE 'America/Los_Angeles';
-- 2014-03-14 01:30:00.000 America/Los_Angeles
두 타임스탬프는 같은 시각(instant)을 나타내며, 출력에 사용된 시간대만 다를 뿐이에요.
세션 시간대는 X-Presto-Time-Zone HTTP 헤더나 JDBC 드라이버의 PrestoConnection.setTimeZoneId(String) 메서드로 쿼리별로 설정할 수 있어요.
지역화 (Localization)
시간대 외에도 날짜/시간 타입을 파싱하고 출력할 때 사용자 언어가 중요해요. 이 릴리스는 Presto 엔진과 필요로 하는 함수(date_format(), date_parse())에 지역화 지원을 추가했어요. 예를 들어 언어를 스페인어로 설정하면:
SELECT date_format(TIMESTAMP '2001-01-09 09:04', '%M'); -- enero
언어를 일본어로 설정하면:
SELECT date_format(TIMESTAMP '2001-01-09 09:04', '%M'); -- 1月
세션 언어는 X-Presto-Language HTTP 헤더나 JDBC 드라이버의 PrestoConnection.setLocale(Locale) 메서드로 쿼리별로 설정할 수 있어요.
최적화 (Optimizations)
- Hive 커넥터를 RCFile에 대한 성능 개선이 포함된 Hive 0.12로 업그레이드했어요.
GROUP BY와JOIN연산자를 이제 바이트 코드로 컴파일해 훨씬 빨라졌어요.GROUP BY와SELECT DISTINCT의 메모리 사용을 줄였어요. 이전에는 그룹 수가 적어도 연산자당 몇 MB의 메모리가 필요했어요.- 플래너가 이제 함수 호출 인자를 최적화해요. 복잡한 표현식이 포함된 쿼리의 성능을 개선할 수 있어요.
- HTTP 클라이언트의 성능 회귀를 수정했어요. 최근 HTTP 클라이언트 업그레이드가 실수로 GZIP 압축을 사용했고 버퍼 관리에 버그가 있어 높은 CPU 사용이 발생했어요.
SPI
이 릴리스에서 SPI에 여러 하위 호환되지 않는 변경을 만들었어요:
Type과 관련 인터페이스를 추가했어요.- 메타데이터의
ConnectorType을Type으로 대체했어요. TableHandle의 이름을ConnectorTableHandle로 바꿨어요.ColumnHandle의 이름을ConnectorColumnHandle로 바꿨어요.Partition의 이름을ConnectorPartition로 바꿨어요.PartitionResult의 이름을ConnectorPartitionResult로 바꿨어요.Split의 이름을ConnectorSplit로 바꿨어요.SplitSource의 이름을ConnectorSplitSource로 바꿨어요.- 대부분의
ConnectorMetadata메서드에ConnectorSession파라미터를 추가했어요. - 대부분의
canHandle메서드를 제거했어요.
일반 버그 수정 (General bug fixes)
USE CATALOG나USE SCHEMA를 사용한 후 CLI가 멈추던 문제를 수정했어요.- 집계의 암시적 강제 변환(clustering)이 이제 예상대로 동작해요.
- 표현식의 null이 예상대로 동작해요.
- 컴파일러의 메모리 누수를 수정했어요.
- 작업 메모리 사용량의 회계 버그를 수정했어요.
- 버려진 쿼리로 인한 자원 누수를 수정했어요.
- 복구할 수 없는 데이터 전송 오류 시 쿼리를 즉시 실패시키도록 했어요.
Hive 버그 수정 (Hive bug fixes)
- 데이터를 쓸 때 원래 사용된 시간대를 설정하는 구성을 추가해 Hive RCFile Text SerDe(
ColumnarSerDe)의 타임스탬프 파싱을 수정했어요.
Cassandra 버그 수정 (Cassandra bug fixes)
- Cassandra 세션이 죽으면 자동으로 다시 연결하도록 했어요.
- 컬렉션 타입을 JSON으로 포맷하도록 했어요.
더 알아보기 (Learn more)
Trino 0.66의 변경 사항을 더 자세히 확인하고 싶다면 공식 릴리스 노트를 참고해 주세요.