본문으로 바로가기
본문으로 바로가기

2019년 변경 내역

ClickHouse 릴리스 19.17

ClickHouse 19.17.6.36 릴리스, 2019-12-27

버그 수정

  • decompress에서 발생할 수 있었던 잠재적인 버퍼 오버플로우를 수정했습니다. 악의적인 사용자가 조작된 압축 데이터를 전달함으로써 버퍼 범위를 벗어난 읽기를 유발할 수 있었습니다. 이 문제는 Yandex 정보 보안 팀의 Eldar Zaitov가 발견했습니다. #8404 (alexey-milovidov)
  • 서버가 JSON 또는 XML 형식으로 데이터를 전송하거나 기록할 수 없는 경우(UTF-8 검증이 필요한 String 데이터 타입 값이 있는 경우), 또는 Brotli 알고리즘으로 결과 데이터를 압축할 때, 혹은 기타 드문 상황에서 std::terminate로 인해 서버가 크래시될 수 있는 문제를 수정했습니다. #8384 (alexey-milovidov)
  • ClickHouse VIEW를 소스로 하는 고정 딕셔너리를 수정하여, 이제 이러한 딕셔너리를 읽어도 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)를 수정했습니다. 이제 이 경우 파일을 먼저 생성한 다음 INSERT를 처리합니다. #8177 (Olga Khvostikova)
  • 집계된 비트맵과 스칼라 비트맵을 교차할 때 발생하던 bitmapAnd 오류를 수정했습니다. #8082 (Yue Huang)
  • EXISTS 쿼리를 TABLE 또는 DICTIONARY 한정자 없이 EXISTS t와 같이 사용했을 때 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #8213 (alexey-milovidov)
  • 널 허용 인자가 주어진 경우 randrandConstant 함수의 반환 타입을 고정했습니다. 이제 이 함수들은 항상 UInt32를 반환하며, Nullable(UInt32)를 반환하지 않습니다. #8204 (Nikolai Kochetov)
  • db가 존재하지 않아도 예외를 발생시키지 않도록 DROP DICTIONARY IF EXISTS db.dict를 수정했습니다. #8185 (Vitaly Baranov)
  • 서버 충돌로 인해 테이블이 완전히 삭제되지 않은 경우, 서버가 해당 테이블을 복구하고 로드하려고 시도합니다 #8176 (tavplubix)
  • 세그먼트 로컬 테이블이 2개보다 많은 경우 분산 테이블에 대한 단순 count 쿼리를 수정했습니다. #8164 (小路)
  • DB::BlockStreamProfileInfo::calculateRowsBeforeLimit()에서 데이터 레이스를 발생시키던 버그를 수정했습니다. #8143 (Alexander Kazakov)
  • 지정된 파트에 대한 파트 병합 직후에 ALTER table MOVE part가 실행되어, 지정된 파트가 병합된 대상 파트를 이동하는 문제가 있었습니다. 이제 지정된 파트만 올바르게 이동합니다. #8104 (Vladimir Chebotarev)
  • 이제 사전을 위한 표현식을 문자열로 지정할 수 있습니다. 이는 ClickHouse 이외의 소스에서 데이터를 추출하는 시점에 속성을 계산할 때 유용하며, 해당 표현식에 ClickHouse 이외의 구문을 사용할 수 있게 해 줍니다. #8098 (alesapin)
  • ZXid 오버플로로 인해 clickhouse-copier에서 매우 드물게 발생하던 경쟁 상태를 수정했습니다. #8088 (Ding Xiang Fei)
  • 쿼리가 실패한 후(예: 「Too many simultaneous queries」로 인해) 외부 테이블 정보를 읽지 않아, 다음 요청이 이 정보를 다음 쿼리의 시작으로 잘못 해석하여 Unknown packet from client와 같은 오류를 발생시키던 버그를 수정했습니다. #8084 (Azat Khuzhin)
  • "Unknown packet X from server" 이후 null 역참조를 방지 #8071 (Azat Khuzhin)
  • 모든 ICU 로케일에 대한 지원을 복원하고, 상수 표현식에 정렬 규칙(collation)을 적용할 수 있는 기능을 추가하며, 시스템 테이블 system.collations에 언어 이름을 추가합니다. #8051 (alesapin)
  • StorageFileStorageHDFS에서 읽기 작업에 사용하는 스트림 수가 이제 제한되어, 메모리 제한을 초과하지 않도록 하기 위해서입니다. #7981 (alesapin)
  • 키가 없는 *MergeTree 테이블에서의 CHECK TABLE 쿼리를 수정했습니다. #7979 (alesapin)
  • 뮤테이션이 없는 경우 파트 이름에서 뮤테이션 번호를 제거했습니다. 이로 인해 이전 버전과의 호환성이 향상되었습니다. #8250 (alesapin)
  • 일부 attached 파트의 data_version이 테이블의 뮤테이션 버전보다 커서 뮤테이션이 적용되지 않던 버그를 수정했습니다. #7812 (Zhichang Yu)
  • 파트를 다른 장치로 이동한 후 중복된 파트 사본이 남아 있어도 서버를 시작할 수 있도록 했습니다. #7810 (Vladimir Chebotarev)
  • 집계 함수 컬럼을 사용할 때 발생할 수 있던 "Sizes of columns does not match" 오류를 수정했습니다. #7790 (Boris Granveaud)
  • 이제 WITH TIES를 LIMIT BY와 함께 사용할 경우 예외가 발생하도록 변경되었습니다. 또한 이제 LIMIT BY와 함께 TOP을 사용할 수 있게 되었습니다. #7637 (Nikita Mikhaylov)
  • invalidate_query를 사용하는 딕셔너리에서 업데이트가 중단되고 이전 업데이트 시도에서 예외가 발생하던 리로드 문제를 수정했습니다. #8029 (alesapin)

ClickHouse 19.17.4.11 릴리스, 2019-11-22

하위 호환되지 않는 변경 사항

  • 더 나은 성능을 위해 스칼라 서브쿼리 결과를 저장할 때 AST 대신 컬럼을 사용하도록 변경했습니다. enable_scalar_subquery_optimization SETTING은 19.17에서 추가되었으며 기본적으로 활성화되어 있었습니다. 이로 인해 이전 버전에서 19.17.2 또는 19.17.3으로 업그레이드하는 과정에서 이 이슈와 같은 오류가 발생했습니다. 19.16 및 그 이전 버전에서 오류 없이 업그레이드할 수 있도록, 이 설정은 19.17.4에서 기본적으로 비활성화되었습니다. #7392 (Amos Bird)

새로운 기능

  • DDL 쿼리로 딕셔너리를 생성하는 기능을 추가합니다. #7360 (alesapin)
  • bloom_filter 인덱스 타입이 LowCardinalityNullable을 지원하도록 합니다. #7363 #7561 (Nikolai Kochetov)
  • 전달된 문자열이 유효한 JSON인지 확인하는 isValidJSON 함수를 추가합니다. #5910 #7293 (Vdimir)
  • arrayCompact 함수를 구현합니다. #7328 (Memo)
  • Decimal 숫자형을 위한 hex 함수를 추가합니다. 이 함수는 hex(reinterpretAsString())와 유사하게 동작하지만, 마지막 0 바이트들을 삭제하지 않습니다. #7355 (Mikhail Korotov)
  • 배열에서 각 요소를 그 요소의 앞/뒤에 있는 다른 요소로 대체하는 arrayFillarrayReverseFill 함수를 추가합니다. #7380 (hcz)
  • CRC32IEEE()/CRC64() 지원을 추가합니다. #7480 (Azat Khuzhin)
  • MySQL의 함수와 유사한 char 함수를 구현합니다. #7486 (sundyli)
  • bitmapTransform 함수를 추가합니다. 비트맵 내 값의 배열을 다른 값의 배열로 변환하며, 결과로 새로운 비트맵을 생성합니다. #7598 (Zhichang Yu)
  • javaHashUTF16LE() 함수를 구현합니다. #7651 (achimbab)
  • Distributed 엔진용 _shard_num 가상 컬럼을 추가합니다. #7624 (Azat Khuzhin)

실험적 기능

  • MergeTree에서 프로세서(새로운 쿼리 실행 파이프라인) 지원이 추가되었습니다. #7181 (Nikolai Kochetov)

버그 수정

  • Values에서 잘못된 부동 소수점 숫자 파싱을 수정합니다. #7817 #7870 (tavplubix)
  • trace_log이 활성화되어 있을 때 드물게 발생할 수 있는 교착 상태를 수정했습니다. #7838 (filimonov)
  • Kafka 테이블로 데이터를 쓸 때 이 테이블을 조회하는 구체화된 뷰(Materialized View)가 있는 경우 메시지 중복을 방지합니다 #7265 (Ivan)
  • IN 연산자에서 Array(LowCardinality(Nullable(String)))에 대한 지원을 추가했습니다. #7364 #7366 문제를 해결했습니다. (achimbab)
  • ODBC Bridge에서 SQL_TINYINTSQL_BIGINT 지원을 추가하고 SQL_FLOAT 데이터 소스 유형 처리를 수정했습니다. #7491 (Denis Glazachev)
  • 비어 있는 decimal 컬럼에 대한 집계(avg 및 quantiles) 동작 수정 #7431 (Andrey Konyaev)
  • MATERIALIZED 컬럼이 있는 Distributed 테이블에 대한 INSERT 문제 수정 #7377 (Azat Khuzhin)
  • 해당 파티션의 일부 파트가 이미 대상 디스크나 볼륨에 있는 경우에도 MOVE PARTITION가 작동하도록 수정 #7434 (Vladimir Chebotarev)
  • 다중 디스크 구성에서 ReplicatedMergeTree 뮤테이션 시 하드링크 생성에 실패하던 버그를 수정했습니다. #7558 (Vladimir Chebotarev)
  • 전체 파트가 변경되지 않은 상태에서 다른 디스크에서 최적의 공간을 찾으려고 할 때 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)
  • 컨텍스트가 필요한 동작(예: JSON 관련 함수)이 있는 프레디케이트를 사용하는 뮤테이션에서 크래시 또는 이상 예외가 발생할 수 있던 버그를 수정했습니다. #7664 (alesapin)
  • data/shadow/ 디렉터리에서 데이터베이스와 테이블 이름 이스케이프 방식이 일치하지 않는 문제를 수정합니다 #7575 (Alexander Burmak)
  • RIGHT|FULL 조인에서 ON t.x = u.x AND t.x = u.y와 같은 중복 키를 지원합니다. 이 경우 발생하던 크래시를 수정했습니다. #7586 (Artem Zuikov)
  • RIGHT 또는 FULL JOIN에서 표현식을 기준으로 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)
  • 쿼리가 포함된 VIEW에 대한 InterpreterSelectQuery의 범위를 수정했습니다 #7601 (Azat Khuzhin)

Improvement

  • ODBC-bridge에서 널 허용(Nullable) 컬럼을 인식하고 NULL 값을 올바르게 처리하도록 개선했습니다. #7402 (Vasily Nemkov)
  • 분산 전송을 위한 현재 배치를 원자적으로 기록하도록 했습니다. #7600 (Azat Khuzhin)
  • 쿼리에서 컬럼 이름에 해당하는 테이블을 판별할 수 없는 경우 예외를 발생시키도록 했습니다. #7358 (Artem Zuikov)
  • MergeTreeSettingsmerge_max_block_size 설정을 추가했습니다. #7412 (Artem Zuikov)
  • HAVING은 있지만 GROUP BY가 없는 쿼리는 상수를 기준으로 그룹화한다고 간주합니다. 따라서 이제 SELECT 1 HAVING 1이 결과를 반환합니다. #7496 (Amos Bird)
  • (X,)를 파이썬과 유사하게 튜플로 파싱하도록 지원합니다. #7501, #7562 (Amos Bird)
  • range 함수의 동작을 파이썬 스타일과 거의 같게 만들었습니다. #7518 (sundyli)
  • 테이블 system.settingsconstraints 컬럼을 추가했습니다. #7553 (Vitaly Baranov)
  • TCP 핸들러에 대해 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)

빌드/테스트/패키징 개선

  • CPU 아키텍처 AARCH64로의 크로스 컴파일을 지원하도록 추가했습니다. 패키저 스크립트를 리팩터링했습니다. #7370 #7539 (Ivan)
  • 패키지를 빌드할 때 darwin-x86_64 및 linux-aarch64 툴체인을 마운트된 Docker 볼륨에 압축 해제하도록 했습니다. #7534 (Ivan)
  • Binary Packager용 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 19.16 릴리스

ClickHouse 릴리스 19.16.14.65, 2020-03-25

  • 여러 인자(10개 초과)에 대한 삼항 논리 연산의 배치 계산에서 발생하던 버그를 수정했습니다. #8718 (Alexander Kazakov) 이 버그 수정은 Altinity의 특별 요청에 따라 19.16 버전에 백포트되었습니다.

ClickHouse Release 19.16.14.65, 2020-03-05

  • 분산 서브쿼리가 이전 ClickHouse 버전과 호환되지 않던 문제를 수정했습니다. #7851 수정 (tabplubix)
  • CREATE 쿼리를 실행할 때, 스토리지 엔진 인자에서 상수 표현식을 접어(fold) 처리하도록 했습니다. 비어 있는 데이터베이스 이름은 현재 데이터베이스로 대체되도록 했습니다. #6508, #3492 문제를 수정했습니다. 또한 ClickHouseDictionarySource에서 로컬 주소를 확인하는 로직도 수정했습니다. #9262 (tabplubix)
  • 이제 *MergeTree 테이블 엔진 패밀리에서 수행되는 백그라운드 머지가 스토리지 정책 볼륨 순서를 보다 정확하게 유지합니다. #8549 (Vladimir Chebotarev)
  • 접미사를 읽은 후 커밋 전에 예외가 발생하는 드문 경우에 Kafka에서 데이터가 손실될 수 있던 문제를 방지했습니다. #9378 수정. 관련 이슈: #7175 #9507 (filimonov)
  • 잘못된 파라미터로 생성된 Kafka 테이블을 사용하거나 삭제하려 할 때 서버가 종료될 수 있던 버그를 수정했습니다. #9494 수정. #9507 변경 사항을 포함합니다. #9513 (filimonov)
  • Kafka 테이블 위에 있는 서브쿼리와 함께 MaterializedView를 사용할 수 있도록 했습니다. #8197 (filimonov)

새로운 기능

  • materialized view가 있는 테이블에 대한 멱등(여러 번 수행해도 동일한 결과가 보장되는) INSERT의 동작 방식을 제어하기 위해 deduplicate_blocks_in_dependent_materialized_views 옵션을 추가했습니다. 이 기능은 Altinity의 특별 요청에 따라 버그 수정 릴리스에 포함되었습니다. #9070 (urykhy)

ClickHouse 릴리스 19.16.2.2, 2019-10-30

하위 호환되지 않는 변경 사항

  • count/counIf에 누락되어 있던 인수 개수(arity) 검증을 추가했습니다. #7095 #7298 (Vdimir)
  • 레거시 asterisk_left_columns_only 설정을 제거했습니다 (기본값으로 비활성화되어 있었습니다). #7335 (Artem Zuikov)
  • Template 데이터 포맷용 포맷 문자열이 이제 파일로 지정됩니다. #7118 (tavplubix)

New Feature

  • UINT_MAX보다 큰 카디널리티를 계산하기 위해 uniqCombined64()를 도입합니다. #7213, #7222 (Azat Khuzhin)
  • Array 컬럼에 대한 블룸 필터 인덱스를 지원합니다. #6984 (achimbab)
  • 서버 설정에 있는 해당 <macros>의 값을 String으로 반환하는 getMacro(name) 함수를 추가합니다. #7240 (alexey-milovidov)
  • HTTP 소스를 기반으로 하는 딕셔너리에 대해 credentialshttp-headers 두 가지 설정 옵션을 사용할 수 있도록 합니다. #7092 (Guillaume Tassery)
  • 실행된 백그라운드 머지 횟수를 집계하는 새 ProfileEvent Merge를 추가합니다. #7093 (Mikhail Korotov)
  • 정규화된 전체 도메인 이름을 반환하는 fullHostName 함수를 추가합니다. #7263 #7291 (sundyli)
  • "cut off" 조건에 따라 배열을 분할하는 arraySplitarrayReverseSplit 함수를 추가합니다. 시간 순서 데이터를 처리할 때 유용합니다. #7294 (hcz)
  • multiMatch 계열 함수에서 일치한 모든 인덱스를 포함하는 Array를 반환하는 새로운 함수들을 추가합니다. #7299 (Danila Kutenin)
  • 많은 수의 작은 -Log 테이블 저장에 최적화된 새로운 데이터베이스 엔진 Lazy를 추가합니다. #7171 (Nikita Vasilev)
  • 비트맵 컬럼용 집계 함수 groupBitmapAnd, -Or, -Xor를 추가합니다. #7109 (Zhichang Yu)
  • 집계할 데이터가 없을 때 null 또는 기본값을 반환하는 집계 함수 조합자 -OrNull 및 -OrDefault를 추가합니다. #7331 (hcz)
  • 사용자 지정 이스케이프 및 구분자 규칙을 지원하는 CustomSeparated 데이터 형식을 도입합니다. #7118 (tavplubix)
  • 외부 딕셔너리의 소스로 Redis를 지원합니다. #4361 #6962 (comunodi, Anton Popov)

버그 수정

  • WHERE IN (SELECT ...) 절을 포함하고 optimize_read_in_order 가 사용되는 경우 잘못된 쿼리 결과가 반환되던 문제를 수정했습니다. #7371 (Anton Popov)
  • 프로젝트 외부의 파일에 의존하는 MariaDB 인증 플러그인을 비활성화했습니다. #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)
  • HTTP keep alive 타임아웃 대신 TCP keep alive 타임아웃을 사용하던 문제를 수정했습니다. #7351 (Vasily Nemkov)
  • groupBitmapOr에서 발생하던 세그멘테이션 폴트를 수정했습니다(issue #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 파트의 min/max 인덱스에서 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 SETTING을 테이블 수준으로 만들었습니다. #7059 (Vladimir Chebotarev)
  • StorageFactory에서 TTL을 검사하도록 했습니다. #7304 (sundyli)
  • 부분 머지 조인에서 왼쪽 블록을 스쿼시(squash)하여 최적화했습니다. #7122 (Artem Zuikov)
  • 복제된 테이블 엔진의 뮤테이션에서 비결정적 함수(non-deterministic function)를 허용하지 않습니다. 이는 레플리카 간 불일치를 유발할 수 있기 때문입니다. #7247 (Alexander Kazakov)
  • 예외 스택 트레이스를 문자열로 변환하는 동안 메모리 트래커를 비활성화합니다. 이를 통해 서버에서 Memory limit exceeded 유형의 오류 메시지가 손실되어, 클라이언트에서 Attempt to read after eof 예외가 발생하는 문제를 방지할 수 있습니다. #7264 (Nikolai Kochetov)
  • 여러 포맷 관련 개선을 수행했습니다. 다음 이슈를 해결합니다. #6033, #2633, #6611, #6742 #7215 (tavplubix)
  • ClickHouse는 IN 연산자의 오른쪽 값이 왼쪽 타입으로 변환할 수 없는 경우 해당 값을 무시합니다. Array와 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)
  • 클라이언트에 추가 옵션을 전달할 수 있도록 clickhouse-test--client-option 파라미터를 추가했습니다. #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에서 업데이트할 때 충돌이 발생하지 않도록 했습니다. 이 rpm의 설정 파일은 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로 발견된 Fields 관련 몇 가지 문제를 수정합니다. #7135, #7179 (Alexander Kuzmenkov), #7376 (Amos Bird)
  • murmurhash32에서 발생하던 정의되지 않은 동작을 수정했습니다. #7388 (Amos Bird)
  • StoragesInfoStream의 정의되지 않은 동작을 수정했습니다. #7384 (tavplubix)
  • 외부 데이터베이스 엔진(MySQL, ODBC, JDBC)에 대한 상수 표현식 폴딩 기능을 수정했습니다. 이전 버전에서는 여러 개의 상수 표현식에 대해 제대로 동작하지 않았으며, Date, DateTime 및 UUID 타입에 대해서는 전혀 동작하지 않았습니다. 이를 통해 #7245 #7252 (alexey-milovidov) 이(가) 수정되었습니다.
  • 라이브 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)
  • 매개변수 root가 비어 있지 않은 경우를 처리하도록 getMultipleValuesFromConfig를 수정했습니다. #7374 (Mikhail Korotov)
  • 일부 중복 코드(TemporaryFileTemporaryFileStream)를 제거했습니다. #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 컬럼이 있는, 로컬이 아닌 Distributed 노드에 대한 INSERT 동작을 수정했습니다. #7377 (Azat Khuzhin)
  • 함수 getMultipleValuesFromConfig를 수정했습니다. #7374 (Mikhail Korotov)
  • TCP keep alive 타임아웃 대신 HTTP keep alive 타임아웃이 사용되던 문제를 수정했습니다. #7351 (Vasily Nemkov)
  • 예외 발생 시 모든 작업이 완료될 때까지 대기하도록 했습니다(드물게 발생하던 세그폴트(segfault)를 수정). #7350 (tavplubix)
  • Kafka 테이블에 INSERT할 때 materialized 뷰(MV)로 푸시하지 않도록 했습니다. #7265 (Ivan)
  • 예외 스택에 대해서는 메모리 트래커를 비활성화했습니다. #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 파트의 min/max 인덱스에서 NULL 값을 올바르게 직렬화하도록 했습니다. #7234 (Alexander Kuzmenkov)

ClickHouse 릴리스 19.15.2.2, 2019-10-01

New Feature

  • 계층형 스토리지: MergeTree 엔진을 사용하는 테이블에 여러 스토리지 볼륨을 사용할 수 있도록 지원합니다. 최신 데이터는 SSD에 저장하고, 오래된 데이터는 자동으로 HDD로 이동할 수 있습니다. (예시). #4918 (Igr) #6489 (alesapin)
  • INSERT SELECT 쿼리에서 들어오는 데이터를 읽기 위한 테이블 함수 input을 추가합니다. #5450 (palasonic1) #6832 (Anton Popov)
  • 기능적으로는 hashed 레이아웃과 동일하지만 메모리를 더 효율적으로 사용하는 sparse_hashed 딕셔너리 레이아웃을 추가합니다. 값 조회 속도가 더 느려지는 대신, 메모리 사용량은 약 1/2 수준으로 줄어듭니다. #6894 (Azat Khuzhin)
  • 딕셔너리에 접근할 수 있는 사용자 목록을 정의하는 기능을 구현합니다. 현재 연결된 데이터베이스에만 적용됩니다. #6907 (Guillaume Tassery)
  • SHOW 쿼리에 LIMIT 옵션을 추가합니다. #6944 (Philipp Malkovsky)
  • 집합에서 range_start 이상인 값들 중 가장 작은 값 limit개로 구성된 부분집합을 반환하는 bitmapSubsetLimit(bitmap, range_start, limit) 함수를 추가합니다. #6957 (Zhichang Yu)
  • bitmapMinbitmapMax 함수를 추가합니다. #6970 (Zhichang Yu)
  • issue-6648와 관련된 함수 repeat를 추가합니다. #6999 (flynn)

실험적 기능

  • 현재 파이프라인을 변경하지 않는 메모리 내(in-memory) Merge Join 변형을 구현했습니다. 결과는 머지 키를 기준으로 부분 정렬됩니다. 이 기능을 사용하려면 partial_merge_join = 1로 설정하십시오. Merge Join은 아직 개발 중입니다. #6940 (Artem Zuikov)
  • S3 엔진과 테이블 함수가 추가되었습니다. 아직 개발 중이며, 현재는 인증을 지원하지 않습니다. #5596 (Vladimir Chebotarev)

개선사항

  • Kafka에서 읽은 각 메시지는 원자적으로 삽입됩니다. 이를 통해 Kafka 엔진과 관련된 거의 모든 알려진 문제가 해결됩니다. #6950 (Ivan)
  • 분산 쿼리 장애 조치(failover) 동작이 개선되었습니다. 복구 시간이 단축되었으며, 이제 설정이 가능하고 system.clusters에서 확인할 수 있습니다. #6399 (Vasily Nemkov)
  • IN 절에서 Enum에 대한 숫자 값을 직접 지원합니다. #6766 #6941 (dimarub2000)
  • URL 스토리지에서 리다이렉트(선택 사항, 기본값은 비활성화)를 지원합니다. #6914 (maqroll)
  • 이전 버전의 클라이언트가 서버에 연결할 때 정보 메시지를 표시하도록 했습니다. #6893 (Philipp Malkovsky)
  • 분산 테이블에서 데이터를 전송할 때 적용되던 최대 백오프 대기 시간 제한을 제거했습니다. #6895 (Azat Khuzhin)
  • 누적 값을 갖는 프로파일 이벤트(카운터)를 Graphite로 전송할 수 있는 기능을 추가했습니다. 서버 config.xml<events_cumulative> 아래에서 활성화할 수 있습니다. #6969 (Azat Khuzhin)
  • HTTP를 통해 Native 포맷으로 LowCardinality(T) 타입의 컬럼에 데이터를 삽입할 때, 타입 TLowCardinality(T)로 자동 캐스팅하는 기능을 추가했습니다. #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)
  • libsparsehashsparsehash-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)
  • 배열 조인과 전역 서브쿼리가 포함된 복잡한 쿼리에서 발생하던 문제를 수정했습니다. #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가 포함된 쿼리에서 서브쿼리 이름을 수정했습니다. 서브쿼리 별칭이 지정된 경우 해당 별칭을 외부 테이블 이름으로 사용합니다. #6934 (Ivan)

빌드/테스트/패키징 개선

  • 뮤테이션이 적용될 때까지 대기해야 하므로 테스트 00715_fetch_merged_or_mutated_part_zookeeper를 셸 스크립트로 다시 작성하여 불안정(flapping) 상태를 수정합니다. #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로 파싱합니다(format_csv_unquoted_null_literal_as_null=1 설정인 경우). input_format_null_as_default=1로 설정되어 있고 이 필드의 데이터 타입이 널 허용 타입이 아닌 경우, NULL 필드를 기본값으로 초기화합니다. #5990 #6055 (tavplubix)
  • 테이블 함수 filehdfs의 경로에서 와일드카드 사용을 지원합니다. 경로에 와일드카드가 포함된 경우 테이블은 읽기 전용이 됩니다. 사용 예: 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.eventssystem.metrics 값을 저장하는 새로운 system.metric_log 테이블이 추가되었습니다. #6363 #6467 (Nikita Mikhaylov) #6530 (alexey-milovidov)
  • ClickHouse 텍스트 로그를 system.text_log 테이블에 쓸 수 있도록 합니다. #6037 #6103 (Nikita Mikhaylov) #6164 (alexey-milovidov)
  • 스택 트레이스에서 프라이빗 심볼을 표시합니다(ELF 파일의 심볼 테이블을 파싱하여 수행됨). 디버그 정보가 있는 경우 스택 트레이스에 파일 및 줄 번호 정보를 추가했습니다. 프로그램에 존재하는 심볼을 인덱싱하여 심볼 이름 조회 속도를 높였습니다. 내부 점검(introspection)을 위한 새로운 SQL 함수 demangleaddressToLine을 추가했습니다. 일관성을 위해 함수 symbolizeAddress의 이름을 addressToSymbol로 변경했습니다. 성능상의 이유로 addressToSymbol 함수는 맹글된(mangled) 이름을 반환하며, 사용자가 demangle을 적용해야 합니다. 기본적으로 비활성화되어 있는 설정 allow_introspection_functions를 추가했습니다. #6201 (alexey-milovidov)
  • 테이블 FUNCTION인 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)
  • 테이블 제약 조건. 테이블 정의에 제약 조건을 추가할 수 있으며, INSERT 시에 검증됩니다. #5273 (Gleb Novikov) #6652 (alexey-milovidov)
  • 계단식 materialized view 지원. #6324 (Amos Bird)
  • 기본적으로 query profiler를 활성화하여 모든 쿼리 실행 스레드를 초당 한 번씩 샘플링합니다. #6283 (alexey-milovidov)
  • 입력 형식으로 ORC 지원. #6454 #6703 (akonyaev90)
  • 두 개의 새로운 함수 sigmoidtanh가 추가되었습니다 (머신 러닝 애플리케이션에 유용합니다). #6254 (alexey-milovidov)
  • hasToken(haystack, token), hasTokenCaseInsensitive(haystack, token) 함수는 주어진 token 이 haystack 에 포함되어 있는지 확인합니다. token 은 두 개의 영숫자가 아닌 ASCII 문자(또는 haystack 의 경계) 사이에 있는 최대 길이의 부분 문자열입니다. token 은 상수 문자열이어야 합니다. 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에서 제안된 새로운 집계 함수 quantilesExactInclusivequantilesExactExclusive. #6477 (dimarub2000)
  • bitmapRange(bitmap, range_begin, range_end) 함수는 지정된 범위의 새로운 Set을 반환합니다 (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의 모든 버그 수정 사항이 포함됩니다.
  • 테이블에 스킵 인덱스가 있고 수직 병합(vertical merge)이 수행될 때 세그멘테이션 폴트가 발생하는 문제를 수정했습니다. #6723 (alesapin)
  • 복잡한 기본값이 설정된 컬럼별 TTL 동작을 수정합니다. 이전에는 OPTIMIZE ... FINAL 쿼리로 TTL 머지를 강제로 수행하는 경우, 만료된 값이 사용자 지정 컬럼 기본값이 아니라 타입의 기본값으로 대체되었습니다. #6796 (Anton Popov)
  • 정상적인 서버 재시작 시 Kafka 메시지 중복 문제를 해결합니다. #6597 (Ivan)
  • Kafka 메시지를 읽을 때 발생하던 무한 루프를 수정했습니다. 구독 시에는 consumer에 대해 일시 중지/재개를 전혀 수행하지 않도록 했습니다. 그렇지 않으면 일부 상황에서 consumer가 무기한 일시 중지된 상태로 남을 수 있습니다. #6354 (Ivan)
  • bitmapContains 함수에서 발생하던 Key expression contains comparison between inconvertible types 예외를 수정했습니다. #6136 #6146 #6156 (dimarub2000)
  • optimize_skip_unused_shards가 활성화되어 있고 세그먼트 키가 없을 때 발생하는 segfault를 수정합니다. #6384 (Anton Popov)
  • 메모리 손상을 유발할 수 있었던 뮤테이션 관련 잘못된 코드를 수정했습니다. DROP TABLEsystem.parts 또는 system.parts_columns에서의 SELECT가 동시에 실행될 때 발생할 수 있었던 주소 0x14c0 읽기 과정의 segfault를 수정했습니다. 뮤테이션 쿼리 준비 과정에서의 레이스 컨디션(race condition)을 수정했습니다. Replicated 테이블에 대한 OPTIMIZEALTER와 같은 동시 수정 작업 때문에 발생하던 데드락을 수정했습니다. #6514 (alexey-milovidov)
  • MySQL 인터페이스에서 과도하게 상세한 로깅을 제거했습니다 #6389 (alexey-milovidov)
  • 설정 파일에서 'true' 및 'false' 값에서 boolean 설정을 파싱할 수 있는 기능을 복원했습니다. #6278 (alesapin)
  • Nullable(Decimal128)에 대해 quantilemedian FUNCTION을 사용할 때 발생하던 크래시를 수정했습니다. #6378 (Artem Zuikov)
  • 기본 키에 대한 WHERE 조건에 Float 타입으로의 변환이 포함된 SELECT 쿼리가 불완전한 결과를 반환할 수 있는 가능성이 있는 문제를 수정했습니다. 이는 toFloat 함수에서 단조성(monotonicity) 검사가 잘못되어 발생했습니다. #6248 #6374 (dimarub2000)
  • 뮤테이션에 대해 max_expanded_ast_elements 설정을 확인하고, TRUNCATE TABLE 이후에는 뮤테이션을 정리합니다. #6205 (Winter Zhang)
  • join_use_nulls 사용 시 키 컬럼에 대한 JOIN 결과를 수정했습니다. 컬럼 기본값 대신 Null 값을 사용하도록 했습니다. #6249 (Artem Zuikov)
  • 수직 병합 및 ALTER 작업 시 skip 인덱스 관련 수정. Bad size of marks file 예외 수정. #6594 #6713 (alesapin)
  • ALTER MODIFY COLUMN 및 수직 병합에서 병합/변경 대상 파트 중 하나가 비어 있는 파트(0개의 행)인 경우 드물게 발생하던 크래시를 수정합니다 #6746 #6780 (alesapin)
  • AggregateFunctionFactory에서 LowCardinality 타입 변환 시 발생하던 버그를 수정했습니다. 이 수정으로 #6257 이슈가 해결되었습니다. #6281 (Nikolai Kochetov)
  • topKtopKWeighted 집계 FUNCTION의 잘못된 동작과 잠재적인 segfault를 수정합니다. #6404 (Anton Popov)
  • getIdentifier 함수 주변의 안전하지 않은 코드를 수정했습니다. #6401 #6409 (alexey-milovidov)
  • MySQL 클라이언트에서 ClickHouse에 연결할 때 사용되는 MySQL wire 프로토콜의 버그를 수정했습니다. 이 버그는 PacketPayloadWriteBuffer에서 발생한 heap buffer overflow 때문이었습니다. #6212 (Yuriy Baranov)
  • bitmapSubsetInRange 함수에서 발생하던 메모리 누수를 수정했습니다. #6819 (Zhichang Yu)
  • 세분성이 변경된 후 실행되는 mutation에서 드물게 발생하던 버그를 수정합니다. #6816 (alesapin)
  • 기본적으로 모든 필드가 포함된 protobuf 메시지를 허용합니다. #6132 (Vitaly Baranov)
  • 두 번째 인수로 NULL을 전달할 때 발생하는 nullIf FUNCTION의 버그를 수정합니다. #6446 (Guillaume Tassery)
  • 문자열 필드를 가진 complex key cache dictionary에서 메모리 할당/해제가 잘못되어 메모리가 무한히 소비되는 문제(메모리 누수처럼 보임)를 유발하던 드문 버그를 수정했습니다. 이 버그는 문자열 길이가 8부터 시작하는 2의 거듭제곱(8, 16, 32 등)일 때 재현되었습니다. #6447 (alesapin)
  • 작은 시퀀스에서 발생하던 Gorilla 인코딩 문제를 수정하여 Cannot write after end of buffer 예외가 발생하지 않도록 했습니다. #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 함수에서 발생하던 중단(hang) 문제를 수정했습니다. #6195 #6198 (alexey-milovidov)
  • adaptive granularity 사용 시 잘못된 skip 인덱스 직렬화 및 집계와 관련된 버그를 수정했습니다. #6594. #6748 (alesapin)
  • 2단계 집계를 사용할 때 GROUP BY에서 WITH ROLLUPWITH CUBE 수정자의 동작을 수정합니다. #6225 (Anton Popov)
  • adaptive granularity 사용 시 보조 인덱스 마크를 기록하는 과정에서 발생하던 버그를 수정. #6126 (alesapin)
  • 서버 시작 시 초기화 순서를 수정합니다. StorageMergeTree::background_task_handlestartup()에서 초기화되므로 MergeTreeBlockOutputStream::write()가 초기화 전에 이를 사용하려고 시도할 수 있습니다. 이 핸들이 초기화되었는지만 확인합니다. #6080 (Ivan)
  • 오류로 종료된 이전 읽기 작업의 데이터 버퍼를 비우도록 수정했습니다. #6026 (Nikolay)
  • Replicated*MergeTree 테이블에 대한 새 레플리카를 생성할 때 adaptive granularity 기능을 활성화하는 과정에서 발생하던 버그를 수정합니다. #6394 #6452 (alesapin)
  • 초기화되지 않은 ThreadStatus 구조체에 접근하는 과정에서 예외가 발생했을 때, 이를 처리하는 동안 libunwind에서 다시 예외가 발생하면 서버 시작 시 크래시가 발생할 수 있는 문제를 수정했습니다. #6456 (Nikita Mikhaylov)
  • yandexConsistentHash 함수에서 크래시가 발생하던 문제를 수정했습니다. 퍼즈 테스트로 발견되었습니다. #6304 #6305 (alexey-milovidov)
  • 서버가 과부하 상태이고 global thread pool 이 거의 가득 찼을 때 쿼리가 멈춘 상태로 남을 수 있는 가능성이 있는 문제를 수정했습니다. 이 문제는 세그먼트 수가 매우 많은(수백 개) 클러스터에서 발생할 확률이 더 높은데, 이는 분산 쿼리가 각 세그먼트에 대한 연결마다 하나의 thread 를 할당하기 때문입니다. 예를 들어, 330개의 세그먼트로 구성된 클러스터가 30개의 동시 분산 쿼리를 처리하는 경우 이 문제가 재현될 수 있습니다. 이 문제는 19.2부터의 모든 버전에 영향을 줍니다. #6301 (alexey-milovidov)
  • arrayEnumerateUniqRanked FUNCTION의 동작 로직을 수정했습니다. #6423 (alexey-milovidov)
  • 심볼 테이블 디코딩 중 발생하던 세그멘테이션 폴트(segfault)를 수정합니다. #6603 (Amos Bird)
  • LowCardinality(Nullable)를 널 허용이 아닌 컬럼으로 캐스트할 때 값에 Null이 포함되어 있지 않은 경우(예: SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String)와 같은 쿼리)에도 발생하던 무관한 예외를 수정했습니다. #6094 #6119 (Nikolai Kochetov)
  • system.settings 테이블에서 description의 불필요한 중복 따옴표를 제거했습니다. #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가 설정된 경우 스로틀링 시 최대 sleep 시간을 제한합니다. Estimated query execution time (inf seconds) is too long와 같이 잘못 보고되던 오류를 수정했습니다. #5547 #6232 (alexey-milovidov)
  • MATERIALIZED 컬럼과 MaterializedView에서 별칭을 사용하는 경우와 관련된 문제를 수정했습니다. #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 파서에서 스택 오버플로가 발생하여 서버가 충돌할 수 있던 문제를 수정했습니다. 서브쿼리가 포함된 Merge 및 Distributed 테이블, materialized views, 행 수준 보안(row-level security) 조건에서 스택 오버플로가 발생할 수 있던 문제를 수정했습니다. #6433 (alexey-milovidov)

개선 사항

  • AND/OR 연산자에 대한 3진 논리를 올바르게 구현. #6048 (Alexander Kazakov)
  • 이제 만료된 TTL이 있는 값과 행은 OPTIMIZE ... FINAL 쿼리 실행 시, TTL 정보가 없거나 TTL 정보가 오래된 이전 파트(예: ALTER ... MODIFY TTL 쿼리 이후)에서 제거됩니다. TTL이 설정된 머지 작업의 할당을 금지/허용하고, 모든 머지 작업에서 만료된 값을 필터링할 수 있도록 SYSTEM STOP/START TTL MERGES 쿼리가 추가되었습니다. #6274 (Anton Popov)
  • ClickHouse 클라이언트에서 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 설정과 관계없이 라이브 view를 ATTACH할 수 있도록 허용합니다. #6754 (alexey-milovidov)
  • 쿼리 프로파일러가 수집한 스택 트레이스에서 쿼리 프로파일러 자체가 생성한 스택 프레임은 포함하지 않도록 했습니다. #6250 (alexey-milovidov)
  • 이제 테이블 함수 values, file, url, hdfs가 ALIAS 컬럼을 지원합니다. #6255 (alexey-milovidov)
  • config 파일과 동일한 루트 요소를 가지지 않는 config.d 파일이 있을 경우 예외를 발생시킵니다. #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_DATATYPE_MISMATCH 오류 코드에 대한 HTTP 상태 코드를 기본값이던 500 Internal Server Error에서 400 Bad Request로 변경했습니다. #6271 (Alexander Rodin)
  • Join 객체를 ExpressionAction에서 AnalyzedJoin으로 이동했습니다. 이제 ExpressionAnalyzerExpressionAction은 더 이상 Join 클래스를 알지 못합니다. 해당 로직은 AnalyzedJoin 인터페이스 뒤로 캡슐화됩니다. #6801 (Artem Zuikov)
  • 세그먼트 중 하나가 localhost인 경우에도 쿼리가 네트워크 연결을 통해 전송될 때 발생할 수 있던 분산 쿼리의 교착 상태 문제를 수정했습니다. #6759 (alexey-milovidov)
  • 잠재적인 데드락을 방지하기 위해 여러 테이블을 대상으로 하는 RENAME의 시맨틱을 변경했습니다. #6757. #6756 (alexey-milovidov)
  • 전체 패킷 페이로드를 메모리에 로드하지 않도록 MySQL 호환 서버를 재작성했습니다. 각 연결에 대한 메모리 사용량을 읽기/쓰기 버퍼 기준으로 대략 2 * DBMS_DEFAULT_BUFFER_SIZE 수준으로 줄였습니다. #5811 (Yuriy Baranov)
  • 쿼리 의미를 알 필요가 없는 파서에서 AST 별칭 해석 로직을 분리해 외부로 이동했습니다. #6108 (Artem Zuikov)
  • NamesAndTypesList 파싱을 조금 더 안전하게 만들었습니다. #6408. #6410 (alexey-milovidov)
  • clickhouse-copier: 파티션 존재 여부를 확인하는 쿼리에서 partition_key 별칭을 사용하는 where_condition을 구성(config)에서 사용할 수 있도록 허용합니다(이전에는 데이터 읽기 쿼리에서만 사용되었습니다). #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 capabilities가 부족할 때 출력되는 정보 메시지를 개선합니다. system.text_log에서 더 쉽게 찾을 수 있도록 치명적 오류를 "fatal" 레벨로 로깅합니다. #6441 (alexey-milovidov)
  • GROUP BY, ORDER BY 중 메모리 사용량을 제한하기 위해 임시 데이터를 디스크로 덤프하도록 설정했을 때, 사용 가능한 디스크 공간을 확인하지 않았습니다. 이 문제를 수정하기 위해 새로운 설정 min_free_disk_space가 추가되었으며, 사용 가능한 디스크 공간이 임계값보다 작으면 쿼리가 중단되고 ErrorCodes::NOT_ENOUGH_SPACE를 반환합니다. #6678 (Weiqing Xu) #6691 (alexey-milovidov)
  • 스레드별 재귀 rwlock을 제거했습니다. 스레드는 쿼리 간에 재사용되므로 의미가 없습니다. SELECT 쿼리는 한 스레드에서 락을 획득하고, 다른 스레드에서 락을 보유한 상태로 첫 번째 스레드에서 종료될 수 있습니다. 동시에 첫 번째 스레드는 DROP 쿼리에 의해 재사용될 수 있습니다. 이로 인해 잘못된 「Attempt to acquire exclusive lock recursively」 메시지가 발생할 수 있습니다. #6771 (alexey-milovidov)
  • ExpressionAnalyzer.appendJoin()을 분리하고 ExpressionAnalyzerMergeJoin을 위한 처리를 준비했습니다. #6524 (Artem Zuikov)
  • MySQL 호환 서버에 mysql_native_password 인증 플러그인을 추가했습니다. #6194 (Yuriy Baranov)
  • clock_gettime 호출 횟수를 줄였고, 디버그/릴리스 빌드 간 Allocator의 ABI 호환성을 수정했습니다(사소한 이슈). #6197 (alexey-milovidov)
  • collectUsedColumnsExpressionAnalyzer에서 SyntaxAnalyzer로 이동했습니다. 이제 SyntaxAnalyzer가 직접 required_source_columns를 생성합니다. #6416 (Artem Zuikov)
  • FROM 절에 둘 이상의 테이블이 있는 경우(즉, 조인이 포함된 쿼리) 서브쿼리와 테이블 함수에 별칭 지정을 필수로 하는 joined_subquery_requires_alias SETTING을 추가합니다. #6733 (Artem Zuikov)
  • ExpressionAnalyzer에서 GetAggregatesVisitor 클래스를 분리했습니다. #6458 (Artem Zuikov)
  • system.query_log: type 컬럼의 데이터 타입을 Enum으로 변경합니다. #6265 (Nikita Mikhaylov)
  • sha256_password 인증 플러그인의 정적 링크 방식. #6512 (Yuriy Baranov)
  • compile SETTING이 동작하는 데 추가 의존성이 필요하지 않도록 했습니다. 이전 버전에서는 cannot open crti.o, unable to find library -lc 등의 오류가 발생할 수 있었습니다. #6309 (alexey-milovidov)
  • 악의적인 레플리카에서 유입될 수 있는 입력에 대한 검증을 강화했습니다. #6303 (alexey-milovidov)
  • 이제 clickhouse-obfuscator 파일이 clickhouse-client 패키지에 포함됩니다. 이전 버전에서는 clickhouse obfuscator(공백 포함)로 제공되었습니다. #5816 #6609 (dimarub2000)
  • 두 개 이상의 쿼리가 두 개 이상의 테이블을 서로 다른 순서로 읽고, 그 테이블 중 하나에 대해 DDL 연산을 수행하는 또 다른 쿼리가 있을 때 발생하던 교착 상태를 수정했습니다. 매우 드물게 발생하던 또 다른 교착 상태도 수정했습니다. #6764 (alexey-milovidov)
  • 디버깅 기능을 향상하기 위해 system.processessystem.query_logos_thread_ids 컬럼을 추가했습니다. #6763 (alexey-milovidov)
  • sha256_password가 기본 인증 플러그인으로 사용될 때 발생하는 PHP mysqlnd 확장 버그를 해결하기 위한 우회 방법입니다(#6031에 설명되어 있음). #6113 (Yuriy Baranov)
  • 널 허용 여부가 변경된 컬럼과 관련된 불필요한 부분을 제거했습니다. #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를 분리하고, 선택 쿼리가 아닌 쿼리에는 기존 분석기를 그대로 사용합니다. #6499 (Artem Zuikov)
  • 중복된 입력 및 출력 포맷을 제거했습니다. #6239 (Nikolai Kochetov)
  • 연결 시 poll_intervalidle_connection_timeout 설정을 사용자가 재정의할 수 있도록 했습니다. #6230 (alexey-milovidov)
  • MergeTree에는 이제 파트를 부분적으로만 정리하는 것을 방지하기 위한 추가 옵션 ttl_only_drop_parts(기본값: 비활성화)이 추가되어, 하나의 파트 내 모든 행이 만료되었을 때 해당 파트 전체가 완전히 삭제되도록 합니다. #6191 (Sergi Vladykin)
  • Set 인덱스 함수에 대한 타입 검사를 수행합니다. 함수가 잘못된 타입의 인수를 받으면 예외를 발생시킵니다. UBSan을 사용한 퍼즈 테스트에서 발견된 문제를 수정합니다. #6511 (Nikita Vasilev)

성능 향상

  • MergeTree 테이블에서 정렬 키와 동일한 접두사를 갖는 expressions를 사용하는 ORDER BY expressions 절이 있는 쿼리를 최적화했습니다. 이 최적화는 optimize_read_in_order 설정으로 제어됩니다. #6054 #6629 (Anton Popov)
  • 파트 로딩 및 제거 시 여러 스레드를 사용할 수 있도록 했습니다. #6372 #6074 #6438 (alexey-milovidov)
  • 집계 함수 상태를 배치 방식으로 업데이트하는 변형을 구현했습니다. 이를 통해 성능 향상이 가능해졌습니다. #6435 (alexey-milovidov)
  • exp, log, sigmoid, tanh 함수에 대해 FastOps 라이브러리를 사용하도록 했습니다. FastOps는 Michael Parakhin(Yandex CTO)이 개발한 고속 벡터 수학 라이브러리입니다. explog 함수의 성능이 6배 이상 향상되었습니다. 이제 Float32 인자를 받는 explog 함수는 Float32를 반환합니다(이전 버전에서는 항상 Float64를 반환했습니다). 이제 exp(nan)inf를 반환할 수 있습니다. explog 함수의 결과는 실제 정답에 가장 가까운 기계 표현 가능 수가 아닐 수 있습니다. #6254 (alexey-milovidov) FastOps가 동작하도록 Danila Kutenin의 변형을 사용했습니다. #6317 (alexey-milovidov)
  • UInt8/16에 대해 연속 키 최적화를 비활성화했습니다. #6298 #6701 (akuzm)
  • ParsedJson::Iterator에서 동적 할당을 제거하여 simdjson 라이브러리의 성능을 개선했습니다. #6479 (Vitaly Baranov)
  • mmap()으로 메모리를 할당할 때 페이지를 미리 fault 처리하도록 했습니다. #6667 (akuzm)
  • Decimal 비교에서의 성능 버그를 수정했습니다. #6380 (Artem Zuikov)

빌드/테스트/패키징 개선 사항

  • Compiler (runtime template instantiation)을 제거했습니다. 이미 해당 기능의 성능을 능가했습니다. #6646 (alexey-milovidov)
  • gcc-9에서의 성능 저하를 보다 고립된 방식으로 보여 주기 위한 성능 테스트를 추가했습니다. #6302 (alexey-milovidov)
  • 멀티스레드 버전의 numbers인 테이블 FUNCTION numbers_mt를 추가했습니다. 해시 FUNCTION을 사용하는 성능 테스트를 업데이트했습니다. #6554 (Nikolai Kochetov)
  • clickhouse-benchmark의 비교 모드 지원 #6220 #6343 (dimarub2000)
  • 스택 트레이스가 가능한 한 잘 출력되도록 동작을 개선했습니다. 또한 실행 중인 스레드의 스택 트레이스를 출력하기 위한 디버깅 신호로 SIGPROF를 추가했습니다. #6529 (alexey-milovidov)
  • 각 FUNCTION을 별도 파일로 분리, 10부. #6321 (alexey-milovidov)
  • 중복 정의된 const TABLE_IS_READ_ONLY를 제거합니다. #6566 (filimonov)
  • StringHashMap PR #5417의 포매팅 변경. #6700 (akuzm)
  • ExpressionAnalyzer에서 조인 생성을 위해 사용하는 서브쿼리가 개선되었습니다. #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 통합 테스트가 root가 아닌 USER로 실행될 때도 동작하도록 수정했습니다. #6507 (Nikolai Kochetov)
  • 기록된 패킷의 전체 크기가 DBMS_DEFAULT_BUFFER_SIZE를 초과할 때 이 버그가 재현됩니다. #6204 (Yuriy Baranov)
  • RENAME 테이블 경쟁 조건에 대한 테스트를 추가했습니다 #6752 (alexey-milovidov)
  • KILL QUERY에서 Settings 사용 시 발생할 수 있는 데이터 레이스를 방지합니다. #6753 (alexey-milovidov)
  • 캐시 딕셔너리의 오류 처리 동작을 검증하는 통합 테스트를 추가합니다. #6755 (Vitaly Baranov)
  • Mac OS에서는 ELF 오브젝트 파일 파싱을 비활성화했습니다. 의미가 없기 때문입니다. #6578 (alexey-milovidov)
  • changelog 생성기를 개선하려는 시도. #6327 (alexey-milovidov)
  • GCC에 -Wshadow 스위치를 추가했습니다. #6325 (kreuzerkrieg)
  • mimalloc 지원을 위한 더 이상 사용되지 않는 코드를 제거했습니다. #6715 (alexey-milovidov)
  • zlib-ng는 x86 기능을 판별하고 해당 정보를 전역 변수에 저장합니다. 이 작업은 서로 다른 스레드에서 동시에 호출될 수 있는 defalteInit 호출 시점에 수행됩니다. 다중 스레드에서의 동시 쓰기를 피하기 위해 라이브러리 시작 시점에 이 작업을 수행하도록 합니다. #6141 (akuzm)
  • #5192에서 수정된 JOIN에서 발생하던 버그에 대한 회귀 테스트입니다. #6147 (Bakhtiyor Ruziev)
  • MSan 보고서 수정. #6144 (alexey-milovidov)
  • 간헐적으로 실패하던 TTL 테스트를 수정합니다. #6782 (Anton Popov)
  • MergeTreeDataPart::is_frozen 필드에서 잘못 보고되던 데이터 레이스를 수정했습니다. #6583 (alexey-milovidov)
  • 퍼즈 테스트(fuzz test)의 타임아웃 문제를 수정했습니다. 이전 버전의 퍼즈 테스트는 SELECT * FROM numbers_mt(gccMurmurHash('')) 쿼리에서 거짓 hang 상태를 보고했습니다. #6582 (alexey-milovidov)
  • 컬럼에 대한 static_cast에 디버그 검사를 추가했습니다. #6581 (alexey-milovidov)
  • 공식 RPM 패키지에서 Oracle Linux를 지원합니다. #6356 #6585 (alexey-milovidov)
  • JSON perftests를 once 타입에서 loop 타입으로 변경했습니다. #6536 (Nikolai Kochetov)
  • odbc-bridge.cppmain() 함수를 정의하므로 clickhouse-lib에 포함되지 않아야 합니다. #6538 (Orivej Desh)
  • 오른쪽 테이블 키에 NULL 값이 있을 때 FULL|RIGHT JOIN에서 발생하는 크래시 테스트. #6362 (Artem Zuikov)
  • 별칭 확장 한계에 대비해 테스트를 추가했습니다. #6442 (alexey-milovidov)
  • 적절한 경우 boost::filesystemstd::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)
  • sanitizer로 빌드할 때 new/delete 메모리 추적을 수정합니다. 추적이 명확하지 않아 테스트에서 메모리 제한 예외를 방지하는 데에만 사용됩니다. #6450 (Artem Zuikov)
  • 링킹 시 정의되지 않은 심볼 검사 기능을 다시 활성화합니다. #6453 (Ivan)
  • hyperscan을 매일 다시 빌드하지 않도록 개선했습니다. #6307 (alexey-milovidov)
  • ProtobufWriter에서 보고된 UBSan 문제를 수정했습니다. #6163 (alexey-milovidov)
  • 호환되지 않으므로 sanitizers와 query profiler를 함께 사용할 수 없도록 했습니다. #6769 (alexey-milovidov)
  • 타이머로 인해 실패한 후 딕셔너리를 다시 로드하는 테스트를 추가했습니다. #6114 (Vitaly Baranov)
  • PipelineExecutor::prepareProcessor의 인수 타입 불일치를 수정합니다. #6494 (Nikolai Kochetov)
  • 잘못된 URI를 위한 테스트를 추가했습니다. #6493 (alexey-milovidov)
  • CAST FUNCTION에 대한 검사를 더 추가했습니다. 이를 통해 퍼지 테스트에서 발생하는 세그멘테이션 폴트에 대한 정보를 더 많이 수집할 수 있습니다. #6346 (Nikolai Kochetov)
  • 로컬에서 이미지를 빌드하는 docker/builder 컨테이너에 gcc-9 지원을 추가했습니다. #6333 (Gleb Novikov)
  • LowCardinality(String)를 사용하는 기본 키 테스트. #5044 #6219 (dimarub2000)
  • 스택 트레이스 출력이 느려 발생하던 테스트 문제를 수정했습니다. #6315 (alexey-milovidov)
  • groupUniqArray에서 발생하던 크래시가 #6029에서 수정되어, 이를 검증하기 위한 테스트 케이스를 추가했습니다. #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 JOINANY 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에 접근할 수 없을 때 복제된 테이블에 대해 DROP 쿼리를 실행하는 동안 테이블 상태가 일관되지 않을 수 있는 문제를 수정했습니다. #6045 #6413 (Nikita Mikhaylov)
  • StorageMerge에서 발생하던 데이터 레이스(data race)를 수정했습니다. #6717 (alexey-milovidov)
  • query profiler에 도입된 버그로 인해 소켓에서 recv 호출이 무한히 발생하던 문제를 수정했습니다. #6386 (alesapin)
  • 불리언 값에 대해 JSONExtractRaw 함수를 실행할 때 과도한 CPU 사용이 발생하던 문제를 수정했습니다. #6208 (Vitaly Baranov)
  • materialized view로 데이터를 푸시할 때 발생하던 회귀(regression) 문제를 수정했습니다. #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)
  • 샘플과 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)

보안 수정

  • 디컴프레션 단계에서 코덱의 두 가지 취약점을 수정합니다(악의적인 사용자가 디컴프레션 중 버퍼 오버플로를 유발하는 압축 데이터를 조작해 생성할 수 있었음). #6670 (Artem Zuikov)

ClickHouse 19.13.3.26 릴리스, 2019-08-22

Bug Fix

  • enable_mixed_granularity_parts=1인 테이블에 대한 ALTER TABLE ... UPDATE 쿼리를 수정했습니다. #6543 (alesapin)
  • 튜플을 사용하는 서브쿼리와 함께 IN 절을 사용할 때 발생하던 NPE를 수정했습니다. #6125 #6550 (tavplubix)
  • stale 상태의 레플리카가 다시 활성화될 때, DROP PARTITION으로 제거된 데이터 파트를 여전히 가지고 있을 수 있던 문제를 수정했습니다. #6522 #6523 (tavplubix)
  • CSV 파싱과 관련된 문제를 수정했습니다. #6426 #6559 (tavplubix)
  • system.parts 테이블과 ALTER 쿼리에서의 데이터 레이스를 수정했습니다. 이 수정으로 #6245를 해결했습니다. #6513 (alexey-milovidov)
  • 메모리 손상을 초래할 수 있던 뮤테이션 내 잘못된 코드를 수정했습니다. 동시에 수행되는 DROP TABLEsystem.parts 또는 system.parts_columns에 대한 SELECT로 인해 발생할 수 있었던 주소 0x14c0 읽기 시의 세그폴트를 수정했습니다. 뮤테이션 쿼리 준비 과정에서 발생하던 레이스 컨디션을 수정했습니다. 복제된 테이블(Replicated Table)에 대한 OPTIMIZEALTER와 같은 동시 수정 작업 때문에 발생하던 데드락을 수정했습니다. #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

New Feature

  • 쿼리 레벨에서 동작하는 샘플링 프로파일러가 추가되었습니다. 예시. #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)
  • 사용자 정의 주(week) 번호를 처리하기 위한 함수가 추가되었습니다. #5212 (Andy Yang)
  • 이제 RENAME 쿼리가 모든 스토리지에서 동작합니다. #5953 (Ivan)
  • 이제 클라이언트는 서버 설정에 지정된 로그 레벨과 관계없이 send_logs_level을 설정하여 원하는 어떤 레벨로든 서버에서 로그를 수신할 수 있습니다. #5964 (Nikita Mikhaylov)

하위 호환되지 않는 변경 사항

  • input_format_defaults_for_omitted_fields 설정이 기본적으로 활성화됩니다. 분산 테이블(Distributed table)에 대한 INSERT를 수행할 때는 클러스터 전체에서 이 설정 값이 동일해야 합니다(롤링 업데이트 전에 설정해야 합니다). 이 설정은 JSONEachRowCSV* 포맷에서 생략된 필드에 대한 복잡한 기본값 표현식 계산을 활성화합니다. 이는 원래 의도된 동작이지만, 무시할 수 있을 정도로 작은 성능 차이를 유발할 수 있습니다. #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 파일에 구성 파일과 동일한 루트 요소가 없는 경우 예외를 발생시킵니다. #6123 (dimarub2000)

성능 향상

  • count()를 최적화했습니다. 이제 가능하면 가장 작은 컬럼을 사용합니다. #6028 (Amos Bird)

빌드/테스트/패키징 개선 사항

  • 성능 테스트에서 메모리 사용량을 보고하도록 했습니다. #5899 (akuzm)
  • 외부 libcxx를 사용할 때 빌드가 실패하던 문제를 수정합니다. #6010 (Ivan)
  • rdkafka 라이브러리를 사용하는 shared 빌드가 실패하던 문제를 수정합니다. #6101 (Ivan)

ClickHouse 19.11 릴리스

ClickHouse 릴리스 19.11.13.74, 2019-11-01

버그 수정

  • 병합되거나 변경된 파트 중 하나가 비어 있는 경우(0행) ALTER MODIFY COLUMN 및 수직 병합(vertical merge)에서 드물게 발생하던 크래시를 수정했습니다. #6780 (alesapin)
  • SIMDJSON을 수동으로 업데이트했습니다. 이를 통해 잘못된 JSON 진단 메시지로 stderr 파일이 과도하게 쌓일 수 있는 문제를 수정했습니다. #7548 (Alexander Kazakov)
  • 뮤테이션에서 mrk 파일 확장자 처리와 관련된 버그를 수정했습니다. (alesapin)

ClickHouse 릴리스 19.11.12.69, 2019-10-02

Bug Fix

  • 복잡한 키를 가진 대용량 테이블에서 인덱스 분석 시 발생하던 성능 저하를 수정했습니다. 이로써 #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 Release 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 Release 19.11.9.52, 2019-09-6

  • 캐시 딕셔너리에서의 오류 처리를 개선했습니다. #6737 (Vitaly Baranov)
  • 함수 arrayEnumerateUniqRanked의 버그를 수정했습니다. #6779 (proller)
  • JSON에서 Tuple을 추출할 때 JSONExtract 함수의 동작을 수정했습니다. #6718 (Vitaly Baranov)
  • 스키핑 인덱스가 있는 테이블에서 ALTER DELETE 쿼리 실행 후 발생할 수 있는 데이터 손실 문제를 수정했습니다. #6224 #6282 (Nikita Vasilev)
  • 성능 테스트를 수정했습니다. #6392 (alexey-milovidov)
  • Parquet: Boolean 컬럼 읽기를 수정했습니다. #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에 등록할 수 있습니다. 다른 레플리카가 이 악성 레플리카에서 데이터 파트를 가져올 때, 공격자는 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(Null Pointer Exception)를 수정했습니다. #6125 #6550 (tavplubix)
  • 오래된(stale) 레플리카가 다시 활성화될 때, DROP PARTITION에 의해 제거된 데이터 파트가 여전히 남아 있을 수 있던 문제를 수정했습니다. #6522 #6523 (tavplubix)
  • CSV 파싱과 관련된 문제를 수정했습니다. #6426 #6559 (tavplubix)
  • system.parts 테이블과 ALTER 쿼리에서 발생하던 데이터 레이스(data race)를 수정했습니다. 이로 인해 #6245 이슈가 해결되었습니다. #6513 (alexey-milovidov)
  • 메모리 손상을 유발할 수 있던 뮤테이션 코드 오류를 수정했습니다. system.parts 또는 system.parts_columns에서 DROP TABLESELECT가 동시에 수행될 때 발생할 수 있던 주소 0x14c0 읽기와 관련된 세그멘테이션 폴트(segmentation fault)를 수정했습니다. 뮤테이션 쿼리 준비 과정에서의 레이스 컨디션(race condition)을 수정했습니다. 복제된 테이블(Replicated Table)에 대한 OPTIMIZEALTER와 같은 동시 수정 작업 때문에 발생하던 데드락(deadlock)을 수정했습니다. #6514 (alexey-milovidov)

ClickHouse 19.11.7.40 릴리스, 2019-08-14

버그 수정

  • 이 버전에서 Kafka 통합이 수정되었습니다.
  • 상수 인수에 대해 arrayReduce를 사용할 때 발생하던 segfault를 수정했습니다. #6326 (alexey-milovidov)
  • toFloat() 단조성을 수정했습니다. #6374 (dimarub2000)
  • optimize_skip_unused_shards가 활성화되어 있고 sharding 키가 없을 때 발생하던 segfault를 수정했습니다. #6384 (CurtizJ)
  • arrayEnumerateUniqRanked 함수의 로직을 수정했습니다. #6423 (alexey-milovidov)
  • MySQL 핸들러에서 불필요하게 상세한 로깅을 제거했습니다. #6389 (alexey-milovidov)
  • topKtopKWeighted 집계 함수에서 잘못된 동작 및 잠재적인 segfault를 수정했습니다. #6404 (CurtizJ)
  • system.columns 테이블에서 가상 컬럼을 노출하지 않도록 했습니다. 이는 하위 호환성을 위해 필요합니다. #6406 (alexey-milovidov)
  • 복합 키 캐시 딕셔너리에서 문자열 필드에 대한 메모리 할당 버그를 수정했습니다. #6447 (alesapin)
  • Replicated*MergeTree 테이블에 대해 새 레플리카를 생성할 때 adaptive granularity를 활성화하는 과정에서 발생하던 버그를 수정했습니다. #6452 (alesapin)
  • Kafka 메시지를 읽을 때 발생하던 무한 루프를 수정했습니다. #6354 (abyss7)
  • 조작된 쿼리가 SQL 파서에서의 스택 오버플로우로 인해 서버 크래시를 유발할 수 있던 문제와 MergeDistributed 테이블에서의 스택 오버플로우 가능성을 수정했습니다. #6433 (alexey-milovidov)
  • 짧은 시퀀스에서 발생하던 Gorilla 인코딩 오류를 수정했습니다. #6444 (Enmk)

개선

  • 연결 시 사용자가 poll_intervalidle_connection_timeout 설정을 재정의할 수 있습니다. #6230 (alexey-milovidov)

ClickHouse 19.11.5.28 릴리스, 2019-08-05

버그 수정

  • 서버가 과부하 상태일 때 쿼리가 멈춰(hang) 버릴 수 있는 문제를 수정했습니다. #6301 (alexey-milovidov)
  • yandexConsistentHash 함수에서 발생하던 FPE를 수정했습니다. 이로써 #6304를 해결했습니다. #6126 (alexey-milovidov)
  • AggregateFunctionFactory에서 LowCardinality 타입을 변환할 때 발생하던 버그를 수정했습니다. 이로써 #6257를 해결했습니다. #6281 (Nikolai Kochetov)
  • 설정 파일에서 truefalse 문자열로부터 bool 설정을 파싱하던 동작을 수정했습니다. #6278 (alesapin)
  • WHERE의 일부가 PREWHERE로 이동할 때 MergeTree 테이블 위에 있는 Distributed 테이블에 대한 쿼리에서 호환되지 않는 스트림 헤더가 발생할 수 있는 드문 버그를 수정했습니다. #6236 (alesapin)
  • 부호 있는 타입을 부호 없는 타입으로 나눌 때 정수 나눗셈에서 발생하던 오버플로를 수정했습니다. 이로써 #6214를 해결했습니다. #6233 (alexey-milovidov)

이전 버전과의 비호환 변경

  • Kafka는 여전히 정상 동작하지 않습니다.

ClickHouse 릴리스 19.11.4.24, 2019-08-01

버그 수정

  • adaptive granularity를 사용할 때 보조 인덱스 마크를 기록하는 과정에서 발생하던 버그를 수정합니다. #6126 (alesapin)
  • 2단계 집계를 사용하는 GROUP BY에서 WITH ROLLUPWITH CUBE 수정자의 동작을 수정합니다. #6225 (Anton Popov)
  • JSONExtractRaw 함수에서 발생하던 중단(hang) 문제를 수정합니다. #6195 #6198에서 보고된 이슈를 해결합니다. (alexey-milovidov)
  • ExternalLoader::reloadOutdated()에서 발생하던 세그멘테이션 폴트(segfault)를 수정합니다. #6082 (Vitaly Baranov)
  • 서버가 리스닝 소켓을 닫았지만 종료되지 않고 남은 쿼리를 계속 처리하던 경우를 수정합니다. 이로 인해 두 개의 clickhouse-server 프로세스가 동시에 실행될 수 있었습니다. 일부 경우 서버가 남은 쿼리에 대해 bad_function_call 오류를 반환할 수도 있었습니다. #6231 (alexey-milovidov)
  • ODBC, MySQL, ClickHouse 및 HTTP를 통해 외부 딕셔너리를 초기 로딩할 때 업데이트 필드에 대해 불필요하고 잘못된 조건이 설정되던 문제를 수정합니다. 이 수정으로 #6069 #6083을 해결합니다. (alexey-milovidov)
  • Null을 포함하지 않는 경우(예: SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String) 같은 쿼리) LowCardinality(Nullable)를 널 허용이 아닌 컬럼으로 캐스팅할 때 발생하던 관련 없는 예외를 수정합니다. #6094 #6119 (Nikolai Kochetov)
  • 극히 드문 경우에 "uniq" 집계 함수가 비결정적 결과를 반환하던 문제를 수정합니다. 이 버그는 모든 ClickHouse 버전에 존재했습니다. #6058 (alexey-milovidov)
  • IPv6CIDRToRange 함수에 다소 과도하게 큰 CIDR 값을 설정했을 때 발생하던 세그멘테이션 폴트를 수정합니다. #6068 (Guillaume Tassery)
  • 서버가 여러 서로 다른 컨텍스트에서 많은 예외를 발생시킬 때 발생하던 작은 메모리 누수를 수정합니다. #6144 (alexey-milovidov)
  • 컨슈머가 구독 전에 일시 중지되고 이후에도 재개되지 않던 상황을 수정합니다. #6075 (Ivan) 이 버전에서는 Kafka가 작동하지 않는다는 점에 유의하십시오.
  • 오류로 완료된 이전 읽기 작업에서 남아 있던 Kafka 데이터 버퍼를 정리하도록 수정합니다. #6026 (Nikolay) 이 버전에서는 Kafka가 작동하지 않는다는 점에 유의하십시오.
  • StorageMergeTree::background_task_handlestartup()에서 초기화되므로, 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)
  • DoubleDeltaGorilla 컬럼 코덱을 추가했습니다. #5600 (Vasily Nemkov)
  • OS가 동적 스케줄링 우선순위를 조정하는 데 사용하는 쿼리 처리 스레드의 「nice」 값을 제어할 수 있는 os_thread_priority 설정을 추가했습니다. 작동하려면 CAP_SYS_NICE 권한이 필요합니다. 이는 #5858 #5909 (alexey-milovidov)을 구현한 것입니다.
  • Kafka 엔진에 대해 _topic, _offset, _key 컬럼을 구현했습니다. #5382 (Ivan) 이 버전에서는 Kafka가 동작하지 않습니다.
  • 집계 함수 조합자 -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)
  • 블록 내 비물리 컬럼이 있을 때 TTL 머지 시 발생하던 세그멘테이션 폴트를 수정합니다. #5819 (Anton Popov)
  • LowCardinality 컬럼이 있는 파트를 검사할 때 발생하는 드문 버그를 수정했습니다. 이전에는 LowCardinality 컬럼을 포함하는 파트에 대해 checkDataPart가 항상 실패했습니다. #5832 (alesapin)
  • 서버 스레드 풀이 가득 찼을 때 연결이 걸린(hang) 상태로 남지 않도록 합니다. 이는 remote 테이블 함수에서의 연결이나, 연결 타임아웃이 길게 설정된 상태에서 레플리카가 없는 세그먼트에 대한 연결에 중요합니다. #5878 #5881 문제를 수정합니다. (alexey-milovidov)
  • evalMLModel 함수의 상수 인자 지원. #5817 #5820 문제를 수정했습니다. (alexey-milovidov)
  • ClickHouse가 기본 시간대(time zone)를 UTC 대신 UCT로 잘못 판별하던 문제를 수정했습니다. 이로써 #5804가 해결됩니다. #5828 (alexey-milovidov)
  • visitParamExtractRaw에서 발생하던 버퍼 언더플로우를 수정했습니다. 이를 통해 #5901 #5902가 해결되었습니다. (alexey-milovidov)
  • 이제 분산형 DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER 쿼리는 리더 레플리카에서 직접 실행됩니다. #5757 (alesapin)
  • ColumnNullable와 함께 사용되는 ColumnConst에 대한 coalesce를 수정하고 관련 변경을 수행했습니다. #5755 (Artem Zuikov)
  • ReadBufferFromKafkaConsumer가 이전에 멈춰 있었더라도 commit() 이후에 새 메시지를 계속 읽을 수 있도록 수정했습니다 #5852 (Ivan)
  • 오른쪽 테이블의 Nullable 키로 조인할 때 FULLRIGHT JOIN 결과가 잘못되던 문제를 수정합니다. #5859 (Artem Zuikov)
  • 낮은 우선순위 쿼리가 무기한 대기(sleep) 상태에 빠지는 문제에 대한 잠정적 수정. #5842 (alexey-milovidov)
  • SYSTEM FLUSH LOGS 쿼리 이후 일부 쿼리가 query_log에 나타나지 않을 수 있는 레이스 컨디션(race condition)을 수정합니다. #5456 #5685 (Anton Popov)
  • 이미 제거된 copier 객체를 사용하려고 하던 watch로 인해 ClusterCopier에서 발생한 heap-use-after-free ASan 경고를 수정했습니다. #5871 (Nikolai Kochetov)
  • 일부 IColumn::deserializeAndInsertFromArena 구현에서 잘못된 StringRef 포인터가 반환되던 문제를 수정했습니다. 이 버그는 단위 테스트에만 영향을 미쳤습니다. #5973 (Nikolai Kochetov)
  • 소스 및 중간 array join 컬럼이 동일한 이름의 다른 컬럼을 가리는 문제를 방지했습니다. #5941 (Artem Zuikov)
  • MySQL 스타일 식별자 따옴표 표기를 사용하는 MySQL 엔진에 대한 INSERT 및 SELECT 쿼리를 수정했습니다. #5704 (Winter Zhang)
  • 이제 CHECK TABLE 쿼리가 MergeTree 엔진 계열에서도 동작합니다. 각 파트(단순한 엔진에서는 파일)에 대해 검사 상태와, 있는 경우 메시지를 반환합니다. 또한 손상된 파트를 가져오는(fetch) 과정에서 발생하던 버그를 수정했습니다. #5865 (alesapin)
  • SPLIT_SHARED_LIBRARIES 런타임을 수정함 #5793 (Danila Kutenin)
  • /etc/localtime../usr/share/zoneinfo/Asia/Istanbul과 같은 상대 심볼릭 링크인 경우의 시간대 초기화 문제를 수정했습니다. #5922 (alexey-milovidov)
  • clickhouse-copier: 종료 시 발생하던 use-after-free 오류 수정 #5752 (proller)
  • simdjson을 업데이트했습니다. 널 바이트(0 값 바이트)를 포함한 일부 잘못된 JSON이 성공적으로 파싱되던 문제를 수정했습니다. #5938 (alexey-milovidov)
  • SystemLogs 종료 문제를 수정했습니다 #5802 (Anton Popov)
  • invalidate_query의 조건이 딕셔너리에 의존할 때 발생하던 멈춤 현상을 수정합니다. #6011 (Vitaly Baranov)

개선 사항

  • 클러스터 설정에서 해석할 수 없는 주소를 허용합니다. 이러한 주소는 사용 불가능한 것으로 간주되며, 각 연결 시도마다 다시 이름 해석을 시도합니다. 이 기능은 특히 Kubernetes 환경에서 유용합니다. #5714 #5924를 수정합니다. (alexey-milovidov)
  • 유휴 상태의 TCP 연결을 닫습니다(기본값은 1시간 타임아웃입니다). 이는 모든 서버에 여러 개의 분산 테이블이 있는 대규모 클러스터에서 특히 중요합니다. 각 서버가 다른 모든 서버에 대한 커넥션 풀을 유지할 수 있고, 피크 쿼리 동시 처리 시기 이후에는 연결이 유휴 상태로 남게 되기 때문입니다. 이는 #5879 #5880을 수정합니다. (alexey-milovidov)
  • topK 함수의 품질을 개선했습니다. SavingSpace Set의 동작을 변경하여, 새 요소의 가중치가 더 큰 경우 마지막 요소를 제거하도록 했습니다. #5833 #5850 (Guillaume Tassery)
  • 도메인을 처리하는 URL 함수들이 이제 스킴이 없는 불완전한 URL에서도 동작합니다 #5725 (alesapin)
  • system.parts_columns 테이블에 체크섬이 추가되었습니다. #5874 (Nikita Mikhaylov)
  • Enum8 또는 Enum16의 별칭으로 Enum 데이터 타입을 추가했습니다. #5886 (dimarub2000)
  • T64 코덱용 전체 비트 트랜스포즈 변형입니다. zstd와 함께 사용할 때 더 나은 압축률을 달성할 수 있습니다. #5742 (Artem Zuikov)
  • startsWith FUNCTION을 사용하는 조건에서 이제 기본 키를 사용할 수 있습니다. 이를 통해 #5310#5882, #5919가 해결되었습니다. (dimarub2000)
  • 빈 데이터베이스 이름을 허용함으로써 cross-replication 클러스터 토폴로지에서 clickhouse-copier를 사용할 수 있도록 했습니다. #5745 (nvartolomei)
  • tzdata가 없는 시스템(예: 순정 Docker 컨테이너)에서는 기본 타임존으로 UTC를 사용합니다. 이 패치 이전에는 Could not determine local time zone 오류 메시지가 출력되며 서버 또는 클라이언트가 시작되지 않았습니다. #5827 (alexey-milovidov)
  • 하위 호환성을 위해 함수 quantileTiming에 대한 부동 소수점 인자 지원을 다시 추가했습니다. #5911 (alexey-milovidov)
  • 오류 메시지에 누락된 컬럼이 있는 테이블을 표시합니다. #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)
  • 사용 중단된 설정(obsolete setting)의 개념이 추가되었습니다. 사용 중단된 설정인 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)
  • address sanitizer와 연동하여 사용자 정의 할로케이터(Arena, ArenaWithFreeLists)를 지원함으로써 「use-after-free」 오류 디버깅을 개선했습니다. #5728 (akuzm)
  • C++ 예외 처리 및 스택 트레이스 출력을 위해 LLVM libunwind 구현으로 전환했습니다 #4828 (Nikita Lapkov)
  • -Weverything에서 경고 두 개를 더 추가했습니다 #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)
  • 통합 테스트에 전역 타임아웃을 추가하고, 테스트 코드에서 일부를 비활성화했습니다. #5741 (alesapin)
  • 일부 ThreadSanitizer 오류를 수정합니다. #5854 (akuzm)
  • --no-undefined 옵션은 링크 시 링커가 모든 외부 심볼이 존재하는지 여부를 강제로 검사하도록 합니다. 분할 빌드 모드에서 라이브러리 간 실제 의존성을 추적하는 데 매우 유용합니다. #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)
  • macOS + 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)
  • Common/config.h를 libs(dbms)로 분리 #5715 (proller)
  • "Arcadia" 빌드 플랫폼에 대한 수정 #5795 (proller)
  • 비표준 빌드(gcc9, 서브모듈 없이)에 대한 수정 #5792 (proller)
  • 버그 발생 소지가 큰 것으로 확인되어 unalignedStore에서 명시적인 타입을 요구하도록 변경 #5791 (akuzm)
  • macOS 빌드를 수정함 #5830 (filimonov)
  • 요청된 대로 더 큰 데이터셋을 사용하여 새로운 JIT 기능에 대한 성능 테스트를 수행함 #5263 #5887 (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/Date(Time)/DecimalX 컬럼용으로 만들어졌습니다. 상수이거나 값의 범위가 작은 컬럼에 적합합니다. 코덱 자체는 재압축 없이 데이터 타입을 확장하거나 축소할 수 있도록 해줍니다. #5557 (Artem Zuikov)
  • 원격 MySQL 서버의 모든 테이블을 조회할 수 있는 데이터베이스 엔진 MySQL을 추가했습니다. #5599 (Winter Zhang)
  • bitmapContains를 구현했습니다. 두 번째 비트맵이 하나의 요소만 포함하는 경우 bitmapHasAny보다 2배 빠릅니다. #5535 (Zhichang Yu)
  • MySQL 또는 PHP와 정확히 동일한 동작을 하는 crc32 함수 지원을 추가했습니다. 해시 함수가 필요한 경우에는 사용하지 마십시오. #5661 (Remen Ivan)
  • Distributed 테이블에 대한 비동기 INSERT를 제어하기 위해 SYSTEM START/STOP DISTRIBUTED SENDS 쿼리를 구현했습니다. #4935 (Winter Zhang)

Bug Fix

  • 뮤테이션을 실행할 때 머지 제한을 계산하는 과정에서 쿼리 실행 제한과 최대 파트 크기 제한을 무시하도록 했습니다. #5659 (Anton Popov)
  • 일반 블록의 중복 제거(극히 드물게 발생)와 중복 블록 삽입(더 자주 발생)으로 이어질 수 있는 버그를 수정했습니다. #5549 (alesapin)
  • 인자가 빈 배열일 때 arrayEnumerateUniqRanked 함수의 동작을 수정했습니다. #5559 (proller)
  • 메시지를 폴링할 의도가 없을 때는 Kafka 토픽을 구독하지 않도록 했습니다. #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)
  • 설정에 따라 이미 수립된 연결에 대해서도 네트워크 타임아웃을 동적으로 변경할 수 있습니다. #4558 (Konstantin Podshumok)
  • 함수 firstSignificantSubdomain, cutToFirstSignificantSubdomain에서 「public_suffix_list」를 사용합니다. 이는 https://publicsuffix.org/list/public_suffix_list.dat 파일에서 생성된 목록을 기반으로 gperf가 생성한 완전 해시 테이블(perfect hash table)을 사용합니다. (예를 들어 이제 ac.uk 도메인을 중요하지 않은 도메인으로 인식합니다.) #5030 (Guillaume Tassery)
  • 시스템 테이블에 IPv6 데이터 타입을 도입하고, system.processessystem.query_log의 클라이언트 정보 컬럼을 통합했습니다. #5640 (alexey-milovidov)
  • MySQL 호환 프로토콜을 사용하는 연결에 세션을 사용합니다. #5476 #5646 (Yuriy Baranov)
  • 더 많은 ALTER 쿼리에 대해 ON CLUSTER를 지원합니다. #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 컬럼이 있는 파트를 검사하는 과정에서 발생하는 드문 버그를 수정합니다. #5832 (alesapin)
  • 블록에 비물리적(non-physical) 컬럼이 있을 때 TTL 머지 작업에서 발생하는 세그멘테이션 폴트를 수정합니다. #5819 (Anton Popov)
  • 낮은 우선순위 쿼리가 잠재적으로 무한히 대기 상태에 머무를 수 있는 문제를 수정합니다. #5842 (alexey-milovidov)
  • 기본 시간대를 UTC가 아닌 UCT로 잘못 판단하던 ClickHouse의 동작을 수정합니다. #5828 (alexey-milovidov)
  • follower 레플리카에서 leader 레플리카보다 먼저 분산된 DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER 쿼리가 실행되던 버그를 수정합니다. 이제 해당 쿼리는 leader 레플리카에서 직접 실행됩니다. #5757 (alesapin)
  • SYSTEM FLUSH LOGS 쿼리 실행 직후 일부 쿼리가 query_log에 즉시 나타나지 않을 수 있는 경쟁 상태(race condition)를 수정합니다. #5685 (Anton Popov)
  • evalMLModel 함수에 상수 인자(constant arguments)에 대한 누락되어 있던 지원을 추가합니다. #5820 (alexey-milovidov)

ClickHouse 릴리스 19.9.2.4, 2019-06-24

New Feature

  • system.parts 테이블에서 동결된 파트에 대한 정보를 출력합니다. #5471 (proller)
  • 인수에 비밀번호가 설정되지 않은 경우, tty에서 clickhouse-client를 시작할 때 클라이언트 비밀번호를 요청합니다. #5092 (proller)
  • Decimal 타입에 대해 dictGetdictGetOrDefault 함수가 구현되었습니다. #5394 (Artem Zuikov)

개선사항

  • Debian init: 서비스 중지 타임아웃 추가. #5522 (proller)
  • LowCardinality에 대해 의심스러운 타입을 사용하는 테이블 생성은 기본적으로 금지하도록 하는 설정 추가. #5448 (Olga Khvostikova)
  • 회귀 함수가 FUNCTION evalMLMethod에서 State로 사용되지 않을 때 모델 가중치를 반환하도록 변경. #5411 (Quid37)
  • 회귀 메서드 이름 변경 및 개선. #5492 (Quid37)
  • 문자열 검색기의 인터페이스를 보다 명확하게 개선. #5586 (Danila Kutenin)

버그 수정

  • Kafka에서 발생할 수 있는 데이터 손실 문제 수정 #5445 (Ivan)
  • PrettySpace 포맷이 컬럼 0개로 호출될 때 발생할 수 있는 무한 루프를 수정합니다 #5560 (Olga Khvostikova)
  • 선형 모델에서 UInt32 오버플로 버그를 수정했습니다. 상수가 아닌 모델 인수에 대해서도 ML 모델 eval을 허용합니다. #5516 (Nikolai Kochetov)
  • ALTER TABLE ... DROP INDEX IF EXISTS ... 는 지정된 인덱스가 존재하지 않을 경우 예외가 발생하지 않아야 합니다 #5524 (Gleb Novikov)
  • 스칼라 서브쿼리에서 bitmapHasAny 사용 시 세그멘테이션 폴트(segfault)가 발생하던 문제를 수정 #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)
  • sum 연산에서 사용되는 상수 needle의 길이가 최소 16KB 이상인 경우에만 발생하는, MultiVolnitsky searcher 관련 극히 드문 몇 가지 경우를 수정했습니다. 알고리즘이 이전 결과를 누락하거나 덮어쓰는 문제가 있었고, 이로 인해 multiSearchAny가 잘못된 결과를 반환할 수 있었습니다. #5588 (Danila Kutenin)
  • ExternalData 요청에 대한 설정에서 ClickHouse 설정을 사용할 수 없던 문제를 수정했습니다. 또한 현재는 이름의 모호성 때문에 date_time_input_formatlow_cardinality_allow_in_native_format 설정을 사용할 수 없습니다(외부 데이터에서는 테이블 포맷으로, 쿼리에서는 설정으로 해석될 수 있음). #5455 (Danila Kutenin)
  • parts를 파일 시스템(FS)에서만 삭제하고 Zookeeper에서는 삭제하지 않던 버그를 수정했습니다. #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)

빌드/테스트/패키징 개선

  • Brotli HTTP 압축을 지원하지 않는 경우(ENABLE_BROTLI=OFF cmake 변수) 빌드 문제를 수정했습니다. #5521 (Anton Yuzhaninov)
  • roaring.h를 roaring/roaring.h로 포함하도록 수정했습니다. #5523 (Orivej Desh)
  • hyperscan에서 gcc9 경고를 수정했습니다(#line 지시문은 문제가 많은 방식입니다!). #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 함수(예: Python의 os.path.basename, PHP의 basename 등)와 유사하게 동작하는 basename FUNCTION을 추가했습니다. UNIX 계열 경로와 Windows 경로 모두에서 동작합니다. #5136 (Guillaume Tassery)
  • LIMIT BY 절에서 오프셋 n을 지정할 수 있도록 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에 연결할 수 있는 서버를 추가했습니다. #4715 (Yuriy Baranov)
  • toDecimal*OrZerotoDecimal*OrNull FUNCTION을 추가했습니다. #5291 (Artem Zuikov)
  • 다음 함수에서 Decimal 타입을 지원합니다: quantile, quantiles, median, quantileExactWeighted, quantilesExactWeighted, medianExactWeighted. #5304 (Artem Zuikov)
  • toValidUTF8 함수를 추가했습니다. 이 함수는 모든 잘못된 UTF-8 문자를 대체 문자 �(U+FFFD)로 치환합니다. #5322 (Danila Kutenin)
  • format FUNCTION이 추가되었습니다. 인수로 전달된 문자열들을 상수 패턴(단순화된 Python format 패턴)에 적용해 서식을 지정합니다. #5330 (Danila Kutenin)
  • MergeTree 테이블에서 분리된 파트 정보를 포함하는 system.detached_parts 테이블을 추가했습니다. #5353 (akuzm)
  • ngramSearch 함수를 추가하여 needle과 haystack 간의 비대칭 차이를 계산할 수 있도록 했습니다. #5418#5422 (Danila Kutenin)
  • 집계 함수 인터페이스를 사용하여 기본적인 머신 러닝 방법(확률적 선형 회귀와 로지스틱 회귀)을 구현합니다. 모델 가중치를 업데이트하기 위한 다양한 전략(단순 경사 하강법, 모멘텀 기법, Nesterov 가속 기법)을 제공합니다. 또한 임의 크기의 미니배치도 지원합니다. #4943 (Quid37)
  • geohashEncodegeohashDecode 함수 구현. #5003 (Vasily Nemkov)
  • 집계 FUNCTION timeSeriesGroupSum이 추가되었습니다. 이 FUNCTION은 샘플링된 타임스탬프가 서로 정렬되어 있지 않은 서로 다른 시계열을 집계할 수 있습니다. 두 샘플 타임스탬프 사이에서 선형 보간을 사용한 뒤 시계열을 합산합니다. 또한 집계 FUNCTION timeSeriesGroupRateSum이 추가되었으며, 시계열의 rate를 계산한 다음 이 rate들을 합산합니다. #4542 (Yangkuan Liu)
  • CIDR을 사용하여 서브넷 내 IP에 대한 하한과 상한을 계산하는 함수 IPv4CIDRtoIPv4RangeIPv6CIDRtoIPv6Range를 추가했습니다. #5095 (Guillaume Tassery)
  • HTTP를 사용해 쿼리를 전송할 때 send_progress_in_http_headers 설정이 활성화되어 있으면 X-ClickHouse-Summary 헤더를 추가합니다. 기존의 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가 수정되어 이제 마지막 매개변수에서 반환 타입을 가져오며 널 허용(Nullable) 타입을 주입하지 않습니다. AVX2 명령어를 사용할 수 없는 경우 RapidJSON을 대체 수단으로 사용하도록 구현되었습니다. simdjson 라이브러리가 새 버전으로 업데이트되었습니다. #5235 (Vitaly Baranov)
  • 이제 ifmultiIf 함수는 조건의 널 허용(Nullable) 여부에 의존하지 않고, SQL 호환성을 위해 각 분기에 의존합니다. #5238 (Jian Wu)
  • In 술어가 이제 Equal 함수와 마찬가지로 Null 입력에 대해 Null 결과를 반환합니다. #5152 (Jian Wu)
  • Kafka에서 읽은 행 수가 (flush_interval / poll_timeout)에 도달할 때마다 시간 제한을 확인합니다. 이렇게 하면 Kafka consumer의 읽기 작업을 더 자주 중단하고 최상위 스트림의 시간 제한을 확인할 수 있습니다 #5249 (Ivan)
  • 번들형 SASL을 사용하여 rdkafka를 링크했습니다. 이를 통해 SASL SCRAM 인증을 사용할 수 있습니다. #5253 (Ivan)
  • ALL 조인(ALL JOINS)을 위한 RowRefList의 배치 버전입니다. #5267 (Artem Zuikov)
  • clickhouse-server: listen 오류 메시지를 보다 알기 쉽게 개선했습니다. #5268 (proller)
  • clickhouse-copier에서 <sharding_key>에 사용되는 함수의 딕셔너리를 지원합니다. #5270 (proller)
  • Kafka 커밋 정책을 조절하기 위한 새로운 설정 kafka_commit_every_batch가 추가되었습니다. 이 설정을 사용하면 커밋 모드를 각 메시지 배치가 처리될 때마다 커밋할지, 아니면 전체 블록이 스토리지에 기록된 후에 커밋할지로 지정할 수 있습니다. 이는 극단적인 상황에서 일부 메시지를 유실할 위험과 동일한 메시지를 두 번 읽게 될 위험 사이의 절충안입니다. #5308 (Ivan)
  • windowFunnel이 다른 Unsigned Integer 타입도 지원하도록 개선. #5320 (sundyli)
  • Merge 엔진에서 가상 컬럼 _table을 다른 컬럼으로 가려(shadow) 사용할 수 있도록 허용했습니다. #5325 (Ivan)
  • sequenceMatch 집계 함수가 다른 부호 없는 정수(Integer) 타입도 지원하도록 함 #5339 (sundyli)
  • 체크섬 불일치가 하드웨어 장애로 인해 발생했을 가능성이 큰 경우를 위해 오류 메시지를 개선했습니다. #5355 (alexey-milovidov)
  • StorageMerge에 사용되는 하위 테이블이 샘플링을 지원하는지 확인하도록 했습니다. #5366 (Ivan)
  • 외부 딕셔너리에서 사용이 끝난 MySQL 연결을 닫도록 했습니다. 이 변경 사항은 이슈 #893과 관련됩니다. #5395 (Clément Rodriguez)
  • MySQL Wire Protocol 개선. 형식 이름을 MySQLWire로 변경했습니다. RSA_free 호출에 RAII를 사용했습니다. 컨텍스트를 생성할 수 없는 경우 SSL을 비활성화했습니다. #5419 (Yuriy Baranov)
  • clickhouse-client: history 파일에 접근할 수 없는 경우에도 실행할 수 있도록 허용합니다(읽기 전용, 디스크 공간 부족, 파일이 디렉터리인 경우 등). #5431 (proller)
  • 비동기 INSERT로 분산 테이블에 INSERT할 때 쿼리 설정이 적용되도록 수정. #4936 (TCeason)
  • 함수 leastSqrsimpleLinearRegression으로, LinearRegressionlinearRegression으로, LogisticRegressionlogisticRegression으로 이름 변경했습니다. #5391 (Nikolai Kochetov)

성능 향상

  • ALTER MODIFY 쿼리에서 비복제 MergeTree 테이블의 파트 처리를 병렬화합니다. #4639 (Ivan Kush)
  • 정규 표현식 추출을 최적화했습니다. #5193 #5191 (Danila Kutenin)
  • JOIN ON 절에서만 사용되는 경우 right join 키 컬럼을 조인 결과에 추가하지 않습니다. #5260 (Artem Zuikov)
  • 첫 번째 빈 응답 이후 Kafka 버퍼를 고정(freeze)합니다. 이를 통해 일부 행 파싱 스트림에서 빈 결과에 대해 ReadBuffer::next()가 여러 번 호출되는 것을 방지합니다. #5283 (Ivan)
  • 여러 인자를 사용하는 concat 함수를 최적화했습니다. #5357 (Danila Kutenin)
  • 쿼리 최적화. comma/cross join을 inner join으로 다시 쓸 때 IN 구문을 더 하위 단계로 푸시다운(push down)할 수 있도록 허용합니다. #5396 (Artem Zuikov)
  • 더 빠른 압축 해제를 위해 LZ4 구현을 reference 구현으로 업그레이드했습니다. #5070 (Danila Kutenin)
  • MSD radix sort(kxsort 기반)와 부분 정렬을 구현했습니다. #5129 (Evgenii Pravda)

버그 수정

  • 조인에서 필요한 컬럼 푸시다운 처리 수정. #5192 (Winter Zhang)
  • ClickHouse가 systemd로 실행될 때 sudo service clickhouse-server forcerestart 명령이 예상대로 동작하지 않던 버그를 수정했습니다. #5204 (proller)
  • DataPartsExchange에서 HTTP 오류 코드를 수정했습니다(포트 9009의 interserver HTTP 서버가 오류가 발생해도 항상 코드 200을 반환하던 문제). #5216 (proller)
  • MAX_SMALL_STRING_SIZE보다 긴 String에 대한 SimpleAggregateFunction을 수정했습니다. #5311 (Azat Khuzhin)
  • IN에서 DecimalNullable(Decimal)로 변환할 때의 오류를 수정했습니다. 서로 다른 스케일을 포함한 Decimal 간 다른 변환도 지원합니다. #5350 (Artem Zuikov)
  • simdjson 라이브러리에서 FPU 상태가 훼손되어 uniqHLLuniqCombined 집계 함수와 log와 같은 수학 함수가 잘못 계산되던 문제를 수정했습니다. #5354 (alexey-milovidov)
  • JSON 함수에서 const/비 const가 혼합된 경우를 처리하는 로직을 수정했습니다. #5435 (Vitaly Baranov)
  • retention 함수를 수정했습니다. 이제 데이터 행에서 만족하는 모든 조건이 데이터 상태에 추가됩니다. #5119 (小路)
  • Decimal에 대한 quantileExact의 결과 타입을 수정했습니다. #5304 (Artem Zuikov)

문서

  • CollapsingMergeTree에 대한 문서를 중국어로 번역했습니다. #5168 (张风啸)
  • 테이블 엔진에 대한 일부 문서를 중국어로 번역했습니다. #5134 #5328 (never lee)

빌드/테스트/패키징 개선 사항

  • 잠재적인 use-after-free 가능성을 나타내는 일부 sanitizer 보고서를 수정했습니다. #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 함수와 유사한 비트맵 관련 함수 bitmapHasAnybitmapHasAll이 추가되었습니다. #5279 (Sergi Vladykin)

버그 수정

  • Null 값이 있는 minmax INDEX에서 발생하던 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 consumer 시작에 실패했을 때 서버가 크래시하지 않도록 수정했습니다. #5285 (Ivan)
  • bitmap 함수가 잘못된 결과를 생성하던 문제를 수정했습니다. #5359 (Andy Yang)
  • 해시된 딕셔너리에서 element_count가 중복을 포함하지 않도록 수정했습니다. #5440 (Azat Khuzhin)
  • 환경 변수 TZ의 내용을 타임존 이름으로 사용하도록 수정했습니다. 일부 경우에 기본 타임존을 올바르게 감지하는 데 도움이 됩니다. #5443 (Ivan)
  • dictGetT 함수에서 정수를 변환하려고 시도하지 않도록 수정했습니다. 이 동작이 올바르게 작동하지 않았기 때문에, 대신 예외를 발생시키도록 했습니다. #5446 (Artem Zuikov)
  • ExternalData HTTP 요청에서 settings가 올바르게 처리되지 않던 문제를 수정했습니다. #5455 (Danila Kutenin)
  • 파트를 파일 시스템에서만 제거하고 Zookeeper에서는 드롭하지 않던 버그를 수정했습니다. #5520 (alesapin)
  • bitmapHasAny 함수에서 발생하던 segmentation fault를 수정했습니다. #5528 (Zhichang Yu)
  • DNS 캐시가 삭제된 후에도 복제(replication) 커넥션 풀에서 호스트 이름 재해결을 재시도하지 않던 오류를 수정했습니다. #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 스레드를 종료시키는 문제가 있었습니다. #5489 (Azat Khuzhin)
  • MATERIALIZED 컬럼이 있는 Distributed() 테이블에 대한 INSERT를 수정했습니다. #5429 (Azat Khuzhin)

ClickHouse 릴리스 19.7.3.9, 2019년 5월 30일

새로운 기능

  • 사용자가 지정할 수 있는 설정 값의 범위를 제한할 수 있습니다. 이러한 제약은 사용자 SETTINGS PROFILE에서 설정할 수 있습니다. #4931 (Vitaly Baranov)
  • 선택적 max_size 매개변수를 받는 groupUniqArray 함수의 두 번째 버전을 추가합니다. 이 매개변수는 결과 배열의 크기를 제한하며, 동작은 groupArray(max_size)(x) 함수와 유사합니다. #5026 (Guillaume Tassery)
  • TSVWithNames/CSVWithNames 입력 파일 형식에서 이제 파일 헤더를 사용해 컬럼 순서를 결정할 수 있습니다. 이는 input_format_with_names_use_header 매개변수로 제어됩니다. #5081 (Alexander)

버그 수정

  • 머지 작업 중 uncompressed_cacheJOIN을 함께 사용할 때 크래시가 발생하던 문제 (#5197) #5133 (Danila Kutenin)
  • system 테이블에 대한 clickhouse-client 쿼리 실행 시 세그멘테이션 폴트가 발생하던 문제. #5066 #5127 (Ivan)
  • KafkaEngine을 통해 고부하를 처리할 때 데이터 손실이 발생하던 문제 (#4736) #5080 (Ivan)
  • system.columns, system.tables, system.parts, system.parts_tables 또는 Merge 패밀리 테이블에서 최소 두 개 이상의 SELECT를 포함하는 UNION ALL 쿼리를 실행하면서, 관련 테이블 컬럼에 대한 ALTER 작업을 동시에 수행할 때 매우 드물게 발생할 수 있던 데이터 레이스 상황을 수정했습니다. #5189 (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

버그 수정

  • 테이블 함수 mysqlodbc에서 실행되는 쿼리에 대한 IN 조건 푸시다운과 해당 테이블 엔진에 대한 처리를 수정했습니다. 이로써 #3540 및 #2384 문제가 해결되었습니다. #5313 (alexey-milovidov)
  • Zookeeper에서 발생하던 데드락을 수정했습니다. #5297 (github1youlc)
  • CSV에서 따옴표로 둘러싸인 십진수 값을 허용하도록 했습니다. #5284 (Artem Zuikov
  • 부동소수점 Inf/NaN을 Decimals로 변환하지 못하도록 했으며, 변환 시 예외를 발생시키도록 했습니다. #5282 (Artem Zuikov)
  • 이름 변경 쿼리에서 발생하는 데이터 레이스를 수정했습니다. #5247 (Winter Zhang)
  • LFAlloc을 일시적으로 비활성화했습니다. LFAlloc을 사용하면 UncompressedCache를 할당하는 과정에서 다수의 MAP_FAILED가 발생할 수 있고, 그 결과 부하가 높은 서버에서 쿼리가 비정상 종료될 수 있습니다. cfdba93(Danila Kutenin)

ClickHouse 릴리스 19.6.2.11, 2019-05-13

New Features

  • 컬럼 및 테이블용 TTL 표현식을 추가했습니다. #4212 (Anton Popov)
  • HTTP 응답에 대한 brotli 압축(Accept-Encoding: br) 지원을 추가했습니다. #4388 (Mikhail)
  • 바이트 집합이 올바르게 UTF-8로 인코딩되었는지 확인하기 위한 새로운 함수 isValidUTF8를 추가했습니다. #4934 (Danila Kutenin)
  • 새로운 로드 밸런싱 정책 first_or_random을 추가했습니다. 이 정책은 쿼리를 먼저 지정된 첫 번째 호스트로 전송하고, 해당 호스트에 접근할 수 없는 경우 세그먼트의 임의 호스트로 쿼리를 전송합니다. 교차 복제 토폴로지 구성을 할 때 유용합니다. #5012 (nvartolomei)

실험적 기능

  • MergeTree* 테이블 계열에 index_granularity_bytes(「adaptive index granularity」) 설정을 추가합니다. #4826 (alesapin)

Improvements

  • 함수 substringUTF8에 대해 상수가 아닌 크기 및 길이 인자와 음수 크기 및 길이 인자를 지원하도록 했습니다. #4989 (alexey-milovidov)
  • LEFT JOIN에서 우측 테이블, RIGHT JOIN에서 좌측 테이블, FULL JOIN에서 양쪽 테이블에 대한 푸시다운을 비활성화했습니다. 이로 인해 일부 경우 잘못된 JOIN 결과가 반환되던 문제가 수정되었습니다. #4846 (Ivan)
  • clickhouse-copier: --task-file 옵션에서 태스크 구성을 자동으로 업로드하도록 했습니다. #4876 (proller)
  • 스토리지 팩터리와 테이블 함수 팩터리용 오타 처리기를 추가했습니다. #4891 (Danila Kutenin)
  • 서브쿼리 없이 여러 조인에서 애스터리스크(*) 및 한정 애스터리스크(qualified asterisk)를 지원하도록 했습니다. #4898 (Artem Zuikov)
  • 누락된 컬럼에 대한 오류 메시지를 보다 사용자 친화적으로 개선했습니다. #4915 (Artem Zuikov)

성능 향상

이전 버전과의 비호환 변경 사항

  • 일관성을 위해 HTTP 헤더 Query-Id의 이름이 X-ClickHouse-Query-Id로 변경되었습니다. #4972 (Mikhail)

버그 수정

  • clickhouse-copier에서 발생할 수 있는 null 포인터 역참조 문제를 수정했습니다. #4900 (proller)
  • JOIN + ARRAY JOIN이 포함된 쿼리에서 발생하던 오류를 수정했습니다. #4938 (Artem Zuikov)
  • engine=Dictionary 데이터베이스를 통해 한 딕셔너리가 다른 딕셔너리에 의존하는 경우, 서버 시작 시 멈출 수 있던 문제를 수정했습니다. #4962 (Vitaly Baranov)
  • distributed_product_mode = local을 부분적으로 수정했습니다. 테이블 별칭을 통해 WHERE/HAVING/ORDER BY/... 절에서 로컬 테이블의 컬럼을 사용할 수 있게 했습니다. 테이블에 별칭이 없는 경우 예외를 발생시키며, 아직은 테이블 별칭 없이 컬럼에 접근할 수 없습니다. #4986 (Artem Zuikov)
  • JOIN과 함께 사용하는 SELECT DISTINCT에서 잠재적으로 잘못된 결과가 나올 수 있는 문제를 수정했습니다. #5001 (Artem Zuikov)
  • 다음 조건을 모두 만족하는 경우에 매우 드물게 발생할 수 있던 데이터 레이스 조건을 수정했습니다. UNION ALL이 포함된 쿼리를 실행하고, 최소 2개의 SELECT가 system.columns, system.tables, system.parts, system.parts_tables 또는 Merge 패밀리 테이블을 대상으로 하며, 동시에 관련 테이블의 컬럼에 대해 ALTER를 수행하는 경우입니다. #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)
  • 백포트 및 변경 로그 작성을 돕는 Python 유틸리티를 추가했습니다. #4949 (Ivan)

ClickHouse 19.5 릴리스

ClickHouse 릴리스 19.5.4.22, 2019년 5월 13일

버그 수정

  • bitmap* 함수에서 발생할 수 있는 크래시를 수정했습니다. #5220 #5228 (Andy Yang)
  • system.columns, system.tables, system.parts, system.parts_tables 또는 Merge 계열 테이블 중 두 개 이상의 테이블을 대상으로 하는 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번째 조건을 모두 만족하는 경우, 이전에는 처음으로 만족한 조건만 데이터 상태에 추가되었습니다. 이제는 하나의 데이터 행에서 만족되는 모든 조건이 데이터 상태에 추가됩니다. #5119 (小路)

ClickHouse 릴리스 19.5.3.8, 2019-04-18

버그 수정

ClickHouse 릴리스 19.5.2.6, 2019-04-15

새로운 기능

  • Hyperscan 다중 정규 표현식 매칭 기능이 추가되었습니다 (multiMatchAny, multiMatchAnyIndex, multiFuzzyMatchAny, multiFuzzyMatchAnyIndex 함수). #4780, #4841 (Danila Kutenin)
  • multiSearchFirstPosition 함수가 추가되었습니다. #4780 (Danila Kutenin)
  • 테이블에 대해 행 단위로 미리 정의된 표현식 필터가 구현되었습니다. #4792 (Ivan)
  • 블룸 필터(bloom filter)를 기반으로 하는 새로운 유형의 데이터 스키핑 인덱스가 추가되었습니다 (equal, in, like 함수에 사용할 수 있음). #4499 (Nikita Vasilev)
  • 가장 최근에 알려진 값과 조인하는 쿼리를 실행할 수 있는 ASOF JOIN이 추가되었습니다. #4774 #4867 #4863 #4875 (Martijn Bakker, Artem Zuikov)
  • 여러 COMMA JOINCROSS JOIN으로 재작성한 다음, 가능하면 INNER JOIN으로 다시 재작성합니다. #4661 (Artem Zuikov)

개선

  • topKtopKWeighted에서 이제 커스텀 loadFactor를 지원합니다(이슈 #4252 수정). #4634 (Kirill Danshin)
  • 샘플링이 없는 테이블에 대해서도 parallel_replicas_count > 1을 사용할 수 있습니다(해당 테이블에서는 이 설정이 단순히 무시됩니다). 이전 버전에서는 예외가 발생했습니다. #4637 (Alexey Elymanov)
  • CREATE OR REPLACE VIEW를 지원합니다. 하나의 문에서 뷰를 생성하거나 새로운 정의로 설정할 수 있습니다. #4654 (Boris Granveaud)
  • Buffer 테이블 엔진이 이제 PREWHERE를 지원합니다. #4671 (Yangkuan Liu)
  • readonly 모드에서 ZooKeeper 메타데이터 없이 복제된 테이블을 시작할 수 있는 기능을 추가했습니다. #4691 (alesapin)
  • clickhouse-client에서 진행률 표시줄이 깜빡이던 문제를 수정했습니다. 이 문제는 스트리밍 쿼리에서 FORMAT Null을 사용할 때 가장 두드러졌습니다. #4811 (alexey-milovidov)
  • 잠재적으로 과도하고 통제되지 않은 리소스 사용을 제한하기 위해 hyperscan 라이브러리를 사용하는 함수를 사용자별로 비활성화할 수 있도록 했습니다. #4816 (alexey-milovidov)
  • 모든 에러에 버전 번호 로깅을 추가했습니다. #4824 (proller)
  • 문자열 길이가 unsigned int 범위에 들어가도록 요구하는 multiMatch 함수에 제한을 추가했습니다. 또한 multiSearch 함수에 인수 개수 제한을 추가했습니다. #4834 (Danila Kutenin)
  • Hyperscan에서 임시(scratch) 공간 사용 방식과 에러 처리를 개선했습니다. #4866 (Danila Kutenin)
  • *GraphiteMergeTree 엔진 테이블의 테이블 설정에서 system.graphite_detentions를 채우도록 했습니다. #4584 (Mikhail f. Shiryaev)
  • trigramDistance 함수를 ngramDistance로 이름 변경하고, CaseInsensitiveUTF가 포함된 더 많은 함수를 추가했습니다. #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 함수에 잘못된 인자를 전달하면 세그멘테이션 폴트(segfault)가 발생할 수 있습니다. #4698 (alexey-milovidov)
  • DROP DATABASE dictionary 쿼리를 실행하는 동안 교착 상태(데드락)가 발생할 수 있는 문제가 있었습니다. #4701 (alexey-milovidov)
  • medianquantile FUNCTION의 정의되지 않은 동작을 수정합니다. #4702 (hcz)
  • network_compression_method가 소문자로 설정된 경우 압축 레벨 감지를 수정했습니다. v19.1에서 동작하지 않았습니다. #4706 (proller)
  • <timezone>UTC</timezone> 설정을 무시하던 문제를 수정했습니다(이슈 #4658 해결). #4718 (proller)
  • Distributed 테이블에서 histogram FUNCTION의 동작을 수정했습니다. #4741 (olegkv)
  • destroy of a locked mutex에 대한 tsan 보고서를 수정했습니다. #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)
  • JOIN에서 널을 허용하지 않는 컬럼과 널 허용 컬럼을 함께 사용할 때 발생하던 충돌을 수정합니다. ANY JOIN + join_use_nulls에서 오른쪽 키의 NULL 처리 문제를 수정합니다. #4815 (Artem Zuikov)
  • clickhouse-copier에서 발생하던 segmentation fault 문제를 수정했습니다. #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)
  • 레플리카 간에 파트를 가져오는 동안 발생하는 No message received 예외를 수정했습니다. #4856 (alesapin)
  • 단일 배열에 동일한 값이 여러 번 포함된 경우 arrayIntersect FUNCTION에서 잘못된 결과가 나오던 문제를 수정했습니다. #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)
  • URL에 쿼리는 없고 fragment만 포함된 경우에도 이제 cutQueryStringAndFragment()queryStringAndFragment() 함수가 올바르게 동작합니다. #4894 (Vitaly Baranov)
  • min_bytes_to_use_direct_io 설정이 0보다 큰 경우, 스레드가 컬럼 파일에서 뒤로 탐색해야 할 때 발생하는 드문 버그를 수정합니다. #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)
  • Multi-search 함수의 이름을 변경했습니다(multiPositionmultiSearchAllPositions로, multiSearchmultiSearchAny로, firstMatchmultiSearchFirstIndex로 각각 변경). #4780 (Danila Kutenin)

성능 개선

  • 인라이닝을 통해 Volnitsky searcher를 최적화하여, needles가 많거나 유사한 bigrams가 많은 쿼리에서 검색 성능을 약 5~10% 향상시켰습니다. #4862 (Danila Kutenin)
  • use_uncompressed_cache를 0보다 크게 설정했을 때, 모든 읽기 데이터가 캐시에 포함되어 있는 경우 발생하던 성능 문제를 수정했습니다. #4913 (alesapin)

빌드/테스트/패키징 개선

  • 디버그 빌드를 강화했습니다. 더 세분화된 메모리 매핑과 ASLR을 적용하고, mark 캐시와 인덱스에 대한 메모리 보호를 추가했습니다. 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)
  • Vagrant를 이용한 FreeBSD 빌드와 Thread Sanitizer를 사용한 빌드를 packager 스크립트에 추가했습니다. #4712 #4748 (alesapin)
  • 이제 설치 중에 'default' USER의 비밀번호를 입력하도록 안내합니다. #4725 (proller)
  • rdkafka 라이브러리의 경고를 억제했습니다. #4740 (alexey-milovidov)
  • SSL 없이도 빌드할 수 있도록 했습니다. #4750 (proller)
  • 사용자 정의 USER로 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 인터페이스를 통해 format schema를 사용하는지를 검증하는 테스트를 추가했습니다. #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)
  • medianquantile FUNCTION에서 정의되지 않은 동작을 수정했습니다. #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 사용 시 발생하던 세그멘테이션 폴트를 수정했습니다. #4794 (Winter Zhang)
  • Kafka에서 Protobuf 메시지를 소비한 후 불필요한 행이 추가되던 버그를 수정합니다. #4808 (Vitaly Baranov)
  • clickhouse-copier에서 발생하던 segmentation fault를 수정했습니다. #4835 (proller)
  • 테이블의 이름이 변경되거나 ALTER가 동시에 수행되는 경우 system.tables에서 SELECT를 실행할 때 발생하던 경쟁 상태(race condition)를 수정했습니다. #4836 (alexey-milovidov)
  • 이미 폐기된 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)
  • URL에 쿼리가 없고 fragment만 있는 경우에도 이제 cutQueryStringAndFragment()queryStringAndFragment() 함수가 올바르게 동작합니다. #4894 (Vitaly Baranov)
  • 컬럼 파일에서 스레드가 뒤로 탐색해야 할 때 발생하는, min_bytes_to_use_direct_io 설정값이 0보다 큰 경우에만 나타나는 드문 버그를 수정합니다. #4897 (alesapin)
  • LowCardinality 인수를 사용하는 집계 함수에서 잘못된 인수 타입 문제를 수정합니다(이슈 #4919 해결). #4922 (Nikolai Kochetov)
  • toISOWeek 함수의 1970년 결과를 수정했습니다. #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 BYLIMIT을 모두 포함하는 원격 쿼리를 수정했습니다. 이전에는 원격 쿼리에서 LIMIT BYLIMIT을 함께 사용할 경우 LIMIT BY보다 먼저 LIMIT이 적용되어 결과가 지나치게 필터링되는 문제가 있었습니다. #4708 (Constantin S. Pan)

ClickHouse 19.4.0.49 릴리스, 2019-03-09

새로운 기능

  • Protobuf 포맷에 대한 전체 지원이 추가되었습니다(입력 및 출력, 중첩 데이터 구조). #4174 #4493 (Vitaly Baranov)
  • Roaring Bitmaps를 사용하는 비트맵 함수가 추가되었습니다. #4207 (Andy Yang) #4568 (Vitaly Baranov)
  • Parquet 포맷이 지원됩니다. #4448 (proller)
  • 퍼지 문자열 비교를 위한 N-그램 거리가 추가되었습니다. R 언어의 q-그램 지표와 유사합니다. #4466 (Danila Kutenin)
  • 전용 집계(aggregation) 및 보존(retention) 패턴에서 graphite rollup 규칙을 결합할 수 있도록 했습니다. #4426 (Mikhail f. Shiryaev)
  • 리소스 사용량을 제한하기 위해 max_execution_speedmax_execution_speed_bytes가 추가되었습니다. min_execution_speed를 보완하기 위해 min_execution_speed_bytes 설정이 추가되었습니다. #4430 (Winter Zhang)
  • flatten 함수가 구현되었습니다. #4555 #4409 (alexey-milovidov, kzon)
  • 함수 arrayEnumerateDenseRankedarrayEnumerateUniqRanked가 추가되었습니다(이는 arrayEnumerateUniq와 비슷하지만, 다차원 배열 내부를 살펴보기 위해 배열 깊이를 세밀하게 조정할 수 있습니다). #4475 (proller) #4601 (alexey-milovidov)
  • 일부 제한이 있는 다중 조인(JOIN)이 지원됩니다: 애스터리스크(*) 사용 불가, ON/WHERE/GROUP BY/…에서 복잡한 별칭 사용 불가. #4462 (Artem Zuikov)

버그 수정

  • 이 릴리스에는 19.3 및 19.1에서 이루어진 모든 버그 수정 사항도 포함되어 있습니다.
  • 데이터 스키핑 인덱스의 버그를 수정했습니다. INSERT 이후 그래뉼의 순서가 올바르지 않았습니다. #4407 (Nikita Vasilev)
  • NullableLowCardinality 컬럼에 대한 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라는 메시지와 함께 아주 드물게 발생하던 크래시를 수정했습니다. 이 문제는 SELECT와 동시에 MergeTree 테이블이 드롭될 때 발생할 수 있었습니다. #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)
  • 자체 llvm contrib를 도입하고 clangasan으로 테스트할 수 있게 될 때까지 compile_expressions를 기본값으로 비활성화합니다. #4579 (alesapin)
  • clickhouse 외부 딕셔너리 소스에 대해 invalidate_query가 잘못된 결과 집합(빈 결과, 행이 둘 이상이거나 컬럼이 둘 이상인 경우)을 반환했을 때 std::terminate가 발생하지 않도록 했습니다. lifetime 설정값과 관계없이 invalidate_query가 5초마다 실행되던 문제를 수정했습니다. #4583 (alexey-milovidov)
  • clickhouse 소스를 사용하는 딕셔너리의 invalidate_querysystem.dictionaries 테이블 또는 Dictionaries 데이터베이스를 포함하는 경우(드문 경우) 교착 상태가 발생하지 않도록 했습니다. #4599 (alexey-milovidov)
  • WHERE 절이 비어 있는 CROSS JOIN에 대한 수정. #4598 (Artem Zuikov)
  • 상수 인수가 전달되었을 때 함수 "replicate"에서 발생하던 세그폴트를 수정했습니다. #4603 (alexey-milovidov)
  • 프레디킷 최적화기(predicate optimizer)에서 lambda 함수 처리를 수정했습니다. #4408 (Winter Zhang)
  • 여러 조인 관련 다수의 수정. #4595 (Artem Zuikov)

Improvements

  • 우측 테이블 컬럼에 대해 JOIN ON 절에서 별칭(alias)을 지원합니다. #4412 (Artem Zuikov)
  • 여러 조인의 결과는 서브쿼리에서 사용될 수 있도록 올바른 결과 이름을 가져야 합니다. 결과에서 평면 별칭을 원본 이름으로 교체합니다. #4474 (Artem Zuikov)
  • JOIN이 포함된 SQL 문에 대한 push-down 로직을 개선합니다. #4387 (Ivan)

성능 개선

  • "move to PREWHERE" 최적화에 사용되는 휴리스틱을 개선했습니다. #4405 (alexey-milovidov)
  • 8비트 및 16비트 키에 대해 HashTable의 API를 사용하는 적절한 룩업 테이블을 사용하도록 했습니다. #4536 (Amos Bird)
  • 문자열 비교 성능을 개선했습니다. #4564 (alexey-milovidov)
  • 분산 DDL 작업을 처리하는 메인 루프가 느려지지 않도록, 별도 스레드에서 분산 DDL 큐를 정리하도록 했습니다. #4502 (Alex Zatelepin)
  • min_bytes_to_use_direct_io가 1로 설정된 경우, 읽어야 할 데이터 크기가 때때로 압축 블록 하나의 크기만큼 과소평가되어, 모든 파일이 O_DIRECT 모드로 열리지 않는 문제가 있었습니다. #4526 (alexey-milovidov)

빌드/테스트/패키징 개선

  • clang-9 지원을 추가했습니다. #4604 (alexey-milovidov)
  • 잘못된 __asm__ 명령을 (다시) 수정했습니다. #4621 (Konstantin Podshumok)
  • 명령줄에서 clickhouse-performance-test의 설정을 지정할 수 있는 기능을 추가했습니다. #4437 (alesapin)
  • 통합 테스트(integration tests)에 딕셔너리(dictionaries) 테스트를 추가했습니다. #4477 (alesapin)
  • 웹사이트의 벤치마크(benchmark)에 있는 쿼리를 자동화된 성능 테스트에 추가했습니다. #4496 (alexey-milovidov)
  • xxhash.h는 구현 세부사항이며 그 심볼이 XXH_NAMESPACE 매크로로 네임스페이스가 지정되어 있기 때문에 external lz4에는 존재하지 않습니다. lz4가 external일 때는 xxHash도 external이어야 하며, 이를 사용하는 측에서는 해당 라이브러리에 링크해야 합니다. #4495 (Orivej Desh)
  • quantileTiming 집계 함수가 음수 또는 부동소수점 인자를 사용해 호출될 수 있던 문제를 수정했습니다(이로 인해 undefined behaviour 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에서 발생하던 세그멘테이션 폴트(segmentation fault)를 수정했습니다. #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)과 segfault(세그멘테이션 폴트)로 나타납니다. 이 버그는 처음 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)
  • 이제 기본값이 없는 컬럼에 주석이 있는 ReplicatedMergeTree* 테이블과, 주석과 기본값 없이 컬럼 코덱이 지정된 테이블을 생성할 수 있습니다. 또한 코덱 비교를 수정했습니다. #4523 (alesapin)
  • 배열 또는 튜플에 대한 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.cppvoid readBinary(...)에 있는 inline 지정자를 제거했습니다. 또한 중복된 namespace DB 블록을 병합했습니다. #4530 (hcz)

ClickHouse 릴리스 19.3.5, 2019-02-21

버그 수정

  • 대용량 HTTP INSERT 쿼리 처리 시 발생하던 버그를 수정했습니다. #4454 (alesapin)
  • send_logs_level 설정의 잘못된 구현으로 인해 이전 버전과의 하위 호환성이 깨지던 문제를 수정했습니다. #4445 (alexey-milovidov)
  • 컬럼 주석 기능 도입과 함께 발생한 테이블 함수 remote의 하위 호환성 문제를 수정했습니다. #4446 (alexey-milovidov)

ClickHouse 19.3.4 릴리스, 2019-02-16

Improvements

  • ATTACH TABLE 쿼리를 수행할 때 테이블 인덱스 크기가 메모리 제한에 포함되도록 수정했습니다. 이를 통해 테이블을 detach한 후 다시 attach하지 못하는 상황이 발생하는 것을 방지했습니다. #4396 (alexey-milovidov)
  • ZooKeeper로부터 수신되는 문자열과 배열의 최대 크기 제한을 소폭 상향했습니다. 이를 통해 ZooKeeper에서 CLIENT_JVMFLAGS=-Djute.maxbuffer=... 크기를 늘린 상태로 계속 동작할 수 있습니다. #4398 (alexey-milovidov)
  • 큐에 매우 많은 수의 노드를 이미 가지고 있더라도 버려진 레플리카를 복구할 수 있도록 했습니다. #4399 (alexey-milovidov)
  • SET 인덱스에 하나의 필수 인수(저장되는 최대 행 수)를 추가했습니다. #4386 (Nikita Vasilev)

버그 수정

  • 단일 LowCardinality 키에 대한 GROUP BY에서 WITH ROLLUP 결과를 수정했습니다. #4384 (Nikolai Kochetov)
  • Set 인덱스에서, max_rows 행보다 많은 행을 포함하는 경우 해당 그래뉼이 삭제되던 버그를 수정했습니다. #4386 (Nikita Vasilev)
  • FreeBSD 빌드 관련 수정 사항을 다수 적용했습니다. #4397 (proller)
  • 동일한 별칭을 포함하는 서브쿼리가 있는 쿼리에서 별칭 치환 동작을 수정했습니다(이슈 #4110). #4351 (Artem Zuikov)

빌드/테스트/패키징 개선 사항

  • Docker 이미지에서 무상태(stateless) 테스트를 위해 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)
  • querydata 파트로 나누지 않고도 서버로 INSERT INTO tbl VALUES (.... 형태의 쿼리를 전송할 수 있는 기능을 추가했습니다. #4301 (alesapin)
  • arrayWithConstant 함수의 범용 구현을 추가했습니다. #4322 (alexey-milovidov)
  • NOT BETWEEN 비교 연산자를 구현했습니다. #4228 (Dmitry Naumov)
  • sumMap이 값을 합산할 키의 개수를 제한할 수 있도록 sumMapFiltered를 구현했습니다. #4129 (Léo Ercolanelli)
  • mysql 테이블 함수에서 Nullable 타입을 지원하도록 했습니다. #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)
  • IPv4IPv6 데이터 타입을 추가했습니다. IPv* 함수의 보다 효율적인 구현도 포함합니다. #3669 (Vasily Nemkov)
  • 함수 toStartOfTenMinutes()를 추가했습니다. #4298 (Vitaly Baranov)
  • Protobuf 출력 포맷을 추가했습니다. #4005 #4158 (Vitaly Baranov)
  • 데이터 가져오기(INSERT)를 위한 HTTP 인터페이스에서 Brotli 압축을 지원하도록 했습니다. #4235 (Mikhail)
  • 사용자가 커맨드라인 클라이언트에서 함수 이름이나 타입을 잘못 입력했을 때 힌트를 제공하는 기능을 추가했습니다. #4239 (Danila Kutenin)
  • 서버의 HTTP 응답 헤더에 Query-Id를 추가했습니다. #4231 (Mikhail)

실험적 기능

  • MergeTree 테이블 엔진 계열에 minmaxset 데이터 스키핑 인덱스를 추가했습니다. #4143 (Nikita Vasilev)
  • 가능한 경우 CROSS JOININNER JOIN으로 변환하도록 했습니다. #4221 #4266 (Artem Zuikov)

버그 수정

  • JOIN ON 섹션에서 중복 컬럼 때문에 발생하던 Not found column 오류를 수정했습니다. #4279 (Artem Zuikov)
  • START REPLICATED SENDS 명령이 복제 전송(replicated sends)을 실제로 시작하도록 수정했습니다. #4229 (nvartolomei)
  • Array(LowCardinality) 인수를 사용하는 집계 함수의 실행 문제를 수정했습니다. #4055 (KochetovNicolai)
  • 파일에 CSVWithNames 또는 TSVWIthNames 형식을 사용하고 첫 번째 데이터 행이 누락된 경우 INSERT ... SELECT ... FROM file(...) 쿼리 실행 시 발생하던 잘못된 동작을 수정했습니다. #4297 (alexey-milovidov)
  • 딕셔너리를 사용할 수 없는 경우 딕셔너리 리로드 시 발생하던 크래시를 수정했습니다. 이 버그는 19.1.6에서 도입되었습니다. #4188 (proller)
  • 오른쪽 테이블에 중복 행이 있는 경우의 ALL JOIN을 수정했습니다. #4184 (Artem Zuikov)
  • use_uncompressed_cache=1 사용 시 발생하던 세그멘테이션 폴트와 잘못된 압축 해제 크기로 인한 예외를 수정했습니다. 이 버그는 19.1.6 버전에서 도입되었습니다. #4186 (alesapin)
  • 값이 int16 범위를 초과하는 날짜를 비교할 때 발생하던 compile_expressions 버그를 수정했습니다. #4341 (alesapin)
  • 테이블 FUNCTION numbers(0)에서 SELECT할 때 발생하던 무한 루프를 수정했습니다. #4280 (alexey-milovidov)
  • ORDER BY에 대한 프레디케이트(predicate) 최적화를 일시적으로 비활성화합니다. #3890 (Winter Zhang)
  • 구형 CPU에서 base64 함수를 사용할 때 발생하던 Illegal instruction 오류를 수정했습니다. 이 오류는 ClickHouse를 gcc-8로 컴파일했을 때에만 재현되었습니다. #4275 (alexey-milovidov)
  • TLS 연결을 통해 PostgreSQL ODBC Driver와 상호작용할 때 발생하던 No message received 오류를 수정했습니다. 또한 MySQL ODBC Driver 사용 시 발생하던 segfault도 수정했습니다. #4170 (alexey-milovidov)
  • 조건 연산자(함수 if)의 분기에서 DateDateTime 인자를 사용할 때 잘못된 결과가 나오는 문제를 수정했습니다. 함수 if에 대한 일반적인 경우를 추가했습니다. #4243 (alexey-milovidov)
  • ClickHouse 딕셔너리가 이제 clickhouse 프로세스에서 로드됩니다. #4166 (alexey-milovidov)
  • File 엔진을 사용하는 테이블에 대해 SELECT를 수행하는 동안 No such file or directory 오류가 발생한 뒤 재시도할 때 발생하던 교착 상태를 수정했습니다. #4161 (alexey-milovidov)
  • system.tables에서 SELECT할 때 경쟁 상태로 인해 table does not exist 오류가 발생할 수 있던 문제를 수정했습니다. #4313 (alexey-milovidov)
  • clickhouse-client가 인터랙티브 모드에서 실행된 경우, 명령줄 자동 완성을 위한 데이터를 로드하는 과정에서 종료 시 세그멘테이션 폴트가 발생할 수 있습니다. #4317 (alexey-milovidov)
  • IN 연산자를 포함한 뮤테이션을 실행할 때 잘못된 결과가 나오는 문제를 수정했습니다. #4099 (Alex Zatelepin)
  • Dictionary 엔진을 사용하는 데이터베이스가 있을 경우 서버 시작 시 모든 딕셔너리가 강제로 로드되며, 이때 소스로 localhost의 ClickHouse를 사용하는 딕셔너리가 있으면 해당 딕셔너리를 로드하지 못하던 오류를 수정했습니다. #4255 (alexey-milovidov)
  • 서버가 종료될 때 시스템 로그를 다시 CREATE하려 할 때 발생하던 오류를 수정했습니다. #4254 (alexey-milovidov)
  • 올바른 타입을 반환하고 잠금을 적절히 처리하도록 joinGet FUNCTION을 수정합니다. #4153 (Amos Bird)
  • sumMapWithOverflow 함수를 추가했습니다. #4151 (Léo Ercolanelli)
  • allow_experimental_multiple_joins_emulation에서 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. 52de2c (Artem Zuikov)
  • DateDateTime 비교가 잘못되던 버그를 수정했습니다. #4237 (valexey)
  • undefined behavior sanitizer에서 fuzz test를 수정했습니다: 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 설명에서 changelog를 생성하는 스크립트를 추가했습니다. #4169 #4173 (KochetovNicolai) (KochetovNicolai)
  • ClickHouse용 puppet 모듈을 추가했습니다. #4182 (Maxim Fedotov)
  • 문서화되지 않은 함수 그룹에 대한 문서를 추가했습니다. #4168 (Winter Zhang)
  • ARM 빌드 관련 수정 사항을 적용했습니다. #4210#4306 #4291 (proller) (proller)
  • 이제 ctest에서 딕셔너리 테스트를 실행할 수 있습니다. #4189 (proller)
  • 이제 /etc/ssl이 SSL 인증서의 기본 디렉터리로 사용됩니다. #4167 (alexey-milovidov)
  • 시작 시 SSE 및 AVX 명령을 확인하는 기능을 추가했습니다. #4234 (Igr)
  • Init 스크립트가 서버가 시작될 때까지 대기하도록 했습니다. #4281 (proller)

하위 호환되지 않는 변경 사항

  • allow_experimental_low_cardinality_type 설정을 제거했습니다. LowCardinality 데이터 타입은 이제 프로덕션 환경에서 사용할 수 있는 상태입니다. #4323 (alexey-milovidov)
  • 사용 가능한 메모리 양에 따라 mark 캐시 크기와 비압축 캐시 크기를 줄였습니다. #4240 (Lopatin Konstantin)
  • CREATE TABLE 쿼리에 INDEX 키워드를 추가했습니다. 이름이 index인 컬럼은 백틱 또는 큰따옴표로 감싸야 합니다: `index`. #4143 (Nikita Vasilev)
  • sumMap은 이제 오버플로를 발생시키는 대신 결과 타입을 승격합니다. 이전 sumMap 동작은 sumMapWithOverflow 함수를 사용해 얻을 수 있습니다. #4151 (Léo Ercolanelli)

성능 향상

  • LIMIT이 없는 쿼리에서 std::sortpdqsort로 교체했습니다. #4236 (Evgenii Pravda)
  • 이제 서버가 전역 스레드 풀의 스레드를 재사용합니다. 이는 일부 예외적인 경우의 성능에 영향을 줍니다. #4150 (alexey-milovidov)

개선 사항

  • FreeBSD에 AIO 지원을 구현했습니다. #4305 (urgordeadbeef)
  • 이제 SELECT * FROM a JOIN b USING a, b 는 왼쪽 테이블의 ab 컬럼만 반환합니다. #4141 (Artem Zuikov)
  • 클라이언트의 -C 옵션이 -c 옵션과 동일하게 동작하도록 허용했습니다. #4232 (syominsergey)
  • 이제 값을 지정하지 않고 --password 옵션을 사용하면 stdin에서 비밀번호를 입력받습니다. #4230 (BSD_Conqueror)
  • LIKE 표현식 또는 정규식을 포함하는 문자열 리터럴에서 이스케이프되지 않은 메타문자를 강조 표시하는 기능을 추가했습니다. #4327 (alexey-milovidov)
  • 클라이언트 소켓이 끊어진 경우 HTTP read-only 쿼리를 취소하도록 기능을 추가했습니다. #4213 (nvartolomei)
  • 이제 서버가 진행 상황을 보고하여 클라이언트 연결이 유지되도록 합니다. #4215 (Ivan)
  • optimize_throw_if_noop 설정이 활성화된 상태에서 OPTIMIZE 쿼리의 원인을 설명하는 메시지를 조금 더 명확하게 했습니다. #4294 (alexey-milovidov)
  • clickhouse server에 --version 옵션 지원을 추가했습니다. #4251 (Lopatin Konstantin)
  • clickhouse-server--help/-h 옵션을 추가했습니다. #4233 (Yuriy Baranov)
  • 집계 함수 상태를 결과로 갖는 스칼라 서브쿼리 지원을 추가했습니다. #4348 (Nikolai Kochetov)
  • 서버 종료 시간과 ALTER 대기 시간을 개선했습니다. #4372 (alexey-milovidov)
  • replicated_can_become_leader 설정에 대한 정보를 system.replicas 테이블에 추가하고, 레플리카가 리더가 되려고 시도하지 않을 때 로깅을 추가했습니다. #4379 (Alex Zatelepin)

ClickHouse 19.1 릴리스

ClickHouse Release 19.1.14, 2019-03-14

  • GLOBAL JOINSELECT *를 함께 사용하는 경우(드문 경우)에, 설정 asterisk_left_columns_only를 1로 설정했을 때 발생할 수 있는 Column ... queried more than once 오류를 수정했습니다. 이 문제는 19.3 및 이후 버전에서는 발생하지 않습니다. 6bac7d8d (Artem Zuikov)

ClickHouse Release 19.1.13, 2019-03-12

이 릴리스에는 19.3.7과 완전히 동일한 패치 집합이 포함됩니다.

ClickHouse Release 19.1.10, 2019-03-03

이 릴리스에는 19.3.6과 동일한 패치 집합이 그대로 포함되어 있습니다.

ClickHouse 19.1 릴리스

ClickHouse 19.1.9 릴리스, 2019-02-21

버그 수정

  • send_logs_level 설정의 잘못된 구현으로 인해 발생한 이전 버전과의 하위 호환성 문제가 수정되었습니다. #4445 (alexey-milovidov)
  • 컬럼 주석이 도입되면서 발생한 테이블 함수 remote의 하위 호환성 문제가 수정되었습니다. #4446 (alexey-milovidov)

ClickHouse 19.1.8 릴리스, 2019-02-16

버그 수정

  • 설치 패키지에서 /etc/clickhouse-server/config.xml 파일이 누락된 문제를 수정합니다. #4343 (proller)

ClickHouse 19.1 릴리스

ClickHouse 19.1.7 릴리스, 2019년 2월 15일

버그 수정

  • joinGet FUNCTION에서 올바른 타입을 반환하고 잠금을 제대로 처리하도록 수정했습니다. #4153 (Amos Bird)
  • 서버 종료 시 system 로그를 다시 생성하려고 하면 발생하던 오류를 수정했습니다. #4254 (alexey-milovidov)
  • Dictionary 엔진을 사용하는 데이터베이스가 있을 때 서버 시작 시 모든 딕셔너리가 강제로 로드되며, 이때 localhost에 있는 ClickHouse를 소스로 사용하는 딕셔너리는 로드되지 않던 오류를 수정했습니다. #4255 (alexey-milovidov)
  • IN 연산자가 포함된 뮤테이션 실행 시 잘못된 결과를 반환하던 문제를 수정했습니다. #4099 (Alex Zatelepin)
  • 대화형 모드에서 실행된 경우, 명령줄 자동 완성을 위한 데이터를 불러오는 과정에서 종료 시 clickhouse-client가 세그멘테이션 폴트(segfault)를 일으킬 수 있습니다. #4317 (alexey-milovidov)
  • system.tables에서 SELECT할 때 경쟁 상태로 인해 table does not exist 오류가 발생할 수 있던 문제를 수정했습니다. #4313 (alexey-milovidov)
  • File 엔진을 사용하는 테이블에서 SELECT를 실행하다가 No such file or directory 오류가 발생한 후 다시 실행할 때 발생하던 교착 상태를 수정했습니다. #4161 (alexey-milovidov)
  • 문제 수정: 로컬 ClickHouse 딕셔너리가 TCP를 통해 로드되고 있었으나, 이제 프로세스 내에서 로드되도록 수정했습니다. #4166 (alexey-milovidov)
  • TLS 연결을 통해 PostgreSQL ODBC Driver와 상호 작용할 때 발생하던 No message received 오류를 수정했습니다. 또한 MySQL ODBC Driver 사용 시 발생하던 segfault 오류도 수정했습니다. #4170 (alexey-milovidov)
  • ORDER BY에 대한 조건 최적화를 일시적으로 비활성화합니다. #3890 (Winter Zhang)
  • 테이블 함수 numbers(0)에서 SELECT를 수행할 때 발생하던 무한 루프를 수정했습니다. #4280 (alexey-milovidov)
  • int16 범위를 초과하는 날짜를 비교할 때 발생하던 compile_expressions 버그를 수정했습니다. #4341 (alesapin)
  • uncompressed_cache=1 설정일 때 잘못된 uncompressed 크기 때문에 발생하던 segmentation fault 및 예외를 수정했습니다. #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 환경에서 fuzz 테스트를 수정했습니다: quantile*Weighted 계열 FUNCTION에 대해 파라미터 타입 검사를 추가했습니다. #4145 (alexey-milovidov)
  • START REPLICATED SENDS 명령이 복제 전송(replicated sends)을 시작하도록 수정했습니다. #4229 (nvartolomei)
  • JOIN ON 절에서 중복 컬럼으로 인해 발생하던 Not found column 오류를 수정했습니다. #4279 (Artem Zuikov)
  • 이제 /etc/ssl이 SSL 인증서의 기본 디렉터리로 사용됩니다. #4167 (alexey-milovidov)
  • 딕셔너리를 사용할 수 없는 상태에서 딕셔너리를 다시 로드할 때 발생하던 충돌을 수정했습니다. #4188 (proller)
  • DateDateTime 비교가 잘못되던 버그를 수정했습니다. #4237 (valexey)
  • 조건 연산자 함수 if의 분기에서 DateDateTime 인자를 사용할 때 잘못된 결과가 반환되던 문제를 수정했습니다. 함수 if에 대한 일반적인 케이스를 추가했습니다. #4243 (alexey-milovidov)

ClickHouse 릴리스 19.1.6, 2019년 01월 24일

New Features

  • 테이블에 컬럼별 사용자 정의 압축 코덱을 추가했습니다. #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)
  • 큰 문자열에서 여러 상수 문자열을 검색하기 위한 함수들을 추가했습니다: multiPosition, multiSearch, firstMatch-UTF8, -CaseInsensitive, -CaseInsensitiveUTF8 변형. #4053 (Danila Kutenin)
  • 샤딩 키로 SELECT 쿼리가 필터링되는 경우 사용되지 않는 세그먼트(설정 optimize_skip_unused_shards)를 제거(pruning)하도록 했습니다. #3851 (Gleb Kanterov, Ivan)
  • Kafka 엔진이 블록당 일정 개수의 파싱 오류를 무시할 수 있도록 했습니다. #4094 (Ivan)
  • CatBoost 멀티클래스 모델 평가를 지원하도록 했습니다. modelEvaluate 함수는 멀티클래스 모델에 대해 클래스별 원시 예측값 튜플을 반환합니다. libcatboostmodel.so#607에 따라 빌드해야 합니다. #3959 (KochetovNicolai)
  • filesystemAvailable, filesystemFree, filesystemCapacity 함수를 추가했습니다. #4097 (Boris Granveaud)
  • 해싱 함수 xxHash64xxHash32를 추가했습니다. #3905 (filimonov)
  • gccMurmurHash 해싱 함수(GCC 변형 Murmur 해시)를 추가했습니다. gcc와 동일한 해시 시드를 사용합니다. #4000 (sundyli)
  • 해싱 함수 javaHash, hiveHash를 추가했습니다. #3811 (shangshujie365)
  • 테이블 함수 remoteSecure를 추가했습니다. 이 함수는 보안 연결을 사용한다는 점을 제외하면 remote와 동일하게 동작합니다. #4088 (proller)

실험적 기능

  • 여러 조인 에뮬레이션(allow_experimental_multiple_joins_emulation 설정)을 추가했습니다. #3946 (Artem Zuikov)

버그 수정

  • 메모리 사용량을 줄이기 위해 compiled_expression_cache_size 설정을 기본적으로 제한했습니다. #4041 (alesapin)
  • 복제된 테이블(Replicated Table)에 대한 ALTER 작업을 수행하는 스레드와 ZooKeeper에서 설정을 업데이트하는 스레드에서 중단이 발생하던 버그를 수정합니다. #2947 #3891 #3934 (Alex Zatelepin)
  • 분산 ALTER 작업을 실행할 때 발생하던 경쟁 상태를 수정했습니다. 이 경쟁 상태로 인해 둘 이상의 레플리카가 동시에 작업 실행을 시도했고, 한 레플리카를 제외한 나머지 레플리카는 ZooKeeper 오류와 함께 실패했습니다. #3904 (Alex Zatelepin)
  • ZooKeeper 요청이 타임아웃된 후에도 from_zk 설정 요소가 갱신되지 않던 버그를 수정합니다. #2947 #3947 (Alex Zatelepin)
  • IPv4 서브넷 마스크에서 잘못된 프리픽스를 사용하던 버그를 수정합니다. #3945 (alesapin)
  • 리소스가 고갈되어 새로운 스레드를 생성할 수 없는 드문 상황에서 발생하던 크래시(std::terminate)를 수정했습니다. #3956 (alexey-milovidov)
  • remote 테이블 FUNCTION 실행에서 getStructureOfRemoteTable에 잘못된 제한을 사용하던 버그를 수정했습니다. #4009 (alesapin)
  • netlink 소켓 누수를 수정합니다. 이 소켓들은 풀에 보관된 후 삭제되지 않아 누수가 발생했고, 기존 모든 소켓이 사용 중일 때 새 스레드가 시작될 때마다 새로운 소켓들이 생성되었습니다. #4017 (Alex Zatelepin)
  • odbc-bridge 하위 프로세스를 fork한 이후 /proc에서 모든 파일 디스크립터(fd)를 읽기 전에 /proc/self/fd 디렉터리를 먼저 닫아 버리던 버그를 수정했습니다. #4120 (alesapin)
  • primary key에 String을 사용할 때 String을 UInt로 단조 변환하는 동작을 수정했습니다. #3870 (Winter Zhang)
  • 정수 변환 FUNCTION의 단조성 계산 오류를 수정했습니다. #3921 (alexey-milovidov)
  • 일부 잘못된 인자가 전달된 경우 arrayEnumerateUniq, arrayEnumerateDense 함수에서 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #3909 (alexey-milovidov)
  • StorageMerge의 UB(Undefined Behavior)를 수정했습니다. #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를 사용할 때 발생하던 잘못된 결과를 수정했습니다. #3895 #4012 (KochetovNicolai)
  • LowCardinality 키를 사용하는 특수화된 집계를 수정했습니다 (compile 설정이 활성화된 경우). #3886 (KochetovNicolai)
  • 복제 테이블(Replicated Table) 쿼리에서 사용자와 비밀번호 전달 문제를 수정합니다. #3957 (alesapin) (小路)
  • 딕셔너리를 다시 로드하는 동안 Dictionary 데이터베이스에서 테이블을 조회할 때 발생할 수 있었던 매우 드문 경쟁 조건을 수정했습니다. #3970 (alexey-milovidov)
  • ROLLUP 또는 CUBE와 함께 HAVING 절을 사용했을 때 잘못된 결과가 반환되던 문제를 수정했습니다. #3756 #3837 (Sam Chou)
  • JOIN ON 구문과 분산 테이블을 사용하는 쿼리에서 컬럼 별칭 처리를 수정했습니다. #3980 (Winter Zhang)
  • quantileTDigest의 내부 구현에서 오류를 수정했습니다(Artem Vakhrushev가 발견한 오류). 이 오류는 ClickHouse 자체에서는 발생하지 않으며, ClickHouse 코드베이스를 직접 라이브러리로 사용하는 경우에만 관련이 있습니다. #3935 (alexey-milovidov)

Improvements

  • ALTER TABLE ADD COLUMN 문에서 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이 이제 불규칙(jagged) 구조를 지원합니다. #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)은 단일 파트 znode에 compact한 파트 메타데이터를 저장합니다. 이는 ZooKeeper 스냅샷 크기를 크게 줄일 수 있습니다(특히 테이블에 컬럼이 많은 경우). 이 설정을 활성화한 이후에는 해당 기능을 지원하지 않는 버전으로 다운그레이드할 수 없음을 유의하십시오. #3960 (Alex Zatelepin)
  • 패턴에 시간이 포함되지 않은 경우 sequenceMatchsequenceCount 함수에 대해 DFA 기반 구현을 추가합니다. #4004 (Léo Ercolanelli)
  • 정수 직렬화 성능을 개선합니다. #3968 (Amos Bird)
  • PODArray의 왼쪽을 0으로 채워 -1 인덱스의 요소가 항상 유효하고 0으로 초기화되도록 합니다. 이는 분기 없는 오프셋 계산에 사용됩니다. #3920 (Amos Bird)
  • 성능 저하를 야기했던 jemalloc 버전을 되돌립니다. #4018 (alexey-milovidov)

이전 버전과의 비호환 변경 사항

  • 문서화되지 않은 기능이었던 ALTER MODIFY PRIMARY KEYALTER 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 메시지로 인해 서버를 시작할 수 없던 오류를 수정했습니다. #4136 (alexey-milovidov)
  • rdkafka 라이브러리를 v1.0.0-RC5로 업데이트했습니다. 순수 C 인터페이스 대신 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 이미지를 18.10으로 업데이트하고 glibc >= 2.28용 호환성 파일을 추가함 #3965 (alesapin)
  • 서버 Docker 이미지에서 디렉터리 소유권을 chown으로 변경하지 않도록 하기 위한 환경 변수를 추가했습니다. #3967 (alesapin)
  • clang에서 -Weverything 경고 대부분을 활성화하고 -Wpedantic도 활성화했습니다. #3986 (alexey-milovidov)
  • clang 8에서만 사용 가능한 경고를 몇 가지 더 추가했습니다. #3993 (alexey-milovidov)
  • 공유 라이브러리로 링크할 때 개별 LLVM 라이브러리가 아닌 libLLVM에 링크하도록 변경했습니다. #3989 (Orivej Desh)
  • 테스트 이미지용 sanitizer 변수를 추가했습니다. #4072 (alesapin)
  • clickhouse-server Debian 패키지에서 capabilities를 설정하기 위해 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)

2018년 변경 로그