ClickHouse 릴리스 19.17
ClickHouse 릴리스 19.17.6.36, 2019-12-27
버그 수정
- decompress에서 발생할 수 있는 잠재적인 버퍼 오버플로우를 수정했습니다. 악의적인 사용자가 조작된 압축 데이터를 전달해 버퍼 경계 밖을 읽도록 만들 수 있었습니다. 이 문제는 Yandex 정보 보안 팀의 Eldar Zaitov가 발견했습니다. #8404 (alexey-milovidov)
- 서버가
String데이터 타입 값(UTF-8 유효성 검사가 필요함)이 포함된 JSON 또는 XML 포맷의 데이터를 전송하거나 기록하지 못할 때, 또는 Brotli 알고리즘으로 결과 데이터를 압축할 때, 그 밖의 드문 일부 경우에 발생할 수 있던 서버 충돌(std::terminate) 문제를 수정했습니다. #8384 (alexey-milovidov) - ClickHouse
VIEW를 source로 사용하는 Dictionaries 관련 문제를 수정하여, 이제 이러한 Dictionaries를 읽어도There is no query오류가 발생하지 않습니다. #8351 (Nikolai Kochetov) - users.xml에 지정된 host_regexp를 기준으로 클라이언트 호스트의 허용 여부를 확인하는 문제를 수정했습니다. #8241, #8342 (Vitaly Baranov)
- 분산 테이블에서
RENAME TABLE을 실행하면 이제 세그먼트로 전송하기 전에 삽입된 데이터가 들어 있는 폴더 이름도 변경됩니다. 이로써tableA->tableB,tableC->tableA처럼 연속으로 이름을 변경할 때 발생하던 문제가 수정되었습니다. #8306 (tavplubix) - DDL 쿼리로 생성한
range_hashed외부 딕셔너리에서 이제 임의의 숫자 타입 범위를 사용할 수 있습니다. #8275 (alesapin) INSERT INTO table SELECT ... FROM mysql(...)테이블 함수 관련 문제가 수정되었습니다. #8234 (tavplubix)INSERT INTO TABLE FUNCTION file()로 존재하지 않는 파일에 삽입할 때 발생하던 segfault를 수정했습니다. 이제는 이 경우 파일을 먼저 생성한 후 삽입을 처리합니다. #8177 (Olga Khvostikova)- 집계된 비트맵과 스칼라 비트맵이 교차할 때 발생하던 bitmapAnd 오류를 수정했습니다. #8082 (Yue Huang)
TABLE또는DICTIONARY한정자 없이EXISTS쿼리(예:EXISTS t)를 사용했을 때 발생하던 segfault를 수정했습니다. #8213 (alexey-milovidov)- 인수가 널 허용인 경우 함수
rand및randConstant의 고정 반환 타입을 수정했습니다. 이제 이 함수는 항상UInt32를 반환하며,Nullable(UInt32)는 반환하지 않습니다. #8204 (Nikolai Kochetov) DROP DICTIONARY IF EXISTS db.dict를 수정했습니다. 이제db가 존재하지 않아도 예외가 발생하지 않습니다. #8185 (Vitaly Baranov)- 서버 충돌로 인해 테이블이 완전히 삭제되지 않은 경우, 서버는 해당 테이블을 복원하여 로드하려고 시도합니다 #8176 (tavplubix)
- 세그먼트 로컬 테이블이 3개 이상인 경우 분산 테이블에 대한 단순한 count 쿼리 문제를 수정했습니다. #8164 (小路)
- DB::BlockStreamProfileInfo::calculateRowsBeforeLimit()에서 데이터 레이스를 유발하던 버그를 수정했습니다 #8143 (Alexander Kazakov)
- 병합 직후 실행된
ALTER table MOVE part가 지정된 파트가 병합된 대상 파트를 이동할 수 있던 문제를 수정했습니다. 이제는 지정된 파트를 올바르게 이동합니다. #8104 (Vladimir Chebotarev) - 이제 Dictionaries의 표현식을 문자열로 지정할 수 있습니다. 이는 ClickHouse 외부 소스에서 데이터를 추출할 때 속성을 계산하는 데 유용합니다. 해당 표현식에 ClickHouse가 아닌 구문을 사용할 수 있기 때문입니다. #8098 (alesapin)
- ZXid 오버플로우로 인해
clickhouse-copier에서 매우 드물게 발생하던 경쟁 상태를 수정했습니다. #8088 (Ding Xiang Fei) - 쿼리가 실패한 뒤(예를 들어 “동시에 실행되는 쿼리가 너무 많음” 때문에) 외부 테이블 정보를 읽지 못한 상태에서, 다음 요청이 이 정보를 다음 쿼리의 시작으로 해석해
Unknown packet from client와 같은 오류를 발생시키던 버그를 수정했습니다. #8084 (Azat Khuzhin) - “server에서 알 수 없는 패킷 X” 발생 후 널 역참조 방지 #8071 (Azat Khuzhin)
- 모든 ICU 로캘 지원을 복원하고, 상수 표현식에 콜레이션을 적용할 수 있도록 했으며, system.collations 테이블에 언어 이름을 추가했습니다. #8051 (alesapin)
StorageFile및StorageHDFS에서 읽을 때 사용하는 스트림 수가 이제 메모리 한도 초과를 방지하도록 제한됩니다. #7981 (alesapin)- 키가 지정되지 않은
*MergeTree테이블의CHECK TABLE쿼리를 수정했습니다. #7979 (alesapin) - 뮤테이션이 없을 때는 part 이름에서 뮤테이션 번호를 제거하도록 했습니다. 이 변경으로 이전 버전과의 호환성이 향상되었습니다. #8250 (alesapin)
- 일부 attached 상태인 파트에서 data_version이 테이블 뮤테이션 버전보다 커서 뮤테이션이 적용되지 않던 버그를 수정했습니다. #7812 (Zhichang Yu)
- 파트를 다른 장치로 이동한 뒤 중복 사본이 남아 있어도 서버를 시작할 수 있도록 했습니다. #7810 (Vladimir Chebotarev)
- 집계 함수 컬럼 사용 시 발생할 수 있는 오류 “Sizes of columns does not match”를 수정했습니다. #7790 (Boris Granveaud)
- 이제 LIMIT BY와 함께 WITH TIES를 사용하면 예외가 발생하게 됩니다. 또한 이제 LIMIT BY와 함께 TOP도 사용할 수 있습니다. #7637 (Nikita Mikhaylov)
invalidate_query가 있는 딕셔너리에서 다시 로드 시 이전 업데이트 시도 때문에 업데이트가 중단되고 일부 예외가 발생하던 문제를 수정했습니다. #8029 (alesapin)
ClickHouse 릴리스 19.17.4.11, 2019-11-22
하위 호환되지 않는 변경 사항
- 성능 향상을 위해 스칼라 서브쿼리 결과를 저장할 때 AST 대신 컬럼을 사용하도록 변경되었습니다.
enable_scalar_subquery_optimization설정은 19.17에서 추가되었으며 기본적으로 활성화되었습니다. 이로 인해 이전 버전에서 19.17.2 또는 19.17.3으로 업그레이드하는 과정에서 이와 같은 오류가 발생할 수 있습니다. 19.16 및 그 이전 버전에서 오류 없이 업그레이드할 수 있도록 이 설정은 19.17.4에서 기본적으로 비활성화되었습니다. #7392 (Amos Bird)
새로운 기능
- DDL 쿼리로 딕셔너리를 생성하는 기능을 추가했습니다. #7360 (alesapin)
bloom_filter유형의 인덱스에서LowCardinality와Nullable을 지원하도록 했습니다. #7363 #7561 (Nikolai Kochetov)- 전달된 문자열이 유효한 JSON인지 확인하는
isValidJSON함수를 추가했습니다. #5910 #7293 (Vdimir) arrayCompact함수를 구현했습니다. #7328 (Memo)- Decimal 숫자용
hex함수를 추가했습니다. 이 함수는hex(reinterpretAsString())처럼 동작하지만 마지막의 0 바이트는 제거하지 않습니다. #7355 (Mikhail Korotov) - 배열에서 각 요소를 그 앞/뒤의 다른 요소로 대체하는
arrayFill및arrayReverseFill함수를 추가했습니다. #7380 (hcz) CRC32IEEE()/CRC64()지원을 추가했습니다. #7480 (Azat Khuzhin)- mysql의 함수와 유사한
char함수를 구현했습니다. #7486 (sundyli) bitmapTransform함수를 추가했습니다. 이 함수는 비트맵의 값 배열을 다른 값 배열로 변환하며, 그 결과로 새로운 비트맵을 반환합니다. #7598 (Zhichang Yu)javaHashUTF16LE()함수를 구현했습니다. #7651 (achimbab)- 분산 engine용
_shard_num가상 컬럼을 추가했습니다. #7624 (Azat Khuzhin)
실험적 기능
MergeTree에서 프로세서(새로운 쿼리 실행 파이프라인)를 지원합니다. #7181 (Nikolai Kochetov)
버그 수정
Values의 잘못된 부동소수점 파싱 수정 #7817 #7870 (tavplubix)- trace_log가 활성화된 경우 발생할 수 있는 드문 교착 상태를 수정했습니다. #7838 (filimonov)
- 해당 Kafka 테이블을 선택하는 MV가 하나라도 있을 경우 메시지 생성 시 중복이 발생하지 않도록 수정 #7265 (Ivan)
IN에서Array(LowCardinality(Nullable(String)))를 지원합니다. #7364 #7366 해결 (achimbab)SQL_TINYINT및SQL_BIGINT처리 지원을 추가하고, ODBC Bridge에서SQL_FLOATdata source 타입 처리 문제를 수정했습니다. #7491 (Denis Glazachev)- 빈 decimal 컬럼에서의 집계(
avg및 분위수) 수정 #7431 (Andrey Konyaev) MATERIALIZED컬럼이 있는 분산 테이블에INSERT할 때 발생하던 문제 수정 #7377 (Azat Khuzhin)- 파티션의 일부 파트가 이미 대상 디스크 또는 볼륨에 있어도
MOVE PARTITION이 작동하도록 했습니다 #7434 (Vladimir Chebotarev) - 다중 디스크 구성의
ReplicatedMergeTree에서 뮤테이션 중 하드링크가 생성되지 않던 버그를 수정했습니다. #7558 (Vladimir Chebotarev) - 전체 part가 변경되지 않은 채 최적의 공간을 다른 디스크에서 찾는 경우, MergeTree의 mutation에서 발생하던 버그를 수정했습니다 #7602 (Vladimir Chebotarev)
- 디스크 구성에서
keep_free_space_ratio를 읽지 못하던 버그를 수정했습니다 #7645 (Vladimir Chebotarev) Tuple컬럼만 포함된 테이블이나 복잡한 경로를 가진 컬럼이 있는 테이블에서 발생하던 버그를 수정했습니다. 7541을 해결합니다. #7545 (alesapin)- max_memory_usage 제한에 Buffer 엔진의 메모리를 포함하지 않음 #7552 (Azat Khuzhin)
tuple()로 정렬된MergeTree테이블에서 final mark 사용 방식을 수정했습니다. 드물게 select 쿼리 수행 중Can't adjust last granule오류가 발생할 수 있었습니다. #7639 (Anton Popov)- Context가 필요한 액션(예: JSON용 함수)이 포함된 프레디케이트가 있는 뮤테이션의 버그를 수정했습니다. 이 버그로 인해 크래시나 예기치 않은 예외가 발생할 수 있었습니다. #7664 (alesapin)
data/및shadow/디렉터리에서 데이터베이스 및 테이블 이름의 이스케이프 처리 불일치 수정 #7575 (Alexander Burmak)- RIGHT|FULL JOIN에서 중복된 키를 지원합니다. 예:
ON t.x = u.x AND t.x = u.y. 이 경우 발생하던 비정상 종료를 수정했습니다. #7586 (Artem Zuikov) - RIGHT 또는 FULL JOIN에서 표현식으로 조인할 때 발생하는
Not found column <expression> in block문제를 수정했습니다. #7641 (Artem Zuikov) PrettySpace포맷의 무한 루프를 수정하려는 또 한 번의 시도 #7591 (Olga Khvostikova)- 모든 인수의 크기가 동일한
FixedString일 때concat함수의 버그를 수정했습니다. #7635 (alesapin) - S3, URL 및 HDFS 스토리지를 정의할 때 인수 1개만 사용하는 경우 발생하던 예외를 수정했습니다. #7618 (Vladimir Chebotarev)
- 쿼리가 포함된 뷰의 InterpreterSelectQuery 범위 수정 #7601 (Azat Khuzhin)
개선 사항
- ODBC-bridge에서
Nullable컬럼을 인식하고 NULL 값도 올바르게 처리합니다 #7402 (Vasily Nemkov) - 분산 전송을 위한 현재 Batch를 원자적으로 기록합니다 #7600 (Azat Khuzhin)
- 쿼리에서 컬럼 이름에 해당하는 테이블을 감지할 수 없으면 예외를 발생시킵니다 #7358 (Artem Zuikov)
MergeTreeSettings에merge_max_block_size설정을 추가했습니다 #7412 (Artem Zuikov)HAVING은 있지만GROUP BY는 없는 쿼리는 상수로GROUP BY한 것으로 간주합니다. 따라서 이제SELECT 1 HAVING 1도 결과를 반환합니다 #7496 (Amos Bird)- Python과 유사하게
(X,)를 Tuple로 파싱할 수 있도록 지원합니다 #7501, #7562 (Amos Bird) range함수의 동작을 Python과 거의 동일하게 맞췄습니다 #7518 (sundyli)system.settings테이블에constraints컬럼을 추가했습니다 #7553 (Vitaly Baranov)- TCP handler의 Null 포맷을 개선하여
clickhouse-client를 통한 성능 측정에select ignore(<expression>) from table format Null을 사용할 수 있습니다 #7606 (Amos Bird) CREATE TABLE ... AS (SELECT (1, 2))와 같은 쿼리를 올바르게 파싱합니다 #7542 (hcz)
성능 개선
- 짧은 문자열 키에 대한 집계 성능이 개선되었습니다. #6243 (Alexander Kuzmenkov, Amos Bird)
- 상수 프레디케이트를 접은 뒤 가능한 최적화를 얻기 위해 구문/표현식 분석을 한 차례 더 수행하도록 개선했습니다. #7497 (Amos Bird)
- 스토리지 메타 정보를 사용해 단순한
SELECT count() FROM table;를 계산하도록 개선했습니다. #7510 (Amos Bird, alexey-milovidov) - Aggregator
addBatch와 유사하게arrayReduce처리에 벡터화를 적용했습니다. #7608 (Amos Bird) Kafka소비 성능이 소폭 개선되었습니다. #7475 (Ivan)
빌드/테스트/패키징 개선
- AARCH64 CPU 아키텍처 대상 크로스 컴파일 지원을 추가하고 패키저 스크립트를 리팩터링했습니다. #7370 #7539 (Ivan)
- 패키지를 빌드할 때 darwin-x86_64 및 linux-aarch64 툴체인을 마운트된 Docker 볼륨에 압축 해제하도록 했습니다 #7534 (Ivan)
- 바이너리 패키저용 Docker 이미지를 업데이트했습니다 #7474 (Ivan)
- macOS Catalina에서 발생하던 컴파일 오류를 수정했습니다 #7585 (Ernest Poletaev)
- 쿼리 분석 로직 일부를 리팩터링하여 복잡한 클래스를 여러 개의 단순한 클래스로 분리했습니다. #7454 (Artem Zuikov)
- 서브모듈 없이도 빌드할 수 있도록 수정했습니다 #7295 (proller)
- CMake 파일의
add_globs를 개선했습니다 #7418 (Amos Bird) unwind대상의 하드코딩된 경로를 제거했습니다 #7460 (Konstantin Podshumok)- SSL 없이 mysql 포맷을 사용할 수 있도록 했습니다 #7524 (proller)
기타
- ClickHouse SQL 방언용 ANTLR4 문법이 추가되었습니다 #7595 #7596 (alexey-milovidov)
ClickHouse 릴리스 19.16
ClickHouse 릴리스 19.16.14.65, 2020-03-25
- 여러 인수(10개 초과)에 대한 삼항 논리 OP의 배치 계산에서 발생하던 버그를 수정했습니다. #8718 (Alexander Kazakov) 이 버그 수정은 Altinity의 특별 요청에 따라 버전 19.16으로 백포트되었습니다.
ClickHouse 릴리스 19.16.14.65, 2020-03-05
- 분산 서브쿼리가 이전 ClickHouse 버전과 호환되지 않던 문제를 수정했습니다. #7851 (tabplubix)
CREATE쿼리를 실행할 때 스토리지 엔진 인수의 상수 표현식을 접어 계산하도록 했습니다. 빈 데이터베이스 이름은 현재 데이터베이스 이름으로 대체합니다. #6508, #3492를 수정했습니다. 또한ClickHouseDictionarySource의 로컬 주소 검사도 수정했습니다. #9262 (tabplubix)- 이제
*MergeTree테이블 엔진 계열의 백그라운드 머지가 스토리지 정책의 볼륨 순서를 더 정확하게 유지합니다. #8549 (Vladimir Chebotarev) - 드물게 suffix를 읽은 후 커밋 전에 예외가 발생할 때
Kafka에서 데이터가 손실되는 문제를 방지합니다. #9378 수정. 관련: #7175 #9507 (filimonov) - 잘못된 매개변수로 생성된
Kafka테이블을 사용하거나 삭제하려고 할 때 서버가 종료되던 버그를 수정했습니다. #9494 수정. #9507을 반영했습니다. #9513 (filimonov) Kafka테이블 위의 서브쿼리에서MaterializedView를 사용할 수 있도록 했습니다. #8197 (filimonov)
새로운 기능
- materialized view가 있는 테이블에 대한 멱등 삽입 동작을 제어하는
deduplicate_blocks_in_dependent_materialized_views옵션을 추가했습니다. 이 새 기능은 Altinity의 특별 요청에 따라 버그 수정 릴리스에 추가되었습니다. #9070 (urykhy)
ClickHouse 릴리스 19.16.2.2, 2019-10-30
하위 호환되지 않는 변경 사항
- count/counIf에 대해 누락되어 있던 인자 수 검증을 추가합니다. #7095 #7298 (Vdimir)
- 기존
asterisk_left_columns_only설정을 제거합니다(기본적으로 비활성화되어 있었습니다). #7335 (Artem Zuikov) - 이제 Template 데이터 포맷의 포맷 문자열은 파일에서 지정합니다. #7118 (tavplubix)
새로운 기능
- UINT_MAX보다 큰 카디널리티를 계산하기 위해 uniqCombined64()를 도입했습니다. #7213, #7222 (Azat Khuzhin)
- 배열 컬럼에 대한 블룸 필터 인덱스를 지원합니다. #6984 (achimbab)
- 서버 구성의 해당
<macros>값을 담은 String을 반환하는 함수getMacro(name)를 추가했습니다. #7240 (alexey-milovidov) - HTTP 소스 기반 딕셔너리에
credentials와http-headers라는 두 가지 구성 옵션을 설정할 수 있도록 했습니다. #7092 (Guillaume Tassery) - 시작된 백그라운드 머지 수를 집계하는 새로운 ProfileEvent
Merge를 추가했습니다. #7093 (Mikhail Korotov) - 정규화된 완전 도메인 이름(FQDN)을 반환하는 fullHostName 함수를 추가했습니다. #7263 #7291 (sundyli)
- 배열을 “cut off”
조건에 따라 분할하는 함수
arraySplit및arrayReverseSplit를 추가했습니다. 이 함수들은 시계열 처리에 유용합니다. #7294 (hcz) - multiMatch 계열 함수에서 일치하는 모든 인덱스의 배열을 반환하는 새 함수를 추가했습니다. #7299 (Danila Kutenin)
- 다수의 작은 -Log
테이블 저장에 최적화된 새로운 데이터베이스 엔진
Lazy를 추가했습니다. #7171 (Nikita Vasilev) - 비트맵 컬럼용 집계 함수 groupBitmapAnd, -Or, -Xor를 추가했습니다. #7109 (Zhichang Yu)
- 집계할 값이 없을 때 null 또는 기본값을 반환하는 집계 함수 combinator인 -OrNull 및 -OrDefault를 추가했습니다. #7331 (hcz)
- 사용자 지정 이스케이프 및 구분자 규칙을 지원하는 CustomSeparated 데이터 포맷을 도입했습니다. #7118 (tavplubix)
- 외부 딕셔너리의 소스로 Redis를 지원합니다. #4361 #6962 (comunodi, Anton Popov)
버그 수정
WHERE IN (SELECT ...)절이 있고optimize_read_in_order를 사용할 때 잘못된 쿼리 결과가 반환되던 문제를 수정했습니다. #7371 (Anton Popov)- 프로젝트 외부 파일에 의존하는 MariaDB authentication 플러그인을 비활성화했습니다. #7140 (Yuriy Baranov)
now(),today(),yesterday(),randConstant()함수를 사용할 때 드물게 발생하던 예외Cannot convert column ... because it is constant but values of constants are different in source and result를 수정했습니다. #7156 (Nikolai Kochetov)- TCP keep alive timeout 대신 HTTP keep alive timeout을 사용하던 문제를 수정했습니다. #7351 (Vasily Nemkov)
- groupBitmapOr에서 발생하던 세그멘테이션 폴트를 수정했습니다(이슈 #7109). #7289 (Zhichang Yu)
- materialized view의 경우, 모든 데이터가 기록된 뒤 Kafka 커밋이 호출되도록 수정했습니다. #7175 (Ivan)
system.part_log테이블의duration_ms값이 잘못 기록되던 문제를 수정했습니다. 값이 실제보다 10배 차이 났습니다. #7172 (Vladimir Chebotarev)- LIVE VIEW 테이블의 크래시를 해결하는 긴급 수정과 함께 모든 LIVE VIEW 테스트를 다시 활성화했습니다. #7201 (vzakaznikov)
- MergeTree 파트의 최소/최대 인덱스에서 NULL 값이 올바르게 직렬화되도록 수정했습니다. #7234 (Alexander Kuzmenkov)
CREATE TABLE AS로 테이블을 생성할 때 가상 컬럼이 .sql 메타데이터에 포함되지 않도록 수정했습니다. #7183 (Ivan)ATTACH PART쿼리에서 발생하던 세그멘테이션 폴트를 수정했습니다. #7185 (alesapin)- 빈 IN 서브쿼리와 빈 INNER/RIGHT JOIN 최적화로 인해 일부 쿼리에서 잘못된 결과가 반환되던 문제를 수정했습니다. #7284 (Nikolai Kochetov)
- LIVE VIEW getHeader() 메서드에서 발생하던 AddressSanitizer 오류를 수정했습니다. #7271 (vzakaznikov)
개선 사항
queue_wait_max_ms대기가 발생할 경우 메시지를 추가했습니다. #7390 (Azat Khuzhin)s3_min_upload_part_size설정을 테이블 단위로 적용하도록 변경했습니다. #7059 (Vladimir Chebotarev)- StorageFactory에서 TTL을 확인하도록 했습니다. #7304 (sundyli)
- 부분 병합 조인에서 왼쪽 블록을 스쿼시하도록 최적화했습니다. #7122 (Artem Zuikov)
- 레플리카 간 불일치를 일으킬 수 있으므로 Replicated 테이블 엔진의 뮤테이션에서는 비결정적 함수를 허용하지 않도록 했습니다. #7247 (Alexander Kazakov)
- 예외 스택 트레이스를 문자열로 변환하는 동안 memory tracker를 비활성화했습니다. 이를 통해 서버에서
Memory limit exceeded유형의 오류 메시지가 손실되는 것을 방지할 수 있으며, 이 문제는 클라이언트에서Attempt to read after eof예외를 유발했습니다. #7264 (Nikolai Kochetov) - 기타 포맷 관련 개선을 적용했습니다. 다음 이슈를 해결합니다. #6033, #2633, #6611, #6742 #7215 (tavplubix)
- ClickHouse는 IN 연산자 오른쪽의 값이 왼쪽 타입으로 변환될 수 없으면 해당 값을 무시합니다. 이 동작이 복합 타입인 배열과 Tuple에도 올바르게 적용되도록 했습니다. #7283 (Alexander Kuzmenkov)
- ASOF JOIN에서 누락된 부등식 조건을 지원합니다. ON 구문에서 ASOF 컬럼에 대해 less-or-equal 변형과 strict greater 및 less 변형으로 조인할 수 있습니다. #7282 (Artem Zuikov)
- 부분 병합 조인을 최적화했습니다. #7070 (Artem Zuikov)
- uniqCombined 함수가 98K를 초과하는 메모리를 사용하지 않도록 했습니다. #7236, #7270 (Azat Khuzhin)
- PartialMergeJoin에서 오른쪽 조인 테이블의 파트를 디스크로 플러시하도록 했습니다(메모리가 부족한 경우). 필요할 때 데이터를 다시 로드합니다. #7186 (Artem Zuikov)
성능 개선
- 데이터 중복을 방지하여 const 인수가 있는 joinGet의 속도를 높였습니다. #7359 (Amos Bird)
- 서브쿼리가 비어 있으면 즉시 반환합니다. #7007 (小路)
- Values의 SQL 표현식 파싱을 최적화했습니다. #6781 (tavplubix)
빌드/테스트/패키징 개선
- Mac OS 대상 크로스 컴파일을 위해 일부 contrib를 비활성화했습니다. #7101 (Ivan)
- clickhouse_common_io에 누락되어 있던 PocoXML 링크를 추가했습니다. #7200 (Azat Khuzhin)
- clickhouse-test에서 테스트 필터 인수를 여러 개 허용합니다. #7226 (Alexander Kuzmenkov)
- ARM에서 musl 및 jemalloc을 활성화했습니다. #7300 (Amos Bird)
- 클라이언트에 추가 매개변수를 전달하기 위한
--client-option매개변수가clickhouse-test에 추가되었습니다. #7277 (Nikolai Kochetov) - rpm 패키지 업그레이드 시 기존 설정을 유지합니다. #7103 (filimonov)
- PVS가 감지한 오류를 수정했습니다. #7153 (Artem Zuikov)
- Darwin용 빌드 문제를 수정했습니다. #7149 (Ivan)
- glibc 2.29와의 호환성. #7142 (Amos Bird)
- dh_clean이 소스 파일로 사용될 수 있는 파일을 건드리지 않도록 했습니다. #7205 (Amos Bird)
- altinity rpm에서 업데이트할 때 충돌이 발생하지 않도록 개선했습니다. 해당 config 파일은 clickhouse-server-common에 별도로 패키징되어 있습니다. #7073 (filimonov)
- 재빌드 속도를 높이기 위해 일부 헤더 파일을 최적화했습니다. #7212, #7231 (Alexander Kuzmenkov)
- Date 및 DateTime용 성능 테스트를 추가했습니다. #7332 (Vasily Nemkov)
- 비결정적으로 동작하는 뮤테이션이 포함된 일부 테스트를 수정했습니다. #7132 (Alexander Kazakov)
- CI에 MemorySanitizer 빌드를 추가했습니다. #7066 (Alexander Kuzmenkov)
- MetricsTransmitter에서 초기화되지 않은 값이 사용되지 않도록 했습니다. #7158 (Azat Khuzhin)
- MemorySanitizer가 찾아낸 필드 관련 일부 문제를 수정했습니다. #7135, #7179 (Alexander Kuzmenkov), #7376 (Amos Bird)
- murmurhash32의 정의되지 않은 동작을 바로잡았습니다. #7388 (Amos Bird)
- StoragesInfoStream의 정의되지 않은 동작 문제를 수정했습니다. #7384 (tavplubix)
- 외부 데이터베이스 엔진(MySQL, ODBC, JDBC)의 상수 표현식 폴딩을 수정했습니다. 이전 버전에서는 여러 개의 상수 표현식에 대해 작동하지 않았고, Date, DateTime 및 UUID에 대해서는 아예 작동하지 않았습니다. 이 수정으로 #7245 #7252 (alexey-milovidov) 문제가 해결되었습니다.
- LIVE VIEW에서 no_users_thread 변수에 접근할 때 발생하는 ThreadSanitizer 데이터 레이스 오류를 수정했습니다. #7353 (vzakaznikov)
- libcommon의 malloc 심볼 제거 #7134, #7065 (Amos Bird)
- 모든 라이브러리를 비활성화하는 전역 플래그 ENABLE_LIBRARIES를 추가했습니다. #7063 (proller)
코드 정리
- 딕셔너리용 DDL에 대비해 구성 리포지토리를 일반화. #7155 (alesapin)
- 의미 분석이 없는 딕셔너리 DDL용 파서. #7209 (alesapin)
- ParserCreateQuery를 더 작고 개별적인 여러 파서로 분리. #7253 (alesapin)
- 외부 딕셔너리 관련 소규모 리팩터링 및 이름 변경. #7111 (alesapin)
- 역할 기반 접근 제어를 준비하기 위해 일부 코드를 리팩터링. #7235 (Vitaly Baranov)
- DatabaseOrdinary 코드 일부 개선. #7086 (Nikita Vasilev)
- 해시 테이블의
find()및emplace()메서드에서 반복자를 사용하지 않도록 변경. #7026 (Alexander Kuzmenkov) - 루트 매개변수가 비어 있지 않은 경우
getMultipleValuesFromConfig수정. #7374 (Mikhail Korotov) - 일부 중복 코드 제거 (TemporaryFile 및 TemporaryFileStream) #7166 (Artem Zuikov)
- 코드 가독성을 소폭 개선 (
MergeTreeData::getActiveContainingPart). #7361 (Vladimir Chebotarev) ThreadPool::schedule(...)가 예외를 발생시키면 로컬 객체를 사용하는 예약된 모든 작업이 끝날 때까지 대기하도록 변경.ThreadPool::schedule(...)의 이름을ThreadPool::scheduleOrThrowOnError(...)로 변경하고, 예외를 발생시킬 수 있다는 점이 분명해지도록 주석도 수정. #7350 (tavplubix)
ClickHouse 릴리스 19.15
ClickHouse 릴리스 19.15.4.10, 2019-10-31
버그 수정
- ODBC Bridge에서 SQL_TINYINT 및 SQL_BIGINT 처리를 추가하고, SQL_FLOAT 데이터 소스 타입 처리도 수정했습니다. #7491 (Denis Glazachev)
- MOVE PARTITION에서 일부 파트를 대상 디스크 또는 볼륨에 둘 수 있도록 했습니다. #7434 (Vladimir Chebotarev)
- ODBC bridge를 통해 널 허용 컬럼의 NULL 값을 처리할 때 발생하던 문제를 수정했습니다. #7402 (Vasily Nemkov)
- MATERIALIZED 컬럼이 있는 분산 테이블의 로컬이 아닌 노드에 INSERT할 때 발생하던 문제를 수정했습니다. #7377 (Azat Khuzhin)
- getMultipleValuesFromConfig 함수를 수정했습니다. #7374 (Mikhail Korotov)
- TCP keep alive timeout 대신 HTTP keep alive timeout을 사용하던 문제를 수정했습니다. #7351 (Vasily Nemkov)
- 예외 발생 시 모든 작업이 끝날 때까지 대기하도록 했습니다(드물게 발생하던 segfault 수정). #7350 (tavplubix)
- Kafka 테이블에 삽입할 때 MV로 전달하지 않도록 했습니다. #7265 (Ivan)
- 예외 스택에 대해서는 memory tracker를 비활성화했습니다. #7264 (Nikolai Kochetov)
- 외부 데이터베이스용 쿼리 변환 과정의 잘못된 코드를 수정했습니다. #7252 (alexey-milovidov)
- MetricsTransmitter에서 초기화되지 않은 값을 사용하지 않도록 했습니다. #7158 (Azat Khuzhin)
- 테스트용 매크로가 포함된 예시 설정을 추가했습니다 (alexey-milovidov)
ClickHouse 릴리스 19.15.3.6, 2019-10-09
버그 수정
- 해시 딕셔너리에서 bad_variant 문제를 수정했습니다. (alesapin)
- ATTACH PART 쿼리에서 발생하던 세그먼테이션 폴트 버그를 수정했습니다. (alesapin)
MergeTreeData의 시간 계산을 수정했습니다. (Vladimir Chebotarev)- 쓰기가 완료된 후 Kafka에 명시적으로 커밋하도록 수정했습니다. #7175 (Ivan)
- MergeTree 파트의 최소/최대 인덱스에서 NULL 값이 올바르게 직렬화되도록 수정했습니다. #7234 (Alexander Kuzmenkov)
ClickHouse 릴리스 19.15.2.2, 2019-10-01
새로운 기능
- 계층형 스토리지: MergeTree 엔진을 사용하는 테이블에서 여러 스토리지 볼륨을 사용할 수 있도록 지원합니다. 최신 데이터는 SSD에 저장하고, 오래된 데이터는 자동으로 HDD로 이동할 수 있습니다. (예시). #4918 (Igr) #6489 (alesapin)
INSERT SELECT쿼리에서 입력되는 데이터를 읽기 위한 테이블 함수input을 추가했습니다. #5450 (palasonic1) #6832 (Anton Popov)hashed레이아웃과 기능적으로 동일하지만 메모리를 더 효율적으로 사용하는sparse_hashed딕셔너리 레이아웃을 추가했습니다. 값 조회 속도가 느려지는 대신 메모리 사용량은 약 절반입니다. #6894 (Azat Khuzhin)- 딕셔너리에 대한 접근 권한을 가진 사용자 목록을 정의하는 기능을 구현했습니다. 현재 연결된 데이터베이스에서만 사용할 수 있습니다. #6907 (Guillaume Tassery)
SHOW쿼리에LIMIT옵션을 추가했습니다. #6944 (Philipp Malkovsky)range_start이상인 값들 중 가장 작은limit개의 값으로 이루어진 부분집합을 반환하는bitmapSubsetLimit(bitmap, range_start, limit)함수를 추가했습니다. #6957 (Zhichang Yu)bitmapMin및bitmapMax함수를 추가했습니다. #6970 (Zhichang Yu)- issue-6648 관련
repeat함수를 추가했습니다. #6999 (flynn)
실험적 기능
- 현재 파이프라인을 변경하지 않는 (메모리 내) Merge Join 변형을 구현했습니다. 결과는 머지 키를 기준으로 부분 정렬됩니다. 이 기능을 사용하려면
partial_merge_join = 1로 설정하십시오. Merge Join은 아직 개발 중입니다. #6940 (Artem Zuikov) S3엔진과 테이블 함수를 추가했습니다. 아직 개발 중이며 인증은 아직 지원하지 않습니다. #5596 (Vladimir Chebotarev)
개선 사항
- Kafka에서 읽은 모든 메시지가 원자적으로 삽입됩니다. 이로써 Kafka 엔진과 관련해 알려진 거의 모든 문제가 해결됩니다. #6950 (Ivan)
- 분산 쿼리의 장애 조치가 개선되었습니다. 복구 시간이 단축되었고, 이제 이 동작을 설정할 수 있으며
system.clusters에서도 확인할 수 있습니다. #6399 (Vasily Nemkov) IN절에서 Enum의 숫자 값을 직접 지원합니다. #6766 #6941 (dimarub2000)- URL 스토리지에서 리디렉션을 지원합니다(선택 사항이며 기본적으로 비활성화됨). #6914 (maqroll)
- 이전 버전의 클라이언트가 서버에 연결할 때 안내 메시지를 추가합니다. #6893 (Philipp Malkovsky)
- 분산 테이블에서 데이터를 전송할 때 적용되는 최대 백오프 대기 시간 제한을 제거합니다. #6895 (Azat Khuzhin)
- 누적 값을 포함한 profile events(카운터)를 Graphite로 전송하는 기능을 추가합니다. 이 기능은 서버
config.xml의<events_cumulative>에서 활성화할 수 있습니다. #6969 (Azat Khuzhin) - HTTP를 통해 Native 형식으로
LowCardinality(T)유형의 컬럼에 데이터를 삽입할 때,T유형을LowCardinality(T)로 자동 CAST하는 기능을 추가합니다. #6891 (Nikolai Kochetov) Float32,Float64에 대해reinterpretAsString를 사용하지 않고도 함수hex를 사용할 수 있는 기능을 추가합니다. #7024 (Mikhail Korotov)
빌드/테스트/패키징 개선
- 디버그 정보와 함께 clickhouse 바이너리에 gdb-index를 추가했습니다. 이렇게 하면
gdb시작 시간이 단축됩니다. #6947 (alesapin) pigz를 사용하는 패치된 dpkg-deb로 deb 패키징 속도를 높였습니다. #6960 (alesapin)- 모든 프로젝트 코드에서 libfuzzer 계측을 활성화하도록
enable_fuzzing = 1을 설정했습니다. #7042 (kyprizel) - CI에 split build 스모크 테스트를 추가했습니다. #7061 (alesapin)
- CI에 MemorySanitizer 빌드를 추가했습니다. #7066 (Alexander Kuzmenkov)
libsparsehash를sparsehash-c11로 대체했습니다. #6965 (Azat Khuzhin)
버그 수정
- 대규모 테이블의 복잡한 키에 대한 인덱스 분석 성능 저하를 수정했습니다. 이로써 #6924가 해결됩니다. #7075 (alexey-milovidov)
- 비어 있는 Kafka 토픽에서 SELECT할 때 segfault가 발생하던 논리 오류를 수정했습니다. #6909 (Ivan)
MySQLBlockInputStream.cpp에서 MySQL 연결이 너무 일찍 종료되던 문제를 수정했습니다. #6882 (Clément Rodriguez)- 매우 오래된 Linux 커널 지원을 복원했습니다(#6841 수정). #6853 (alexey-milovidov)
- 입력 스트림에 빈 블록이 있을 경우
insert select쿼리에서 발생할 수 있는 데이터 손실 문제를 수정했습니다. #6834 #6862 #6911 (Nikolai Kochetov) - 매개변수에 빈 배열이 있을 때 함수
АrrayEnumerateUniqRanked에서 발생하던 문제를 수정했습니다. #6928 (proller) - ARRAY JOIN과 전역 서브쿼리가 포함된 복잡한 쿼리 문제를 수정했습니다. #6934 (Ivan)
- 여러 JOIN이 있는 ORDER BY 및 GROUP BY에서 발생하는
Unknown identifier오류를 수정했습니다. #7022 (Artem Zuikov) LowCardinality인수가 있는 함수를 실행할 때 발생하던MSan경고를 수정했습니다. #7062 (Nikolai Kochetov)
하위 호환되지 않는 변경 사항
- 성능 개선을 위해 bitmap* 집계 함수 상태의 직렬화 포맷을 변경했습니다. 이전 버전에서 직렬화된 bitmap* 상태는 읽을 수 없습니다. #6908 (Zhichang Yu)
ClickHouse 릴리스 19.14
ClickHouse 릴리스 19.14.7.15, 2019-10-02
버그 수정
- 이번 릴리스에는 19.11.12.69의 모든 버그 수정 사항도 포함되어 있습니다.
- 19.14와 그 이전 버전 간의 분산 쿼리 호환성 문제가 수정되었습니다. 이 변경으로 #7068가 해결되었습니다. #7069 (alexey-milovidov)
ClickHouse 릴리스 19.14.6.12, 2019-09-19
버그 수정
- 매개변수에 빈 배열이 있을 때
АrrayEnumerateUniqRanked함수가 올바르게 동작하도록 수정했습니다. #6928 (proller) - 별칭이 있는
ARRAY JOIN및GLOBAL IN subquery를 사용하는 쿼리에서 서브쿼리 이름을 수정했습니다. 서브쿼리 별칭이 지정된 경우 이를 external table 이름으로 사용합니다. #6934 (Ivan)
빌드/테스트/패키징 개선
- 뮤테이션이 적용될 때까지 기다려야 하므로 간헐적으로 실패하던 테스트
00715_fetch_merged_or_mutated_part_zookeeper를 셸 스크립트로 다시 작성해 수정했습니다. #6977 (Alexander Kazakov) - 빈 배열 인수가 있는 함수
groupUniqArray에서 발생하던 UBSan 및 MemSan 오류를 수정했습니다. 이는 0 셀 값의 생성자가 호출되지 않은 상태에서 비어 있는PaddedPODArray가 해시 테이블의 0 셀에 배치되면서 발생했습니다. #6937 (Amos Bird)
ClickHouse 릴리스 19.14.3.3, 2019-09-10
새로운 기능
ORDER BY의WITH FILL수정자. (#5069의 후속) #6610 (Anton Popov)LIMIT의WITH TIES수정자. (#5069의 후속) #6610 (Anton Popov)- 따옴표 없는
NULL리터럴을 NULL로 parse합니다(설정format_csv_unquoted_null_literal_as_null=1인 경우). 이 필드의 데이터 타입이 널 허용이 아니면 null 필드를 기본값으로 초기화합니다(설정input_format_null_as_default=1인 경우). #5990 #6055 (tavplubix) - 테이블 함수
file및hdfs의 경로에 와일드카드를 사용할 수 있습니다. 경로에 와일드카드가 포함되면 해당 테이블은 읽기 전용이 됩니다. 사용 예시:select * from hdfs('hdfs://hdfs1:9000/some_dir/another_dir/*/file{0..9}{0..9}')및select * from file('some_dir/{some_file,another_file,yet_another}.tsv', 'TSV', 'value UInt32'). #6092 (Olga Khvostikova) - 지정된 시간 간격에 따라
system.events와system.metrics의 값을 저장하는 새로운system.metric_log테이블. #6363 #6467 (Nikita Mikhaylov) #6530 (alexey-milovidov) - ClickHouse 텍스트 로그를
system.text_log테이블에 기록할 수 있게 되었습니다. #6037 #6103 (Nikita Mikhaylov) #6164 (alexey-milovidov) - 스택 트레이스에 비공개 심볼을 표시합니다(이 작업은 ELF 파일의 심볼 테이블을 파싱하여 수행됩니다). 디버그 정보가 있으면 스택 트레이스에 파일명과 줄 번호 정보가 추가됩니다. 프로그램에 있는 심볼에 인덱스를 추가하여 심볼 이름 lookup 속도를 높였습니다. 내부 검사를 위한 새로운 SQL 함수
demangle과addressToLine을 추가했습니다. 일관성을 위해 함수symbolizeAddress의 이름을addressToSymbol로 변경했습니다.addressToSymbol함수는 성능상의 이유로 맹글링된 이름을 반환하므로demangle을 적용해야 합니다. 기본적으로 비활성화된 설정allow_introspection_functions를 추가했습니다. #6201 (alexey-milovidov) - 테이블 함수
values(이름은 대소문자를 구분하지 않습니다). #5984에서 제안된VALUES목록을 읽을 수 있도록 합니다. 예시:SELECT * FROM VALUES('a UInt64, s String', (1, 'one'), (2, 'two'), (3, 'three')). #6217. #6209 (dimarub2000) - 스토리지 설정을 수정할 수 있는 기능이 추가되었습니다. 구문:
ALTER TABLE <table> MODIFY SETTING <setting> = <value>. #6366 #6669 #6685 (alesapin) - 분리된 파트 삭제를 지원합니다. 구문:
ALTER TABLE <table_name> DROP DETACHED PART '<part_id>'. #6158 (tavplubix) - 테이블 제약 조건. 삽입 시 검사할 제약 조건을 테이블 정의에 추가할 수 있습니다. #5273 (Gleb Novikov) #6652 (alexey-milovidov)
- 캐스케이딩 materialized view 지원. #6324 (Amos Bird)
- 기본적으로 쿼리 프로파일러를 활성화해 모든 쿼리 실행 스레드를 초당 한 번 샘플링하도록 했습니다. #6283 (alexey-milovidov)
- 입력 형식
ORC지원. #6454 #6703 (akonyaev90) - 머신 러닝 애플리케이션에 유용한 새로운 함수
sigmoid와tanh2개가 추가되었습니다. #6254 (alexey-milovidov) - 주어진 토큰이 haystack에 포함되어 있는지 확인하는 함수
hasToken(haystack, token),hasTokenCaseInsensitive(haystack, token)입니다. 토큰은 영숫자가 아닌 두 ASCII 문자(또는 haystack의 경계) 사이에 있는 가장 긴 부분 문자열입니다. 토큰은 상수 문자열이어야 합니다. tokenbf_v1 인덱스 특수화에서 지원됩니다. #6596, #6662 (Vasily Nemkov) - 새 함수
neighbor(value, offset[, default_value])를 추가했습니다. 데이터 블록 내 컬럼에서 이전/다음 값에 접근할 수 있습니다. #5925 (Alex Krash) 6685365ab8c5b74f9650492c88a012596eb1b0c6 341e2e4587a18065c2da1ca888c73389f48ce36c Alexey Milovidov - 인증된 사용자의 로그인 계정을 반환하는 함수
currentUser()를 만들었습니다. MySQL과의 호환성을 위해 별칭user()도 추가했습니다. #6470 (Alex Krash) - #5885에서 제안된 새로운 집계 함수
quantilesExactInclusive및quantilesExactExclusive가 추가되었습니다. #6477 (dimarub2000) - 지정된 범위의 새 집합을 반환하는 함수
bitmapRange(bitmap, range_begin, range_end)(range_end는 포함되지 않음). #6314 (Zhichang Yu) - 지정된 영역을 덮는 geohash 박스의 precision 길이 문자열 배열을 생성하는 함수
geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision). #6127 (Vasily Nemkov) Kafka테이블에 대한 INSERT 쿼리 지원이 추가되었습니다. #6012 (Ivan)- Kafka 엔진에서
_partition및_timestamp가상 컬럼을 지원하도록 추가했습니다. #6400 (Ivan) - 정규식 기반 규칙을 사용해
query_log, 서버 로그, 프로세스 목록에서 민감한 데이터를 제거하는 기능이 추가되었습니다. #5710 (filimonov)
실험적 기능
- 입력 및 출력 데이터 포맷
Template입니다. 입력과 출력에 사용할 사용자 지정 포맷 문자열을 지정할 수 있습니다. #4354 #6727 (tavplubix) - 원래 #2898에서 제안되었고, #3925에서 준비된 뒤, #5541에서 다시 업데이트된
LIVE VIEW테이블 구현입니다. 자세한 설명은 #5541을 참조하십시오. #5541 (vzakaznikov) #6425 (Nikolai Kochetov) #6656 (vzakaznikov)LIVE VIEW기능은 다음 버전에서 제거될 수 있습니다.
버그 수정
- 이번 릴리스에는 19.13 및 19.11의 모든 버그 수정 사항도 포함되어 있습니다.
- 테이블에 스킵 인덱스가 있는 상태에서 수직 병합이 일어날 때 발생하던 segmentation fault를 수정했습니다. #6723 (alesapin)
- 복잡한 컬럼 기본값이 있는 경우의 컬럼별 TTL 처리를 수정했습니다. 이전에는
OPTIMIZE ... FINAL쿼리로 TTL 머지를 강제할 때 만료된 값이 사용자 지정 컬럼 기본값이 아니라 데이터 타입의 기본값으로 대체되었습니다. #6796 (Anton Popov) - 서버를 정상 재시작할 때 발생하는 Kafka 메시지 중복 문제를 수정했습니다. #6597 (Ivan)
- Kafka 메시지를 읽을 때 발생하던 무한 루프를 수정했습니다. subscription 시에는 consumer를 아예 일시 중지하거나 재개하지 않도록 했습니다. 그렇지 않으면 일부 상황에서 무기한 일시 중지될 수 있습니다. #6354 (Ivan)
bitmapContains함수에서Key expression contains comparison between inconvertible types예외를 해결했습니다. #6136 #6146 #6156 (dimarub2000)optimize_skip_unused_shards가 활성화된 상태에서 세그먼트 분할 키가 없을 때 발생하는 segfault를 수정했습니다. #6384 (Anton Popov)- 메모리 손상을 일으킬 수 있던 뮤테이션 관련 잘못된 코드를 수정했습니다. 동시에 수행되는
DROP TABLE과system.parts또는system.parts_columns에서의SELECT로 인해 발생할 수 있던 주소0x14c0읽기 시 segfault를 수정했습니다. 뮤테이션 쿼리 준비 과정에서 발생하던 race condition을 수정했습니다. Replicated 테이블에 대한OPTIMIZE와ALTER같은 동시 수정 작업으로 인해 발생하던 데드락을 수정했습니다. #6514 (alexey-milovidov) - MySQL 인터페이스에서 지나치게 상세한 로깅을 제거 #6389 (alexey-milovidov)
- 설정 파일에서 ‘true’와 ‘false’ 값을 불리언 설정으로 파싱하는 기능을 복원했습니다. #6278 (alesapin)
Nullable(Decimal128)을 대상으로 하는quantile및median함수의 충돌 문제를 수정했습니다. #6378 (Artem Zuikov)- 프라이머리 키에 대한
WHERE조건에 Float 타입으로의 변환이 포함된SELECT쿼리에서 불완전한 결과가 반환될 수 있던 문제를 수정했습니다. 이 문제는toFloat함수의 단조성 검사가 잘못된 데서 비롯되었습니다. #6248 #6374 (dimarub2000) - 뮤테이션의
max_expanded_ast_elements설정을 확인합니다.TRUNCATE TABLE후 뮤테이션을 정리합니다. #6205 (Winter Zhang) join_use_nulls를 사용할 때 키 컬럼의 JOIN 결과를 수정했습니다. 컬럼 기본값 대신 NULL을 사용하도록 했습니다. #6249 (Artem Zuikov)- 수직 병합 및 alter 사용 시 스킵 인덱스 문제 수정.
Bad size of marks file예외 수정. #6594 #6713 (alesapin) - 병합되거나 수정된 파트 중 하나가 비어 있는 경우(0행)
ALTER MODIFY COLUMN및 수직 병합에서 드물게 발생하던 크래시를 수정했습니다 #6746 #6780 (alesapin) AggregateFunctionFactory에서LowCardinality타입 변환 시 발생하던 버그를 수정했습니다. 이 수정으로 #6257 문제도 해결되었습니다. #6281 (Nikolai Kochetov)topK및topKWeighted집계 함수의 잘못된 동작과 발생할 수 있는 세그멘테이션 오류를 수정했습니다. #6404 (Anton Popov)getIdentifier함수 관련 안전하지 않은 코드를 수정했습니다. #6401 #6409 (alexey-milovidov)- MySQL 클라이언트에서 ClickHouse에 연결할 때 사용되는 MySQL wire 프로토콜의 버그를 수정했습니다. 원인은
PacketPayloadWriteBuffer의 힙 버퍼 오버플로였습니다. #6212 (Yuriy Baranov) bitmapSubsetInRange함수의 메모리 누수를 해결했습니다. #6819 (Zhichang Yu)- 세분화 수준이 변경된 후 mutation이 실행될 때 발생하는 드문 버그를 수정했습니다. #6816 (alesapin)
- 모든 필드가 있는 protobuf 메시지를 기본적으로 허용합니다. #6132 (Vitaly Baranov)
- 두 번째 인수로
NULL을 전달할 때nullIf함수에서 발생하던 버그를 수정했습니다. #6446 (Guillaume Tassery) - 문자열 필드가 있는 복합 키 cache 딕셔너리에서 메모리 할당/해제가 잘못되어 메모리 사용량이 무한히 증가하는(메모리 누수처럼 보이는) 드문 버그를 수정했습니다. 이 버그는 문자열 크기가 8부터 시작하는 2의 거듭제곱(8, 16, 32 등)일 때 재현되었습니다. #6447 (alesapin)
- 작은 시퀀스에서 예외
Cannot write after end of buffer를 발생시키던 Gorilla 인코딩 문제를 수정했습니다. #6398 #6444 (Vasily Nemkov) join_use_nulls가 활성화된 경우 조인에서 널 비허용 타입을 사용할 수 있도록 했습니다. #6705 (Artem Zuikov)clickhouse-client의 쿼리에서Poco::AbstractConfiguration치환 기능 비활성화. #6706 (alexey-milovidov)REPLACE PARTITION에서 발생하는 교착 상태를 방지합니다. #6677 (alexey-milovidov)- 상수 인수와 함께
arrayReduce를 사용하면 segfault가 발생할 수 있습니다. #6242 #6326 (alexey-milovidov) DROP PARTITION후 레플리카를 복원할 때 발생할 수 있는 일관성 없는 파트를 수정했습니다. #6522 #6523 (tavplubix)JSONExtractRaw함수에서 발생하던 중단 문제를 수정했습니다. #6195 #6198 (alexey-milovidov)- 적응형 세분화 수준에서 잘못된 스킵 인덱스 직렬화 및 집계 관련 버그를 수정했습니다. #6594. #6748 (alesapin)
- 2단계 집계에서
GROUP BY의WITH ROLLUP및WITH CUBE수정자 관련 문제를 수정했습니다. #6225 (Anton Popov) - 적응형 세분화 수준에서 보조 인덱스 마크를 쓰는 과정에서 발생하던 버그를 수정했습니다. #6126 (alesapin)
- 서버 시작 중 초기화 순서를 수정했습니다.
StorageMergeTree::background_task_handle는startup()에서 초기화되므로MergeTreeBlockOutputStream::write()가 초기화되기 전에 이를 사용하려고 시도할 수 있습니다. 초기화 여부만 확인하면 됩니다. #6080 (Ivan) - 오류로 끝난 이전 읽기 작업의 데이터 버퍼를 지웁니다. #6026 (Nikolay)
- Replicated*MergeTree 테이블의 새 레플리카를 생성할 때 적응형 세분화 수준이 활성화되는 버그를 수정했습니다. #6394 #6452 (alesapin)
- 초기화되지 않은
ThreadStatus구조체에 접근하는 과정에서 예외 처리 중libunwind에서 예외가 발생할 경우, server 시작 중 발생할 수 있던 충돌을 수정했습니다. #6456 (Nikita Mikhaylov) yandexConsistentHash함수의 크래시를 수정했습니다. 퍼즈 테스트로 발견되었습니다. #6304 #6305 (alexey-milovidov)- 서버에 과부하가 걸려 Global Thread 풀이 거의 가득 찼을 때 쿼리가 멈출 수 있던 문제를 수정했습니다. 분산 쿼리는 각 세그먼트에 대한 각 연결(connection)마다 스레드 1개를 할당하므로, 세그먼트 수가 많은 클러스터(수백 개)에서는 이 문제가 발생할 가능성이 더 높습니다. 예를 들어, 330개 세그먼트로 구성된 클러스터가 30개의 동시 분산 쿼리를 처리하는 경우 이 문제가 재현될 수 있습니다. 이 문제는 19.2부터 모든 버전에 영향을 미칩니다. #6301 (alexey-milovidov)
arrayEnumerateUniqRanked함수 로직을 수정했습니다. #6423 (alexey-milovidov)- 심볼 테이블 디코딩 시 발생하던 세그멘테이션 오류를 수정했습니다. #6603 (Amos Bird)
- NULL을 포함하지 않는 경우
LowCardinality(Nullable)를 널 비허용 컬럼으로 CAST할 때 발생하던 불필요한 예외를 수정했습니다(예:SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String)와 같은 쿼리). #6094 #6119 (Nikolai Kochetov) system.settings테이블 설명에 불필요하게 추가된 따옴표를 제거했습니다. #6696 #6699 (alexey-milovidov)- 복제된 테이블(Replicated Table)에서
TRUNCATE수행 시 발생할 수 있는 교착 상태를 방지합니다. #6695 (alexey-milovidov) - 정렬 키 순서대로 읽도록 수정했습니다. #6189 (Anton Popov)
enable_mixed_granularity_parts=1이 설정된 테이블의ALTER TABLE ... UPDATE쿼리 문제를 수정했습니다. #6543 (alesapin)- #4405에서 제기된 버그를 수정했습니다(19.4.0부터). 어떤 컬럼도 조회하지 않는 경우(
SELECT 1), MergeTree 테이블을 기반으로 한 분산 테이블에 대한 쿼리에서 이 문제가 재현됩니다. #6236 (alesapin) - 부호 있는 형과 부호 없는 형 사이의 정수 나눗셈에서 발생하던 오버플로우를 수정했습니다. 동작은 C 또는 C++ 언어의 동작(정수 승격 규칙)과 정확히 동일했지만, 예상과 다를 수 있습니다. 큰 부호 있는 수를 큰 부호 없는 수로 나누거나 그 반대로 나누는 경우에는 여전히 오버플로우가 발생할 수 있다는 점에 유의하십시오(다만 이런 경우는 비교적 드뭅니다). 이 문제는 모든 서버 버전에 존재했습니다. #6214 #6233 (alexey-milovidov)
max_execution_speed또는max_execution_speed_bytes가 설정된 경우 스로틀링 시 최대 대기 시간을 제한했습니다.Estimated query execution time (inf seconds) is too long와 같은 잘못된 오류를 수정했습니다. #5547 #6232 (alexey-milovidov)MaterializedView에서MATERIALIZED컬럼과 alias 사용과 관련된 문제를 수정했습니다. #448 #3484 #3450 #2878 #2285 #3796 (Amos Bird) #6316 (alexey-milovidov)- processor로 구현되지 않은 입력 스트림에서의
FormatFactory동작을 수정했습니다. #6495 (Nikolai Kochetov) - 오탈자를 수정했습니다. #6631 (Alex Ryndin)
- 오류 메시지의 오타를 수정했습니다( is -> are ). #6839 (Denis Zhuravlev)
- 유형에 쉼표가 포함된 경우 문자열에서 컬럼 목록을 파싱하는 중 발생하던 오류를 수정했습니다(이 문제는
File,URL,HDFS스토리지와 관련이 있었습니다) #6217. #6209 (dimarub2000)
보안 수정
- 이번 릴리스에는 19.13 및 19.11의 모든 보안 관련 버그 수정도 포함되어 있습니다.
- 악의적으로 구성된 쿼리로 인해 SQL parser에서 스택 오버플로우가 발생해 server가 충돌할 수 있던 문제를 수정했습니다. 또한 서브쿼리를 포함하는 Merge 및 분산 테이블, materialized view, 그리고 행 수준 보안 조건에서 스택 오버플로우가 발생할 수 있던 문제도 수정했습니다. #6433 (alexey-milovidov)
개선 사항
AND/OR에 대한 3값 논리의 올바른 구현. #6048 (Alexander Kazakov)- 이제 TTL 정보가 없거나 오래된 TTL 정보가 있는 기존 파트에서는
OPTIMIZE ... FINAL쿼리 후 만료된 값과 행이 제거됩니다. 예를 들어ALTER ... MODIFY TTL쿼리 후가 이에 해당합니다. TTL이 적용된 머지의 할당을 비활성화/활성화하고, 모든 머지에서 만료된 값을 필터링할 수 있도록SYSTEM STOP/START TTL MERGES쿼리가 추가되었습니다. #6274 (Anton Popov) - 클라이언트에서
CLICKHOUSE_HISTORY_FILE환경 변수를 사용해 ClickHouse 이력 파일의 경로를 변경할 수 있습니다. #6840 (filimonov) InterpreterSelectQuery에서dry_run플래그를 제거. … #6375 (Nikolai Kochetov)ON절에서ASOF JOIN을 지원합니다. #6211 (Artem Zuikov)- 뮤테이션 및 복제에서 스킵 인덱스 지원이 개선되었습니다.
MATERIALIZE/CLEAR INDEX ... IN PARTITION쿼리를 지원합니다.UPDATE x = x는 컬럼x를 사용하는 모든 인덱스를 재계산합니다. #5053 (Nikita Vasilev) allow_experimental_live_view설정과 관계없이(예: server 시작 시) 라이브 view를ATTACH할 수 있도록 했습니다. #6754 (alexey-milovidov)- 쿼리 프로파일러로 수집된 스택 트레이스에는 쿼리 프로파일러 자체에서 생성한 스택 프레임을 포함하지 않습니다. #6250 (alexey-milovidov)
- 이제 테이블 함수
values,file,url,hdfs가 ALIAS 컬럼을 지원합니다. #6255 (alexey-milovidov) config.d파일에 config 파일과 동일한 루트 요소가 없으면 예외를 발생시킵니다. #6123 (dimarub2000)no space left on device예외 메시지에 추가 정보를 출력합니다. #6182, #6252 #6352 (tavplubix)- 읽기 쿼리에서 조회 대상에 포함할
Distributed테이블의 세그먼트를 결정할 때(optimize_skip_unused_shards= 1), 이제 ClickHouse는 SELECT 문의prewhere절과where절의 조건을 모두 확인합니다. #6521 (Alexander Kazakov) - AVX2는 지원하지 않지만 SSE 4.2 및 PCLMUL 명령어 집합을 지원하는 머신에서
SIMDJSON을 활성화했습니다. #6285 #6320 (alexey-milovidov) - ClickHouse는 추가 튜닝 없이도
O_DIRECT를 지원하지 않는 파일 시스템(예: ZFS, BtrFS)에서도 작동할 수 있습니다. #4449 #6730 (alexey-milovidov) - FINAL 서브쿼리에 대한 프레디케이트 푸시다운을 지원합니다. #6120 (TCeason) #6162 (alexey-milovidov)
JOIN ON키 추출 개선 #6131 (Artem Zuikov)SIMDJSON을 업데이트했습니다. #6285. #6306 (alexey-milovidov)SELECT count()쿼리에서 가장 작은 컬럼이 선택되도록 최적화했습니다. #6344 (Amos Bird)windowFunnel()에strict매개변수가 추가되었습니다.strict를 설정하면windowFunnel()은 고유한 값에만 조건을 적용합니다. #6548 (achimbab)mysqlxx::Pool인터페이스의 안전성이 향상되었습니다. #6150 (avasiliev)--help옵션으로 실행할 때 옵션 줄 너비가 이제 터미널 크기에 맞게 조정됩니다. #6590 (dimarub2000)- 키를 사용하지 않는 집계에 대해 “read in order” 최적화를 비활성화합니다. #6599 (Anton Popov)
INCORRECT_DATA및TYPE_MISMATCH오류 코드에 대한 HTTP 상태 코드가 기본500 Internal Server Error에서400 Bad Request로 변경되었습니다. #6271 (Alexander Rodin)ExpressionAction의 Join 객체를AnalyzedJoin으로 옮겼습니다. 이제ExpressionAnalyzer와ExpressionAction은 더 이상Join클래스를 직접 알지 못합니다. 해당 로직은AnalyzedJoin인터페이스(iface) 뒤로 숨겨졌습니다. #6801 (Artem Zuikov)- 세그먼트 중 하나가 localhost이고 쿼리가 네트워크 연결을 통해 전송될 때 발생할 수 있는 분산 쿼리 데드락을 수정했습니다. #6759 (alexey-milovidov)
- 잠재적인 교착 상태를 방지하기 위해 여러 테이블에 대한
RENAME의 동작 의미를 변경했습니다. #6757. #6756 (alexey-milovidov) - 메모리에 전체 패킷 페이로드를 로드하지 않도록 MySQL 호환 서버를 다시 작성했습니다. 연결당 메모리 사용량을 약
2 * DBMS_DEFAULT_BUFFER_SIZE(읽기/쓰기 버퍼)로 줄였습니다. #5811 (Yuriy Baranov) - 쿼리의 의미를 전혀 알 필요가 없는 파서에서 AST alias 해석 로직을 분리했습니다. #6108 (Artem Zuikov)
NamesAndTypesList파싱을 좀 더 안전하게 개선했습니다. #6408. #6410 (alexey-milovidov)clickhouse-copier: 파티션 존재 여부를 확인하는 쿼리에서partition_keyalias와 함께 설정의where_condition을 사용할 수 있도록 했습니다(이전에는 데이터 읽기 쿼리에서만 사용되었습니다). #6577 (proller)throwIf에 선택적 메시지 인수가 추가되었습니다. (#5772) #6329 (Vdimir)- 삽입 데이터 전송 중 발생한 서버 예외가 이제 클라이언트에서도 처리됩니다. #5891 #6711 (dimarub2000)
- 분산 테이블이 원격 서버로 전송할 대상으로 선택한 파일 시스템 내 파일의 총수를 보여주는 메트릭
DistributedFilesToInsert를 추가했습니다. 이 수는 모든 세그먼트에 걸쳐 합산됩니다. #6600 (alexey-milovidov) ExpressionAction/ExpressionAnalyzer에서AnalyzedJoin으로 조인 준비 로직 대부분을 옮겼습니다. #6785 (Artem Zuikov)- TSan 경고 ‘lock-order-inversion’ 문제를 수정했습니다. #6740 (Vasily Nemkov)
- Linux capability가 부족할 때의 정보 메시지를 개선했습니다. 치명적 오류는 “fatal” 레벨로 로깅해
system.text_log에서 더 쉽게 찾을 수 있도록 했습니다. #6441 (alexey-milovidov) - 메모리 사용량을 제한하기 위해
GROUP BY,ORDER BY수행 중 임시 데이터를 디스크에 기록하도록 활성화한 경우, 사용 가능한 디스크 여유 공간을 확인하지 않았습니다. 이 수정으로 새로운 설정min_free_disk_space가 추가되었으며, 디스크 여유 공간이 임계값보다 작으면 쿼리를 중단하고ErrorCodes::NOT_ENOUGH_SPACE를 발생시킵니다. #6678 (Weiqing Xu) #6691 (alexey-milovidov) - thread 기준의 재귀 rwlock을 제거했습니다. thread는 쿼리 간에 재사용되므로 이는 의미가 없습니다.
SELECT쿼리는 한 thread에서 잠금을 획득하고, 다른 thread에서 그 잠금을 유지한 채 첫 번째 thread에서 종료될 수 있습니다. 동시에 첫 번째 thread는DROP쿼리에 의해 재사용될 수 있습니다. 그 결과 실제와 다른 “독점 잠금을 재귀적으로 획득하려고 시도했습니다” 메시지가 발생할 수 있습니다. #6771 (alexey-milovidov) ExpressionAnalyzer.appendJoin()를 분리했습니다.ExpressionAnalyzer에MergeJoin을 위한 공간을 마련했습니다. #6524 (Artem Zuikov)- MySQL 호환 서버에
mysql_native_password인증 플러그인을 추가했습니다. #6194 (Yuriy Baranov) clock_gettime호출 수를 줄였으며,Allocator의 debug/release 간 ABI 호환성을 수정했습니다(사소한 문제). #6197 (alexey-milovidov)collectUsedColumns를ExpressionAnalyzer에서SyntaxAnalyzer로 옮겼습니다. 이제SyntaxAnalyzer가required_source_columns를 직접 만듭니다. #6416 (Artem Zuikov)FROM절에 둘 이상의 테이블이 있는 경우(즉, JOIN이 있는 쿼리) 서브쿼리와 테이블 함수에 별칭을 필수로 하도록 하는 설정joined_subquery_requires_alias를 추가했습니다. #6733 (Artem Zuikov)GetAggregatesVisitor클래스를ExpressionAnalyzer에서 분리했습니다. #6458 (Artem Zuikov)system.query_log:type컬럼의 데이터 타입이Enum으로 변경되었습니다. #6265 (Nikita Mikhaylov)sha256_password인증 플러그인을 정적으로 링크하도록 변경했습니다. #6512 (Yuriy Baranov)- 설정
compile가 작동하는 데 불필요한 추가 의존성이 없도록 했습니다. 이전 버전에서는cannot open crti.o,unable to find library -lc등의 오류가 발생할 수 있었습니다. #6309 (alexey-milovidov) - 악의적인 레플리카에서 들어올 수 있는 입력에 대한 검증을 추가로 강화했습니다. #6303 (alexey-milovidov)
- 이제
clickhouse-obfuscator파일은clickhouse-client패키지에서 제공됩니다. 이전 버전에서는clickhouse obfuscator(공백 포함)라는 이름으로 제공되었습니다. #5816 #6609 (dimarub2000) - 서로 다른 순서로 최소 2개의 테이블을 읽는 최소 2개의 쿼리가 있고, 또 다른 쿼리가 그 테이블 중 하나에 대해 DDL 작업을 수행할 때 발생하던 데드락을 해결했습니다. 또 다른 매우 드문 데드락도 해결했습니다. #6764 (alexey-milovidov)
- 디버깅 편의성을 높이기 위해
system.processes및system.query_log에os_thread_ids컬럼을 추가했습니다. #6763 (alexey-milovidov) sha256_password를 기본 인증 플러그인으로 사용할 때 발생하는 PHP mysqlnd 확장 버그의 우회 방법입니다(#6031 참조). #6113 (Yuriy Baranov)- NULL 허용 여부가 변경된 컬럼과 관련된 불필요한 부분을 제거했습니다. #6693 (Artem Zuikov)
queue_max_wait_ms의 기본값을 0으로 설정했습니다. 현재 값(5초)은 적절하지 않기 때문입니다. 이 설정이 실제로 유용한 경우는 드뭅니다. 의미를 명확히 구분하기 위해replace_running_query_max_wait_ms,kafka_max_wait_ms,connection_pool_max_wait_ms설정을 추가했습니다. #6692 (alexey-milovidov)ExpressionAnalyzer에서SelectQueryExpressionAnalyzer를 추출했습니다. 기존ExpressionAnalyzer는 SELECT가 아닌 쿼리에 계속 사용합니다. #6499 (Artem Zuikov)- 중복되는 입력 및 출력 형식을 제거했습니다. #6239 (Nikolai Kochetov)
- 연결 시 사용자가
poll_interval및idle_connection_timeout설정을 재정의할 수 있도록 했습니다. #6230 (alexey-milovidov) MergeTree에는 이제 파트의 부분 프루닝을 방지하는 추가 옵션ttl_only_drop_parts가 있습니다(기본적으로 비활성화됨). 이 옵션을 사용하면 파트의 모든 행이 만료되었을 때 해당 파트 전체가 삭제됩니다. #6191 (Sergi Vladykin)- Set 인덱스 함수에 대한 유형 검사를 수행합니다. 함수에 잘못된 유형이 전달되면 예외를 발생시킵니다. 이 수정으로 UBSan을 사용한 퍼즈 테스트 문제가 해결되었습니다. #6511 (Nikita Vasilev)
성능 개선
MergeTree테이블에서expressions가 sorting key와 동일한 prefix를 가질 경우,ORDER BY expressions절이 있는 쿼리를 최적화합니다. 이 최적화는optimize_read_in_order설정으로 제어됩니다. #6054 #6629 (Anton Popov)- 파트 로딩 및 제거 중에 여러 thread를 사용할 수 있도록 했습니다. #6372 #6074 #6438 (alexey-milovidov)
- 집계 함수 상태를 일괄 업데이트하는 batch 변형을 구현했습니다. 성능 향상에 도움이 될 수 있습니다. #6435 (alexey-milovidov)
exp,log,sigmoid,tanh함수에FastOps라이브러리를 사용합니다. FastOps는 Michael Parakhin(Yandex CTO)이 만든 고속 벡터 수학 라이브러리입니다.exp및log함수의 성능이 6배 이상 향상되었습니다.Float32인수에 대한exp및log함수는Float32를 반환합니다(이전 버전에서는 항상Float64를 반환했습니다). 이제exp(nan)은inf를 반환할 수 있습니다.exp및log함수의 결과는 실제 값에 가장 가까운 기계 표현 가능 숫자가 아닐 수 있습니다. #6254 (alexey-milovidov) 또한 fastops가 동작하도록 Danila Kutenin의 변형을 사용했습니다. #6317 (alexey-milovidov)UInt8/16에 대한 연속 key 최적화를 비활성화했습니다. #6298 #6701 (akuzm)ParsedJson::Iterator에서 동적 할당을 제거해simdjson라이브러리의 성능을 개선했습니다. #6479 (Vitaly Baranov)mmap()으로 메모리를 할당할 때 페이지를 미리 폴트 처리합니다. #6667 (akuzm)Decimal비교의 성능 문제를 수정했습니다. #6380 (Artem Zuikov)
빌드/테스트/패키징 개선
- 성능상 우위를 확보했기 때문에 Compiler(런타임 템플릿 인스턴스화)를 제거했습니다. #6646 (alexey-milovidov)
- gcc-9에서 성능이 저하되는 현상을 더 독립적으로 보여주기 위해 성능 테스트를 추가했습니다. #6302 (alexey-milovidov)
- 멀티스레드 버전의
numbers인 테이블 함수numbers_mt를 추가했습니다. 해시 함수 관련 성능 테스트를 업데이트했습니다. #6554 (Nikolai Kochetov) clickhouse-benchmark비교 모드 #6220 #6343 (dimarub2000)- 스택 트레이스를 가능한 한 출력하도록 개선했습니다. 또한 실행 중인 스레드의 스택 트레이스를 출력하는 디버깅 시그널로
SIGPROF를 추가했습니다. #6529 (alexey-milovidov) - 각 함수를 개별 파일로 분리, 10편. #6321 (alexey-milovidov)
- 중복된 const
TABLE_IS_READ_ONLY를 제거했습니다. #6566 (filimonov) StringHashMap포맷 변경 PR #5417. #6700 (akuzm)ExpressionAnalyzer에서 join 생성용 서브쿼리를 개선했습니다. #6824 (Artem Zuikov)- PVS Studio에서 발견된 중복 조건을 제거했습니다. #6775 (akuzm)
ReverseIndex의 해시 테이블 인터페이스를 분리했습니다. #6672 (akuzm)- 설정 리팩터링. #6689 (alesapin)
set인덱스 함수에 대한 설명을 추가했습니다. #6319 (Nikita Vasilev)- Linux용 디버그 버전에서 OOM 점수를 높였습니다. #6152 (akuzm)
- 이제 디버그 빌드에서도 HDFS HA가 작동합니다. #6650 (Weiqing Xu)
transform_query_for_external_database테스트를 추가했습니다. #6388 (alexey-milovidov)- Kafka 테이블용 여러 materialized view에 대한 테스트를 추가했습니다. #6509 (Ivan)
- 빌드 체계를 개선했습니다. #6500 (Ivan)
- 루트가 아닌 사용자로 실행될 때
test_external_dictionaries통합이 올바르게 동작하도록 수정했습니다. #6507 (Nikolai Kochetov) - 기록된 패킷의 총 크기가
DBMS_DEFAULT_BUFFER_SIZE를 초과하면 이 버그가 재현됩니다. #6204 (Yuriy Baranov) RENAME테이블 레이스 컨디션에 대한 테스트를 추가했습니다 #6752 (alexey-milovidov)KILL QUERY에서 설정 관련 데이터 레이스를 방지합니다. #6753 (alexey-milovidov)- cache 딕셔너리의 오류 처리를 위한 통합 테스트 추가. #6755 (Vitaly Baranov)
- Mac OS에서는 ELF 객체 파일 파싱을 비활성화했습니다. 그렇게 하는 것은 의미가 없기 때문입니다. #6578 (alexey-milovidov)
- changelog 생성기 개선 시도. #6327 (alexey-milovidov)
- GCC에
-Wshadow옵션을 추가했습니다. #6325 (kreuzerkrieg) mimalloc지원과 관련된 더 이상 사용되지 않는 코드를 제거했습니다. #6715 (alexey-milovidov)zlib-ng는 x86 capability를 판별하고 이 정보를 전역 변수에 저장합니다. 이는 defalteInit 호출에서 수행되며, 이 호출은 서로 다른 스레드에서 동시에 이루어질 수 있습니다. 다중 스레드 쓰기를 방지하기 위해 이 작업을 라이브러리 시작 시점에 수행합니다. #6141 (akuzm)- #5192에서 수정된 join 관련 버그에 대한 회귀 테스트입니다. #6147 (Bakhtiyor Ruziev)
- MSan 보고를 해결했습니다. #6144 (alexey-milovidov)
- 간헐적으로 실패하는 TTL 테스트를 수정했습니다. #6782 (Anton Popov)
MergeTreeDataPart::is_frozen필드의 잘못 감지된 데이터 레이스를 수정했습니다. #6583 (alexey-milovidov)- 퍼즈 테스트의 timeout 문제를 수정했습니다. 이전 버전에서는 쿼리
SELECT * FROM numbers_mt(gccMurmurHash(''))에서 실제로는 멈추지 않았는데도 잘못 멈춘 것으로 감지했습니다. #6582 (alexey-milovidov) - 컬럼에 대한
static_cast에 디버그 검사를 추가했습니다. #6581 (alexey-milovidov) - 공식 RPM 패키지의 Oracle Linux 지원. #6356 #6585 (alexey-milovidov)
- json perftests를
once에서loop타입으로 변경했습니다. #6536 (Nikolai Kochetov) odbc-bridge.cpp에서main()을 정의하므로clickhouse-lib에 포함해서는 안 됩니다. #6538 (Orivej Desh)- 오른쪽 table의 key에 NULL이 있을 때
FULL|RIGHT JOIN에서 충돌이 발생하는 문제에 대한 테스트입니다. #6362 (Artem Zuikov) - 혹시 모를 상황에 대비해 별칭 확장 한도에 대한 테스트를 추가했습니다. #6442 (alexey-milovidov)
- 적절한 곳에서
boost::filesystem을std::filesystem으로 변경했습니다. #6253 #6385 (alexey-milovidov) - 웹사이트에 RPM 패키지를 추가했습니다. #6251 (alexey-milovidov)
IN절에서 발생하는Unknown identifier예외 수정에 대한 테스트를 추가했습니다. #6708 (Artem Zuikov)shared_ptr_helper를 이해하기 어렵다는 의견이 있어 이를 단순화했습니다. #6675 (alexey-milovidov)- 수정된 Gorilla 및 DoubleDelta 코덱에 대한 성능 테스트를 추가했습니다. #6179 (Vasily Nemkov)
- 통합 테스트
test_dictionaries를 4개의 별도 테스트로 나눴습니다. #6776 (Vitaly Baranov) PipelineExecutor의 PVS-Studio 경고를 해결했습니다. #6777 (Nikolai Kochetov)- ASan에서
library딕셔너리 소스를 사용할 수 있도록 지원합니다. #6482 (alexey-milovidov) - PR 목록으로 changelog를 생성하는 옵션이 추가되었습니다. #6350 (alexey-milovidov)
- 읽는 동안
TinyLog스토리지를 잠급니다. #6226 (akuzm) - CI에서 깨진 심볼릭 링크를 검사합니다. #6634 (alexey-milovidov)
- 디버그 빌드에서는 시간이 오래 걸릴 수 있으므로 “stack overflow” 테스트의 시간 제한을 늘렸습니다. #6637 (alexey-milovidov)
- 이중 공백 검사 기능이 추가되었습니다. #6643 (alexey-milovidov)
- sanitizers로 빌드할 때
new/delete메모리 추적을 수정했습니다. 추적이 완전하지는 않습니다. 테스트에서 메모리 제한 예외를 방지하는 용도에 그칩니다. #6450 (Artem Zuikov) - 링크 시 정의되지 않은 심볼 검사 기능을 다시 활성화했습니다. #6453 (Ivan)
hyperscan을 매일 다시 빌드하지 않도록 했습니다. #6307 (alexey-milovidov)ProtobufWriter에서 보고된 UBSan 문제를 수정했습니다. #6163 (alexey-milovidov)- 호환되지 않으므로 sanitizers와 함께 쿼리 프로파일러를 사용하지 못하게 했습니다. #6769 (alexey-milovidov)
- 타이머로 인한 실패 후 딕셔너리를 다시 로드하는 테스트를 추가했습니다. #6114 (Vitaly Baranov)
PipelineExecutor::prepareProcessor인수 유형의 불일치를 수정했습니다. #6494 (Nikolai Kochetov)- 유효하지 않은 URI에 대한 테스트를 추가했습니다. #6493 (alexey-milovidov)
CAST함수에 검사를 더 추가했습니다. 이를 통해 퍼지 테스트에서 발생하는 segmentation fault에 대해 더 많은 정보를 얻을 수 있습니다. #6346 (Nikolai Kochetov)- 로컬에서 이미지를 빌드하는
docker/builder컨테이너에gcc-9지원이 추가되었습니다. #6333 (Gleb Novikov) LowCardinality(String)을 사용하는 기본 키 테스트. #5044 #6219 (dimarub2000)- 느린 스택 트레이스 출력으로 영향을 받던 테스트를 수정했습니다. #6315 (alexey-milovidov)
- #6029에서 수정된
groupUniqArray크래시에 대한 테스트 케이스를 추가했습니다. #4402 #6129 (akuzm) - 인덱스 뮤테이션 관련 테스트를 수정했습니다. #6645 (Nikita Vasilev)
- 성능 테스트에서 실행하지 않은 쿼리에 대해서는 쿼리 로그를 읽지 않도록 했습니다. #6427 (akuzm)
- 이제 의심스러운 낮은 카디널리티 타입 관련 설정과 무관하게 모든 낮은 카디널리티 타입으로 materialized view를 생성할 수 있습니다. #6428 (Olga Khvostikova)
send_logs_level설정 관련 테스트를 업데이트했습니다. #6207 (Nikolai Kochetov)- gcc-8.2에서 빌드되도록 수정했습니다. #6196 (Max Akhmedov)
- 내부 libc++를 사용하는 빌드를 수정했습니다. #6724 (Ivan)
rdkafka라이브러리 관련 공유 빌드 문제 수정 #6101 (Ivan)- Mac OS 빌드 관련 수정 사항(불완전). #6390 (alexey-milovidov) #6429 (alex-zaitsev)
- “splitted” 빌드를 수정했습니다. #6618 (alexey-milovidov)
- 기타 빌드 관련 수정 사항: #6186 (Amos Bird) #6486 #6348 (vxider) #6744 (Ivan) #6016 #6421 #6491 (proller)
하위 호환되지 않는 변경 사항
- 거의 사용되지 않는 테이블 함수
catBoostPool와 스토리지CatBoostPool를 제거했습니다. 이 테이블 함수를 사용한 경우feedback@clickhouse.com으로 이메일을 보내주십시오. CatBoost 통합은 계속 유지되며 앞으로도 지원됩니다. #6279 (alexey-milovidov) - 기본적으로
ANY RIGHT JOIN과ANY FULL JOIN을 비활성화했습니다. 이를 활성화하려면any_join_distinct_right_table_keys설정을 사용하십시오. #5126 #6351 (Artem Zuikov)
ClickHouse 릴리스 19.13
ClickHouse 릴리스 19.13.6.51, 2019-10-02
버그 수정
- 이번 릴리스에는 19.11.12.69의 모든 버그 수정 사항도 포함되어 있습니다.
ClickHouse 릴리스 19.13.5.44, 2019-09-20
버그 수정
- 이번 릴리스에는 19.14.6.12의 모든 버그 수정도 포함되어 있습니다.
- ZooKeeper에 접근할 수 없는 상태에서 복제된 테이블(Replicated Table)에 대해
DROP쿼리를 실행할 때 테이블 상태가 일관되지 않을 수 있는 문제를 수정했습니다. #6045 #6413 (Nikita Mikhaylov) - StorageMerge의 데이터 레이스 문제를 수정했습니다. #6717 (alexey-milovidov)
- 소켓에서
recv가 무한히 발생하게 만드는 쿼리 프로파일러의 버그를 수정했습니다. #6386 (alesapin) - 불리언 값에 대해
JSONExtractRaw함수를 실행할 때 CPU 사용량이 과도하게 증가하던 문제를 수정했습니다. #6208 (Vitaly Baranov) - materialized view로 푸시할 때 발생하던 회귀 문제를 수정했습니다. #6415 (Ivan)
- 테이블 함수
url에 공격자가 요청에 임의의 HTTP 헤더를 주입할 수 있게 하는 취약점이 있었습니다. 이 문제는 Nikita Tikhomirov이 발견했습니다. #6466 (alexey-milovidov) - Set 인덱스에서 불필요한
AST검사 문제를 수정했습니다. #6510 #6651 (Nikita Vasilev) - 쿼리에 포함된
AggregateFunction값의 파싱 문제를 수정했습니다. #6575 #6773 (Zhichang Yu) trim함수 계열의 잘못된 동작을 수정했습니다. #6647 (alexey-milovidov)
ClickHouse 릴리스 19.13.4.32, 2019-09-10
버그 수정
- 이번 릴리스에는 19.11.9.52 및 19.11.10.54의 모든 보안 관련 버그 수정도 포함되어 있습니다.
system.parts테이블과ALTER쿼리에서 발생하던 데이터 레이스를 수정했습니다. #6245 #6513 (alexey-milovidov)- 빈 분산 테이블을
sample및prewhere와 함께 읽을 때 스트림의 헤더가 일치하지 않던 문제를 수정했습니다. #6167 (Lixiang Qian) #6823 (Nikolai Kochetov) - 튜플이 포함된 서브쿼리와 함께
IN절을 사용할 때 발생하던 충돌을 수정했습니다. #6125 #6550 (tavplubix) GLOBAL JOIN ON절에서 컬럼 이름이 동일한 경우의 문제를 수정했습니다. #6181 (Artem Zuikov)- 지원되지 않는 타입을
Decimal로 캐스팅할 때 발생하던 충돌을 수정했습니다. 대신 예외를 발생시킵니다. #6297 (Artem Zuikov) extractAll()함수에서 발생하던 충돌을 수정했습니다. #6644 (Artem Zuikov)MySQL,ODBC,JDBC테이블 함수에 대한 쿼리 변환이 이제 여러AND표현식이 포함된SELECT WHERE쿼리에서도 올바르게 동작합니다. #6381 #6676 (dimarub2000)- MySQL 8 통합을 위한 사전 선언 검사 기능을 추가했습니다. #6569 (Rafael David Tinoco)
보안 수정
- 압축 해제 단계에서 코덱 관련 취약점 2개를 수정했습니다(악의적인 사용자가 버퍼 오버플로우를 유발하는 압축 데이터를 조작할 수 있습니다). #6670 (Artem Zuikov)
ClickHouse 릴리스 19.13.3.26, 2019-08-22
버그 수정
enable_mixed_granularity_parts=1인 테이블에서ALTER TABLE ... UPDATE쿼리 문제를 수정했습니다. #6543 (alesapin)- 튜플을 포함한 서브쿼리와 함께 IN 절을 사용할 때 발생하는 NPE를 수정했습니다. #6125 #6550 (tavplubix)
- 오래된 레플리카가 다시 활성화될 경우
DROP PARTITION으로 제거된 데이터 파트가 여전히 남아 있을 수 있는 문제를 수정했습니다. #6522 #6523 (tavplubix) - CSV 파싱 문제를 수정했습니다. #6426 #6559 (tavplubix)
- system.parts 테이블과 ALTER 쿼리에서 발생하던 데이터 레이스를 수정했습니다. 이로써 #6245가 해결됩니다. #6513 (alexey-milovidov)
- 메모리 손상을 일으킬 수 있던 뮤테이션의 잘못된 코드를 수정했습니다.
system.parts또는system.parts_columns에서DROP TABLE과SELECT가 동시에 실행될 때 발생할 수 있던 주소0x14c0읽기 관련 segfault를 수정했습니다. 뮤테이션 쿼리 준비 과정의 race condition을 수정했습니다. Replicated 테이블에 대한OPTIMIZE와 ALTER 같은 동시 수정 작업으로 인해 발생하던 데드락을 수정했습니다. #6514 (alexey-milovidov) - 스키핑 인덱스가 있는 테이블에서
ALTER DELETE쿼리 후 발생할 수 있는 데이터 손실 문제를 수정했습니다. #6224 #6282 (Nikita Vasilev)
보안 수정
- 공격자가 ZooKeeper에 대한 쓰기 권한을 가지고 있고 ClickHouse가 실행되는 네트워크에서 접근 가능한 사용자 지정 서버를 실행할 수 있다면, ClickHouse 레플리카로 동작하면서 ZooKeeper에 자신을 등록하는 악성 서버를 별도로 만들 수 있습니다. 다른 레플리카가 이 악성 레플리카에서 데이터 파트를 가져오는 과정에서 clickhouse-server가 파일 시스템의 임의 경로에 데이터를 쓰도록 강제할 수 있습니다. Yandex 정보 보안 팀의 Eldar Zaitov가 발견했습니다. #6247 (alexey-milovidov)
ClickHouse 릴리스 19.13.2.19, 2019-08-14
새로운 기능
- 쿼리 수준의 샘플링 프로파일러. 예시. #4247 (laplab) #6124 (alexey-milovidov) #6250 #6283 #6386
*보다 더 정교한 방식으로 동작하는COLUMNS('regexp')표현식을 사용해 컬럼 목록을 지정할 수 있습니다. #5951 (mfridental), (alexey-milovidov)- 이제
CREATE TABLE AS table_function()을 사용할 수 있습니다. #6057 (dimarub2000) stochasticLinearRegression()및stochasticLogisticRegression()집계 함수는 튜닝이 거의 필요 없으면서도 좋은 성능을 보이므로, 기본적으로 확률적 경사 하강법에 Adam 옵티마이저를 사용합니다. #6000 (Quid37)- 사용자 지정 주차 번호를 처리하는 함수를 추가했습니다. #5212 (Andy Yang)
- 이제
RENAME쿼리가 모든 스토리지에서 작동합니다. #5953 (Ivan) - 이제 클라이언트는 server settings에 지정된 로그 수준과 관계없이
send_logs_level을 설정하여, 원하는 수준의 logs를 서버로부터 받을 수 있습니다. #5964 (Nikita Mikhaylov)
하위 호환되지 않는 변경 사항
input_format_defaults_for_omitted_fields설정이 기본값으로 활성화되어 있습니다. 분산 테이블에서 삽입 작업을 수행하려면 클러스터 전체에서 이 설정값이 동일해야 합니다(롤링 업데이트 전에 설정해야 합니다). 이 설정을 활성화하면JSONEachRow및CSV*포맷에서 누락된 필드에 대해 복잡한 기본 표현식을 계산할 수 있습니다. 이는 원래 기대되는 동작이지만, 무시해도 될 정도의 미미한 성능 차이가 발생할 수 있습니다. #6043 (Artem Zuikov), #5625 (akuzm)
실험적 기능
- 새로운 쿼리 처리 파이프라인입니다. 활성화하려면
experimental_use_processors=1옵션을 사용하세요. 사용에 따른 문제는 사용자 책임입니다. #4914 (Nikolai Kochetov)
버그 수정
- 이 버전에서 Kafka 통합 관련 문제가 수정되었습니다.
- 큰
DoubleDelta값에서Int64의DoubleDelta인코딩 문제를 수정하고,Int32무작위 데이터에 대한DoubleDelta인코딩을 개선했습니다. #5998 (Vasily Nemkov) merge_tree_uniform_read_distribution설정이 0일 때max_rows_to_read가 과대 추정되던 문제를 수정했습니다. #6019 (alexey-milovidov)
개선
config.d파일에 config 파일과 동일한 루트 요소가 없으면 예외를 발생시킵니다 #6123 (dimarub2000)
성능 개선
빌드/테스트/패키징 개선
- 성능 테스트에서 메모리 사용량을 보고하도록 개선했습니다. #5899 (akuzm)
- 외부
libcxx사용 시 발생하는 빌드 문제를 수정했습니다. #6010 (Ivan) rdkafka라이브러리 사용 시 발생하는 공유 빌드 문제를 수정했습니다. #6101 (Ivan)
ClickHouse 19.11 릴리스
ClickHouse 릴리스 19.11.13.74, 2019-11-01
버그 수정
- 병합되었거나 변경된 파트 중 하나가 비어 있을 때(행 0개)
ALTER MODIFY COLUMN및 수직 병합에서 드물게 발생하던 크래시를 수정했습니다. #6780 (alesapin) SIMDJSON를 수동으로 업데이트했습니다. 이로써 잘못된 JSON 진단 메시지로 stderr 파일이 과도하게 쌓일 수 있는 문제를 해결했습니다. #7548 (Alexander Kazakov)- 뮤테이션에서
mrk파일 확장자와 관련된 버그를 수정했습니다 (alesapin)
ClickHouse 릴리스 19.11.12.69, 2019-10-02
버그 수정
- 대규모 테이블의 복합 키에 대한 인덱스 분석 성능이 저하되던 문제를 수정했습니다. 이 수정으로 #6924가 해결됩니다. #7075 (alexey-milovidov)
- 분산 엔진(Distributed engine)을 사용하는 테이블에서 데이터를 전송하는 중 드물게 발생하던 SIGSEGV를 방지했습니다 (
Failed to send batch: file with index XXXXX is absent). #7032 (Azat Khuzhin) - 여러 조인에서 발생하던
Unknown identifier문제를 수정했습니다. 이 수정으로 #5254가 해결됩니다. #7022 (Artem Zuikov)
ClickHouse 릴리스 19.11.11.57, 2019-09-13
- Kafka의 빈 토픽을 조회할 때 segfault를 일으키던 논리 오류를 수정했습니다. #6902 #6909 (Ivan)
- 매개변수에 빈 배열이 있을 때 함수
АrrayEnumerateUniqRanked에서 발생하던 문제를 수정했습니다. #6928 (proller)
ClickHouse 릴리스 19.11.10.54, 2019-09-10
버그 수정
- Kafka 메시지의 오프셋을 수동으로 저장해 모든 파티션에 대해 한꺼번에 커밋할 수 있도록 했습니다. 이로써 「하나의 consumer - 여러 파티션」 시나리오에서 발생할 수 있는 중복 문제를 해결했습니다. #6872 (Ivan)
ClickHouse 릴리스 19.11.9.52, 2019-09-6
- cache 딕셔너리의 오류 처리를 개선했습니다. #6737 (Vitaly Baranov)
arrayEnumerateUniqRanked함수의 버그를 수정했습니다. #6779 (proller)- JSON에서
Tuple을 추출할 때JSONExtract함수의 문제를 수정했습니다. #6718 (Vitaly Baranov) - 스키핑 인덱스가 있는 테이블에서
ALTER DELETE쿼리 후 데이터가 손실될 수 있는 문제를 수정했습니다. #6224 #6282 (Nikita Vasilev) - 성능 테스트를 수정했습니다. #6392 (alexey-milovidov)
- Parquet: 불리언 컬럼 읽기 문제를 수정했습니다. #6579 (alexey-milovidov)
- 상수 인수에 대한
nullIf함수의 잘못된 동작을 수정했습니다. #6518 (Guillaume Tassery) #6580 (alexey-milovidov) - 서버를 정상적으로 재시작할 때 Kafka 메시지가 중복되는 문제를 수정했습니다. #6597 (Ivan)
- 긴
ALTER UPDATE또는ALTER DELETE로 인해 일반 머지 작업이 실행되지 못할 수 있는 문제를 수정했습니다. 또한 사용 가능한 여유 스레드가 충분하지 않으면 뮤테이션이 실행되지 않도록 했습니다. #6502 #6617 (tavplubix) - 서버 설정 파일에서 “timezone” 처리와 관련된 오류를 수정했습니다. #6709 (alexey-milovidov)
- Kafka 테스트를 수정했습니다. #6805 (Ivan)
보안 수정
- 공격자가 ZooKeeper에 대한 쓰기 권한을 가지고 있고 ClickHouse가 실행되는 네트워크에서 접근 가능한 사용자 지정 서버를 실행할 수 있다면, ClickHouse 레플리카처럼 동작하는 맞춤형 악성 서버를 만들어 ZooKeeper에 등록할 수 있습니다. 이후 다른 레플리카가 악성 레플리카로부터 데이터 파트를 fetch할 때, clickhouse-server가 파일 시스템의 임의의 경로에 데이터를 쓰도록 강제할 수 있습니다. 이 문제는 Yandex 정보 보안 팀의 Eldar Zaitov가 발견했습니다. #6247 (alexey-milovidov)
ClickHouse 릴리스 19.11.8.46, 2019-08-22
버그 수정
enable_mixed_granularity_parts=1이 설정된 테이블에서ALTER TABLE ... UPDATE쿼리 관련 문제를 수정했습니다. #6543 (alesapin)- 튜플이 포함된 서브쿼리와 함께 IN 절을 사용할 때 발생하는 NPE를 수정했습니다. #6125 #6550 (tavplubix)
- 오래된 레플리카가 다시 활성화된 뒤에도 DROP PARTITION으로 삭제된 데이터 파트가 남아 있을 수 있던 문제를 수정했습니다. #6522 #6523 (tavplubix)
- CSV 파싱 문제를 수정했습니다. #6426 #6559 (tavplubix)
- system.parts 테이블과 ALTER 쿼리에서 발생하던 데이터 레이스를 수정했습니다. 이로써 #6245를 해결했습니다. #6513 (alexey-milovidov)
- 메모리 손상으로 이어질 수 있는 뮤테이션의 잘못된 코드를 수정했습니다.
system.parts또는system.parts_columns에서DROP TABLE과SELECT가 동시에 수행될 때 발생할 수 있던 주소0x14c0읽기 관련 segfault를 수정했습니다. 뮤테이션 쿼리 준비 과정의 race condition을 수정했습니다. Replicated 테이블에 대한OPTIMIZE와 ALTER 같은 동시 변경 작업으로 인해 발생하던 데드락을 수정했습니다. #6514 (alexey-milovidov)
ClickHouse 릴리스 19.11.7.40, 2019-08-14
버그 수정
- 이 버전에서 Kafka 통합 관련 문제가 수정되었습니다.
- 상수 인수에
arrayReduce를 사용할 때 발생하는 segfault를 수정했습니다. #6326 (alexey-milovidov) toFloat()의 단조성 문제를 수정했습니다. #6374 (dimarub2000)optimize_skip_unused_shards가 활성화된 상태에서 세그먼트 분할 키가 없을 때 발생하는 segfault를 수정했습니다. #6384 (CurtizJ)arrayEnumerateUniqRanked함수 로직을 수정했습니다. #6423 (alexey-milovidov)- MySQL 핸들러에서 과도하게 상세한 로깅을 제거했습니다. #6389 (alexey-milovidov)
topK및topKWeighted집계 함수의 잘못된 동작과 발생 가능한 segfault를 수정했습니다. #6404 (CurtizJ)system.columns테이블에 가상 컬럼이 노출되지 않도록 수정했습니다. 이는 하위 호환성을 위해 필요합니다. #6406 (alexey-milovidov)- 복합 키 cache 딕셔너리의 문자열 필드에 대한 메모리 할당 버그를 수정했습니다. #6447 (alesapin)
Replicated*MergeTree테이블의 새 레플리카를 생성할 때 적응형 세분화 수준을 활성화하는 과정에서 발생하는 버그를 수정했습니다. #6452 (alesapin)- Kafka 메시지를 읽을 때 발생하는 무한 루프를 수정했습니다. #6354 (abyss7)
- 조작된 쿼리로 인해 SQL parser에서 스택 오버플로우가 발생해 서버가 비정상 종료될 수 있는 문제와
Merge및Distributed테이블에서 스택 오버플로우가 발생할 수 있는 가능성을 수정했습니다. #6433 (alexey-milovidov) - 짧은 시퀀스에서 발생하는 Gorilla 인코딩 오류를 수정했습니다. #6444 (Enmk)
개선
- 연결 시
poll_interval및idle_connection_timeout설정을 재정의할 수 있도록 했습니다. #6230 (alexey-milovidov)
ClickHouse 릴리스 19.11.5.28, 2019-08-05
버그 수정
- 서버에 과부하가 걸렸을 때 쿼리가 멈추는 문제가 발생할 수 있던 가능성을 수정했습니다. #6301 (alexey-milovidov)
- yandexConsistentHash 함수의 FPE를 수정했습니다. 이 변경으로 #6304 문제가 해결됩니다. #6126 (alexey-milovidov)
AggregateFunctionFactory에서LowCardinality타입 변환 관련 버그를 수정했습니다. 이 변경으로 #6257 문제가 해결됩니다. #6281 (Nikolai Kochetov)- 설정 파일에서
true및false문자열로bool설정을 파싱하는 문제를 수정했습니다. #6278 (alesapin) WHERE의 일부가PREWHERE로 이동할 때MergeTree테이블 기반Distributed테이블에 대한 쿼리에서 호환되지 않는 stream header와 관련된 드문 버그를 수정했습니다. #6236 (alesapin)- 부호 있는 타입에서 부호 없는 타입으로 정수 나눗셈을 수행할 때 발생하던 오버플로우를 수정했습니다. 이 변경으로 #6214 문제가 해결됩니다. #6233 (alexey-milovidov)
하위 호환되지 않는 변경 사항
Kafka는 여전히 작동하지 않습니다.
ClickHouse 릴리스 19.11.4.24, 2019-08-01
버그 수정
- 적응형 세분화 수준에서 보조 인덱스 마크를 기록할 때 발생하던 버그를 수정했습니다. #6126 (alesapin)
- 2단계 집계에서
GROUP BY의WITH ROLLUP및WITH CUBE수정자 관련 문제를 수정했습니다. #6225 (Anton Popov) JSONExtractRaw함수에서 발생하던 멈춤 현상을 수정했습니다. #6195 #6198 (alexey-milovidov)- ExternalLoader::reloadOutdated()에서 발생하던 segfault를 수정했습니다. #6082 (Vitaly Baranov)
- 서버가 리스닝 소켓을 닫은 뒤에도 종료되지 않고 남아 있는 쿼리를 계속 처리할 수 있던 문제를 수정했습니다. 이 경우 clickhouse-server 프로세스가 2개 실행될 수 있습니다. 때때로 서버가 남아 있는 쿼리에
bad_function_call오류를 반환할 수도 있습니다. #6231 (alexey-milovidov) - ODBC, MySQL, ClickHouse 및 HTTP를 통해 외부 딕셔너리를 초기 적재할 때 update field에 대한 불필요하고 잘못된 조건을 수정했습니다. 이 수정으로 #6069 #6083 문제가 해결됩니다. (alexey-milovidov)
LowCardinality(Nullable)를 널 허용이 아닌 컬럼으로 CAST할 때, Null이 포함되어 있지 않으면 발생하던 무관한 예외를 수정했습니다(예:SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String)같은 쿼리). #6094 #6119 (Nikolai Kochetov)- 매우 드물게 “uniq” 집계 함수의 결과가 비결정적으로 나오는 문제를 수정했습니다. 이 버그는 모든 ClickHouse 버전에 존재했습니다. #6058 (alexey-milovidov)
IPv6CIDRToRange함수에 CIDR 값을 약간 너무 크게 설정했을 때 발생하던 segfault를 수정했습니다. #6068 (Guillaume Tassery)- 서버가 서로 다른 많은 Context에서 예외를 많이 throw할 때 발생하던 소규모 메모리 누수를 수정했습니다. #6144 (alexey-milovidov)
- consumer가 subscription 전에 일시 중지된 뒤 이후 다시 재개되지 않던 문제를 수정했습니다. #6075 (Ivan) 이 버전에서는 Kafka가 정상적으로 동작하지 않는다는 점에 유의하십시오.
- 오류로 끝난 이전 읽기 작업의 Kafka 데이터 버퍼를 비우도록 수정했습니다. #6026 (Nikolay) 이 버전에서는 Kafka가 정상적으로 동작하지 않는다는 점에 유의하십시오.
StorageMergeTree::background_task_handle는startup()에서 초기화되므로,MergeTreeBlockOutputStream::write()가 초기화 전에 이를 사용하려고 할 수 있습니다. 초기화 여부만 확인하도록 수정했습니다. #6080 (Ivan)
빌드/테스트/패키징 개선
- 공식
rpm패키지를 추가했습니다. #5740 (proller) (alesapin) packager스크립트로.rpm및.tgz패키지를 빌드할 수 있는 기능을 추가했습니다. #5769 (alesapin)- “Arcadia” 빌드 시스템을 수정했습니다. #6223 (proller)
하위 호환되지 않는 변경 사항
- 이 버전에서는
Kafka를 사용할 수 없습니다.
ClickHouse 릴리스 19.11.3.11, 2019-07-18
새로운 기능
- prepared statement 지원을 추가했습니다. #5331 (Alexander) #5630 (alexey-milovidov)
DoubleDelta및Gorilla컬럼 코덱을 추가했습니다. #5600 (Vasily Nemkov)- OS가 동적 스케줄링 우선순위를 조정할 때 사용하는 쿼리 처리 스레드의 “nice” 값을 제어할 수 있는
os_thread_priority설정을 추가했습니다. 이 기능이 동작하려면CAP_SYS_NICEcapability가 필요합니다. 이는 #5858을 구현한 것입니다. #5909 (alexey-milovidov) - Kafka 엔진에
_topic,_offset,_key컬럼을 구현했습니다. #5382 (Ivan) 이 버전에서는 Kafka가 정상적으로 동작하지 않는다는 점에 유의하십시오. - 집계 함수 combinator
-Resample을 추가했습니다. #5590 (hcz) - 윈도우 크기 제한 유무와 관계없이 이동 합계/평균을 계산하는 집계 함수
groupArrayMovingSum(win_size)(x)및groupArrayMovingAvg(win_size)(x)를 추가했습니다. #5595 (inv2004) arrayFlatten<->flatten동의어를 추가했습니다. #5764 (hcz)- Uber의 H3 함수
geoToH3를 통합했습니다. #4724 (Remen Ivan) #5805 (alexey-milovidov)
버그 수정
- 비동기 업데이트를 지원하는 DNS 캐시를 구현했습니다. 별도의 스레드가 모든 호스트를 확인하고 일정 주기마다 DNS 캐시를 갱신합니다(설정
dns_cache_update_period). 호스트의 IP가 자주 변경되는 경우에 도움이 됩니다. #5857 (Anton Popov) - 값 크기가 32비트보다 작은 컬럼에 영향을 미치는
Delta코덱의 segfault를 수정했습니다. 이 버그로 인해 임의의 메모리 손상이 발생했습니다. #5786 (alesapin) - 비물리적 컬럼이 있는 block에 대한 TTL 머지에서 발생하는 segfault를 수정했습니다. #5819 (Anton Popov)
LowCardinality컬럼이 있는 파트를 검사할 때 드물게 발생하던 버그를 수정했습니다. 이전에는LowCardinality컬럼이 있는 파트에서는checkDataPart가 항상 실패했습니다. #5832 (alesapin)- 서버 스레드 풀이 가득 찼을 때 연결이 응답 없이 대기 상태로 남는 문제를 방지합니다. 이는 연결 타임아웃이 긴 환경에서
remote테이블 함수의 연결이나 레플리카가 없는 세그먼트에 대한 연결에 특히 중요합니다. 이 변경으로 #5878, #5881이 수정되었습니다 (alexey-milovidov) evalMLModel함수에서 상수 인수를 지원합니다. 이로써 #5817이 수정되었습니다 #5820 (alexey-milovidov)- ClickHouse가 기본 시간대(time zone)를
UTC가 아니라UCT로 인식하던 문제를 수정했습니다. 이 변경으로 #5804가 해결됩니다. #5828 (alexey-milovidov) visitParamExtractRaw의 버퍼(buffer) 언더플로를 수정했습니다. 이 변경으로 #5901 #5902가 해결됩니다 (alexey-milovidov)- 이제 분산
DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER쿼리가 리더 레플리카에서 직접 실행됩니다. #5757 (alesapin) ColumnNullable이 있는ColumnConst에서coalesce를 수정하고 관련 변경 사항을 반영했습니다. #5755 (Artem Zuikov)- 이전에 멈춘 상태였더라도
commit()후에도 새 메시지를 계속 읽도록ReadBufferFromKafkaConsumer를 수정했습니다 #5852 (Ivan) - 오른쪽 테이블에서
Nullable키로 조인할 때의FULL및RIGHTJOIN 결과를 수정했습니다. #5859 (Artem Zuikov) - 저우선순위 쿼리가 무한정 대기하는 문제를 해결할 수 있는 수정입니다. #5842 (alexey-milovidov)
- 일부 쿼리가
SYSTEM FLUSH LOGS쿼리 후 query_log에 나타나지 않을 수 있던 경쟁 상태(race condition)를 수정했습니다. #5456 #5685 (Anton Popov) - 이미 제거된 copier 객체를 사용하려는 watch 때문에 ClusterCopier에서 발생하던
heap-use-after-freeASan 경고를 수정했습니다. #5871 (Nikolai Kochetov) - 일부
IColumn::deserializeAndInsertFromArena구현에서 반환하던 잘못된StringRef포인터를 수정했습니다. 이 버그는 단위 테스트에만 영향을 미쳤습니다. #5973 (Nikolai Kochetov) - array join의 소스 컬럼과 중간 컬럼이 동일한 이름의 컬럼을 가리는 문제를 방지합니다. #5941 (Artem Zuikov)
- MySQL 스타일 식별자 인용을 사용하는 MySQL 엔진의 삽입 및 select 쿼리를 수정했습니다. #5704 (Winter Zhang)
- 이제
CHECK TABLE쿼리를 MergeTree 엔진 계열에서 사용할 수 있습니다. 각 파트(더 단순한 엔진에서는 파일)에 대해 검사 상태와, 해당하는 경우 메시지를 반환합니다. 또한 손상된 파트를 fetch하는 과정에서 발생하던 버그를 수정했습니다. #5865 (alesapin) - SPLIT_SHARED_LIBRARIES 런타임 관련 수정 #5793 (Danila Kutenin)
/etc/localtime이../usr/share/zoneinfo/Asia/Istanbul과 같은 상대 심볼릭 링크인 경우 time zone 초기화가 올바르게 되지 않던 문제를 수정했습니다 #5922 (alexey-milovidov)- clickhouse-copier: 종료 시 use-after-free 문제 수정 #5752 (proller)
simdjson을 업데이트했습니다. 0바이트가 포함된 일부 잘못된 JSON이 정상적으로 parse되는 문제를 수정했습니다. #5938 (alexey-milovidov)- SystemLogs 종료 문제 수정 #5802 (Anton Popov)
- invalidate_query의 조건이 딕셔너리에 의존하는 경우 발생하던 멈춤 현상을 수정했습니다. #6011 (Vitaly Baranov)
개선
- 클러스터 구성에서 확인할 수 없는 주소를 허용합니다. 이러한 주소는 사용할 수 없는 것으로 간주되며, 연결을 시도할 때마다 확인을 다시 시도합니다. 이는 특히 Kubernetes에서 유용합니다. 이 변경으로 #5714 #5924가 수정되었습니다 (alexey-milovidov)
- 유휴 상태인 TCP 연결을 종료합니다(기본 timeout은 1시간). 이는 각 server에 여러 개의 분산 테이블이 있는 대규모 클러스터에서 특히 중요합니다. 각 server가 다른 모든 server에 대한 연결 풀을 유지할 수 있으므로, 쿼리 동시성 피크가 지난 후에는 연결이 유휴 상태로 남아 있을 수 있기 때문입니다. 이 변경으로 #5879, #5880이 수정되었습니다 (alexey-milovidov)
topK함수의 품질이 향상되었습니다. 새 요소의 가중치가 더 크면 마지막 요소를 제거하도록 SavingSpace set의 동작이 변경되었습니다. #5833 #5850 (Guillaume Tassery)- 이제 도메인에서 작동하는 URL 함수가 스킴이 없는 불완전한 URL도 처리할 수 있습니다 #5725 (alesapin)
system.parts_columns테이블에 체크섬이 추가되었습니다. #5874 (Nikita Mikhaylov)Enum데이터 타입을Enum8또는Enum16의 별칭으로 추가했습니다. #5886 (dimarub2000)T64코덱을 위한 전체 비트 전치 변형입니다.zstd와 함께 사용할 때 압축률을 높일 수 있습니다. #5742 (Artem Zuikov)- 이제
startsWith함수 조건에서도 기본 키(primary key)를 사용할 수 있습니다. 이 변경으로 #5310 및 #5882가 수정되었고, #5919에 반영되었습니다 (dimarub2000) - 빈 데이터베이스 이름을 허용해 교차 복제 클러스터 토폴로지에서도
clickhouse-copier를 사용할 수 있도록 했습니다. #5745 (nvartolomei) tzdata가 없는 시스템(예: 최소한의 Docker 컨테이너)에서는 기본 시간대로UTC를 사용합니다. 이 패치 이전에는Could not determine local time zone오류 메시지가 출력되었고, 서버 또는 클라이언트가 시작되지 않았습니다. #5827 (alexey-milovidov)- 하위 호환성을 위해 함수
quantileTiming의 부동소수점 인수 지원을 다시 복원했습니다. #5911 (alexey-milovidov) - 오류 메시지에 컬럼이 누락된 테이블(table)이 무엇인지 표시합니다. #5768 (Ivan)
- 여러 사용자가 동일한 query_id로 쿼리를 실행하지 못하도록 변경 #5430 (proller)
- Graphite로 메트릭을 전송하는 코드가 더욱 견고해졌습니다. 긴 다중
RENAME TABLE작업 중에도 정상적으로 작동합니다. #5875 (alexey-milovidov) - ThreadPool에서 실행할 작업을 예약하지 못할 경우 더 자세한 오류 메시지가 표시됩니다. 이로써 #5305가 수정되었습니다 #5801 (alexey-milovidov)
- 더 직관적으로 사용할 수 있도록 ngramSearch의 동작을 반대로 변경 #5807 (Danila Kutenin)
- HDFS 엔진 빌더에 사용자 파싱 기능 추가 #5946 (akonyaev90)
max_ast_elements 매개변수의 기본값을 업데이트했습니다 #5933 (Artem Konovalov)- 더 이상 사용되지 않는 설정이라는 개념이 추가되었습니다. 더 이상 사용되지 않는 설정
allow_experimental_low_cardinality_type는 아무런 효과 없이 사용할 수 있습니다. 0f15c01c6802f7ce1a1494c12c846be8c98944cd Alexey Milovidov
성능 개선
- 스레드가 더 균등하게 분산되도록 Merge 테이블에서 SELECT하는 스트림 수를 늘렸습니다.
max_streams_multiplier_for_merge_tables설정을 추가했습니다. 이로써 #5797 #5915를 해결했습니다. (alexey-milovidov)
빌드/테스트/패키징 개선
- 서로 다른 버전의 ClickHouse 간 클라이언트-서버 상호작용에 대한 하위 호환성 테스트를 추가했습니다. #5868 (alesapin)
- 모든 커밋과 pull request의 테스트 커버리지 정보. #5896 (alesapin)
- AddressSanitizer와 연동하여 사용자 정의 메모리 할당자(
Arena및ArenaWithFreeLists)를 지원함으로써 “use-after-free” 오류를 더 효과적으로 디버깅할 수 있게 했습니다. #5728 (akuzm) - C++ 예외 처리 및 스택 트레이스 출력에 LLVM libunwind implementation 사용으로 전환 #4828 (Nikita Lapkov)
- -Weverything 경고 2개를 추가로 반영했습니다 #5923 (alexey-milovidov)
- Memory Sanitizer로 ClickHouse를 빌드할 수 있게 했습니다. #3949 (alexey-milovidov)
- 퍼즈 테스트에서
bitTest함수에 관한 ubsan 보고 문제를 수정했습니다. #5943 (alexey-milovidov) - Docker: 인증이 필요한 ClickHouse 인스턴스를 초기화하는 기능이 추가되었습니다. #5727 (Korviakov Andrey)
- librdkafka를 1.1.0 버전으로 업데이트 #5872 (Ivan)
- 통합 테스트에 전역 timeout을 추가하고, 테스트 코드에서 일부를 비활성화했습니다. #5741 (alesapin)
- 일부 ThreadSanitizer 관련 실패를 수정했습니다. #5854 (akuzm)
--no-undefined옵션은 링크 과정에서 링커가 모든 외부 이름이 실제로 존재하는지 확인하도록 강제합니다. 이는 split 빌드 모드에서 라이브러리 간의 실제 종속성을 추적하는 데 매우 유용합니다. #5855 (Ivan)- #5797 관련 성능 테스트를 추가했습니다 #5914 (alexey-milovidov)
- gcc-7과의 호환성을 수정했습니다. #5840 (alexey-milovidov)
- gcc-9 지원이 추가되었습니다. 이로써 #5717, #5774 문제가 해결되었습니다 (alexey-milovidov)
- libunwind가 잘못 링크될 수 있는 경우 발생하던 오류를 수정했습니다. #5948 (alexey-milovidov)
- PVS-Studio에서 발견된 몇 가지 경고를 수정했습니다. #5921 (alexey-milovidov)
- 초기
clang-tidy정적 분석기 지원이 추가되었습니다. #5806 (alexey-milovidov) - BSD/Linux 엔디언 매크로( ‘be64toh’ 및 ‘htobe64’)를 Mac OS X의 해당 매크로로 변환 #5785 (Fu Chen)
- 통합 테스트 가이드가 개선되었습니다. #5796 (Vladimir Chebotarev)
- macosx + gcc9 환경의 빌드 수정 #5822 (filimonov)
- 눈에 잘 띄지 않는 오타를 수정했습니다: aggreAGte -> aggregate. #5753 (akuzm)
- FreeBSD 빌드 수정 #5760 (proller)
- 웹사이트에 실험용 YouTube 채널 링크를 추가 #5845 (Ivan Blinkov)
- CMake: 커버리지 플래그를 위한 옵션 추가: WITH_COVERAGE #5776 (proller)
- 일부 인라인 PODArray의 초기 크기 문제를 수정했습니다. #5787 (akuzm)
- clickhouse-server.postinst: centos 6용 OS 감지 수정 #5788 (proller)
- Arch Linux 패키지 생성 기능을 추가했습니다. #5719 (Vladimir Chebotarev)
- 라이브러리(dbms)별 Common/config.h 분리 #5715 (proller)
- “Arcadia” 빌드 플랫폼 관련 수정 #5795 (proller)
- 비표준 빌드(gcc9, 서브모듈 미사용) 관련 수정 #5792 (proller)
unalignedStore는 버그가 발생하기 쉬운 것으로 확인되어 명시적 유형을 요구하도록 했습니다 #5791 (akuzm)- macOS 빌드 문제를 수정했습니다 #5830 (filimonov)
- 여기 #5263 #5887에서 요청한 대로 더 큰 데이터셋을 사용한 새로운 JIT 기능의 성능 테스트 (Guillaume Tassery)
- 스트레스 테스트에서 stateful 테스트 실행 12693e568722f11e19859742f56428455501fd2a (alesapin)
하위 호환되지 않는 변경 사항
Kafka는 이 버전에서 동작하지 않습니다.- 새
MergeTree테이블에서는 기본적으로adaptive_index_granularity= 10MB가 활성화됩니다. 19.11+ 버전에서 새 MergeTree 테이블을 생성한 경우 19.6 이전 버전으로는 다운그레이드할 수 없습니다. #5628 (alesapin) - Yandex.Metrica에서 사용되던 더 이상 사용되지 않는 미문서화 내장 사전을 제거했습니다.
OSIn,SEIn,OSToRoot,SEToRoot,OSHierarchy,SEHierarchy함수는 더 이상 사용할 수 없습니다. 이 함수들을 사용 중이라면 clickhouse-feedback@yandex-team.com으로 이메일을 보내십시오. 참고: 마지막 순간에 이 함수들을 당분간 유지하기로 결정했습니다. #5780 (alexey-milovidov)
ClickHouse 릴리스 19.10
ClickHouse 릴리스 19.10.1.5, 2019-07-12
새 기능
- 새로운 컬럼 코덱
T64를 추가했습니다. (U)IntX/EnumX/Data(Time)/DecimalX 컬럼용으로 설계되었습니다. 상수값이거나 값 범위가 작은 컬럼에 적합합니다. 이 코덱은 재압축 없이도 데이터 타입을 확장하거나 축소할 수 있습니다. #5557 (Artem Zuikov) - 원격 MySQL server의 모든 테이블을 조회할 수 있는 데이터베이스 엔진
MySQL을 추가했습니다. #5599 (Winter Zhang) bitmapContains를 구현했습니다. 두 번째 비트맵에 요소가 1개만 있을 때bitmapHasAny보다 2배 빠릅니다. #5535 (Zhichang Yu)crc32함수 지원을 추가했습니다(MySQL 또는 PHP와 동작이 정확히 동일함). 해시 함수가 필요하다면 사용하지 마십시오. #5661 (Remen Ivan)Distributed테이블에 대한 비동기 삽입을 제어하는SYSTEM START/STOP DISTRIBUTED SENDS쿼리를 구현했습니다. #4935 (Winter Zhang)
버그 수정
- 뮤테이션을 실행하는 동안 머지 제한을 적용할 때 쿼리 실행 제한과 최대 파트 크기를 무시하도록 수정했습니다. #5659 (Anton Popov)
- 일반 블록의 중복 제거가 발생하거나(매우 드문 경우), 중복 블록이 삽입될 수 있는(더 자주 발생) 버그를 수정했습니다. #5549 (alesapin)
- 빈 배열이 인수인 경우
arrayEnumerateUniqRanked함수의 문제를 수정했습니다. #5559 (proller) - 메시지를 폴링할 계획이 없는 Kafka topic은 구독하지 않도록 수정했습니다. #5698 (Ivan)
join_use_nulls설정이 널 허용(Nullable)에 포함될 수 없는 타입에는 영향을 주지 않도록 수정했습니다. #5700 (Olga Khvostikova)Incorrect size of index granularity오류를 수정했습니다. #5720 (coraxster)- Float를 Decimal로 변환할 때 발생하는 오버플로우를 수정했습니다. #5607 (coraxster)
WriteBufferFromHDFS의 소멸자가 호출될 때 버퍼를 플러시하도록 수정했습니다. 이로써HDFS에 대한 쓰기 문제가 해결됩니다. #5684 (Xindong Peng)
개선 사항
input_format_defaults_for_omitted_fields설정이 활성화된 경우,CSV의 빈 셀을 기본값으로 처리합니다. #5625 (akuzm)- 외부 딕셔너리를 비차단 방식으로 로드합니다. #5567 (Vitaly Baranov)
- 설정에 따라 이미 설정된 연결의 네트워크 timeout을 동적으로 변경할 수 있습니다. #4558 (Konstantin Podshumok)
- 함수
firstSignificantSubdomain,cutToFirstSignificantSubdomain에 “public_suffix_list”를 사용합니다. 이는 https://publicsuffix.org/list/public_suffix_list.dat 파일에서 생성된 목록과gperf로 생성한 완전 해시 테이블을 사용합니다. (예를 들어, 이제ac.uk도메인을 유의미하지 않은 것으로 인식합니다.) #5030 (Guillaume Tassery) - 시스템 테이블에
IPv6데이터 타입을 도입했으며,system.processes및system.query_log의 클라이언트 정보 컬럼을 통일했습니다. #5640 (alexey-milovidov) - MySQL 호환 프로토콜을 사용하는 연결에 세션을 사용합니다. #5476 #5646 (Yuriy Baranov)
ON CLUSTER에서 더 많은ALTER쿼리를 지원합니다. #5593 #5613 (sundyli)clickhouse-local구성 파일에서<logger>섹션을 지원합니다. #5540 (proller)clickhouse-local에서remote테이블 함수를 사용해 쿼리를 실행할 수 있습니다. #5627 (proller)
성능 개선
- MergeTree 컬럼 끝에 최종 마크를 기록할 수 있는 기능을 추가했습니다. 이를 통해 테이블 데이터 범위를 벗어나는 키에 대한 불필요한 읽기를 피할 수 있습니다. 이 기능은 adaptive index granularity를 사용하는 경우에만 활성화됩니다. #5624 (alesapin)
stat시스템 호출 수를 줄여 매우 느린 파일 시스템에서 MergeTree 테이블의 성능을 개선했습니다. #5648 (alexey-milovidov)- 19.6 버전에서 발생한 MergeTree 테이블 읽기 성능 저하를 수정했습니다. #5631을 해결합니다. #5633 (alexey-milovidov)
빌드/테스트/패키징 개선
- 테스트에 사용되는 ZooKeeper 인터페이스 구현체로
TestKeeper를 구현했습니다 #5643 (alexey-milovidov) (levushkin aleksej) - 이제
.sql테스트를 서버별로 격리해 병렬로, 무작위 데이터베이스와 함께 실행할 수 있습니다. 이를 통해 테스트를 더 빠르게 실행할 수 있고, 사용자 지정 서버 구성으로 새 테스트를 추가할 수 있으며, 서로 다른 테스트가 서로 영향을 주지 않도록 보장할 수 있습니다. #5554 (Ivan) - 성능 테스트에서
<name>및<metrics>를 제거했습니다 #5672 (Olga Khvostikova) Pretty포맷용 “select_format” 성능 테스트를 수정했습니다 #5642 (alexey-milovidov)
ClickHouse 릴리스 19.9
ClickHouse 릴리스 19.9.3.31, 2019-07-05
버그 수정
- 32비트 미만 크기의 값을 가진 컬럼에 영향을 주는 Delta 코덱의 segfault를 수정했습니다. 이 버그는 무작위 메모리 손상을 일으켰습니다. #5786 (alesapin)
- LowCardinality 컬럼이 있는 part를 검사할 때 드물게 발생하던 버그를 수정했습니다. #5832 (alesapin)
- 블록의 비물리 컬럼이 포함된 TTL 머지에서 발생하는 segfault를 수정했습니다. #5819 (Anton Popov)
- 낮은 우선순위 쿼리가 무한히 대기 상태에 빠질 수 있는 문제를 수정했습니다. #5842 (alexey-milovidov)
- ClickHouse가 기본 시간대를 UTC 대신 UCT로 잘못 판단하던 문제를 수정했습니다. #5828 (alexey-milovidov)
- 분산 DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER 쿼리를 리더 레플리카보다 팔로워 레플리카에서 먼저 실행하던 버그를 수정했습니다. 이제 이 쿼리들은 리더 레플리카에서 직접 실행됩니다. #5757 (alesapin)
- race condition으로 인해 일부 쿼리가 SYSTEM FLUSH LOGS 쿼리 직후 query_log에 즉시 나타나지 않을 수 있던 문제를 수정했습니다. #5685 (Anton Popov)
evalMLModel함수에 누락되어 있던 상수 인수 지원을 추가했습니다. #5820 (alexey-milovidov)
ClickHouse 릴리스 19.9.2.4, 2019-06-24
새로운 기능
system.parts테이블에서 동결된 파트 정보를 출력합니다. #5471 (proller)- 인수로 비밀번호를 지정하지 않은 경우, tty에서
clickhouse-client시작 시 클라이언트 비밀번호를 묻습니다. #5092 (proller) - Decimal 타입에 대해
dictGet및dictGetOrDefault함수를 구현했습니다. #5394 (Artem Zuikov)
개선 사항
- Debian init: 서비스 중지 timeout 추가 #5522 (proller)
- LowCardinality에서 의심스러운 타입으로 테이블을 생성하지 못하도록 기본적으로 금지하는 설정 추가 #5448 (Olga Khvostikova)
- 회귀 함수가 함수
evalMLMethod에서 State로 사용되지 않는 경우 모델 가중치를 반환하도록 개선 #5411 (Quid37) - 회귀 메서드 이름 변경 및 개선 #5492 (Quid37)
- 문자열 검색기의 인터페이스를 더 명확하게 개선 #5586 (Danila Kutenin)
버그 수정
- Kafka의 잠재적 데이터 손실 문제 수정 #5445 (Ivan)
PrettySpace포맷이 컬럼 0개로 호출될 때 발생할 수 있는 무한 루프를 수정했습니다 #5560 (Olga Khvostikova)- 선형 모델의 UInt32 오버플로우 버그를 수정했습니다. 상수가 아닌
model인수에 대해서도 ML 모델 평가를 허용합니다. #5516 (Nikolai Kochetov) ALTER TABLE ... DROP INDEX IF EXISTS ...는 지정된 인덱스가 존재하지 않더라도 예외가 발생해서는 안 됩니다 #5524 (Gleb Novikov)- 스칼라 서브쿼리에서
bitmapHasAny사용 시 발생하는 세그폴트 수정 #5528 (Zhichang Yu) - DNS 캐시가 삭제된 경우에도 복제 연결 풀이 호스트를 다시 조회하지 않던 오류를 수정했습니다. #5534 (alesapin)
- ReplicatedMergeTree에서
ALTER ... MODIFY TTL관련 문제를 수정했습니다. #5539 (Anton Popov) - MATERIALIZED 컬럼이 있는 분산 테이블에 INSERT할 때 발생하던 문제 수정 #5429 (Azat Khuzhin)
- Join 스토리지를 TRUNCATE할 때 발생하는 bad alloc 문제 수정 #5437 (TCeason)
- 최근 버전의 tzdata 패키지에서는 일부 파일이 이제 심볼릭 링크입니다. 이로 인해 기본 시간대를 감지하는 현재 메커니즘이 제대로 동작하지 않아 일부 시간대의 이름을 잘못 반환합니다. 이제는 최소한 TZ가 제공된 경우 시간대 이름을 해당 내용으로 강제 설정합니다. #5443 (Ivan)
- 상수 needle들의 총 길이가 16KB 이상일 때 MultiVolnitsky searcher에서 발생하던 매우 드문 일부 문제를 수정했습니다. 이 알고리즘은 이전 결과를 누락하거나 덮어써
multiSearchAny가 잘못된 결과를 반환할 수 있었습니다. #5588 (Danila Kutenin) - ExternalData 요청의 설정에서 ClickHouse 설정을 사용할 수 없었던 문제를 수정했습니다. 또한 현재는 이름이 모호하여
date_time_input_format및low_cardinality_allow_in_native_format설정은 사용할 수 없습니다(외부 데이터에서는 테이블 포맷으로 해석될 수 있고, 쿼리에서는 설정으로 해석될 수 있음). #5455 (Danila Kutenin) - Zookeeper에서는 삭제하지 않고 FS에서만 파트를 제거했을 때 발생하던 버그를 수정했습니다. #5520 (alesapin)
- MySQL 프로토콜의 디버그 로깅 제거 #5478 (alexey-milovidov)
- DDL 쿼리 처리 시 ZNONODE 건너뛰기 #5489 (Azat Khuzhin)
UNION ALL결과 컬럼 타입 혼합 문제를 수정했습니다. 결과 컬럼의 데이터와 컬럼 타입이 일관되지 않은 경우가 있었습니다. #5503 (Artem Zuikov)- 잘못된 정수가 입력되면
dictGetT함수가 크래시되는 대신 예외를 발생시킵니다. #5446 (Artem Zuikov) system.dictionaries테이블의 해시 딕셔너리에서 잘못된 element_count와 load_factor를 수정했습니다. #5440 (Azat Khuzhin)
빌드/테스트/패키징 개선
BrotliHTTP 압축 지원 없이도 빌드할 수 있도록 수정했습니다(ENABLE_BROTLI=OFFcmake 변수). #5521 (Anton Yuzhaninov)- roaring.h를 roaring/roaring.h로 포함하도록 변경했습니다. #5523 (Orivej Desh)
- hyperscan에서 발생하는 gcc9 경고를 수정했습니다(#line directive는 좋지 않습니다!). #5546 (Danila Kutenin)
- gcc-9로 컴파일할 때 발생하는 모든 경고를 수정했습니다. 일부 contrib 이슈도 수정했습니다. gcc9 ICE를 수정해 bugzilla에 제출했습니다. #5498 (Danila Kutenin)
- lld와의 링크 문제를 수정했습니다. #5477 (alexey-milovidov)
- 딕셔너리에서 사용되지 않는 특수화를 제거했습니다. #5452 (Artem Zuikov)
- 다양한 파일 타입의 테이블에 대한 포맷팅 및 파싱 성능 테스트를 개선했습니다. #5497 (Olga Khvostikova)
- 병렬 테스트 실행 관련 문제를 수정했습니다. #5506 (proller)
- Docker: clickhouse-test의 구성을 사용하도록 변경했습니다. #5531 (proller)
- FreeBSD에서의 컴파일 문제를 수정했습니다. #5447 (proller)
- boost를 1.70으로 업그레이드했습니다. #5570 (proller)
- 서브모듈로 사용할 때 clickhouse 빌드 문제를 수정했습니다. #5574 (proller)
- JSONExtract 성능 테스트를 개선했습니다. #5444 (Vitaly Baranov)
ClickHouse 릴리스 19.8
ClickHouse 릴리스 19.8.3.8, 2019-06-11
새로운 기능
- JSON을 다루는 함수가 추가되었습니다 #4686 (hcz) #5124. (Vitaly Baranov)
- 여러 언어에 있는 basename 함수(
os.path.basenamein python,basenamein PHP 등)와 비슷하게 동작하는basename함수를 추가했습니다. UNIX 계열 경로와 Windows 경로를 모두 지원합니다. #5136 (Guillaume Tassery) LIMIT BY절에서 n만큼의 OFFSET을 지정할 수 있도록LIMIT n, m BY또는LIMIT m OFFSET n BY구문을 추가했습니다. #5138 (Anton Popov)- 새로운 데이터 타입
SimpleAggregateFunction이 추가되었습니다. 이를 사용하면AggregatingMergeTree에서 경량 집계가 적용된 컬럼을 사용할 수 있습니다. 이는any,anyLast,sum,min,max와 같은 단순 함수에서만 사용할 수 있습니다. #4629 (Boris Granveaud) ngramDistance함수에 비상수 인수 지원이 추가되었습니다 #5198 (Danila Kutenin)- 시퀀스 왜도, 표본 왜도, 첨도, 표본 첨도를 각각 계산하는
skewPop,skewSamp,kurtPop,kurtSamp함수를 추가했습니다. #5200 (hcz) MaterializeView스토리지의 이름 변경 작업을 지원합니다. #5209 (Guillaume Tassery)- MySQL 클라이언트로 ClickHouse에 연결할 수 있는 server를 추가했습니다. #4715 (Yuriy Baranov)
toDecimal*OrZero및toDecimal*OrNull함수가 추가되었습니다. #5291 (Artem Zuikov)- 다음 함수에서 Decimal 타입을 지원합니다:
quantile,quantiles,median,quantileExactWeighted,quantilesExactWeighted, medianExactWeighted. #5304 (Artem Zuikov) - 유효하지 않은 모든 UTF-8 문자를 대체 문자 � (U+FFFD)로 바꾸는
toValidUTF8함수가 추가되었습니다. #5322 (Danila Kutenin) format함수가 추가되었습니다. 인수에 나열된 문자열로 상수 패턴(단순화된 Python format 패턴)의 서식을 지정합니다. #5330 (Danila Kutenin)MergeTree테이블의 분리된 파트 정보를 담은system.detached_parts테이블이 추가되었습니다. #5353 (akuzm)ngramSearch함수를 추가하여 needle과 haystack의 비대칭 차이를 계산할 수 있게 했습니다. #5418#5422 (Danila Kutenin)- 집계 함수 인터페이스를 사용해 기본 기계 학습 메서드(확률적 선형 회귀 및 로지스틱 회귀)를 구현했습니다. 모델 가중치 업데이트를 위한 여러 전략(단순 경사 하강법, 모멘텀 메서드, 네스테로프 메서드)을 제공합니다. 또한 사용자 지정 크기의 미니 배치도 지원합니다. #4943 (Quid37)
geohashEncode및geohashDecode함수 구현. #5003 (Vasily Nemkov)- 샘플 타임스탬프가 서로 맞지 않는 여러 시계열을 집계할 수 있는 집계 함수
timeSeriesGroupSum이 추가되었습니다. 이 함수는 두 샘플 타임스탬프 사이에서 선형 보간을 사용한 뒤 시계열들을 합산합니다. 시계열의 변화율을 계산한 뒤 그 변화율들을 합산하는 집계 함수timeSeriesGroupRateSum도 추가되었습니다. #4542 (Yangkuan Liu) - CIDR를 사용하여 서브넷 내 IP의 하한 및 상한을 계산하는 함수
IPv4CIDRtoIPv4Range및IPv6CIDRtoIPv6Range를 추가했습니다. #5095 (Guillaume Tassery) - 활성화된
send_progress_in_http_headers설정을 사용해 HTTP로 쿼리를 전송할 때 X-ClickHouse-Summary header를 추가합니다. X-ClickHouse-Progress의 일반적인 정보에 더해, 쿼리에서 몇 개의 행과 바이트가 삽입되었는지 같은 추가 정보도 반환합니다. #5116 (Guillaume Tassery)
개선 사항
- MergeTree 엔진 계열 테이블에
max_parts_in_total설정(기본값: 100 000)이 추가되어, 파티션 키를 안전하지 않게 지정하는 것을 방지합니다 #5166. #5171 (alexey-milovidov) clickhouse-obfuscator: 개별 컬럼의 seed를 컬럼 위치가 아니라 초기 seed와 컬럼 이름을 조합해 도출합니다. 이는 서로 관련된 여러 테이블이 포함된 데이터셋을 변환할 때 변환 후에도 테이블 간 JOIN이 가능하도록 하기 위한 것입니다. #5178 (alexey-milovidov)- 함수
JSONExtractRaw,JSONExtractKeyAndValues를 추가했습니다. 함수jsonExtract<type>의 이름을JSONExtract<type>로 변경했습니다. 문제가 발생할 경우 이 함수들은NULL이 아니라 해당 값을 반환합니다. 함수JSONExtract를 수정하여 이제 마지막 매개변수에서 반환 유형을 가져오고 널 허용 값을 추가하지 않습니다. AVX2 명령어를 사용할 수 없는 경우 RapidJSON으로 폴백하도록 구현했습니다. Simdjson 라이브러리를 새 버전으로 업데이트했습니다. #5235 (Vitaly Baranov) - 이제
if및multiIf함수는 조건의Nullable이 아니라 SQL 호환성을 위해 분기를 기준으로 동작합니다. #5238 (Jian Wu) In프레디케이트는 이제Equal함수와 마찬가지로Null입력에 대해Null결과를 반환합니다. #5152 (Jian Wu)- Kafka에서 (flush_interval / poll_timeout)개의 행마다 시간 제한을 확인합니다. 이를 통해 Kafka consumer에서 데이터를 읽는 작업을 더 자주 중단하고 상위 스트림의 시간 제한을 확인할 수 있습니다. #5249 (Ivan)
- rdkafka를 번들된 SASL과 연동했습니다. 이제 SASL SCRAM 인증을 사용할 수 있습니다 #5253 (Ivan)
- ALL 조인용 RowRefList의 배치 버전입니다. #5267 (Artem Zuikov)
- clickhouse-server: listen 오류 메시지에 더 많은 정보를 추가했습니다. #5268 (proller)
- clickhouse-copier에서
<sharding_key>의 함수에 대한 딕셔너리 지원 #5270 (proller) - Kafka 커밋 정책을 제어하기 위해 새로운 설정
kafka_commit_every_batch를 추가했습니다. 이 설정을 사용하면 커밋 모드를 지정할 수 있습니다. 즉, 각 메시지 Batch를 처리한 후 커밋할지, 아니면 전체 block이 스토리지에 기록된 후 커밋할지를 선택할 수 있습니다. 이는 극단적인 상황에서 일부 메시지가 손실되는 것과 메시지를 두 번 읽는 것 사이의 절충안입니다. #5308 (Ivan) windowFunnel이 다른 부호 없는 정수 타입도 지원하도록 개선했습니다. #5320 (sundyli)- Merge 엔진에서 가상 컬럼
_table을 섀도잉할 수 있도록 했습니다. #5325 (Ivan) sequenceMatch집계 함수가 다른 부호 없는 Integer 타입도 지원하도록 개선 #5339 (sundyli)- 체크섬 불일치의 원인이 하드웨어 장애일 가능성이 높을 때 오류 메시지를 개선했습니다. #5355 (alexey-milovidov)
- 기반 테이블이
StorageMerge에서 샘플링을 지원하는지 확인합니다 #5366 (Ivan) - 외부 딕셔너리에서 사용한 MySQL 연결을 사용 후 종료합니다. 이 변경은 이슈 #893과 관련이 있습니다. #5395 (Clément Rodriguez)
- MySQL wire 프로토콜이 개선되었습니다. 포맷 이름을 MySQLWire로 변경했습니다. RSA_free 호출에 RAII를 사용하도록 변경했습니다. 컨텍스트를 생성할 수 없는 경우 SSL을 비활성화하도록 변경했습니다. #5419 (Yuriy Baranov)
- clickhouse-client: 접근할 수 없는 이력 파일(읽기 전용, 디스크 공간 부족, 파일이 디렉터리인 경우 등)이 있어도 실행할 수 있도록 합니다. #5431 (proller)
- 분산 테이블로의 비동기 INSERT에서 쿼리 설정이 적용되도록 했습니다. #4936 (TCeason)
- 함수
leastSqr를simpleLinearRegression으로,LinearRegression을linearRegression으로,LogisticRegression을logisticRegression으로 이름 변경했습니다. #5391 (Nikolai Kochetov)
성능 개선
- ALTER MODIFY 쿼리에서 비복제 MergeTree 테이블의 파트 처리 작업을 병렬화했습니다. #4639 (Ivan Kush)
- 정규식 추출을 최적화했습니다. #5193 #5191 (Danila Kutenin)
- right join key 컬럼이 JOIN ON 절에서만 사용되는 경우 조인 결과에 추가하지 않도록 했습니다. #5260 (Artem Zuikov)
- 첫 번째 빈 응답 이후 Kafka 버퍼를 고정합니다. 이렇게 하면 일부 행 파싱 스트림에서 빈 결과에 대해
ReadBuffer::next()가 여러 번 호출되는 것을 방지할 수 있습니다. #5283 (Ivan) - 여러 인수에 대한
concat함수 최적화입니다. #5357 (Danila Kutenin) - 쿼리를 최적화했습니다. comma/cross join을 inner join으로 다시 작성할 때 IN statement의 push down을 허용합니다. #5396 (Artem Zuikov)
- 더 빠른 압축 해제를 위해 LZ4 구현을 참조 구현으로 교체했습니다. #5070 (Danila Kutenin)
- MSD radix sort(kxsort 기반)와 부분 정렬을 구현했습니다. #5129 (Evgenii Pravda)
버그 수정
- join에 필요한 컬럼을 push할 때 발생하던 문제를 수정했습니다 #5192 (Winter Zhang)
- ClickHouse를 systemd로 실행할 때
sudo service clickhouse-server forcerestart명령이 예상대로 동작하지 않던 버그를 수정했습니다. #5204 (proller) - DataPartsExchange의 HTTP 오류 코드를 수정했습니다(interserver HTTP 서버가 9009 포트에서 오류가 발생해도 항상 200 코드를 반환하던 문제). #5216 (proller)
MAX_SMALL_STRING_SIZE보다 긴 String에 대한 SimpleAggregateFunction 문제를 수정했습니다 #5311 (Azat Khuzhin)- IN에서
Decimal을Nullable(Decimal)로 변환할 때 발생하는 오류를 수정했습니다. 서로 다른 scale을 포함한 다른 Decimal 간 변환도 지원합니다. #5350 (Artem Zuikov) - simdjson 라이브러리의 FPU clobbering 문제를 수정했습니다. 이 문제는
uniqHLL,uniqCombined집계 함수와log같은 수학 함수의 계산 오류를 유발했습니다. #5354 (alexey-milovidov) - JSON 함수에서 const/nonconst가 섞인 경우의 처리 문제를 수정했습니다. #5435 (Vitaly Baranov)
retention함수를 수정했습니다. 이제 데이터의 한 행에서 조건을 만족하는 모든 항목이 데이터 상태에 추가됩니다. #5119 (小路)- Decimal에 대한
quantileExact의 결과 유형을 수정했습니다. #5304 (Artem Zuikov)
문서
빌드/테스트/패키징 개선 사항
- 일부 sanitizer 보고서에서 use-after-free 가능성이 있는 문제를 수정했습니다.#5139 #5143 #5393 (Ivan)
- 편의를 위해 성능 테스트를 별도 디렉터리에서 옮겼습니다. #5158 (alexey-milovidov)
- 잘못된 성능 테스트를 수정했습니다. #5255 (alesapin)
- 하드웨어 문제를 디버깅하기 위해 비트 반전으로 인해 발생하는 체크섬을 계산하는 도구를 추가했습니다. #5334 (alexey-milovidov)
- runner 스크립트를 더 쉽게 사용할 수 있도록 개선했습니다. #5340#5360 (filimonov)
- 성능 테스트 작성 방법에 대한 간단한 지침을 추가했습니다. #5408 (alesapin)
- 성능 테스트에서 create, fill 및 drop 쿼리에 치환을 적용할 수 있는 기능을 추가했습니다 #5367 (Olga Khvostikova)
ClickHouse 릴리스 19.7
ClickHouse 릴리스 19.7.5.29, 2019-07-05
버그 수정
- JOIN이 포함된 일부 쿼리의 성능 회귀 문제를 수정했습니다. #5192 (Winter Zhang)
ClickHouse 릴리스 19.7.5.27, 2019-06-09
새로운 기능
- 배열용
hasAny및hasAll함수와 유사한 비트맵 관련 함수bitmapHasAny및bitmapHasAll이 추가되었습니다. #5279 (Sergi Vladykin)
버그 수정
- NULL 값이 있는
minmaxINDEX에서 발생하는 segfault를 수정했습니다. #5246 (Nikita Vasilev) - LIMIT BY의 모든 입력 컬럼을 필수 출력으로 표시하도록 수정했습니다. 이로써 일부 분산 쿼리에서 발생하던 ‘Not found column’ 오류를 해결했습니다. #5407 (Constantin S. Pan)
- DEFAULT가 있는 컬럼에 대한
SELECT .. PREWHERE에서 발생하던 “Column ‘0’ already exists” 오류를 수정했습니다. #5397 (proller) ReplicatedMergeTree의ALTER MODIFY TTL쿼리를 수정했습니다. #5539 (Anton Popov)- Kafka 컨슈머 시작에 실패하더라도 서버가 중단되지 않도록 수정했습니다. #5285 (Ivan)
- 비트맵 함수가 잘못된 결과를 반환하던 문제를 수정했습니다. #5359 (Andy Yang)
- 해시 딕셔너리의 element_count를 수정했습니다(중복은 포함하지 않음). #5440 (Azat Khuzhin)
- 환경 변수 TZ의 값을 시간대 이름으로 사용하도록 수정했습니다. 이를 통해 일부 경우 기본 시간대를 올바르게 감지할 수 있습니다. #5443 (Ivan)
dictGetT함수에서 정수를 변환하려고 시도하지 않도록 수정했습니다. 이 동작이 올바르지 않기 때문입니다. 대신 예외를 발생시킵니다. #5446 (Artem Zuikov)- ExternalData HTTP 요청의 설정을 수정했습니다. #5455 (Danila Kutenin)
- 파트를 Zookeeper에서 삭제하지 않고 FS에서만 제거하던 버그를 수정했습니다. #5520 (alesapin)
bitmapHasAny함수에서 발생하는 segmentation fault를 수정했습니다. #5528 (Zhichang Yu)- 복제 연결 풀에서 DNS 캐시가 삭제된 경우에도 호스트 확인을 다시 시도하지 않던 오류를 수정했습니다. #5534 (alesapin)
DROP INDEX IF EXISTS쿼리를 수정했습니다. 이제 지정한 인덱스가 존재하지 않더라도ALTER TABLE ... DROP INDEX IF EXISTS ...쿼리에서 예외가 발생하지 않습니다. #5524 (Gleb Novikov)- UNION ALL supertype 컬럼 관련 문제를 수정했습니다. 결과 컬럼의 데이터와 컬럼 타입이 일관되지 않은 경우가 있었습니다. #5503 (Artem Zuikov)
- DDL 쿼리 처리 중 ZNONODE를 건너뛰도록 수정했습니다. 이전에는 다른 노드가 작업 큐에서 znode를 제거하면, 이를 처리하지 않았지만 이미 하위 항목 목록을 가져온 노드가 DDLWorker thread를 종료하게 되는 문제가 있었습니다. #5489 (Azat Khuzhin)
- MATERIALIZED 컬럼이 있는 Distributed() 테이블에 대한 INSERT를 수정했습니다. #5429 (Azat Khuzhin)
ClickHouse 릴리스 19.7.3.9, 2019-05-30
새로운 기능
- 사용자가 지정할 수 있는 설정값의 범위를 제한할 수 있게 했습니다. 이러한 제약 조건은 사용자 설정 프로필에서 구성할 수 있습니다. #4931 (Vitaly Baranov)
- 선택적
max_size매개변수를 받아 결과 배열의 크기를 제한하는groupUniqArray함수의 두 번째 버전을 추가했습니다. 이 동작은groupArray(max_size)(x)함수와 유사합니다. #5026 (Guillaume Tassery) - 이제 TSVWithNames/CSVWithNames 입력 파일 포맷에서는 파일 헤더를 바탕으로
컬럼 순서를 결정할 수 있습니다. 이는
input_format_with_names_use_header매개변수로 제어됩니다. #5081 (Alexander)
버그 수정
- 머지 중
uncompressed_cache+ JOIN에서 발생하던 크래시 수정 (#5197) #5133 (Danila Kutenin) - ClickHouse client에서 시스템 테이블(system tables)에 쿼리할 때 발생하던 세그멘테이션 폴트 수정. #5066 #5127 (Ivan)
- KafkaEngine를 통한 고부하 시 데이터 손실 수정 (#4736) #5080 (Ivan)
- system.columns, system.tables, system.parts, system.parts_tables 또는 Merge 계열 테이블에서 최소 2개의 SELECT가 포함된 UNION ALL 쿼리를 실행하는 동시에 관련 테이블의 컬럼에 대해 ALTER를 수행할 때 발생할 수 있던 매우 드문 데이터 레이스 컨디션 수정. #5189 (alexey-milovidov)
성능 개선
LIMIT없이ORDER BY에서 단일 숫자형 컬럼을 기준으로 정렬할 때 radix sort를 사용합니다. #5106, #4439 (Evgenii Pravda, alexey-milovidov)
문서
빌드/테스트/패키징 개선 사항
clickhouse-test에서 UTF-8 문자가 올바르게 출력되도록 개선했습니다. #5084 (alexey-milovidov)- clickhouse-client에서 제안 데이터를 항상 로드하는 명령줄 매개변수를 추가했습니다. #5102 (alexey-milovidov)
- PVS-Studio 경고 일부를 해결했습니다. #5082 (alexey-milovidov)
- LZ4를 업데이트했습니다. #5040 (Danila Kutenin)
- 예정된 pull request #5030에 대비해 빌드 요구 사항에 gperf를 추가했습니다. #5110 (proller)
ClickHouse 릴리스 19.6
ClickHouse 릴리스 19.6.3.18, 2019-06-13
버그 수정
- 테이블 함수
mysql,odbc및 해당 테이블 엔진에서 실행되는 쿼리의 IN 조건 푸시다운을 수정했습니다. 이 변경으로 #3540과 #2384가 해결되었습니다. #5313 (alexey-milovidov) - Zookeeper의 교착 상태를 수정했습니다. #5297 (github1youlc)
- CSV에서 따옴표로 묶인 소수값을 허용합니다. #5284 (Artem Zuikov
- float Inf/NaN을 Decimal로 변환하지 못하도록 했습니다(예외 발생). #5282 (Artem Zuikov)
- rename 쿼리에서 발생하는 데이터 레이스를 수정했습니다. #5247 (Winter Zhang)
- LFAlloc을 일시적으로 비활성화했습니다. LFAlloc을 사용하면 UncompressedCache를 할당할 때 다수의 MAP_FAILED가 발생할 수 있으며, 그 결과 고부하 서버에서 쿼리가 비정상 종료될 수 있습니다. cfdba93(Danila Kutenin)
ClickHouse 릴리스 19.6.2.11, 2019-05-13
새로운 기능
- 컬럼 및 테이블용 TTL 표현식. #4212 (Anton Popov)
- HTTP 응답에 대한
brotli압축 지원(Accept-Encoding: br)을 추가했습니다. #4388 (Mikhail) - 바이트 시퀀스가 올바르게 UTF-8로 인코딩되었는지 확인하는 새 함수
isValidUTF8를 추가했습니다. #4934 (Danila Kutenin) - 새 로드 밸런싱 정책
first_or_random을 추가했습니다. 이 정책은 쿼리를 먼저 지정된 첫 번째 호스트로 보내고, 해당 호스트에 접근할 수 없으면 세그먼트의 임의 호스트로 보냅니다. 교차 복제 토폴로지 구성에 유용합니다. #5012 (nvartolomei)
실험적 기능
개선 사항
- 함수
substringUTF8에서 상수가 아닌 size 및 length 인수와 음수 인수를 지원하도록 추가했습니다. #4989 (alexey-milovidov) - left join에서는 오른쪽 테이블로, right join에서는 왼쪽 테이블로, full join에서는 양쪽 테이블로의 push-down을 비활성화했습니다. 이로써 일부 경우 잘못된 JOIN 결과가 발생하던 문제가 수정되었습니다. #4846 (Ivan)
clickhouse-copier:--task-file옵션의 작업 구성을 자동으로 업로드합니다. #4876 (proller)- storage factory 및 테이블 함수 factory에 오타 처리 handler를 추가했습니다. #4891 (Danila Kutenin)
- 서브쿼리 없이 여러 조인에 대해 asterisk와 한정된 asterisk를 지원합니다. #4898 (Artem Zuikov)
- 누락된 컬럼 오류 메시지를 더 이해하기 쉽게 개선했습니다. #4915 (Artem Zuikov)
성능 개선
- ASOF JOIN 속도가 크게 향상되었습니다 #4924 (Martijn Bakker)
하위 호환되지 않는 변경 사항
버그 수정
clickhouse-copier에서 발생할 수 있는 잠재적인 null 포인터 역참조 문제를 수정했습니다. #4900 (proller)JOIN+ARRAY JOIN이 포함된 쿼리에서 발생하던 오류를 수정했습니다. #4938 (Artem Zuikov)- engine=Dictionary인 데이터베이스를 통해 한 딕셔너리가 다른 딕셔너리에 의존할 때 서버 시작 시 멈추는 문제를 수정했습니다. #4962 (Vitaly Baranov)
- distributed_product_mode = local을 부분적으로 수정했습니다. table alias를 통해 where/having/order by/…에서 로컬 테이블의 컬럼을 사용할 수 있습니다. 테이블에 alias가 없으면 예외를 발생시킵니다. 아직은 table alias 없이 컬럼에 접근할 수 없습니다. #4986 (Artem Zuikov)
JOIN이 포함된SELECT DISTINCT에서 잠재적으로 잘못된 결과가 나올 수 있는 문제를 수정했습니다. #5001 (Artem Zuikov)- system.columns, system.tables, system.parts, system.parts_tables 또는 계열의 테이블에서 최소 2개의 SELECT를 포함하는 UNION ALL 쿼리를 실행하는 동시에, 관련 테이블의 컬럼에 대해 ALTER를 수행할 때 매우 드물게 발생할 수 있던 데이터 경쟁 상태(race condition)를 수정했습니다. #5189 (alexey-milovidov)
빌드/테스트/패키징 개선 사항
- 다른 호스트에서 clickhouse-server를 실행할 때 발생하던 테스트 실패를 수정했습니다 #4713 (Vasily Nemkov)
- clickhouse-test: TTY가 아닌 환경에서 색상 제어 시퀀스를 비활성화합니다. #4937 (alesapin)
- clickhouse-test: 임의의 테스트 데이터베이스를 사용할 수 있도록 허용합니다 (가능한 곳에서
test.한정자 제거) #5008 (proller) - ubsan 오류를 수정했습니다 #5037 (Vitaly Baranov)
- segfault를 더 안정적으로 포착할 수 있도록, MarkCache와 UncompressedCache 데이터를 서로 다른 방식으로 할당하는 Yandex LFAlloc를 ClickHouse에 추가했습니다 #4995 (Danila Kutenin)
- 백포트와 changelog 작업에 도움이 되는 Python 유틸리티를 추가했습니다. #4949 (Ivan)
ClickHouse 릴리스 19.5
ClickHouse 릴리스 19.5.4.22, 2019-05-13
버그 수정
- bitmap* 함수에서 발생할 수 있는 크래시를 수정했습니다 #5220 #5228 (Andy Yang)
- system.columns, system.tables, system.parts, system.parts_tables 또는 Merge 계열의 테이블에서 적어도 2개의 SELECT가 포함된 UNION ALL 쿼리를 실행하는 동시에, 관련 테이블의 컬럼에 대해 ALTER를 수행할 때 발생할 수 있던 매우 드문 데이터 경쟁 상태를 수정했습니다. #5189 (alexey-milovidov)
Set for IN is not created yet in case of using single LowCardinality column in the left part of IN오류를 수정했습니다. 이 오류는 LowCardinality 컬럼이 프라이머리 키의 일부일 때 발생했습니다. #5031 #5154 (Nikolai Kochetov)- retention 함수의 동작을 변경했습니다. 이전에는 하나의 행이 첫 번째 조건과 N번째 조건을 모두 만족하더라도, 처음으로 만족한 조건만 데이터 state에 추가되었습니다. 이제는 데이터의 한 행에서 만족하는 모든 조건이 데이터 state에 추가됩니다. #5119 (小路)
ClickHouse 릴리스 19.5.3.8, 2019-04-18
버그 수정
- 설정
max_partitions_per_insert_block의 유형을 불리언에서 UInt64로 수정했습니다. #5028 (Mohammad Hossein Sekhavat)
ClickHouse 릴리스 19.5.2.6, 2019-04-15
새로운 기능
- Hyperscan의 다중 정규식 일치 기능이 추가되었습니다(함수
multiMatchAny,multiMatchAnyIndex,multiFuzzyMatchAny,multiFuzzyMatchAnyIndex). #4780, #4841 (Danila Kutenin) multiSearchFirstPosition함수가 추가되었습니다. #4780 (Danila Kutenin)- 테이블의 각 행에 대해 사전 정의된 표현식 필터를 구현했습니다. #4792 (Ivan)
- 블룸 필터 기반의 새로운 데이터 스키핑 인덱스가 추가되었습니다(
equal,in,like함수에 사용할 수 있음). #4499 (Nikita Vasilev) - 가장 최근에 알려진 값을 기준으로 조인하는 쿼리를 실행할 수 있는
ASOF JOIN이 추가되었습니다. #4774 #4867 #4863 #4875 (Martijn Bakker, Artem Zuikov) - 여러
COMMA JOIN을CROSS JOIN으로 재작성한 뒤, 가능하면INNER JOIN으로 다시 재작성합니다. #4661 (Artem Zuikov)
개선 사항
topK및topKWeighted가 이제 사용자 지정loadFactor를 지원합니다(이슈 #4252 수정). #4634 (Kirill Danshin)- 샘플링이 없는 테이블에서도
parallel_replicas_count > 1을 사용할 수 있도록 했습니다(이 경우 해당 설정은 단순히 무시됩니다). 이전 버전에서는 이로 인해 예외가 발생했습니다. #4637 (Alexey Elymanov) CREATE OR REPLACE VIEW를 지원합니다. 단일 구문으로 뷰를 생성하거나 새 정의를 설정할 수 있습니다. #4654 (Boris Granveaud)Buffer테이블 엔진이 이제PREWHERE를 지원합니다. #4671 (Yangkuan Liu)- ZooKeeper에 메타데이터가 없는 복제된 테이블을
readonly모드로 시작할 수 있는 기능을 추가했습니다. #4691 (alesapin) - clickhouse-client에서 진행률 표시줄이 깜빡이던 문제를 수정했습니다. 이 문제는 스트리밍 쿼리와 함께
FORMAT Null을 사용할 때 가장 두드러졌습니다. #4811 (alexey-milovidov) - 잠재적으로 과도하고 통제되지 않는 리소스 사용을 제한하기 위해 사용자별로
hyperscan라이브러리를 사용하는 함수를 비활성화할 수 있도록 했습니다. #4816 (alexey-milovidov) - 모든 오류에 버전 번호를 로깅하도록 했습니다. #4824 (proller)
- 문자열 크기가
unsigned int에 맞아야 한다는 제한을multiMatch함수에 추가했습니다. 또한multiSearch함수에 인수 개수 제한도 추가했습니다. #4834 (Danila Kutenin) - Hyperscan의 스크래치 공간 사용과 오류 처리를 개선했습니다. #4866 (Danila Kutenin)
*GraphiteMergeTree엔진 테이블의 테이블 설정을 기반으로system.graphite_detentions를 채우도록 했습니다. #4584 (Mikhail f. Shiryaev)trigramDistance함수의 이름을ngramDistance로 변경하고,CaseInsensitive및UTF가 포함된 함수를 더 추가했습니다. #4602 (Danila Kutenin)- 데이터 스키핑 인덱스 계산을 개선했습니다. #4640 (Nikita Vasilev)
- 일반 컬럼,
DEFAULT,MATERIALIZED,ALIAS컬럼을 하나의 목록으로 유지하도록 했습니다(이슈 #2867 수정). #4707 (Alex Zatelepin)
버그 수정
- 메모리 할당 실패 시
std::terminate가 호출되지 않도록 수정했습니다. 이제 예상대로std::bad_alloc예외가 발생합니다. #4665 (alexey-milovidov) - 버퍼에서
capnproto를 읽는 문제를 수정했습니다. 간혹 HTTP를 통해 파일이 정상적으로 로드되지 않았습니다. #4674 (Vladislav) OPTIMIZE TABLE FINAL쿼리 후 발생하던Unknown log entry type: 0오류를 수정했습니다. #4683 (Amos Bird)hasAny또는hasAll함수를 잘못된 인수로 호출하면 세그멘테이션 오류가 발생할 수 있습니다. #4698 (alexey-milovidov)DROP DATABASE dictionary쿼리를 실행하는 중 교착 상태가 발생할 수 있습니다. #4701 (alexey-milovidov)median및quantile함수의 정의되지 않은 동작 문제를 수정했습니다. #4702 (hcz)network_compression_method가 소문자인 경우 압축 수준 감지를 수정했습니다. v19.1에서 문제가 있었습니다. #4706 (proller)<timezone>UTC</timezone>설정이 무시되는 문제를 수정했습니다(이슈 #4658 해결). #4718 (proller)Distributed테이블에서histogram함수의 동작을 수정했습니다. #4741 (olegkv)destroy of a locked mutextsan 보고 문제를 수정했습니다. #4742 (alexey-milovidov)- 시스템 로그 사용 중 race condition으로 인해 종료 시 발생하던 TSan 보고를 수정했습니다. part_log가 활성화된 경우 종료 시 발생할 수 있던 잠재적인 use-after-free를 수정했습니다. #4758 (alexey-milovidov)
- 오류 발생 시
ReplicatedMergeTreeAlterThread에서 파트를 재확인하도록 수정했습니다. #4772 (Nikolai Kochetov) - 중간 집계 함수 상태에서 상수 인수(예: 서브쿼리 결과)를 사용할 때 산술 연산이 동작하지 않았습니다. #4776 (alexey-milovidov)
- 메타데이터에서는 항상 컬럼 이름을 백쿼트로 묶습니다. 그렇지 않으면 이름이
index인 컬럼이 있는 테이블을 생성할 수 없습니다(메타데이터에 잘못된ATTACH쿼리가 있어 server가 재시작되지 않음). #4782 (alexey-milovidov) Distributed테이블에서ALTER ... MODIFY ORDER BY실행 시 발생하던 크래시를 수정했습니다. #4790 (TCeason)enable_optimize_predicate_expression가 활성화된 상태에서 발생하던JOIN ONsegfault를 수정했습니다. #4794 (Winter Zhang)- Kafka에서 protobuf 메시지를 소비한 뒤 불필요한 행이 추가되는 버그를 수정했습니다. #4808 (Vitaly Baranov)
- 널 비허용 컬럼과 널 허용 컬럼 간
JOIN에서 발생하던 충돌을 수정했습니다.ANY JOIN+join_use_nulls에서 오른쪽 키의NULL처리 문제를 수정했습니다. #4815 (Artem Zuikov) clickhouse-copier의 세그멘테이션 오류를 수정했습니다. #4835 (proller)- 테이블 이름이 변경되거나 동시에 수정될 때
system.tables에서SELECT할 경우 발생하던 경쟁 상태를 수정했습니다. #4836 (alexey-milovidov) - 이미 사용 중단된 데이터 파트를 가져오는 과정에서 발생하던 데이터 레이스를 수정했습니다. #4839 (alexey-milovidov)
- MergeTree 엔진 계열 테이블의
RENAME수행 중 드물게 발생할 수 있는 데이터 레이스를 수정했습니다. #4844 (alexey-milovidov) - 함수
arrayIntersect의 세그멘테이션 폴트를 수정했습니다. 이 함수가 상수 인수와 일반 인수가 섞인 상태로 호출되면 세그멘테이션 폴트가 발생할 수 있었습니다. #4847 (Lixiang Qian) - 컬럼에 빈 배열이 길게 연속으로 포함된 드문 경우
Array(LowCardinality)컬럼을 읽을 때 발생하던 문제가 수정되었습니다. #4850 (Nikolai Kochetov) - 널 허용 타입과 널 비허용 타입을 조인할 때
FULL/RIGHT JOIN에서 발생하던 충돌을 수정했습니다. #4855 (Artem Zuikov) - 레플리카 간 파트 fetch 중 발생하던
No message received예외를 수정했습니다. #4856 (alesapin) - 단일 배열에서 동일한 값이 여러 번 반복될 때
arrayIntersect함수가 잘못된 결과를 반환하던 문제를 수정했습니다. #4871 (Nikolai Kochetov) - 동시에 실행되는
ALTER COLUMN쿼리 중 발생할 수 있던 경쟁 상태를 수정해 서버 충돌로 이어질 수 있던 문제를 해결했습니다(이슈 #3421 수정). #4592 (Alex Zatelepin) - 상수 컬럼이 있는
FULL/RIGHT JOIN에서 잘못된 결과가 반환되던 문제를 수정했습니다. #4723 (Artem Zuikov) GLOBAL JOIN에서 별표(*) 사용 시 발생하는 중복 문제를 수정했습니다. #4705 (Artem Zuikov)- 컬럼 유형이 지정되지 않았을 때 컬럼
CODEC의ALTER MODIFY에서 매개변수 추론을 수정했습니다. #4883 (alesapin) - 함수
cutQueryStringAndFragment()및queryStringAndFragment()는 이제URL에 프래그먼트는 있지만 쿼리는 없을 때 올바르게 작동합니다. #4894 (Vitaly Baranov) min_bytes_to_use_direct_io설정이 0보다 클 때 발생하는 드문 버그를 수정했습니다. 이 버그는 스레드가 컬럼 파일에서 뒤쪽으로 seek해야 할 때 발생합니다. #4897 (alesapin)LowCardinality인수가 있는 집계 함수의 인수 타입 오류 수정(이슈 #4919 해결). #4922 (Nikolai Kochetov)GLOBAL JOIN의 잘못된 이름 한정 문제를 수정했습니다. #4969 (Artem Zuikov)- 1970년의
toISOWeek함수 결과를 수정했습니다. #4988 (alexey-milovidov) ReplicatedMergeTree*계열 테이블에 대해ON CLUSTER에서 실행할 때 발생하던DROP,TRUNCATE,OPTIMIZE쿼리 중복 문제를 수정했습니다. #4991 (alesapin)
하위 호환되지 않는 변경 사항
- 설정
insert_sample_with_metadata의 이름이 설정input_format_defaults_for_omitted_fields로 변경되었습니다. #4771 (Artem Zuikov) - 설정
max_partitions_per_insert_block이 추가되었습니다(기본값은 100). 삽입된 블록에 이보다 많은 파티션이 포함되어 있으면 예외가 발생합니다. 제한을 없애려면 이 값을 0으로 설정하십시오(권장하지 않음). #4845 (alexey-milovidov) - 다중 검색 함수의 이름이 변경되었습니다(
multiPosition→multiSearchAllPositions,multiSearch→multiSearchAny,firstMatch→multiSearchFirstIndex). #4780 (Danila Kutenin)
성능 개선
- 인라인화를 통해 Volnitsky 검색기를 최적화하여, 검색 대상 문자열(needle)이 많거나 유사한 바이그램이 많은 쿼리의 검색 성능을 약 5~10% 개선했습니다. #4862 (Danila Kutenin)
use_uncompressed_cache설정이 0보다 클 때, 읽을 데이터가 모두 cache에 들어 있는 경우 발생하던 성능 문제를 수정했습니다. #4913 (alesapin)
빌드/테스트/패키징 개선
- 디버그 빌드를 강화했습니다. 더 세분화된 메모리 매핑과 ASLR을 적용하고, 마크 캐시와 인덱스에 대한 메모리 보호를 추가했습니다. 이를 통해 ASan과 MSan으로 잡아내지 못하는 경우에도 더 많은 메모리 손상 버그를 발견할 수 있습니다. #4632 (alexey-milovidov)
- cmake 변수
ENABLE_PROTOBUF,ENABLE_PARQUET,ENABLE_BROTLI지원을 추가해 위 기능을 활성화하거나 비활성화할 수 있도록 했습니다(librdkafka,mysql등에서 할 수 있는 방식과 동일). #4669 (Silviu Caragea) - 테스트 실행 후 일부 쿼리가 멈춰 응답하지 않을 때 프로세스 목록과 모든 스레드의 스택트레이스를 출력하는 기능을 추가했습니다. #4675 (alesapin)
clickhouse-test에서Connection loss오류 발생 시 재시도하도록 했습니다. #4682 (alesapin)- packager 스크립트에 Vagrant를 사용하는 FreeBSD 빌드와 Thread Sanitizer를 사용하는 빌드를 추가했습니다. #4712 #4748 (alesapin)
- 이제 설치 중 사용자
'default'의 비밀번호를 입력하도록 했습니다. #4725 (proller) rdkafka라이브러리의 경고를 억제했습니다. #4740 (alexey-milovidov)- SSL 없이 빌드할 수 있도록 했습니다. #4750 (proller)
- 사용자 지정 계정으로 clickhouse-server 이미지를 실행할 수 있는 방법을 추가했습니다. #4753 (Mikhail f. Shiryaev)
- contrib boost를 1.69로 업그레이드했습니다. #4793 (proller)
- Thread Sanitizer로 컴파일할 때
mremap사용을 비활성화했습니다. 놀랍게도 TSan은mremap은 가로채지 않고(mmap,munmap은 가로챔), 이로 인해 거짓 양성이 발생합니다. stateful 테스트에서의 TSan 리포트도 수정했습니다. #4859 (alexey-milovidov) - HTTP 인터페이스를 통해 포맷 스키마를 사용하는 경우를 검증하는 테스트를 추가했습니다. #4864 (Vitaly Baranov)
ClickHouse 릴리스 19.4
ClickHouse 릴리스 19.4.4.33, 2019-04-17
버그 수정
- 메모리 할당에 실패한 경우
std::terminate가 호출되지 않도록 수정했습니다. 이제 예상대로std::bad_alloc예외가 발생합니다. #4665 (alexey-milovidov) - 버퍼에서
capnproto를 읽는 문제를 수정했습니다. 경우에 따라 HTTP로 파일이 정상적으로 로드되지 않던 문제를 수정했습니다. #4674 (Vladislav) OPTIMIZE TABLE FINAL쿼리 실행 후Unknown log entry type: 0오류가 발생하던 문제를 수정했습니다. #4683 (Amos Bird)hasAny또는hasAll함수에 잘못된 인수를 전달하면 segfault가 발생할 수 있습니다. #4698 (alexey-milovidov)DROP DATABASE dictionary쿼리 실행 중 교착 상태가 발생할 수 있습니다. #4701 (alexey-milovidov)median및quantile함수의 정의되지 않은 동작 문제를 수정했습니다. #4702 (hcz)network_compression_method가 소문자일 때 압축 수준 감지가 올바르게 되지 않던 문제를 수정했습니다. 이 문제는 v19.1에서 발생했습니다. #4706 (proller)<timezone>UTC</timezone>설정이 무시되던 문제를 수정했습니다(이슈 #4658 해결). #4718 (proller)Distributed테이블에서histogram함수의 동작을 수정했습니다. #4741 (olegkv)- tsan 보고서에서 보고된
destroy of a locked mutex문제를 수정했습니다. #4742 (alexey-milovidov) - 시스템 로그 사용의 경쟁 상태로 인해 종료 시 발생하던 TSan 리포트를 수정했습니다. part_log가 활성화된 경우 종료 시 발생할 수 있던 use-after-free를 수정했습니다. #4758 (alexey-milovidov)
- 오류 발생 시
ReplicatedMergeTreeAlterThread에서 파트를 다시 확인하는 동작을 수정했습니다. #4772 (Nikolai Kochetov) - 중간 집계 함수 상태에서의 산술 연산은 상수 인수(예: 서브쿼리 결과)에 대해 동작하지 않았습니다. #4776 (alexey-milovidov)
- 메타데이터에서는 항상 컬럼 이름을 백쿼트로 감싸야 합니다. 그렇지 않으면 컬럼 이름이
index인 테이블을 생성할 수 없습니다(메타데이터에 잘못된ATTACH쿼리가 있어 서버가 다시 시작되지 않습니다). #4782 (alexey-milovidov) Distributed테이블에서ALTER ... MODIFY ORDER BY실행 중 발생하는 크래시를 수정했습니다. #4790 (TCeason)enable_optimize_predicate_expression가 활성화된 상태의JOIN ON에서 발생하는 segfault를 수정했습니다. #4794 (Winter Zhang)- Kafka에서 protobuf 메시지를 읽어들인 후 불필요한 행이 하나 추가되는 버그를 수정했습니다. #4808 (Vitaly Baranov)
clickhouse-copier의 segmentation fault를 수정했습니다. #4835 (proller)system.tables에서SELECT하는 동안 테이블 이름이 변경되거나 수정될 때 발생하던 경쟁 상태를 수정했습니다. #4836 (alexey-milovidov)- 이미 obsolete 상태인 데이터 파트(data part)를 가져오는 과정에서 발생하던 데이터 레이스를 수정했습니다. #4839 (alexey-milovidov)
- MergeTree 엔진 계열 테이블의
RENAME도중 드물게 발생할 수 있는 데이터 레이스를 수정했습니다. #4844 (alexey-milovidov) - 함수
arrayIntersect의 세그먼테이션 오류를 수정했습니다. 함수가 상수 인수와 일반 인수가 섞인 상태로 호출되면 세그먼테이션 오류가 발생할 수 있었습니다. #4847 (Lixiang Qian) Array(LowCardinality)컬럼에 빈 배열이 길게 연속된 드문 경우 발생하던 읽기 문제가 수정되었습니다. #4850 (Nikolai Kochetov)- 레플리카 간 파트를 가져오는 과정에서 발생하던
No message received예외를 수정했습니다. #4856 (alesapin) - 하나의 배열에 동일한 값이 여러 번 포함된 경우
arrayIntersect함수가 잘못된 결과를 반환하던 문제를 수정했습니다. #4871 (Nikolai Kochetov) - 서버 충돌을 일으킬 수 있던 동시에 실행되는
ALTER COLUMN쿼리에서의 경쟁 상태를 수정했습니다(이슈 #3421 수정). #4592 (Alex Zatelepin) - 컬럼 타입이 지정되지 않은 경우, 컬럼
CODEC의ALTER MODIFY에서 매개변수 추론이 올바르게 동작하도록 수정했습니다. #4883 (alesapin) - 함수
cutQueryStringAndFragment()및queryStringAndFragment()는 이제URL에 프래그먼트는 있지만 쿼리는 없을 때도 올바르게 작동합니다. #4894 (Vitaly Baranov) - 설정
min_bytes_to_use_direct_io가 0보다 클 때, 스레드가 컬럼 파일에서 뒤로 seek해야 할 경우 드물게 발생하던 버그를 수정했습니다. #4897 (alesapin) LowCardinality인수가 있는 집계 함수의 잘못된 인수 타입을 수정했습니다(이슈 #4919 해결). #4922 (Nikolai Kochetov)- 1970년의
toISOWeek함수 결과를 수정했습니다. #4988 (alexey-milovidov) ReplicatedMergeTree*테이블 계열에서ON CLUSTER로 실행한DROP,TRUNCATE,OPTIMIZE쿼리의 중복 문제를 수정했습니다. #4991 (alesapin)
개선 사항
- 일반 컬럼,
DEFAULT,MATERIALIZED,ALIAS컬럼을 하나의 목록으로 유지합니다(이슈 #2867 수정). #4707 (Alex Zatelepin)
ClickHouse 릴리스 19.4.3.11, 2019-04-02
버그 수정
- 널 허용 컬럼과 널 비허용 컬럼을 기준으로
FULL/RIGHT JOIN을 수행할 때 발생하던 충돌을 수정했습니다. #4855 (Artem Zuikov) clickhouse-copier에서 발생하던 세그멘테이션 폴트를 수정했습니다. #4835 (proller)
빌드/테스트/패키징 개선
- 사용자 지정 사용자 계정으로 clickhouse-server 이미지를 실행할 수 있는 방법을 추가했습니다. #4753 (Mikhail f. Shiryaev)
ClickHouse 릴리스 19.4.2.7, 2019-03-30
버그 수정
- 드물게 컬럼에 빈 배열이 길게 연속해서 포함된 경우
Array(LowCardinality)컬럼을 읽을 때 발생하던 문제를 수정했습니다. #4850 (Nikolai Kochetov)
ClickHouse 릴리스 19.4.1.3, 2019-03-19
버그 수정
LIMIT BY와LIMIT를 모두 포함하는 원격 쿼리의 문제를 수정했습니다. 이전에는 원격 쿼리에서LIMIT BY와LIMIT를 함께 사용하면LIMIT BY보다 먼저LIMIT가 적용되어, 결과가 지나치게 필터링될 수 있었습니다. #4708 (Constantin S. Pan)
ClickHouse 릴리스 19.4.0.49, 2019-03-09
새로운 기능
형식포맷을 완전히 지원합니다(입력 및 출력, 중첩 데이터 구조 포함). #4174 #4493 (Vitaly Baranov)- Roaring Bitmaps를 사용하는 비트맵 함수가 추가되었습니다. #4207 (Andy Yang) #4568 (Vitaly Baranov)
- Parquet 포맷 지원이 추가되었습니다. #4448 (proller)
- 퍼지 문자열 비교를 위한 n-그램 거리가 추가되었습니다. 이는 R 언어의 q-gram 메트릭과 유사합니다. #4466 (Danila Kutenin)
- 별도의 집계 및 보존 패턴으로부터 graphite 롤업 규칙을 결합할 수 있습니다. #4426 (Mikhail f. Shiryaev)
- 리소스 사용량을 제한하기 위해
max_execution_speed및max_execution_speed_bytes가 추가되었습니다. 또한min_execution_speed를 보완하는min_execution_speed_bytes설정도 추가되었습니다. #4430 (Winter Zhang) flatten함수가 구현되었습니다. #4555 #4409 (alexey-milovidov, kzon)arrayEnumerateDenseRanked및arrayEnumerateUniqRanked함수가 추가되었습니다(arrayEnumerateUniq와 비슷하지만, 다차원 배열 내부를 확인할 배열 깊이를 세밀하게 조정할 수 있습니다). #4475 (proller) #4601 (alexey-milovidov)- 일부 제약이 있는 다중 조인: 별표(*) 사용 불가, ON/WHERE/GROUP BY/…에서 복잡한 별칭 사용 불가 #4462 (Artem Zuikov)
버그 수정
- 이 릴리스에는 19.3 및 19.1의 모든 버그 수정 사항도 포함되어 있습니다.
- 데이터 스킵 인덱스의 버그를 수정했습니다. INSERT 후 그래뉼의 순서가 잘못되던 문제입니다. #4407 (Nikita Vasilev)
Nullable및LowCardinality컬럼의set인덱스를 수정했습니다. 이전에는Nullable또는LowCardinality컬럼에서set인덱스를 사용하면 조회 시Data type must be deserialized with multiple streams오류가 발생했습니다. #4594 (Nikolai Kochetov)- 전체
executable딕셔너리를 업데이트할 때update_time이 올바르게 설정되도록 수정했습니다. #4551 (Tema Novikov) - 19.3에서 오작동하던 진행률 표시줄을 수정했습니다. #4627 (filimonov)
- 특정 경우 메모리 영역이 축소될 때 MemoryTracker 값이 일관되지 않던 문제를 수정했습니다. #4619 (alexey-milovidov)
- ThreadPool에서의 정의되지 않은 동작을 수정했습니다. #4612 (alexey-milovidov)
mutex lock failed: Invalid argument메시지와 함께 발생할 수 있던 매우 드문 충돌 문제를 수정했습니다. 이 문제는 MergeTree 테이블이 SELECT와 동시에 삭제될 때 발생할 수 있었습니다. #4608 (Alex Zatelepin)- ODBC 드라이버의
LowCardinality데이터 타입 호환성. #4381 (proller) - FreeBSD:
AIOcontextPool: Found io_event with unknown id 0오류에 대한 수정. #4438 (urgordeadbeef) system.part_log테이블은 구성과 관계없이 생성되었습니다. #4483 (alexey-milovidov)- 캐시 딕셔너리에서
dictIsIn함수의 정의되지 않은 동작을 수정했습니다. #4515 (alesapin) - SELECT 쿼리가 동일한 테이블을 여러 차례 잠그고(예: 서로 다른 스레드에서 또는 여러 서브쿼리를 실행할 때), 동시에 DDL 쿼리가 수행될 경우 발생하던 데드락을 수정했습니다. #4535 (Alex Zatelepin)
- 자체
llvmcontrib를 확보하고clang및asan으로 테스트할 수 있을 때까지compile_expressions를 기본적으로 비활성화합니다. #4579 (alesapin) clickhouse외부 딕셔너리 소스의invalidate_query가 잘못된 결과 집합(비어 있거나, 행이 2개 이상이거나, 컬럼이 2개 이상인 경우)을 반환할 때std::terminate가 발생하지 않도록 했습니다.lifetime과 무관하게invalidate_query가 5초마다 수행되던 문제도 수정했습니다. #4583 (alexey-milovidov)clickhouse소스를 사용하는 딕셔너리의invalidate_query에system.dictionaries테이블 또는Dictionaries데이터베이스가 포함된 경우 발생할 수 있는 데드락을 방지했습니다(드문 사례). #4599 (alexey-milovidov)- WHERE 절이 비어 있는 CROSS JOIN 수정. #4598 (Artem Zuikov)
- 상수 인수가 전달될 때 함수 “replicate”에서 발생하는 세그폴트를 수정했습니다. #4603 (alexey-milovidov)
- 프레디케이트 최적화기와 관련된 람다 함수 문제를 수정했습니다. #4408 (Winter Zhang)
- 다중 조인 관련 여러 수정. #4595 (Artem Zuikov)
개선 사항
- JOIN ON 절에서 오른쪽 테이블 컬럼의 별칭(alias)을 지원합니다. #4412 (Artem Zuikov)
- 여러 JOIN의 결과에서 서브쿼리에 사용할 올바른 결과 이름이 필요합니다. 결과에서 단순 별칭을 소스 이름으로 대체합니다. #4474 (Artem Zuikov)
- 조인이 포함된 SQL 문의 푸시다운 로직을 개선했습니다. #4387 (Ivan)
성능 개선
- “move to PREWHERE” 최적화의 휴리스틱을 개선했습니다. #4405 (alexey-milovidov)
- 8비트 및 16비트 키에 대해 HashTable API를 사용하는 적절한 lookup table을 적용했습니다. #4536 (Amos Bird)
- 문자열 비교 성능을 개선했습니다. #4564 (alexey-milovidov)
- 분산 DDL 작업을 처리하는 메인 루프의 속도가 저하되지 않도록 분산 DDL 큐 정리를 별도 thread에서 수행하도록 했습니다. #4502 (Alex Zatelepin)
min_bytes_to_use_direct_io를 1로 설정한 경우, 읽을 데이터 크기가 압축 block 하나의 크기만큼 과소평가되는 일이 있어 모든 file이 O_DIRECT 모드로 열리지는 않았습니다. #4526 (alexey-milovidov)
빌드/테스트/패키징 개선
- clang-9 지원을 추가했습니다 #4604 (alexey-milovidov)
- 잘못된
__asm__명령어를 다시 수정했습니다 #4621 (Konstantin Podshumok) - 명령줄에서
clickhouse-performance-test의 설정을 지정할 수 있는 기능을 추가했습니다. #4437 (alesapin) - Dictionaries 테스트를 통합 테스트에 추가했습니다. #4477 (alesapin)
- 웹사이트 벤치마크의 쿼리를 자동화된 성능 테스트에 추가했습니다. #4496 (alexey-milovidov)
xxhash.h는 구현 세부 사항이며 심볼이XXH_NAMESPACE매크로로 네임스페이스 처리되므로 외부 lz4에는 존재하지 않습니다. lz4를 외부 라이브러리로 사용하는 경우 xxHash도 외부여야 하며, 이에 의존하는 구성 요소도 여기에 링크해야 합니다. #4495 (Orivej Desh)quantileTiming집계 함수가 음수 또는 부동소수점 인수로 호출될 수 있던 경우를 수정했습니다(이로써 정의되지 않은 동작 sanitizer를 사용하는 퍼즈 테스트도 수정됩니다). #4506 (alexey-milovidov)- 철자 오류를 수정했습니다. #4531 (sdk2)
- Mac에서 컴파일 문제가 발생하던 부분을 수정했습니다. #4371 (Vitaly Baranov)
- FreeBSD 및 다양한 비표준 빌드 구성에서의 빌드 문제를 수정했습니다. #4444 (proller)
ClickHouse 릴리스 19.3
ClickHouse 릴리스 19.3.9.1, 2019-04-02
버그 수정
FULL/RIGHT JOIN에서 널 허용 여부가 다른 컬럼을 기준으로 조인할 때 발생하던 충돌을 수정했습니다. #4855 (Artem Zuikov)clickhouse-copier에서 발생하던 세그멘테이션 폴트를 수정했습니다. #4835 (proller)- 드물게 컬럼에 빈 배열이 길게 연속되어 있는 경우
Array(LowCardinality)컬럼을 읽을 때 발생하던 문제를 수정했습니다. #4850 (Nikolai Kochetov)
빌드/테스트/패키징 개선
- 사용자 지정 계정으로 clickhouse-server 이미지를 실행할 수 있는 방법 추가 #4753 (Mikhail f. Shiryaev)
ClickHouse 릴리스 19.3.7, 2019-03-12
버그 수정
- #3920의 오류를 수정했습니다. 이 오류는 캐시가 무작위로 손상되는 현상(메시지
Unknown codec family code,Cannot seek through file)과 세그멘테이션 폴트로 나타납니다. 이 버그는 19.1 버전에서 처음 발생했으며, 19.1.10 및 19.3.6까지의 버전에 존재합니다. #4623 (alexey-milovidov)
ClickHouse 릴리스 19.3.6, 2019-03-02
버그 수정
- 스레드 풀에 1000개가 넘는 스레드가 있으면 스레드 종료 시
std::terminate가 발생할 수 있던 문제를 수정했습니다. Azat Khuzhin #4485 #4505 (alexey-milovidov) - 이제 기본값이 없는 컬럼에 comment가 있는
ReplicatedMergeTree*테이블과, comment와 기본값이 없는 컬럼 코덱이 있는 테이블을 생성할 수 있습니다. 또한 코덱 비교도 수정했습니다. #4523 (alesapin) - 배열 또는 Tuple로 JOIN할 때 발생하던 크래시를 수정했습니다. #4552 (Artem Zuikov)
ThreadStatus not created메시지와 함께 clickhouse-copier에서 발생하던 크래시를 수정했습니다. #4540 (Artem Zuikov)- 분산 DDL을 사용한 경우 서버 종료 시 발생하던 멈춤 현상을 수정했습니다. #4472 (Alex Zatelepin)
- 번호가 10보다 큰 컬럼의 텍스트 포맷 파싱 관련 오류 메시지에 잘못된 컬럼 번호가 출력되던 문제를 수정했습니다. #4484 (alexey-milovidov)
빌드/테스트/패키징 개선 사항
- AVX를 활성화한 상태에서 빌드가 되지 않던 문제를 수정했습니다. #4527 (alexey-milovidov)
- 컴파일 시 사용된 커널이 아니라, 잘 알려진 안정 버전을 기준으로 확장 accounting 및 IO accounting을 활성화하도록 변경했습니다. #4541 (nvartolomei)
core_dump.size_limit설정을 건너뛸 수 있도록 했으며, 한도 설정에 실패할 경우 예외를 발생시키는 대신 경고를 출력하도록 했습니다. #4473 (proller)Field.cpp에서void readBinary(...)의inline태그를 제거했습니다. 또한 중복된namespace DB블록도 머지했습니다. #4530 (hcz)
ClickHouse 릴리스 19.3.5, 2019-02-21
버그 수정
- 대용량 HTTP 삽입 쿼리 처리와 관련된 버그를 수정했습니다. #4454 (alesapin)
send_logs_level설정의 잘못된 구현으로 인해 발생한 이전 버전과의 하위 호환성 문제를 수정했습니다. #4445 (alexey-milovidov)- 컬럼 주석 도입과 함께 발생한 테이블 함수
remote의 이전 버전과의 하위 호환성 문제를 수정했습니다. #4446 (alexey-milovidov)
ClickHouse 릴리스 19.3.4, 2019-02-16
개선 사항
ATTACH TABLE쿼리 수행 시 테이블 인덱스 크기가 메모리 제한에 포함되지 않던 문제를 수정했습니다. 분리된 후 테이블을 다시 ATTACH하지 못하는 상황이 발생할 가능성을 방지했습니다. #4396 (alexey-milovidov)- ZooKeeper에서 수신하는 최대 문자열 및 배열 크기 제한을 약간 높였습니다. 이를 통해 ZooKeeper에서
CLIENT_JVMFLAGS=-Djute.maxbuffer=...크기가 증가한 경우에도 계속 동작할 수 있습니다. #4398 (alexey-milovidov) - 큐에 이미 매우 많은 수의 노드가 있더라도 방치된 레플리카를 복구할 수 있도록 했습니다. #4399 (alexey-milovidov)
SET인덱스에 필수 인수 1개를 추가했습니다(저장할 수 있는 최대 행 수). #4386 (Nikita Vasilev)
버그 수정
- 단일
LowCardinality키로 그룹화할 때WITH ROLLUP결과가 올바르게 나오도록 수정했습니다. #4384 (Nikolai Kochetov) - set 인덱스의 버그를 수정했습니다(
max_rows개보다 많은 행을 포함한 그래뉼이 삭제되던 문제). #4386 (Nikita Vasilev) - FreeBSD 빌드 관련 수정이 대거 이루어졌습니다. #4397 (proller)
- 동일한 별칭을 포함한 서브쿼리가 있는 쿼리에서 별칭 치환 문제를 수정했습니다(이슈 #4110). #4351 (Artem Zuikov)
빌드/테스트/패키징 개선 사항
- Docker image에서 stateless tests용으로
clickhouse-server를 실행할 수 있는 기능 추가. #4347 (Vasily Nemkov)
ClickHouse 릴리스 19.3.3, 2019-02-13
새로운 기능
- 어떤 이유로 멈춰 있는 뮤테이션을 제거할 수 있는
KILL MUTATION구문을 추가했습니다. 문제 해결을 더 쉽게 할 수 있도록system.mutations테이블에latest_failed_part,latest_fail_time,latest_fail_reason필드도 추가했습니다. #4287 (Alex Zatelepin) - Shannon 엔트로피를 계산하는 집계 함수
entropy를 추가했습니다. #4238 (Quid37) INSERT INTO tbl VALUES (....쿼리를query와data파트로 나누지 않고 server로 전송할 수 있는 기능을 추가했습니다. #4301 (alesapin)arrayWithConstant함수의 범용 구현을 추가했습니다. #4322 (alexey-milovidov)NOT BETWEEN비교 연산자를 구현했습니다. #4228 (Dmitry Naumov)sumMap으로 값을 합산할 키 수를 제한할 수 있도록sumMapFiltered를 구현했습니다. #4129 (Léo Ercolanelli)mysql테이블 함수에 널 허용 타입 지원을 추가했습니다. #4198 (Emmanuel Donin de Rosière)LIMIT절에서 임의의 상수 표현식을 지원합니다. #4246 (k3box)- 추가 인수로 (부호 없는 정수) 가중치를 받는
topKWeighted집계 함수를 추가했습니다. #4245 (Andrew Golman) - 이제
StorageJoin은 동일한 키의 기존 값을 덮어쓸 수 있는join_any_take_last_row설정을 지원합니다. #3973 (Amos Bird toStartOfInterval함수를 추가했습니다. #4304 (Vitaly Baranov)RowBinaryWithNamesAndTypes포맷을 추가했습니다. #4200 (Oleg V. Kozlyuk)IPv4및IPv6데이터 타입을 추가했습니다.IPv*함수의 구현도 더 효율적으로 개선했습니다. #3669 (Vasily Nemkov)toStartOfTenMinutes()함수를 추가했습니다. #4298 (Vitaly Baranov)Protobuf출력 형식을 추가했습니다. #4005 #4158 (Vitaly Baranov)- 데이터 가져오기(삽입)를 위한 HTTP 인터페이스에 brotli 지원을 추가했습니다. #4235 (Mikhail)
- 사용자가 명령줄 클라이언트에서 함수 이름이나 타입을 잘못 입력했을 때 힌트를 표시하도록 했습니다. #4239 (Danila Kutenin)
- Server의 HTTP 응답 헤더에
Query-Id를 추가했습니다. #4231 (Mikhail)
실험적 기능
- MergeTree 테이블 엔진 계열에
minmax및set데이터 스킵 인덱스를 추가했습니다. #4143 (Nikita Vasilev) - 가능한 경우
CROSS JOIN을INNER JOIN으로 변환하도록 추가했습니다. #4221 #4266 (Artem Zuikov)
버그 수정
JOIN ON섹션에서 중복 컬럼으로 인해 발생하던Not found column문제가 수정되었습니다. #4279 (Artem Zuikov)START REPLICATED SENDS명령이 복제 전송을 시작하도록 했습니다. #4229 (nvartolomei)Array(LowCardinality)인수를 사용하는 집계 함수 실행이 수정되었습니다. #4055 (KochetovNicolai)INSERT ... SELECT ... FROM file(...)쿼리를 실행할 때, 파일의 포맷이CSVWithNames또는TSVWIthNames이고 첫 번째 데이터 행이 누락된 경우 발생하던 잘못된 동작을 수정했습니다. #4297 (alexey-milovidov)- 딕셔너리를 다시 로드할 때 해당 딕셔너리를 사용할 수 없는 경우 발생하던 충돌을 수정했습니다. 이 버그는 19.1.6에서 나타났습니다. #4188 (proller)
- 오른쪽 테이블에 중복이 있는 경우의
ALL JOIN문제를 수정했습니다. #4184 (Artem Zuikov) use_uncompressed_cache=1사용 시 발생하던 segmentation fault와 압축되지 않은 크기가 잘못되어 발생하던 예외를 수정했습니다. 이 버그는 19.1.6에서 나타났습니다. #4186 (alesapin)int16보다 큰 날짜를 비교할 때 발생하던compile_expressions버그를 수정했습니다. #4341 (alesapin)numbers(0)테이블 함수에서 SELECT할 때 발생하던 무한 루프를 수정했습니다. #4280 (alexey-milovidov)ORDER BY에 대한 프레디케이트 최적화를 일시적으로 비활성화했습니다. #3890 (Winter Zhang)- 오래된 CPU에서 base64 함수를 사용할 때 발생하는
Illegal instruction오류를 수정했습니다. 이 오류는 ClickHouse를 gcc-8로 컴파일한 경우에만 재현되었습니다. #4275 (alexey-milovidov) - TLS 연결을 통해 PostgreSQL ODBC 드라이버와 통신할 때 발생하던
No message received오류를 수정했습니다. 또한 MySQL ODBC 드라이버 사용 시 발생하던 segfault도 수정했습니다. #4170 (alexey-milovidov) - 조건부 연산자(함수
if)의 분기에서Date및DateTime인수를 사용할 때 잘못된 결과가 반환되던 문제를 수정했습니다. 함수if에 대한 일반적인 경우를 추가했습니다. #4243 (alexey-milovidov) - 이제 ClickHouse Dictionaries가
clickhouse프로세스 내에서 로드됩니다. #4166 (alexey-milovidov) File엔진을 사용하는 테이블에서SELECT수행 중No such file or directory오류가 발생한 후 재시도할 때 발생하던 데드락을 수정했습니다. #4161 (alexey-milovidov)system.tables에서 조회할 때table does not exist오류가 발생할 수 있는 경쟁 상태를 수정했습니다. #4313 (alexey-milovidov)clickhouse-client가 대화형 모드로 실행된 경우, 명령줄 자동 완성 제안용 데이터를 로드하는 중 종료 시 segfault가 발생할 수 있습니다. #4317 (alexey-milovidov)IN연산자가 포함된 뮤테이션 실행 시 잘못된 결과가 발생하던 버그를 수정했습니다. #4099 (Alex Zatelepin)- 오류 수정:
Dictionary엔진이 있는 데이터베이스가 있으면 서버 시작 시 모든 딕셔너리가 강제로 로드되고, localhost의 ClickHouse를 source로 사용하는 딕셔너리가 있으면 로드되지 않던 문제를 수정했습니다. #4255 (alexey-milovidov) - 서버 종료 시 system logs를 다시 생성하려고 할 때 발생하던 오류를 수정했습니다. #4254 (alexey-milovidov)
joinGet함수에서 올바른 타입을 반환하고 잠금을 적절히 처리합니다. #4153 (Amos Bird)sumMapWithOverflow함수가 추가되었습니다. #4151 (Léo Ercolanelli)allow_experimental_multiple_joins_emulation관련 segfault를 수정했습니다. 52de2c (Artem Zuikov)Date및DateTime비교가 잘못되던 버그를 수정했습니다. #4237 (valexey)- undefined behavior sanitizer 환경에서 퍼즈 테스트를 수정했습니다.
quantile*Weighted함수 계열에 매개변수 유형 검사를 추가했습니다. #4145 (alexey-milovidov) - 오래된 데이터 파트를 제거하는 과정에서
File not found오류로 실패할 수 있던 드문 경쟁 상태를 수정했습니다. #4378 (alexey-milovidov) - /etc/clickhouse-server/config.xml이 누락되는 설치 패키지 문제를 수정했습니다. #4343 (proller)
빌드/테스트/패키징 개선
- Debian 패키지: 구성에 따라 /etc/clickhouse-server/preprocessed 링크를 올바르게 수정했습니다. #4205 (proller)
- FreeBSD용 다양한 빌드 수정 사항을 반영했습니다. #4225 (proller)
- perftest에서 테이블을 생성하고, 데이터를 채우고, 삭제하는 기능을 추가했습니다. #4220 (alesapin)
- 중복 include를 확인하는 스크립트를 추가했습니다. #4326 (alexey-milovidov)
- 성능 테스트에서 인덱스로 쿼리를 실행하는 기능을 추가했습니다. #4264 (alesapin)
- 디버그 심볼이 포함된 패키지를 설치하도록 권장합니다. #4274 (alexey-milovidov)
- performance-test를 리팩터링했습니다. 로깅과 시그널 처리도 개선했습니다. #4171 (alesapin)
- 익명화된 Yandex.Metrica 데이터셋에 대한 문서를 추가했습니다. #4164 (alesapin)
- 기존 월별 파티션 기반 파트를 사용자 지정 파티션 포맷으로 변환하는 도구를 추가했습니다. #4195 (Alex Zatelepin)
- S3의 두 데이터셋에 대한 문서를 추가했습니다. #4144 (alesapin)
- Pull Request 설명에서 변경 이력을 생성하는 스크립트를 추가했습니다. #4169 #4173 (KochetovNicolai) (KochetovNicolai)
- ClickHouse용 Puppet 모듈을 추가했습니다. #4182 (Maxim Fedotov)
- 문서화되지 않은 함수 그룹에 대한 문서를 추가했습니다. #4168 (Winter Zhang)
- ARM 빌드 수정 사항입니다. #4210#4306 #4291 (proller) (proller)
- 이제 딕셔너리 테스트를
ctest에서 실행할 수 있습니다. #4189 (proller) - 이제 SSL 인증서의 기본 디렉터리로
/etc/ssl을 사용합니다. #4167 (alexey-milovidov) - 시작 시 SSE 및 AVX 명령어를 확인하는 기능을 추가했습니다. #4234 (Igr)
- Init 스크립트가 서버가 시작될 때까지 대기하도록 했습니다. #4281 (proller)
하위 호환되지 않는 변경 사항
allow_experimental_low_cardinality_type설정을 제거했습니다.LowCardinality데이터 타입은 이제 프로덕션 환경에서 사용할 수 있습니다. #4323 (alexey-milovidov)- 사용 가능한 메모리 용량에 맞춰 마크 캐시 크기와 비압축 캐시 크기를 줄였습니다. #4240 (Lopatin Konstantin
CREATE TABLE쿼리에 키워드INDEX를 추가했습니다. 이름이index인 컬럼은 백틱 또는 큰따옴표로 감싸야 합니다:`index`. #4143 (Nikita Vasilev)- 이제
sumMap은 오버플로우 대신 결과 타입을 승격합니다. 기존sumMap동작은sumMapWithOverflow함수를 사용하면 얻을 수 있습니다. #4151 (Léo Ercolanelli)
성능 개선
LIMIT가 없는 쿼리에서std::sort를pdqsort로 대체했습니다. #4236 (Evgenii Pravda)- 이제 서버가 Global Thread 풀의 스레드를 재사용합니다. 이로 인해 일부 특수한 경우 성능에 영향이 있습니다. #4150 (alexey-milovidov)
개선 사항
- FreeBSD용 AIO 지원을 구현했습니다. #4305 (urgordeadbeef)
- 이제
SELECT * FROM a JOIN b USING a, b는a및b컬럼을 왼쪽 테이블에서만 반환합니다. #4141 (Artem Zuikov) - 클라이언트의
-C옵션이-c옵션처럼 동작하도록 했습니다. #4232 (syominsergey) - 이제
--password옵션을 값 없이 사용하면 stdin에서 비밀번호를 읽습니다. #4230 (BSD_Conqueror) LIKE표현식이나 정규식을 포함하는 문자열 리터럴에서 이스케이프되지 않은 메타문자를 하이라이트하도록 했습니다. #4327 (alexey-milovidov)- 클라이언트 socket이 끊어지면 HTTP 읽기 전용 쿼리를 취소하도록 했습니다. #4213 (nvartolomei)
- 이제 서버가 클라이언트 연결을 유지할 수 있도록 진행 상황을 보고합니다. #4215 (Ivan)
optimize_throw_if_noopsetting이 활성화된 OPTIMIZE 쿼리에서 이유를 설명하는 메시지를 조금 더 개선했습니다. #4294 (alexey-milovidov)- ClickHouse 서버에
--version옵션 지원을 추가했습니다. #4251 (Lopatin Konstantin) clickhouse-server에--help/-h옵션을 추가했습니다. #4233 (Yuriy Baranov)- 집계 함수 state 결과를 사용하는 스칼라 서브쿼리 지원을 추가했습니다. #4348 (Nikolai Kochetov)
- 서버 종료 시간과 ALTER 대기 시간을 개선했습니다. #4372 (alexey-milovidov)
- system.replicas에
replicated_can_become_leadersetting 정보를 추가하고, 레플리카가 leader가 되려고 시도하지 않을 경우 로깅을 추가했습니다. #4379 (Alex Zatelepin)
ClickHouse 릴리스 19.1
ClickHouse 릴리스 19.1.14, 2019-03-14
GLOBAL JOIN과SELECT *를 함께 사용할 때(드문 경우)asterisk_left_columns_only설정이 1로 되어 있으면 발생할 수 있는 오류Column ... queried more than once를 수정했습니다. 이 문제는 19.3 이상 버전에서는 발생하지 않습니다. 6bac7d8d (Artem Zuikov)
ClickHouse 릴리스 19.1.13, 2019-03-12
ClickHouse 릴리스 19.1.10, 2019-03-03
ClickHouse 릴리스 19.1
ClickHouse 릴리스 19.1.9, 2019-02-21
버그 수정
send_logs_level설정이 잘못 구현되어 발생한 이전 버전과의 호환성 문제를 수정했습니다. #4445 (alexey-milovidov)- 컬럼 주석(comment) 도입으로 인해 발생한 테이블 함수
remote의 이전 버전과의 호환성 문제를 수정했습니다. #4446 (alexey-milovidov)
ClickHouse 릴리스 19.1.8, 2019-02-16
버그 수정
ClickHouse 릴리스 19.1
ClickHouse 릴리스 19.1.7, 2019-02-15
버그 수정
joinGet함수가 올바른 유형을 반환하고 잠금을 적절히 처리하도록 수정했습니다. #4153 (Amos Bird)- 서버 종료 시 시스템 로그를 다시 생성하려고 할 때 발생하는 오류를 수정했습니다. #4254 (alexey-milovidov)
- 오류 수정:
Dictionary엔진이 있는 데이터베이스가 있으면 server 시작 시 모든 딕셔너리가 강제로 로드되고, source가 localhost의 ClickHouse인 딕셔너리는 로드할 수 없던 오류를 수정했습니다. #4255 (alexey-milovidov) IN연산자를 포함한 뮤테이션을 실행할 때 잘못된 결과가 나오던 버그를 수정했습니다. #4099 (Alex Zatelepin)clickhouse-client를 대화형 모드로 실행한 경우, 명령줄 제안을 위한 데이터를 로딩하는 중 종료 시 segfault가 발생할 수 있습니다. #4317 (alexey-milovidov)system.tables를 조회할 때table does not exist오류가 발생할 수 있던 레이스 컨디션을 수정했습니다. #4313 (alexey-milovidov)No such file or directory오류 발생 후File엔진 테이블에서SELECT를 재시도할 때 발생하던 교착 상태를 수정했습니다. #4161 (alexey-milovidov)- 문제를 수정했습니다: 로컬 ClickHouse 딕셔너리가 TCP를 통해 로드되고 있었지만, 프로세스 내부에서 로드되어야 했습니다. #4166 (alexey-milovidov)
- TLS 연결을 통해 PostgreSQL ODBC 드라이버를 사용할 때 발생하던
No message received오류를 수정했습니다. 또한 MySQL ODBC 드라이버 사용 시 발생하던 segfault도 수정했습니다. #4170 (alexey-milovidov) ORDER BY에 대한 프레디케이트 최적화를 일시적으로 비활성화했습니다. #3890 (Winter Zhang)numbers(0)테이블 함수에서 SELECT할 때 발생하던 무한 루프를 수정했습니다. #4280 (alexey-milovidov)- int16 범위를 초과하는 날짜를 비교할 때 발생하던
compile_expressions버그를 수정했습니다. #4341 (alesapin) uncompressed_cache=1에서 발생하던 세그멘테이션 폴트와 압축되지 않은 크기가 잘못되어 발생하던 예외를 수정했습니다. #4186 (alesapin)- 오른쪽 테이블에 중복값이 있을 때 발생하던
ALL JOIN문제가 수정되었습니다. #4184 (Artem Zuikov) INSERT ... SELECT ... FROM file(...)쿼리 수행 시 파일의 포맷이CSVWithNames또는TSVWIthNames이고 첫 번째 데이터 행이 누락된 경우 발생하던 오동작을 수정했습니다. #4297 (alexey-milovidov)Array(LowCardinality)인수를 사용하는 집계 함수 실행 문제를 수정했습니다. #4055 (KochetovNicolai)- Debian 패키지: 설정에 맞게 /etc/clickhouse-server/preprocessed 링크를 바로잡았습니다. #4205 (proller)
- undefined behavior sanitizer에서 퍼즈 테스트를 수정했습니다.
quantile*Weighted계열 함수에 대한 매개변수 유형 검사를 추가했습니다. #4145 (alexey-milovidov) START REPLICATED SENDS명령이 복제 전송을 시작하도록 했습니다. #4229 (nvartolomei)- JOIN ON 절에서 중복 컬럼으로 인해 발생하던
Not found column문제가 수정되었습니다. #4279 (Artem Zuikov) - 이제
/etc/ssl이 SSL 인증서의 기본 디렉터리로 사용됩니다. #4167 (alexey-milovidov) - 딕셔너리를 다시 로드할 때 딕셔너리를 사용할 수 없으면 발생하던 충돌을 수정했습니다. #4188 (proller)
Date와DateTime비교가 올바르지 않던 버그를 수정했습니다. #4237 (valexey)- 조건부 연산자(함수
if)의 분기에서Date및DateTime인수를 사용할 때 잘못된 결과가 반환되던 문제를 수정했습니다. 함수if에 대한 일반 케이스를 추가했습니다. #4243 (alexey-milovidov)
ClickHouse 릴리스 19.1.6, 2019-01-24
새로운 기능
- 테이블의 컬럼별로 사용자 지정 압축 코덱을 지원합니다. #3899 #4111 (alesapin, Winter Zhang, Anatoly)
- 압축 코덱
Delta를 추가했습니다. #4052 (alesapin) - 압축 코덱에
ALTER를 사용할 수 있습니다. #4054 (alesapin) - SQL 표준과의 호환성을 위해
left,right,trim,ltrim,rtrim,timestampadd,timestampsub함수를 추가했습니다. #3826 (Ivan Blinkov) HDFS테이블 및hdfs테이블 함수에 대한 쓰기를 지원합니다. #4084 (alesapin)- 큰 haystack에서 여러 개의 상수 문자열을 검색하는 함수
multiPosition,multiSearch,firstMatch를 추가했으며,-UTF8,-CaseInsensitive,-CaseInsensitiveUTF8변형도 함께 제공합니다. #4053 (Danila Kutenin) SELECT쿼리가 샤딩 키로 필터링되는 경우, 사용되지 않는 세그먼트에 대한 프루닝을 지원합니다(설정optimize_skip_unused_shards). #3851 (Gleb Kanterov, Ivan)Kafkaengine이 블록당 일정 수의 파싱 오류를 무시할 수 있도록 했습니다. #4094 (Ivan)CatBoost다중 클래스 모델 평가 지원을 추가했습니다.modelEvaluate함수는 다중 클래스 모델에 대해 클래스별 원시 예측값이 들어 있는 튜플을 반환합니다.libcatboostmodel.so는 #607과 함께 빌드해야 합니다. #3959 (KochetovNicolai)filesystemAvailable,filesystemFree,filesystemCapacity함수를 추가했습니다. #4097 (Boris Granveaud)- 해시 함수
xxHash64및xxHash32를 추가했습니다. #3905 (filimonov) - gcc와 동일한 hash seed를 사용하는
gccMurmurHash해시 함수(GCC 방식의 Murmur hash)를 추가했습니다. #4000 (sundyli) - 해시 함수
javaHash,hiveHash를 추가했습니다. #3811 (shangshujie365) - 테이블 함수
remoteSecure를 추가했습니다. 이 함수는remote와 동일하게 동작하지만 보안 연결을 사용합니다. #4088 (proller)
실험적 기능
- 다중 JOIN 에뮬레이션 기능을 추가했습니다(
allow_experimental_multiple_joins_emulation설정). #3946 (Artem Zuikov)
버그 수정
- 메모리 사용량을 낮추기 위해 기본적으로
compiled_expression_cache_size설정에 제한을 두었습니다. #4041 (alesapin) - Replicated 테이블에 대해 ALTER를 수행하는 스레드와 ZooKeeper에서 구성을 업데이트하는 스레드가 멈추던 버그를 수정했습니다. #2947 #3891 #3934 (Alex Zatelepin)
- 분산 ALTER 작업을 실행할 때 발생하던 경쟁 상태를 수정했습니다. 이 경쟁 상태로 인해 2개 이상의 레플리카가 작업을 실행하려고 시도했고, 하나를 제외한 모든 레플리카가 ZooKeeper 오류로 실패했습니다. #3904 (Alex Zatelepin)
- ZooKeeper 요청 시간 초과 후
from_zk구성 요소가 갱신되지 않던 버그를 수정했습니다. #2947 #3947 (Alex Zatelepin) - IPv4 서브넷 마스크에 잘못된 prefix가 사용되던 버그를 수정했습니다. #3945 (alesapin)
- 리소스가 고갈되어 새 스레드를 생성할 수 없는 드문 경우에 발생하던 크래시(
std::terminate)를 수정했습니다. #3956 (alexey-milovidov) remote테이블 함수 실행 시getStructureOfRemoteTable에서 잘못된 제한 조건을 사용하던 버그를 수정했습니다. #4009 (alesapin)- netlink 소켓 누수를 수정했습니다. 이 소켓들은 삭제되지 않는 풀에 들어 있었고, 기존 소켓이 모두 사용 중일 때는 새 스레드가 시작되면서 새 소켓이 생성되었습니다. #4017 (Alex Zatelepin)
odbc-bridge하위 프로세스를 포크한 후/proc에서 모든 fd를 읽기 전에/proc/self/fd디렉터리를 너무 일찍 닫는 버그를 수정했습니다. #4120 (alesapin)- 기본 키에 String을 사용하는 경우 String에서 UInt로의 단조 변환 문제를 수정했습니다. #3870 (Winter Zhang)
- 정수 변환 함수의 단조성 계산 오류를 수정했습니다. #3921 (alexey-milovidov)
- 일부 잘못된 인수가 전달될 때 발생하던
arrayEnumerateUniq,arrayEnumerateDense함수의 segfault를 수정했습니다. #3909 (alexey-milovidov) - StorageMerge의 UB 문제를 수정했습니다. #3910 (Amos Bird)
addDays,subtractDays함수에서 발생하던 segfault를 수정했습니다. #3913 (alexey-milovidov)- 오류를 수정했습니다: 함수
round,floor,trunc,ceil는 정수 인수와 절댓값이 큰 음수 스케일을 사용할 때 잘못된 결과를 반환할 수 있었습니다. #3914 (alexey-milovidov) - ‘kill query sync’로 인해 코어 덤프가 발생하던 버그를 수정했습니다. #3916 (muVulDeePecker)
- 빈 복제 큐 이후 긴 지연이 발생하던 버그를 수정했습니다. #3928 #3932 (alesapin)
LowCardinality프라이머리 키가 있는 테이블에 삽입할 때 발생하던 과도한 메모리 사용 문제를 수정했습니다. #3955 (KochetovNicolai)- 빈 배열일 때
Native포맷의LowCardinality직렬화 문제를 수정했습니다. #3907 #4011 (KochetovNicolai) - 단일 LowCardinality 숫자 컬럼에
distinct by를 사용할 때 발생하던 잘못된 결과 문제를 수정했습니다. #3895 #4012 (KochetovNicolai) - LowCardinality 키를 사용하는 특수화된 집계에서 (
compilesetting이 활성화된 경우) 발생하던 문제를 수정했습니다. #3886 (KochetovNicolai) - 복제된 테이블 쿼리에서 사용자 및 비밀번호 전달 문제를 수정했습니다. #3957 (alesapin) (小路)
- 딕셔너리를 다시 로드하는 동안 Dictionary 데이터베이스에서 테이블 목록을 조회할 때 발생할 수 있는 매우 드문 race condition(경쟁 상태)을 수정했습니다. #3970 (alexey-milovidov)
- HAVING을 ROLLUP 또는 CUBE와 함께 사용할 때 잘못된 결과가 나오던 문제를 수정했습니다. #3756 #3837 (Sam Chou)
JOIN ON구문과 분산 테이블을 사용하는 쿼리에서 컬럼 별칭 문제를 수정했습니다. #3980 (Winter Zhang)quantileTDigest의 내부 구현 오류를 수정했습니다(Artem Vakhrushev가 발견). 이 오류는 ClickHouse에서는 전혀 발생하지 않으며, ClickHouse 코드베이스를 라이브러리로 직접 사용하는 경우에만 해당합니다. #3935 (alexey-milovidov)
개선 사항
ALTER TABLE ADD COLUMNSQL 문에서IF NOT EXISTS를 지원하며,DROP/MODIFY/CLEAR/COMMENT COLUMN에서는IF EXISTS를 지원합니다. #3900 (Boris Granveaud)- 함수
parseDateTimeBestEffort:DD.MM.YYYY,DD.MM.YY,DD-MM-YYYY,DD-Mon-YYYY,DD/Month/YYYY및 이와 유사한 포맷을 지원합니다. #3922 (alexey-milovidov) CapnProtoInputStream이 이제 가변 길이 구조를 지원합니다. #4063 (Odin Hultgren Van Der Horst)- 사용성 개선: 서버 프로세스가 데이터 디렉터리 소유자 계정으로 시작되었는지 확인하는 검사를 추가했습니다. 데이터가 root가 아닌 사용자 소유인 경우에는 root로 서버를 시작할 수 없도록 했습니다. #3785 (sergey-v-galtsev)
- 조인이 포함된 쿼리를 분석할 때 필요한 컬럼을 검사하는 로직을 개선했습니다. #3930 (Artem Zuikov)
- 단일 서버에 분산 테이블이 많은 경우 연결 수를 줄였습니다. #3726 (Winter Zhang)
- ODBC 드라이버에서
WITH TOTALS쿼리의 합계 행을 지원합니다. #3836 (Maksim Koritckiy) if함수 내에서Enum을 정수로 사용할 수 있도록 했습니다. #3875 (Ivan)low_cardinality_allow_in_native_format설정을 추가했습니다. 이 설정이 비활성화되면Native포맷에서LowCadrinality타입을 사용하지 않습니다. #3879 (KochetovNicolai)- 메모리 사용량을 줄이기 위해 컴파일된 표현식 캐시에서 일부 불필요한 객체를 제거했습니다. #4042 (alesapin)
SET send_logs_level = 'value'쿼리가 유효한 값을 받는지 확인하는 검사를 추가했습니다. #3873 (Sabyanin Maxim)- 변환 함수에서 데이터 타입 검사를 수정했습니다. #3896 (Winter Zhang)
성능 개선
- MergeTree 설정
use_minimalistic_part_header_in_zookeeper를 추가했습니다. 활성화하면 복제된 테이블(Replicated Table)은 compact 파트 메타데이터를 단일 파트 znode에 저장합니다. 이렇게 하면 ZooKeeper 스냅샷 크기를 크게 줄일 수 있습니다(특히 테이블에 컬럼이 많은 경우). 이 설정을 활성화한 후에는 이를 지원하지 않는 버전으로 다운그레이드할 수 없습니다. #3960 (Alex Zatelepin) - 패턴에 시간이 포함되지 않은 경우 함수
sequenceMatch와sequenceCount에 DFA 기반 구현을 추가했습니다. #4004 (Léo Ercolanelli) - 정수 직렬화 성능을 개선했습니다. #3968 (Amos Bird)
- -1 요소가 항상 유효하고 0으로 채워지도록 PODArray의 왼쪽에 0 패딩을 추가했습니다. 이는 오프셋을 분기 없이 계산할 때 사용됩니다. #3920 (Amos Bird)
- 성능 저하를 유발하던
jemalloc버전을 되돌렸습니다. #4018 (alexey-milovidov)
하위 호환되지 않는 변경 사항
- 문서화되지 않은 기능인
ALTER MODIFY PRIMARY KEY를 제거했습니다. 이 기능은ALTER MODIFY ORDER BY명령으로 대체되었습니다. #3887 (Alex Zatelepin) - 함수
shardByHash를 제거했습니다. #3833 (alexey-milovidov) - 결과 유형이
AggregateFunction인 스칼라 서브쿼리의 사용을 금지했습니다. #3865 (Ivan)
빌드/테스트/패키징 개선
- PowerPC(
ppc64le) 빌드 지원이 추가되었습니다. #4132 (Danila Kutenin) - 상태 유지형 기능 테스트를 공개적으로 사용 가능한 데이터셋에서 실행합니다. #3969 (alexey-milovidov)
- Docker 또는 systemd-nspawn 환경에서
bash: /usr/bin/clickhouse-extract-from-config: Operation not permitted메시지가 표시되며 server를 시작할 수 없던 오류를 수정했습니다. #4136 (alexey-milovidov) rdkafka라이브러리를 v1.0.0-RC5로 업데이트했습니다. raw C interface 대신 cppkafka를 사용했습니다. #4025 (Ivan)mariadb-client라이브러리를 업데이트했습니다. UBSan에서 발견된 문제 중 하나를 수정했습니다. #3924 (alexey-milovidov)- UBSan 빌드 관련 몇 가지 수정. #3926 #3021 #3948 (alexey-milovidov)
- 각 커밋에 대해 UBSan 빌드 테스트를 실행하도록 추가했습니다.
- 커밋마다 PVS-Studio 정적 분석기를 실행하도록 추가했습니다.
- PVS-Studio에서 발견한 버그를 수정했습니다. #4013 (alexey-milovidov)
- glibc 호환성 문제가 해결되었습니다. #4100 (alexey-milovidov)
- Docker image를 18.10으로 업데이트하고 glibc >= 2.28용 호환 파일 추가 #3965 (alesapin)
- 사용자가 server Docker image에서 디렉터리에 대해 chown을 수행하지 않으려는 경우 사용할 env 변수를 추가했습니다. #3967 (alesapin)
- clang에서
-Weverything의 대부분의 경고를 활성화했습니다.-Wpedantic도 활성화했습니다. #3986 (alexey-milovidov) - clang 8에서만 사용할 수 있는 경고를 몇 가지 더 추가했습니다. #3993 (alexey-milovidov)
- 공유 링크를 사용할 때 개별 LLVM 라이브러리가 아니라
libLLVM에 링크하도록 했습니다. #3989 (Orivej Desh) - 테스트 이미지에 대한 sanitizer 변수를 추가했습니다. #4072 (alesapin)
clickhouse-serverdebian 패키지는 capability를 설정하는 데setcap도구를 사용할 수 있도록libcap2-bin패키지를 권장합니다. 이는 선택 사항입니다. #4093 (alexey-milovidov)- 컴파일 시간이 개선되었고, include 처리도 수정되었습니다. #3898 (proller)
- 해시 함수용 성능 테스트를 추가했습니다. #3918 (filimonov)
- 순환 라이브러리 의존성 문제를 수정했습니다. #3958 (proller)
- 사용 가능한 메모리가 적을 때 컴파일 성능이 개선되었습니다. #4030 (proller)
jemalloc의 성능 저하를 재현하는 테스트 스크립트를 추가했습니다. #4036 (alexey-milovidov)dbms의 주석 및 문자열 리터럴에 있는 오탈자를 수정했습니다. #4122 (maiha)- 주석의 오타를 바로잡았습니다. #4089 (Evgenii Pravda)