메인 콘텐츠로 건너뛰기

ClickHouse 릴리스 20.12

ClickHouse 릴리스 v20.12.5.14-안정, 2020-12-28

버그 수정

  • 머지 중 AIO 쓰기를 비활성화했습니다. 머지 과정에서 프라이머리 키 컬럼에 매우 드물게 데이터 손상이 발생할 수 있기 때문입니다. #18481 (alesapin).
  • Nullable(String) 유형의 인수로 toType(...) 함수(toDate, toUInt32 등)를 실행할 때 발생하던 value is too short 오류를 수정했습니다. 이제 이러한 함수는 파싱 오류가 발생하면 예외를 발생시키는 대신 NULL을 반환합니다. #7673을 수정합니다. #18445 (tavplubix).
  • wide에서 compact 파트로의 머지를 제한했습니다. 수직 병합에서는 이로 인해 결과 파트가 손상될 수 있었습니다. #18381 (Anton Popov).
  • system.settings_profile_elements 테이블이 채워지는 방식을 수정했습니다. 이 PR은 #18231을 수정합니다. #18379 (Vitaly Baranov).
  • 2단계 집계를 사용할 때 Distinct combinator가 적용된 집계 함수에서 발생할 수 있는 크래시를 수정했습니다. #17682를 수정합니다. #18365 (Anton Popov).
  • MODIFY COLUMN ... REMOVE TTL 쿼리가 실제로는 컬럼 TTL을 제거하지 않는 오류를 수정했습니다. #18130 (alesapin).

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

  • 시간대 정보를 2020e로 업데이트했습니다. #18531 (alesapin).

ClickHouse 릴리스 v20.12.4.5-안정, 2020-12-24

버그 수정

  • 이중 IPv4/IPv6 스택을 사용하는 머신에서 서버가 clickhouse-odbc-bridge 프로세스에 연결할 수 없던 문제를 수정했습니다. 또한 ODBC 딕셔너리 업데이트 수행 시 잘못된 쿼리가 사용되거나 충돌이 발생하던 문제도 수정했습니다. #14489가 해결되었을 가능성이 있습니다. #18278 (Denis Glazachev).
  • Enum과 Int 타입 간 키 비교 문제를 수정했습니다. 이 수정으로 #17989가 해결됩니다. #18214 (Amos Bird).
  • MaterializeMySQL 데이터베이스 엔진에서 고유 키 변환 중 발생하던 충돌을 수정했습니다. 이 수정으로 #18186#16372가 해결됩니다. #18211 (Winter Zhang).
  • S3 URL 파싱 중 발생하던 std::out_of_range: basic_string 문제를 수정했습니다. #18059 (Vladimir Chebotarev).
  • MaterializeMySQL에서 MySQL prefix 인덱스를 지원하지 않아 일부 테이블이 MySQL에서 ClickHouse로 동기화되지 않던 문제를 수정했습니다. 이 수정으로 #15187#17912가 해결됩니다. #17944 (Winter Zhang).
  • 쿼리에 ARRAY JOIN이 포함된 경우 쿼리 최적화로 인해 잘못된 결과가 생성되던 문제를 수정했습니다. #17887 (sundyli).
  • topK 집계 함수에서 발생할 수 있던 segfault를 수정했습니다. 이 수정으로 #17404가 종료됩니다. #17845 (Maksim Kita).
  • 서버가 데몬 모드로 실행될 때 system.stack_trace 테이블이 비어 있던 문제를 수정했습니다. #17630 (Amos Bird).

ClickHouse 릴리스 v20.12.3.3-안정, 2020-12-13

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

  • 기본적으로 use_compact_format_in_distributed_parts_names를 활성화했습니다(자세한 내용은 참고 문서를 참조하십시오). #16728 (Azat Khuzhin).
  • File engine을 사용하는 테이블을 생성할 때 파일 포맷 관련 사용자 설정(예: format_csv_delimiter)을 SETTINGS 절에서 허용하고, 이 설정을 모든 INSERTSELECT에 사용합니다. 현재 사용자 세션에서 변경했거나 DML 쿼리 자체의 SETTINGS 절에 지정한 파일 포맷 설정은 더 이상 해당 쿼리에 영향을 주지 않습니다. #16591 (Alexander Kuzmenkov).

새로운 기능

  • *.xz 압축/압축 해제 지원을 추가했습니다. 이제 file() 함수에서 *.xz를 사용할 수 있습니다. 이로써 #8828가 해결되었습니다. #16578 (Abi Palagashvili).
  • ALTER TABLE ... DROP|DETACH PART 'part_name' 쿼리를 도입했습니다. #15511 (nvartolomei).
  • 새로운 ALTER UPDATE/DELETE IN PARTITION 구문을 추가했습니다. #13403 (Vladimir Chebotarev).
  • JSON 입력/출력 포맷을 사용할 때 이름이 지정된 Tuple을 JSON 객체로 포맷할 수 있도록 했습니다. 이 동작은 output_format_json_named_tuples_as_objects 설정으로 제어되며, 기본적으로 비활성화되어 있습니다. #17175 (Alexander Kuzmenkov).
  • 기본적으로 TSV 및 CSV 포맷에서 enum 값을 해당 id로 입력할 수 있도록 했습니다. #16834 (Kruglov Pavel).
  • 중첩 유형이 String인 경우 널 허용, LowCardinality, 배열, Tuple에 COLLATE 지원을 추가했습니다. 또한 ColumnString.cpp의 collation 관련 코드를 리팩터링했습니다. #16273 (Kruglov Pavel).
  • 새로운 tcpPort 함수는 이 server가 수신 대기 중인 TCP 포트를 반환합니다. #17134 (Ivan).
  • 새로운 수학 함수 acosh, asinh, atan2, atanh, cosh, hypot, log1p, sinh를 추가했습니다. #16636 (Konstantin Malanchev).
  • 서로 다른 레플리카 간에 머지를 분산해 실행할 수 있도록 했습니다. execute_merges_on_single_replica_time_threshold MergeTree setting을 도입했습니다. #16424 (filimonov).
  • SQL 표준 호환성을 위해 aggregate_functions_null_for_empty 설정을 추가했습니다. 이 옵션은 쿼리의 모든 집계 함수를 재작성하여 각 함수에 -OrNull 접미사를 추가합니다. 10273을 구현했습니다. #16123 (flynn).
  • DateTime 및 DateTime64 parsing이 문자열 Date 리터럴 포맷을 허용하도록 업데이트했습니다. #16040 (Maksim Kita).
  • clickhouse-client에서 --history_file 매개변수를 사용해 이력 파일 경로를 변경할 수 있도록 했습니다. #15960 (Maksim Kita).

버그 수정

  • 매우 드문 경우 서버가 연결을 더 이상 수락하지 않을 수 있는 문제를 수정했습니다. #17542 (Amos Bird).
  • Windows Subsystem for Linux에서 실행 중인 ClickHouse의 Atomic 데이터베이스에서 RENAME 쿼리를 실행할 때 발생하던 Function not implemented 오류를 수정했습니다. #17661을 해결합니다. #17664 (tavplubix).
  • in_memory_parts_enable_wal이 비활성화되어 있으면 WAL에서 파트를 복원하지 않습니다. #17802 (detailyang).
  • MergeTreeWriterSettings의 max_compress_block_sizemin_compress_block_size로 잘못 초기화되던 문제를 수정했습니다. #17833 (flynn).
  • 삭제할 수 있는 최대 테이블 크기에 대한 Exception 메시지가 잘못 표시되었습니다. #17764 (alexey-milovidov).
  • 공간이 부족한 상태에서 Distributed 테이블에 삽입할 때 발생할 수 있는 segfault를 수정했습니다. #17737 (tavplubix).
  • ClickHouse가 MySQL 서버에 대한 연결을 다시 수립하지 못하는 문제를 수정했습니다. #17681 (Alexander Kazakov).
  • pool_size > 1일 때 race condition으로 인해 ON CLUSTER 쿼리를 실행하면 클러스터가 순환(교차) 복제 클러스터인지 여부를 잘못 판단할 수 있었습니다. 수정되었습니다. #17640 (tavplubix).
  • 예외 fmt::v7::format_error가 MergeTree 테이블에서 백그라운드에서 기록될 수 있습니다. 이로써 #17613 문제가 수정되었습니다. #17615 (alexey-milovidov).
  • clickhouse-client를 대화형 모드에서 여러 줄 쿼리와 함께 사용할 때, 한 줄 주석이 쿼리 끝까지 잘못 이어지던 문제가 있었습니다. 이 변경으로 #13654가 수정되었습니다. #17565 (alexey-milovidov).
  • 해당 mutation이 다른 레플리카에서 중단된 경우 alter 쿼리가 멈추는 문제를 수정했습니다. #16953를 해결했습니다. #17499 (alesapin).
  • ClickHouse에서 마크 캐시 크기를 과소평가하던 문제를 수정했습니다. 마크가 있는 매우 작은 파일이 많을 때 발생할 수 있습니다. #17496 (alesapin).
  • optimize_redundant_functions_in_order_by 설정이 활성화된 경우의 ORDER BY 문제를 수정했습니다. #17471 (Anton Popov).
  • 잘못된 최적화로 인해 발생할 수 있었던 DISTINCT 이후의 중복 문제를 수정했습니다. #17294를 수정합니다. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • JOIN 테이블에서 LowCardinality 타입을 읽는 중 발생하던 충돌을 수정했습니다. #17228를 해결했습니다. #17397 (Nikolai Kochetov).
  • toInt256(inf)의 스택 오버플로우를 수정했습니다. Int256은 실험적 기능입니다. #17235를 닫았습니다. #17257 (flynn).
  • LIMIT가 있는 분산 쿼리에서 Unexpected packet Data received from client 오류가 기록될 수 있던 문제를 수정했습니다. #17254 (Azat Khuzhin).
  • 서브쿼리에 const 컬럼이 있을 때 Set 인덱스가 잘못 무효화되는 문제를 수정했습니다. 이로써 #17246 문제가 해결되었습니다. #17249 (Amos Bird).
  • 인덱스 비교의 타입이 서로 다를 때 발생할 수 있는 잘못된 인덱스 분석 문제를 수정합니다. 이 수정으로 #17122를 해결합니다. #17145 (Amos Bird).
  • 충돌을 유발하는 ColumnConst 비교를 수정했습니다. 이로써 #17088이 해결되었습니다. #17135 (Amos Bird).
  • MaterializeMySQL(실험적 기능)과 관련된 여러 문제가 수정되었습니다. #16923 수정. #15883 수정. MySQL binlog_checksum을 변경할 때 MaterializeMySQL SYNC가 실패하던 문제를 수정했습니다. #17091 (Winter Zhang).
  • 리더가 아닌 ReplicatedMergeTree 테이블에서 ON CLUSTER 쿼리가 무기한 대기 상태에 빠질 수 있는 버그를 수정했습니다. #17089 (alesapin).
  • some_tableAS table_function()으로 생성된 경우, CREATE TABLE ... AS some_table 쿼리에서 발생하던 크래시를 수정했습니다. #16944을 해결합니다. #17072 (tavplubix).
  • fuzzBits 함수의 미완성 구현과 관련된 버그 수정, 관련 이슈: #16980. #17051 (hexiaoting).
  • CFA 레지스터가 RAX인 경우의 LLVM’s libunwind 문제를 수정했습니다. 이는 LLVM’s libunwind버그입니다. 이 버그에 대한 우회 방법은 이미 있습니다. #17046 (alexey-milovidov).
  • 실행 도중 취소될 수 있는 원격 쿼리(예: LIMIT가 있는 쿼리)에서 발생하는 불필요한 네트워크 오류를 방지했습니다. #17006 (Azat Khuzhin).
  • OFFSET만 있는 쿼리에서 optimize_distributed_group_by_sharding_key 설정(기본적으로 비활성화됨) 문제를 수정했습니다. #16996 (Azat Khuzhin).
  • JOIN 사용 시 분산 테이블 위의 Merge 테이블 관련 수정. #16993 (Azat Khuzhin).
  • double을 큰 정수(128비트, 256비트)로 캐스팅할 때 발생하던 잘못된 결과를 수정했습니다. 큰 정수 지원은 실험적입니다. #16986 (Mike).
  • ALTER TABLE ... MODIFY COLUMN ... NewType 이후, 변경 중인 컬럼에 대한 WHERE 표현식이 포함된 SELECT가 있고 ALTER가 아직 완료되지 않았을 때 발생할 수 있는 서버 충돌을 수정했습니다. #16968 (Amos Bird).
  • clickhouse-git-import에서 blame 정보가 제대로 계산되지 않았습니다. #16959 (alexey-milovidov).
  • 단조 함수의 ORDER BY 최적화를 수정했습니다. #16107을 해결했습니다. #16956 (Anton Popov).
  • optimize_aggregators_of_group_by_keys 설정이 활성화된 상태에서 group by 최적화와 조인을 수정했습니다. #12604를 수정했습니다. #16951 (Anton Popov).
  • ORDER BY가 있는 쿼리에서 발생할 수 있는 Illegal type of argument 오류를 수정했습니다. #16580를 수정했습니다. #16928 (Nikolai Kochetov).
  • InterpreterShowAccessQuery에서 이상 동작을 유발하던 코드를 수정했습니다. #16866 (tavplubix).
  • timeSeriesGroupSum 함수를 사용할 때 ClickHouse 서버가 충돌하는 문제를 방지했습니다. 이 함수는 최신 ClickHouse 릴리스에서 제거되었습니다. #16865 (filimonov).
  • 쿼리 프로파일러가 활성화된 상태에서, 일부 함수의 비동기 unwind 테이블에 문제가 있는 것으로 추정되는 glibc 버전의 OS에 ClickHouse가 설치된 경우 드물게 아무 메시지 없이 발생하던 크래시를 수정했습니다. 이로써 #15301이 수정되었습니다. 이로써 #13098이 수정되었습니다. #16846 (alexey-milovidov).
  • 인수 없이 any를 사용할 때 발생하는 충돌을 수정했습니다. #16803 관련입니다. cc @azat. #16826 (Amos Bird).
  • 디스크에 테이블 메타데이터를 기록하는 중 메모리를 할당할 수 없으면 손상된 메타데이터 파일이 기록될 수 있습니다. #16772 (alexey-milovidov).
  • 파티션 프레디케이트를 사용하는 단순한 쿼리 최적화를 수정했습니다. #16767 (Azat Khuzhin).
  • transform_null_in 설정이 활성화된 상태에서 여러 컬럼과 튜플에 대한 IN 연산자 문제를 수정했습니다. #15310을 해결했습니다. #16722 (Anton Popov).
  • MySQL 프로토콜을 통한 INSERT 쿼리에서 영향받은 행 수를 반환합니다. 이전에는 ClickHouse가 항상 0을 반환하도록 되어 있었으나, 수정되었습니다. #16605를 수정했습니다. #16715 (Winter Zhang).
  • ‘if’ 접미사 집계 함수를 사용할 때 발생하던 원격 쿼리 실패를 수정했습니다. #16574 수정 #16231 수정 #16610 (Winter Zhang).
  • 최적화된 단순 count 쿼리 및 system.tables에서 select_sequential_consistency로 인해 발생하던 일관성 없는 동작을 수정했습니다. #16309 (Hao Chen).

개선 사항

  • TTL, mutation 또는 축약 머지 알고리즘으로 정리된 뒤 남은 빈 파트를 제거합니다. #16895 (Anton Popov).
  • 분산 테이블에서 비동기 전송 시 디렉터리에 compact 포맷을 사용하도록 했습니다: use_compact_format_in_distributed_parts_names의 기본값은 1입니다. #16788 (Azat Khuzhin).
  • S3에 데이터가 기록되지 않은 경우 멀티파트 업로드를 중단하도록 변경했습니다. #16840 (Pavel Kovalenko).
  • 오류 발생 시 format_avro_schema_registry_url의 IP를 다시 확인하도록 개선했습니다. #16985 (filimonov).
  • system.distribution_queue의 data_path에 있는 비밀번호를 마스킹합니다. #16727 (Azat Khuzhin).
  • 컬럼 변환기로 존재하지 않는 컬럼을 대체하려고 하면 오류를 발생시킵니다. #16183 (hexiaoting).
  • 모든 스레드가 동시에 작업하기에 메모리가 충분하지 않으면 병렬 파싱을 비활성화합니다. 또한 파싱할 각 청크는 독립적인 문자열 집합(하나 이상)이어야 하므로, 매우 큰 행(> min_chunk_bytes_for_parallel_parsing)을 삽입하려고 하면 “Memory limit exceeded”와 같은 예외가 발생할 수 있습니다. #16721 (Nikita Mikhaylov).
  • 설치 스크립트는 항상 config 폴더에 하위 디렉터리를 생성해야 합니다. 이는 사용자 지정 config를 사용하는 Docker build에만 해당합니다. #16936 (filimonov).
  • JSONEachRow, JSONCompactEachRow 및 RegexpRow 입력 형식의 오류 메시지 문법을 바로잡았습니다. #17205 (nico piderman).
  • SOURCE(CLICKHOUSE(...))의 기본 hostport 매개변수를 현재 인스턴스로 설정하고, 기본 user 값은 'default'로 설정했습니다. #16997 (vdimir).
  • ATTACH/DETACH TABLE <DICTIONARY>를 수행할 때 유용한 정보를 담은 오류 메시지를 표시하도록 했습니다. 이 PR 이전에는 detach table <dict>가 동작했지만, 그 결과 인메모리 메타데이터가 잘못된 형식이 되었습니다. #16885 (Amos Bird).
  • cutToFirstSignificantSubdomainWithWWW() 함수를 추가했습니다. #16845 (Azat Khuzhin).
  • 잘못된 설정이 지정되면 Server가 예외 메시지와 함께 시작되지 않도록 개선했습니다 (metric_log.collect_interval_milliseconds is missing). #16815 (Ivan).
  • 분산 DDL 구성이 없을 때 표시되는 예외 메시지를 개선했습니다. 이로써 #5075가 수정되었습니다. #16769 (Nikita Mikhaylov).
  • 사용성 개선: CREATE TABLE 쿼리에서 CODEC 표현식이 잘못된 위치에 있을 때 구문 오류 메시지에 더 나은 제안을 표시하도록 개선했습니다. 이로써 #12493를 수정했습니다. #16768 (alexey-milovidov).
  • Distributed 엔진 시작 시 async INSERT용 빈 디렉터리를 삭제합니다. #16729 (Azat Khuzhin).
  • 프록시로 nginx server를 사용할 때 S3를 사용하기 위한 우회 방법입니다. 현재 Nginx는 http://domain.com?delete처럼 빈 경로가 있는 URL을 허용하지 않지만, 기본 aws-sdk-cpp는 이런 형태의 URL을 생성합니다. 이 커밋에서는 패치된 aws-sdk-cpp 버전을 사용하여, 이런 경우 http://domain.com/?delete처럼 경로에 ”/“가 포함된 URL을 생성하도록 했습니다. #16709 (ianton-ru).
  • 동일한 크기의 정수와 부동소수점 수에서 reinterpretAs* 함수가 작동하도록 허용합니다. 16640을 구현합니다. #16657 (flynn).
  • 이제 config.xml에서 <auxiliary_zookeepers> 구성을 변경하고 서버를 재시작하지 않고도 다시 로드할 수 있습니다. #16627 (Amos Bird).
  • 원격 리소스에 대한 https 연결에서 SNI를 지원합니다. 이를 통해 SNI가 필요한 Cloudflare 서버에 연결할 수 있게 됩니다. 이 변경으로 #10055 문제가 수정됩니다. #16252 (alexey-milovidov).
  • SNI가 필요한 clickhouse-server 보안 엔드포인트에 연결할 수 있게 했습니다. 이 기능은 clickhouse-server가 TLS 프록시 뒤에서 호스팅될 때 사용할 수 있습니다. #16938 (filimonov).
  • 구체화된 뷰(materialized view) 간에 루프가 생성될 때 발생할 수 있는 스택 오버플로우 문제를 수정했습니다. 이로써 #15732가 해결되었습니다. #16048 (alexey-milovidov).
  • MergeTree 테이블 엔진 계열의 백그라운드 작업 처리 구현을 간소화했습니다. 사용자에게 보이는 변경 사항은 없습니다. #15983 (alesapin).
  • MaterializeMySQL(실험적 기능) 개선. MySQL 동기화 사용자에게 적절한 동기화 권한이 없으면 예외를 발생시킵니다. #15977 (TCeason).
  • indexOf()가 BloomFilter를 사용하도록 개선했습니다. #14977 (achimbab).

성능 개선

  • 부분 정렬이라는 ClickHouse 사용 사례에는 Floyd-Rivest 알고리즘이 가장 적합하므로 이를 사용합니다. 벤치마크는 https://github.com/danlark1/miniselect여기에서 확인할 수 있습니다. #16825 (Danila Kutenin).
  • 이제 ReplicatedMergeTree 엔진 제품군은 복제 fetch 작업을 위해 별도의 스레드 풀을 사용합니다. 이 풀의 크기는 background_fetches_pool_size 설정으로 제한되며, server를 재시작하면 조정할 수 있습니다. 이 설정의 기본값은 3이며, 최대 3개의 fetch를 병렬로 수행할 수 있음을 의미합니다(10G 네트워크를 활용할 수 있음). #520을 수정했습니다. #16390 (alesapin).
  • quantileTDigest 상태가 제어되지 않고 커지던 문제를 수정했습니다. #16680 (hrissan).
  • EXPLAINVIEW 서브쿼리 설명을 추가했습니다. VIEW에 대한 push down 최적화를 제한했습니다. 쿼리 계획에 Distributed의 로컬 레플리카를 추가했습니다. #14936 (Nikolai Kochetov).
  • max_threads > 0이고 ORDER BY에 표현식이 있을 때의 optimize_read_in_order/optimize_aggregation_in_order 문제를 수정했습니다. #16637 (Azat Khuzhin).
  • 매우 많은 MergeTree 테이블에 대한 Merge 테이블의 읽기 성능 문제를 수정했습니다. #7748을 수정했습니다. #16988 (Anton Popov).
  • 이제 정확히 일치하는 경우 파티션을 안전하게 가지치기할 수 있습니다. 유용한 예로, 테이블이 intHash64(x) % 100으로 파티셔닝되어 있고 쿼리에 x가 아니라 intHash64(x) % 100 자체에 대한 조건이 있는 경우가 있습니다. #16253 (Amos Bird).

실험적 기능

  • EmbeddedRocksDB 테이블 엔진을 추가했습니다(딕셔너리에 사용할 수 있습니다). #15073 (sundyli).

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

  • 테스트 커버리지용 빌드 이미지를 개선했습니다. #17233 (alesapin).
  • 내장 시간대 데이터를 2020d 버전으로 업데이트했습니다(cctz도 최신 master로 업데이트했습니다). #17204 (filimonov).
  • Poco에서 발생한 UBSan 리포트를 수정했습니다. 이로써 #12719이 해결되었습니다. #16765 (alexey-milovidov).
  • 타사 라이브러리에는 UBSan 계측을 적용하지 않도록 했습니다. #16764 (alexey-milovidov).
  • cache 딕셔너리에서 발생한 UBSan 리포트를 수정했습니다. 이로써 #12641이 해결되었습니다. #16763 (alexey-milovidov).
  • 무한대 부동소수점 수를 정수로 변환하려고 할 때 발생하는 UBSan 리포트를 수정했습니다. 이로써 #14190이 해결되었습니다. #16677 (alexey-milovidov).

ClickHouse 릴리스 20.11

ClickHouse 릴리스 v20.11.7.16-안정, 2021-03-02

개선 사항

  • clickhouse-server 이미지에서 clickhouse 사용자 및 그룹의 uid / gid를 고정값(101)으로 명시적으로 설정했습니다. #19096 (filimonov).

버그 수정

  • BloomFilter 인덱스 비정상 종료 문제 수정. #19757을 수정했습니다. #19884 (Maksim Kita).
  • system.text_log가 활성화된 경우 데드락이 발생할 수 있었습니다. 이로써 #19874가 수정되었습니다. #19875 (alexey-milovidov).
  • 이전 버전에서는 함수 arrayEnumerateUniq에 비정상적인 인수가 사용되면 충돌이나 무한 루프가 발생할 수 있었습니다. 이로써 #19787이 해결되었습니다. #19788 (alexey-milovidov).
  • 산술 유형과 문자열 유형을 정확하게 비교할 때 발생하던 스택 오버플로우를 수정했습니다. #19773 (tavplubix).
  • bitmapAndnot 함수의 세그멘테이션 폴트를 수정했습니다. #19668을 해결합니다. #19713 (Maksim Kita).
  • 큰 정수를 사용하는 일부 함수에서 segfault가 발생할 수 있습니다. 큰 정수는 실험적 기능입니다. 이 문제는 #19667에서 해결되었습니다. #19672 (alexey-milovidov).
  • LowCardinality 인수에서 함수 neighbor가 잘못된 결과를 반환하던 문제를 수정했습니다. #10333를 수정합니다. #19617 (Nikolai Kochetov).
  • disconnect 후 Connection에서 CompressedWriteBuffer의 use-after-free 문제를 수정했습니다. #19599 (Azat Khuzhin).
  • DROP/DETACH TABLE table ON CLUSTER cluster SYNC 쿼리가 멈출 수 있던 문제가 수정되었습니다. #19568을 해결했습니다. #19572 (tavplubix).
  • CREATE DICTIONARY 쿼리의 id 표현식 수정. #19571 (Maksim Kita).
  • merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read=0/UINT64_MAX일 때 발생하던 SIGSEGV를 수정했습니다. #19528 (Azat Khuzhin).
  • addMonth 함수가 악의적으로 조작된 인수로 호출될 경우 메모리 읽기 중 버퍼 오버플로우가 발생할 수 있었습니다. 이 수정은 #19441을 해결합니다. 이 수정은 #19413도 해결합니다. #19472 (alexey-milovidov).
  • 파일 중 하나에 빈 데이터 블록이 있으면 분산 배치를 손상된 상태로 표시합니다. #19449 (Azat Khuzhin).
  • Uber H3 라이브러리에서 발생할 수 있는 버퍼 오버플로우를 수정했습니다. https://github.com/uber/h3/issues/392를 참조하십시오. 이로써 #19219가 해결됩니다. #19383 (alexey-milovidov).
  • system.parts _state 컬럼 수정(잘못된 순서 때문에 이 컬럼을 쿼리할 때 LOGICAL_ERROR가 발생하던 문제). #19346 (Azat Khuzhin).
  • 오류 Cannot convert column now64() because it is constant but values of constants are different in source and result를 수정했습니다. #7156의 후속 수정입니다. #19316 (Nikolai Kochetov).
  • ReplicatedMergeTree 테이블 처리 중 동시에 실행되는 ALTERDROP 쿼리가 멈출 수 있던 버그를 수정했습니다. #19237 (alesapin).
  • ORC 포맷 파일을 무한히 읽던 문제를 수정했습니다(#10580에서 도입됨). #19095 문제를 해결했습니다. #19134 (Nikolai Kochetov).
  • ClickHouse가 LowCardinality(Nullable(...))에서 압축 코덱을 읽지 못해 Attempt to read after EOF Exception을 발생시키던 시작 시 버그를 수정했습니다. 문제 #18340을 수정했습니다. #19101 (alesapin).
  • Template 또는 CustomSeparated 포맷을 사용해 HTTP 인터페이스로 데이터를 삽입할 때 발생하던 There is no checkpoint 오류를 수정했습니다. #19021을 해결합니다. #19072 (tavplubix).
  • 이전 구문으로 생성된 MergeTree 테이블의 MODIFY TTL 쿼리를 제한합니다. 이전에는 해당 쿼리가 성공했지만, 실제로는 아무런 효과가 없었습니다. #19064 (Anton Popov).
  • groupUniqArray가 Enum 유형 인수에 대해 올바른 유형을 반환하도록 수정했습니다. 이로써 #17875가 해결되었습니다. #19019 (alexey-milovidov).
  • ignore 함수를 LowCardinality 인수와 함께 사용할 때 발생할 수 있는 오류 Expected single dictionary argument for function를 수정했습니다. #14275를 수정했습니다. #19016 (Nikolai Kochetov).
  • TinyLog 엔진이 있는 테이블에 LowCardinality 컬럼을 삽입할 때 발생하던 문제를 수정했습니다. #18629을 수정합니다. #19010 (Nikolai Kochetov).
  • 최적화가 항상 정확한 것은 아니므로 optimize_move_functions_out_of_any를 비활성화합니다. 이로써 #18051이 해결되었습니다. 이로써 #18973이 해결되었습니다. #18981 (alexey-milovidov).
  • 종료 시 매우 드물게 발생하던 데드락을 수정했습니다. #18977 (tavplubix).
  • 일부 이스케이프된 텍스트가 포함된 mutation(예: ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1'))이 잘못 직렬화되던 버그를 수정했습니다. #18878를 해결합니다. #18944 (alesapin).
  • ATTACH 파티션 시 mutation이 재설정되어야 합니다. #18804. #18935 (fastio).
  • clickhouse-local 종료 시 발생할 수 있는 정지 현상을 수정했습니다. 이 수정으로 #18891가 해결됩니다. #18893 (alexey-milovidov).
  • 단항 함수 및 널 허용 타입에서 *If combinator 문제를 수정했습니다. #18806 (Azat Khuzhin).
  • 비동기 분산 INSERT는 network_compression_method 설정이 전역적으로 기본값이 아닌 값으로 지정된 경우 서버에서 거부될 수 있습니다. 이 문제를 #18741에서 수정했습니다. #18776 (alexey-milovidov).
  • Nullable(String)에서 Nullable(Decimal(P, S))NULLCAST할 때 발생하던 Attempt to read after eof 오류를 수정했습니다. 이제 함수 CAST는 널 허용 문자열에서 decimal을 파싱할 수 없으면 NULL을 반환합니다. #7690을 해결합니다. #18718 (Winter Zhang).
  • 인자 크기가 일치하지 않을 때 발생하던 Logger 문제를 수정했습니다. #18717 (sundyli).
  • FixedString 데이터 타입 지원을 추가했습니다. MySQL에서 ClickHouse로 데이터를 복제할 때 “Code: 50, e.displayText() = DB::Exception: Unsupported type FixedString(1)” 예외가 발생하던 문제를 해결했습니다. 이 패치는 버그 #18450을 수정하며 #6556도 함께 해결합니다. #18553 (awesomeleo).
  • RIGHT 또는 FULL 조인이 있는 서브쿼리 뒤에 ORDER BY를 사용할 때 발생할 수 있는 Pipeline stuck 오류를 수정했습니다. #18550 (Nikolai Kochetov).
  • 해당 mutation이 중단된 뒤 ALTER 쿼리가 멈춰 버릴 수 있는 버그를 수정했습니다. thread fuzzer로 발견되었습니다. #18518 (alesapin).
  • 머지 중 AIO를 사용한 쓰기를 비활성화했습니다. 머지 과정에서 매우 드물게 프라이머리 키 컬럼이 손상될 수 있기 때문입니다. #18481 (alesapin).
  • 결과를 계산할 수 없는 경우 분석 단계에서 서브쿼리의 상수 폴딩을 비활성화합니다. #18446 (Azat Khuzhin).
  • Nullable(String) 유형의 인수로 toType(...) 함수(toDate, toUInt32 등)를 실행할 때 발생하던 value is too short 오류를 수정했습니다. 이제 이러한 함수는 parsing 오류가 발생해도 Exception을 throw하는 대신 NULL을 반환합니다. #7673을 수정했습니다. #18445 (tavplubix).
  • wide 파트에서 compact 파트로의 머지를 제한했습니다. 수직 병합 시 결과 파트가 손상되는 문제가 있었습니다. #18381 (Anton Popov).
  • 테이블 system.settings_profile_elements이 채워지지 않던 문제를 수정했습니다. 이 PR은 #18231 문제를 해결합니다. #18379 (Vitaly Baranov).
  • 상수 인수가 있는 이항 함수의 인덱스 분석에서 잘못된 쿼리 결과를 초래하던 문제를 수정했습니다. 이 수정은 #18364를 해결합니다. #18373 (Amos Bird).
  • combinator Distinct를 사용할 때 2단계 집계에서 집계 함수가 비정상 종료될 수 있는 문제를 수정했습니다. #17682를 수정했습니다. #18365 (Anton Popov).
  • 이제 table에서 임의의 컬럼 하나만 선택할 수 있는 경우에도 SELECT count() FROM table를 실행할 수 있습니다. 이 PR은 #10639을 수정합니다. #18233 (Vitaly Baranov).
  • SELECT JOIN은 이제 join된 각 테이블에 SELECT 권한이 필요합니다. 이 PR은 #17654를 수정합니다. #18232 (Vitaly Baranov).
  • 읽기 백오프가 발생할 때 MergeTree*에서 읽는 동안 쿼리 결과가 불완전하게 반환될 수 있는 문제를 수정했습니다(로그에 <Debug> MergeTreeReadPool: Will lower number of threads 메시지가 표시되는 경우). 이 문제는 #16423에서 도입되었습니다. #18137을 수정합니다. #18216 (Nikolai Kochetov).
  • 쿼리 MODIFY COLUMN ... REMOVE TTL이 실제로는 컬럼 TTL을 제거하지 않던 오류를 수정했습니다. #18130 (alesapin).
  • 프레디케이트 옵티마이저의 비결정적 함수 관련 문제를 수정했습니다. 이 수정으로 #17244가 해결됩니다. #17273 (Winter Zhang).
  • MOVE 또는 REPLACE PARTITION 이후, 드물게는 DETACHDROP PARTITION 이후에 존재하지 않는 part를 기다리느라 Mutation이 멈추는 문제가 있었습니다. 이 문제가 수정되었습니다. #15537 (tavplubix).

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

  • 시간대 정보를 2020e로 업데이트했습니다. #18531 (alesapin).

ClickHouse 릴리스 v20.11.6.6-안정, 2020-12-24

버그 수정

  • 이중 IPv4/IPv6 stack 환경의 머신에서 server가 clickhouse-odbc-bridge 프로세스에 도달할 수 없던 문제를 수정했으며, ODBC 딕셔너리 업데이트가 잘못된 쿼리로 수행되거나 충돌을 유발하던 문제도 수정했습니다. 이 변경으로 #14489가 해결되었을 가능성이 있습니다. #18278 (Denis Glazachev).
  • Enum과 Int 타입 사이의 키 비교를 수정했습니다. 이로써 #17989 문제가 해결되었습니다. #18214 (Amos Bird).
  • MaterializeMySQL 데이터베이스 엔진에서 고유 키를 변환할 때 발생하던 충돌을 수정했습니다. 이 수정으로 #18186#16372가 해결됩니다 #18211 (Winter Zhang).
  • S3 URL 파싱 중 발생하던 std::out_of_range: basic_string 문제를 해결했습니다. #18059 (Vladimir Chebotarev).
  • MaterializeMySQL에서 MySQL 접두사 인덱스 변환을 지원하지 않아 일부 테이블이 MySQL에서 ClickHouse로 동기화되지 않던 문제가 수정되었습니다. 이로써 #15187#17912가 해결되었습니다. #17944 (Winter Zhang).
  • 쿼리에 ARRAY JOIN이 포함된 경우 쿼리 최적화 과정에서 잘못된 결과가 생성되던 문제를 수정했습니다. #17887 (sundyli).
  • topK 집계 함수에서 발생할 수 있는 segfault 문제를 수정했습니다. 이로써 #17404가 해결되었습니다. #17845 (Maksim Kita).
  • in_memory_parts_enable_wal이 비활성화되어 있으면 WAL에서 파트를 복원하지 않습니다. #17802 (detailyang).
  • ClickHouse가 MySQL 서버와의 연결을 다시 복구하지 못하던 문제를 수정했습니다. #17681 (Alexander Kazakov).
  • 파티션 프레디케이트가 있을 때 optimize_trivial_count_query의 동작이 일관되지 않던 문제를 수정했습니다. #17644 (Azat Khuzhin).
  • 서버가 데몬 모드로 실행될 때 system.stack_trace 테이블이 비어 있던 문제가 수정되었습니다. #17630 (Amos Bird).
  • MergeTree 테이블에서 xxception fmt::v7::format_error가 백그라운드에 기록될 수 있던 동작을 수정했습니다. 이 수정으로 #17613이 해결됩니다. #17615 (alexey-milovidov).
  • clickhouse-client를 대화형 모드에서 여러 줄 쿼리와 함께 사용할 때, 한 줄 주석이 잘못 쿼리 끝까지 확장되던 동작을 수정했습니다. 이 변경으로 #13654가 해결됩니다. #17565 (alexey-milovidov).
  • 매우 드문 경우에 서버가 연결을 더 이상 받지 않을 수 있던 문제를 수정했습니다. #17542 (alexey-milovidov).
  • 해당 mutation이 다른 레플리카에서 종료되었을 때 alter 쿼리가 멈추던 문제를 수정했습니다. 이 수정으로 #16953 문제가 해결됩니다. #17499 (alesapin).
  • ClickHouse에서 마크 캐시 크기를 과소평가할 때 발생하던 버그를 수정했습니다. 마크가 포함된 아주 작은 파일이 많을 때 이 문제가 발생할 수 있습니다. #17496 (alesapin).
  • 설정 optimize_redundant_functions_in_order_by가 활성화된 상태에서의 ORDER BY 문제를 수정했습니다. #17471 (Anton Popov).
  • DISTINCT 이후에 발생할 수 있었던 중복을 잘못된 최적화로 인해 수정했습니다. 이 변경으로 #17294가 해결되었습니다. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • LowCardinality 타입이 있는 JOIN 테이블을 읽는 중 발생하던 충돌을 수정했습니다. 이 수정으로 #17228가 해결됩니다. #17397 (Nikolai Kochetov).
  • 서브쿼리에 const 컬럼이 있을 때 set 인덱스 무효화가 잘못되던 문제를 수정했습니다. 이로써 #17246 문제가 해결됩니다. #17249 (Amos Bird).
  • 인덱스 비교 시 타입이 서로 다를 때 잘못된 인덱스 분석이 발생할 수 있던 문제를 수정했습니다. 이 수정으로 #17122 문제가 해결되었습니다. #17145 (Amos Bird).
  • 크래시를 일으키던 ColumnConst 비교를 수정했습니다. 이로써 #17088 문제가 해결됩니다. #17135 (Amos Bird).
  • 리더가 아닌 ReplicatedMergeTreeTables에서 ON CLUSTER 쿼리가 무기한으로 멈출 수 있던 버그를 수정했습니다. #17089 (alesapin).
  • 퍼저가 발견한 fuzzBits 함수의 버그를 수정했습니다. 이로써 #16980 문제가 해결됩니다. #17051 (hexiaoting).
  • 실행 중에 취소될 수 있는 원격 쿼리(예: LIMIT가 있는 쿼리)에서 불필요한 네트워크 오류가 발생하지 않도록 했습니다. #17006 (Azat Khuzhin).
  • double에서 큰 정수(128, 256비트)로 형변환할 때 잘못된 결과가 나오던 문제를 수정했습니다. #16986 (Mike).
  • 오류 발생 시 format_avro_schema_registry_url의 IP를 다시 조회하도록 수정했습니다. #16985 (filimonov).
  • 변경 중인 컬럼에 대한 WHERE 표현식이 포함된 SELECT가 있고 ALTER TABLE ... MODIFY COLUMN ... NewType이 아직 완료되지 않은 상태에서 발생할 수 있던 서버 크래시를 수정했습니다. #16968 (Amos Bird).
  • clickhouse-git-import에서 Blame 정보가 제대로 계산되지 않던 문제가 수정되었습니다. #16959 (alexey-milovidov).
  • 단조 함수가 포함된 ORDER BY 최적화를 수정했습니다. #16107을 해결했습니다. #16956 (Anton Popov).
  • 설정 optimize_aggregators_of_group_by_keys가 활성화된 상태에서 조인과 함께 사용하는 GROUP BY 최적화 문제를 수정했습니다. 이 수정으로 #12604가 해결됩니다. #16951 (Anton Popov).
  • 설치 스크립트는 config 폴더에 항상 하위 디렉터리를 생성해야 합니다. 이는 사용자 지정 config를 사용하는 Docker build에만 해당됩니다. #16936 (filimonov).
  • ORDER BY가 있는 쿼리에서 발생할 수 있는 Illegal type of argument 오류를 수정했습니다. 이로써 #16580가 해결됩니다. #16928 (Nikolai Kochetov).
  • WriteBufferFromS3에 기록된 데이터가 없으면 멀티파트 업로드를 중단합니다. #16840 (Pavel Kovalenko).
  • 인수 없이 any를 사용할 때 발생하던 충돌 문제를 수정했습니다. 이로써 #16803 문제가 해결됩니다. #16826 (Amos Bird).
  • MySQL 프로토콜을 통해 INSERT 쿼리를 실행할 때, ClickHouse가 영향을 받은 행 수를 반환하지 않고 항상 0을 반환하던 문제를 수정했습니다. 이 수정으로 #16605가 해결됩니다. #16715 (Winter Zhang).
  • TDigest의 비정상적인 증가 문제를 수정했습니다. #16680 (hrissan).
  • 집계 함수에서 접미사 if를 사용할 때 원격 쿼리가 실패하던 문제를 수정했습니다. 이 수정은 #16574, #16231, #16610을 해결합니다 (Winter Zhang).
  • 최적화된 단순 count 쿼리와 system.tables에서 select_sequential_consistency 때문에 발생하던 동작 불일치 문제를 수정했습니다. #16309 (Hao Chen).
  • ColumnTransformer로 존재하지 않는 컬럼을 대체하려고 하면 오류가 발생합니다. #16183 (hexiaoting).

ClickHouse 릴리스 v20.11.3.3-안정, 2020-11-13

버그 수정

  • 쿼리 프로파일러가 활성화되어 있고, 일부 함수의 비동기 unwind 테이블이 손상된 것으로 추정되는 glibc 버전이 포함된 OS에 ClickHouse가 설치된 경우 드물게 발생하는 무증상 크래시를 수정했습니다. 이로써 #15301#13098이 해결됩니다. #16846 (alexey-milovidov).

ClickHouse 릴리스 v20.11.2.1, 2020-11-11

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

  • distributed_ddl config section에 profile이 지정된 경우, 서버 시작 시 이 profile이 default profile의 설정을 덮어쓸 수 있었습니다. 이 문제는 수정되었으며, 이제 분산 DDL 쿼리의 설정이 전역 server 설정에 영향을 주지 않습니다. #16635 (tavplubix).
  • 키(정렬 키, 프라이머리 키, 파티션 키 등)에서 비교할 수 없는 데이터 타입(AggregateFunction 등)의 사용을 제한했습니다. #16601 (alesapin).
  • ANALYZEAST 쿼리를 제거하고, 이제 완전한 기능을 갖춘 EXPLAIN 쿼리에 포함되므로 enable_debug_queries 설정을 obsolete로 변경했습니다. #16536 (Ivan).
  • 집계 함수 boundingRatio, rankCorr, retention, timeSeriesGroupSum, timeSeriesGroupRateSum, windowFunnel은 잘못하여 대소문자를 구분하지 않도록 처리되고 있었습니다. 이제 설계된 대로 함수 이름이 대소문자를 구분하도록 변경되었습니다. SQL 표준에 정의되었거나 다른 DBMS와의 호환성을 위해 만들어진 함수, 또는 그와 유사한 함수만 대소문자를 구분하지 않아야 합니다. #16407 (alexey-milovidov).
  • 데이터가 충분하지 않을 경우 rankCorr 함수가 nan을 반환하도록 변경했습니다 #16124. #16135 (hexiaoting).
  • 20.5보다 이전 버전에서 업그레이드할 때 rolling update를 수행하는 경우, cluster에 20.5 이상 버전과 20.5 미만 버전이 함께 포함되어 있고, 이전 버전의 ClickHouse 노드가 재시작된 뒤 더 최신 버전이 있는 상태에서 이전 버전으로 시작되면 Part ... intersects previous part 오류가 발생할 수 있습니다. 이 오류를 방지하려면 먼저 모든 cluster 노드에 최신 clickhouse-server 패키지를 설치한 다음 재시작하십시오. 그러면 clickhouse-server가 재시작될 때 새 버전으로 시작됩니다.

새로운 기능

  • 로컬에 없는 사용자의 사용자 디렉터리로 LDAP를 지원하도록 했습니다. #12736 (Denis Glazachev).
  • 현재 실행 중인 백그라운드 페치를 표시하는 system.replicated_fetches 테이블을 추가했습니다. #16428 (alesapin).
  • date_time_output_format 설정이 추가되었습니다. #15845 (Maksim Kita).
  • ClickHouse에 간단한 web UI를 추가했습니다. #16158 (alexey-milovidov).
  • 길이 구분 기호 없이 단일 protobuf 메시지를 한 번에 읽고 쓸 수 있도록 했습니다. #15199 (filimonov).
  • 초기 OpenTelemetry 지원이 추가되었습니다. 이제 ClickHouse는 네이티브 및 HTTP 프로토콜을 통해 OpenTelemetry traceparent 헤더를 수신하며, 일부 경우 이를 다운스트림으로 전달합니다. 실행된 쿼리의 트레이스 스팬은 system.opentelemetry_span_log 테이블에 저장됩니다. #14195 (Alexander Kuzmenkov).
  • CREATE TABLE 쿼리의 컬럼 목록에서 프라이머리 키를 지정할 수 있도록 지원합니다. 이는 다른 SQL 방언과의 호환성을 위해 필요합니다. #15823 (Maksim Kita).
  • ORDER BY가 있는 SELECT 쿼리에서 OFFSET offset_row_count {ROW | ROWS} FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}를 구현했습니다. 이는 LIMIT를 지정하는 SQL 표준 방식입니다. #15855 (hexiaoting).
  • errorCodeToName 함수 - 오류의 변수명을 반환합니다(query&#95;log 및 유사한 항목을 분석할 때 유용함). system.errors 테이블 - 오류 발생 횟수를 표시합니다(system_events_show_zero_values를 따름). #16438 (Azat Khuzhin).
  • named tuple을 확장해 SELECT 목록에 새 컬럼을 추가할 수 있는 특수 함수 untuple이 추가되었습니다. #16242 (Nikolai Kochetov, Amos Bird).
  • 이제 쿼리 매개변수를 통해 식별자를 전달할 수 있습니다. 또한 이러한 매개변수는 테이블 객체나 컬럼으로 사용할 수 있습니다. #16594 (Amos Bird).
  • MergeTree BloomFilter 인덱스에 큰 정수(UInt256, Int128, Int256) 및 UUID 데이터 타입 지원이 추가되었습니다. 큰 정수는 실험적 기능입니다. #16642 (Maksim Kita).
  • 비암호화 문자열 해싱용 farmFingerprint64 함수를 추가했습니다. #16570 (Jacob Hayes).
  • log_queries_min_query_duration_ms를 추가했습니다. 이 설정값보다 오래 걸리는 쿼리만 query_log/query_thread_log에 기록됩니다(즉, MySQL의 slow_query_log와 유사합니다). #16529 (Azat Khuzhin).
  • Alpine을 기반으로 Docker 이미지를 생성할 수 있게 되었습니다. 사전 컴파일된 바이너리와 Ubuntu 20.04의 glibc 구성 요소를 사용합니다. #16479 (filimonov).
  • toUUIDOrNull, toUUIDOrZero 캐스트 함수가 추가되었습니다. #16337 (Maksim Kita).
  • max_concurrent_queries_for_all_users 설정이 추가되었습니다. 사용 사례는 #6636을 참조하십시오. #16154 (nvartolomei).
  • clickhouse-client에 새 옵션 print_query_id를 추가했습니다. 이 옵션을 사용하면 클라이언트가 생성한 현재 쿼리 ID를 포함한 임의의 문자열을 생성할 수 있습니다. 또한 기본적으로 clickhouse-client에서 쿼리 ID를 출력합니다. #15809 (Amos Bird).
  • tidlogTrace 함수를 추가했습니다. 이 변경으로 #9434가 해결되었습니다. #15803 (flynn).
  • 시간 차이를 사람이 읽기 쉬운 문자열로 포맷하는 formatReadableTimeDelta 함수를 추가했습니다 … #15497 (Filipe Caixeta).
  • 멀티 디스크 구성에서 볼륨에 disable_merges 옵션이 추가되었습니다. #13956 (Vladimir Chebotarev).

실험적 기능

  • 새로운 함수 encrypt, aes_encrypt_mysql, decrypt, aes_decrypt_mysql가 추가되었습니다. 이 함수들은 처리 속도가 느려 실험적 기능으로 간주합니다. #11844 (Vasily Nemkov).

버그 수정

  • system.distribution_queue의 data_path에 있는 비밀번호를 마스킹합니다. #16727 (Azat Khuzhin).
  • transform_null_in 설정이 활성화된 상태에서 여러 컬럼과 튜플에 대한 IN 연산자를 수정했습니다. #15310을 해결했습니다. #16722 (Anton Popov).
  • 조회한 table에 샘플링이 없을 경우 설정 max_parallel_replicas가 올바르게 동작하지 않던 문제를 수정했습니다. 이로써 #5733를 해결했습니다. #16675 (alexey-milovidov).
  • max_threads > 0이고 ORDER BY에 표현식이 포함된 경우 optimize_read_in_order/optimize_aggregation_in_order 관련 문제를 수정했습니다. #16637 (Azat Khuzhin).
  • DEFAULT 표현식을 계산하는 과정에서 이름 충돌이 발생할 가능성이 있었습니다(실제로는 발생할 가능성이 매우 낮았습니다). 이로써 #9359가 수정되었습니다. #16612 (alexey-milovidov).
  • query_thread_log.query_duration_ms의 단위를 수정했습니다. #16563 (Azat Khuzhin).
  • MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine 사용 시 발생하던 버그를 수정했습니다. MaterializeMySQL은 실험적 기능입니다. #16504 (TCeason).
  • Decimal에 대해 특별히 조작된 round 함수 인수로 인해 정수를 0으로 나누는 문제가 발생할 수 있었습니다. 이 변경으로 #13338이 수정되었습니다. #16451 (alexey-milovidov).
  • 분산 테이블의 DROP TABLE 수정(INSERT와 경쟁 상태 발생). #16409 (Azat Khuzhin).
  • 복제 큐에서 매우 큰 항목을 처리할 때 발생하던 문제를 수정했습니다. 테이블 구조가 극도로 큰 경우(1 MB에 가까운 경우) ALTER 쿼리에서 매우 큰 항목이 나타날 수 있습니다. 이 수정은 #16307을 해결합니다. #16332 (alexey-milovidov).
  • 필터링용 Set이 생성되지 않았을 때 반환 데이터의 일부가 삭제될 수 있던 비일관적 동작을 수정했습니다. #16308 (Nikita Mikhaylov).
  • sharding_key(및 함수 컨텍스트가 영구적으로 저장되는 유사한 위치)에서 dictGet 문제를 수정했습니다. #16205 (Azat Khuzhin).
  • clickhouse-local에서 OPTIMIZE 명령을 실행하려고 할 때 발생하던 Exception을 수정했습니다. #16076 수정 사항입니다. #16192 (filimonov).
  • #15780의 회귀 문제를 수정했습니다. 예를 들어 indexOf([1, 2, 3], toLowCardinality(1))는 이제 금지되지만, 원래는 금지되면 안 됩니다. #16038 (Mike).
  • MySQL 데이터베이스 관련 버그를 수정했습니다. 데이터베이스 엔진으로 사용되는 MySQL server가 다운되면, 일부 쿼리는 비활성화된 server에서 불필요하게 table을 가져오려고 시도하면서 Exception을 발생시켰습니다. 예를 들어, SELECT ... FROM system.parts 쿼리는 MergeTree table에만 적용되어야 하며 MySQL 데이터베이스는 전혀 건드리지 않아야 합니다. #16032 (Kruglov Pavel).
  • 이제 ALTER MODIFY COLUMN ... DEFAULT ...에서 기본값이 컬럼 유형과 호환되지 않으면 예외가 발생합니다. #15854를 수정했습니다. #15858 (alesapin).
  • IPv4CIDRToRange/IPv6CIDRToRange 함수가 const IP 컬럼 값도 허용하도록 수정되었습니다. #15856 (vladimir-golovchenko).

개선 사항

  • Postgres 및 유사한 시스템과의 호환성을 위해 INTERVAL '1 hour'INTERVAL 1 HOUR와 동일한 것으로 간주합니다. 이 변경으로 #15637 문제가 수정되었습니다. #15978 (flynn).
  • CSV, TSV 및 JSON 입력 형식에서 enum 값을 숫자 ID를 기준으로 파싱할 수 있도록 했습니다. #15685 (vivarum).
  • JBOD 아키텍처 및 MergeTree 스토리지에서 읽기 작업 스케줄링이 개선되었습니다. 읽기 스레드 수의 최솟값으로 작동하는 새로운 설정 read_backoff_min_concurrency가 추가되었습니다. #16423 (Amos Bird).
  • Avro 포맷에서 빠져 있던 LowCardinality 지원을 추가했습니다. #16521 (Mike).
  • 프록시로 nginx 서버와 함께 S3를 사용할 때의 우회 방법입니다. 현재 Nginx는 http://domain.com?delete처럼 빈 경로가 있는 URL을 허용하지 않지만, 기본 aws-sdk-cpp는 이런 종류의 URL을 생성합니다. 이 커밋에서는 패치된 aws-sdk-cpp 버전을 사용하여, 이런 경우 http://domain.com/?delete처럼 경로에 ”/“가 포함된 URL을 생성합니다. #16814 (ianton-ru).
  • 입력 데이터 파싱 오류에 대한 진단이 개선되었습니다. Cannot read all data 오류 발생 시 행 번호를 제공합니다. #16644 (alexey-milovidov).
  • minMapmaxMap의 동작을 더 바람직하게 개선했습니다. 이제 결과에서 0 값을 건너뛰지 않습니다. #16087을 수정했습니다. #16631 (Ildus Kurbangaliev).
  • 런타임에서 ZooKeeper 구성을 업데이트하는 방식이 개선되었습니다. #16630 (sundyli).
  • SETTINGS 절을 가능한 한 일찍 적용합니다. 이렇게 하면 쿼리에서 더 많은 설정을 변경할 수 있습니다. 이로써 #3178가 해결됩니다. #16619 (alexey-milovidov).
  • 이제 event_time_microseconds 필드는 UInt64가 아니라 Decimal64 형식으로 저장됩니다. #16617 (Nikita Mikhaylov).
  • 이제 APPLY 컬럼 변환기에서 매개변수가 있는 함수를 사용할 수 있습니다. #16589 (Amos Bird).
  • Atomic 데이터베이스에서 삭제된 테이블의 데이터를 제거하는 백그라운드 작업의 스케줄링을 개선했습니다. Atomic 데이터베이스는 테이블에 실제 데이터 디렉터리가 없는 경우 테이블 데이터 디렉터리에 대한 끊어진 심볼릭 링크를 생성하지 않습니다. #16584 (tavplubix).
  • WITH 섹션의 서브쿼리(CTE)에서는 이름으로 WITH 섹션의 앞선 서브쿼리를 참조할 수 있습니다. #16575 (Amos Bird).
  • system.query_thread_log에 current_database를 추가했습니다. #16558 (Azat Khuzhin).
  • 현재 인스턴스에서 이미 커밋되었거나 오래된 파트를 분리된 디렉터리로 가져올 수 있도록 허용합니다. 이는 다른 클러스터에서 테이블을 마이그레이션할 때 N대1 세그먼트 매핑이 있는 경우 유용합니다. 또한 현재 fetchPartition 구현과도 일관됩니다. #16538 (Amos Bird).
  • RabbitMQ 관련 개선 사항이 여러 가지 적용되었습니다. #16263의 버그를 수정했습니다. 또한 이벤트 루프의 유지 시간을 줄였습니다. 더 효율적인 큐 설정을 추가했습니다. #16426 (Kseniia Sumarokova).
  • quantileDeterministic 함수의 디버그 assertion을 수정했습니다. 이전 버전에서는 버그는 없었지만 네트워크를 통해 최대 2배 많은 데이터를 전송할 수 있었습니다. 이 변경으로 #15683가 수정됩니다. #16410 (alexey-milovidov).
  • TablesToDropQueueSize 메트릭을 추가했습니다. 이 값은 백그라운드 데이터 삭제를 대기 중인 삭제된 테이블 수와 같습니다. #16364 (tavplubix).
  • 클라이언트 connection이 끊어졌을 때 진단 정보가 개선되었습니다. 이전 버전에서는 서버에 Attempt to read after EOFBroken pipe Exception이 기록되었습니다. 새 버전에서는 Client has dropped the connection, cancel the query.라는 정보 메시지가 표시됩니다. #16329 (alexey-milovidov).
  • Set/Join 테이블 엔진에 system.tables의 total_rows/total_bytes 지원을 추가했습니다. #16306 (Azat Khuzhin).
  • 이제 MergeTree 테이블 엔진 계열에서 ORDER BY 없이 PRIMARY KEY를 지정할 수 있습니다. #15591을 해결했습니다. #16284 (alesapin).
  • 시스템에 tmp 폴더가 없을 경우(chroot, 잘못된 설정 등) clickhouse-local은 현재 디렉터리에 임시 하위 폴더를 생성합니다. #16280 (filimonov).
  • 중첩 데이터 타입(named tuple 등)에 하위 타입으로서의 지원을 추가했습니다. #15587를 수정했습니다. #16262 (Ivan).
  • DROP DATABASE에서 database_atomic_wait_for_drop_and_detach_synchronously/NO DELAY/SYNC를 지원합니다. #16127 (Azat Khuzhin).
  • allow_nondeterministic_optimize_skip_unused_shards를 추가했습니다(세그먼트 분할 키에서 rand() 또는 dictGet()과 같은 비결정적 함수를 허용하기 위해). #16105 (Azat Khuzhin).
  • HTTP를 통한 쿼리의 memory_profiler_step/max_untracked_memory를 수정했습니다(테스트 포함). 또한 xml 구성에서 이 값을 전역으로 조정해도 효과가 없는 문제를 수정했습니다. 해당 설정은 실제로 적용되지 않으며, 기본값(4MB)만 사용됩니다. 아울러 query_id를 읽은 후 QueryScope를 초기화하도록 하여 HTTP 쿼리의 최상위 ThreadStatus에 대한 query_id도 수정했습니다. #16101 (Azat Khuzhin).
  • 이제 클러스터 구성에서 <internal_replication> 설정과 무관하게 ALTER ... ON CLUSTER 쿼리를 실행할 수 있습니다. #16075 (alesapin).
  • clickhouse-client가 종료 시 제안을 로드하는 과정에서 드물게 비정상 종료될 수 있는 문제를 수정했습니다. 이 수정으로 #16035이 해결됩니다. #16047 (alexey-milovidov).
  • Redis 딕셔너리에서 복합 키에 대한 cache layout 지원을 추가했습니다. #15985 (Anton Popov).
  • 잘못된 구성(connections_with_failover_max_tries를 0으로 설정한 경우)에서 쿼리가 멈추는 문제(무한 루프)를 수정했습니다. #15876 (Azat Khuzhin).
  • 일부 로그 메시지의 레벨을 정보에서 디버그로 낮춰, 모든 쿼리마다 정보 메시지가 표시되지 않도록 했습니다. 이로써 #5293이 해결되었습니다. #15816 (alexey-milovidov).
  • 오해의 소지가 있는 결과를 방지하기 위해 MemoryTrackingInBackground* 메트릭을 제거했습니다. 이 변경으로 #15684가 수정되었습니다. #15813 (alexey-milovidov).
  • zookeeper-dump-tree 도구에 재연결 기능을 추가했습니다. #15711 (alexey-milovidov).
  • CREATE TABLE table AS table_function(...) 쿼리에서 컬럼 목록을 명시적으로 지정할 수 있게 했습니다. #9249 수정. #14214 수정. #14295 (tavplubix).

성능 개선

  • SELECT FINAL에서 파티션 간 파트 머지를 수행하지 않습니다. #15938 (Kruglov Pavel).
  • -OrNull-OrDefault 집계 함수의 성능을 개선했습니다. #16661 (alexey-milovidov).
  • quantileMerge의 성능을 개선했습니다. 이전 버전에서는 지나치게 느렸습니다. 이 변경으로 #1463이 해결되었습니다. #16643 (alexey-milovidov).
  • 논리 함수의 성능을 소폭 개선했습니다. #16347 (alexey-milovidov).
  • MergeTree 테이블 엔진에서 머지 할당 성능을 개선했습니다. 사용자에게는 눈에 띄지 않는 변경입니다. #16191 (alesapin).
  • 해시 테이블을 미리 할당해 hashed/sparse_hashed 딕셔너리 로딩 속도를 높였습니다. #15454 (Azat Khuzhin).
  • 이제 단순한 count 최적화가 약간 더 정교해졌습니다. 정확한 파티션 expr를 포함하는 프레디케이트도 최적화할 수 있습니다. 또한 max_parallel_replicas > 1일 때 잘못된 count를 반환하던 #11092도 수정했습니다. #15074 (Amos Bird).

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

  • stateless tests에 flaky check를 추가했습니다. 머지되기 전에 잠재적으로 flaky한 기능 테스트를 사전에 감지합니다. #16238 (alesapin).
  • amalgamation 대신 croaring의 올바른 버전을 사용하도록 했습니다. #16285 (sundyli).
  • ya.make 빌드 시스템(Arcadia)의 빌드 파일 생성 기능을 개선했습니다. #16700 (alexey-milovidov).
  • MaterializeMySQL 데이터베이스 엔진용 MySQL BinLog 파일 점검 도구를 추가했습니다. MaterializeMySQL은 실험적 기능입니다. #16223 (Winter Zhang).
  • 실행형이 아닌 파일에 실행 비트가 설정되어 있는지 점검합니다. Windows에서 실행 파일이 실수로 커밋되는 경우가 자주 있습니다. #15843 (alexey-milovidov).
  • 헤더에 #pragma once가 있는지 점검합니다. #15818 (alexey-milovidov).
  • libhdfs3의 잘못된 코드 스타일 &vector[idx]를 수정했습니다. 이로써 libcxx 디버그 빌드 문제가 해결됩니다. 관련 항목: https://github.com/ClickHouse-Extras/libhdfs3/pull/8 . #15815 (Amos Bird).
  • Mac OS에서 기타 예시 도구 하나의 빌드 문제를 수정했습니다. 참고로 당사 CI에서는 Mac OS에서 예시를 빌드하지 않고(ClickHouse binary만 빌드함), 따라서 다시 깨질 가능성이 전혀 없다고 할 수는 없습니다. 이 변경으로 #15804가 해결됩니다. #15808 (alexey-milovidov).
  • Sys/V init 스크립트를 단순화했습니다. #14135 (alexey-milovidov).
  • db_generator의 사용성을 높이기 위해 boost::program_options를 추가했습니다. 이로써 #15940가 해결됩니다. #15973 (Nikita Mikhaylov).

ClickHouse 릴리스 20.10

ClickHouse 릴리스 v20.10.7.4-안정, 2020-12-24

버그 수정

  • 이중 IPv4/IPv6 스택을 사용하는 머신에서 서버가 clickhouse-odbc-bridge 프로세스에 연결할 수 없던 문제를 수정했으며, 잘못된 형식의 쿼리를 사용해 ODBC 딕셔너리 업데이트를 수행할 때 발생하던 문제 및/또는 충돌을 유발하던 문제도 수정했습니다. 이 변경으로 #14489가 해결되었을 가능성이 있습니다. #18278 (Denis Glazachev).
  • Enum과 Int 타입 간 key 비교를 수정했습니다. 이로써 #17989가 해결되었습니다. #18214 (Amos Bird).
  • MaterializeMySQL 데이터베이스 엔진에서 고유 키를 변환할 때 발생하던 충돌을 수정했습니다. 이로써 #18186#16372가 해결되었습니다. #18211 (Winter Zhang).
  • S3 URL 파싱 중 발생하던 std::out_of_range: basic_string 문제가 수정되었습니다. #18059 (Vladimir Chebotarev).
  • MaterializeMySQL에서 MySQL의 prefix index 변환을 지원하지 않아 일부 테이블이 MySQL에서 ClickHouse로 동기화되지 않던 문제를 수정했습니다. 이 수정으로 #15187#17912가 해결됩니다. #17944 (Winter Zhang).
  • topK 집계 함수에서 발생할 수 있는 segfault를 수정했습니다. 이로써 #17404를 해결했습니다. #17845 (Maksim Kita).
  • in_memory_parts_enable_wal이 비활성화되어 있으면 WAL에서 파트를 복원하지 않습니다. #17802 (detailyang).
  • ClickHouse가 MySQL 서버와의 연결을 다시 복구하지 못하던 문제를 수정했습니다. #17681 (Alexander Kazakov).
  • server가 데몬 모드로 실행 중일 때 system.stack_trace table이 비어 있던 문제를 수정했습니다. #17630 (Amos Bird).
  • clickhouse-client를 interactive mode에서 여러 줄 쿼리와 함께 사용할 때 단일 행 주석이 잘못 쿼리 끝까지 확장되던 문제를 수정했습니다. 이 수정으로 #13654가 해결됩니다. #17565 (alexey-milovidov).
  • 매우 드문 경우에 서버가 연결을 더 이상 수락하지 않을 수 있던 문제가 수정되었습니다. #17542 (alexey-milovidov).
  • 다른 레플리카에서 해당 mutation이 강제 종료되었을 때 ALTER 쿼리가 멈추는 문제를 수정했습니다. 이로써 #16953 문제가 해결되었습니다. #17499 (alesapin).
  • ClickHouse가 마크 캐시 크기를 실제보다 작게 추정하던 버그를 수정했습니다. 이 문제는 마크가 있는 아주 작은 파일이 많이 있을 때 발생할 수 있습니다. #17496 (alesapin).
  • 설정 optimize_redundant_functions_in_order_by가 활성화된 경우의 ORDER BY 문제를 수정했습니다. #17471 (Anton Popov).
  • 잘못된 최적화 때문에 발생할 수 있었던 DISTINCT 이후 중복을 수정했습니다. 이로써 #17294가 해결되었습니다. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • LowCardinality 타입의 JOIN 테이블을 읽는 중 발생하던 충돌을 수정했습니다. 이로써 #17228 문제가 해결되었습니다. #17397 (Nikolai Kochetov).
  • 서브쿼리에 const 컬럼이 있을 때 Set 인덱스 무효화가 잘못되던 문제를 수정했습니다. 이로써 #17246가 해결됩니다. #17249 (Amos Bird).
  • 충돌을 유발하는 ColumnConst 비교를 수정했습니다. 이 수정으로 #17088 문제가 해결되었습니다. #17135 (Amos Bird).
  • 리더가 아닌 ReplicatedMergeTreeTables에서 ON CLUSTER 쿼리가 무한정 대기 상태에 빠질 수 있던 버그를 수정했습니다. #17089 (alesapin).
  • 함수 fuzzBits에서 퍼저가 찾아낸 버그를 수정했습니다. 이로써 #16980 문제가 해결됩니다. #17051 (hexiaoting).
  • 실행 중 취소될 수 있는 LIMIT 같은 원격 쿼리에서 불필요한 네트워크 오류를 방지했습니다. #17006 (Azat Khuzhin).
  • double에서 캐스팅할 때 큰 정수(128비트, 256비트)에서 잘못된 결과가 나오던 문제를 수정했습니다. #16986 (Mike).
  • 오류 발생 시 format_avro_schema_registry_url의 IP를 다시 조회합니다. #16985 (filimonov).
  • SELECT에 변경 중인 컬럼에 대한 WHERE 표현식이 있고 ALTER가 아직 완료되지 않았을 때, ALTER TABLE ... MODIFY COLUMN ... NewType 이후 발생할 수 있는 서버 충돌 문제를 수정했습니다. #16968 (Amos Bird).
  • clickhouse-git-import에서 blame 정보가 올바르게 계산되지 않는 문제가 있었습니다. #16959 (alexey-milovidov).
  • 단조 함수에 대한 ORDER BY 최적화를 수정했습니다. 이 변경으로 #16107이 해결되었습니다. #16956 (Anton Popov).
  • optimize_aggregators_of_group_by_keys 설정이 활성화된 상태에서 group by 및 조인 최적화 문제를 수정했습니다. 이로써 #12604 문제가 해결되었습니다. #16951 (Anton Popov).
  • 설치 스크립트는 항상 config 폴더에 하위 디렉터리를 생성해야 합니다. 이는 사용자 지정 config를 사용하는 Docker build에만 해당됩니다. #16936 (filimonov).
  • ORDER BY가 있는 쿼리에서 발생할 수 있는 Illegal type of argument 오류를 수정했습니다. 이로써 #16580를 해결합니다. #16928 (Nikolai Kochetov).
  • 데이터가 WriteBufferFromS3에 전혀 기록되지 않은 경우 멀티파트 업로드를 중단합니다. #16840 (Pavel Kovalenko).
  • 인수 없이 any를 사용할 때 발생하던 충돌을 수정했습니다. 이로써 #16803 문제가 해결되었습니다. #16826 (Amos Bird).
  • MySQL 프로토콜을 통한 INSERT 쿼리에서, ClickHouse가 영향받은 행 수를 반환하지 않고 항상 0을 반환하던 동작을 수정했습니다. 이로써 #16605 문제가 해결됩니다. #16715 (Winter Zhang).
  • TDigest의 비정상적인 증가 문제를 수정했습니다. #16680 (hrissan).
  • 집계 함수에서 접미사 if를 사용할 때 발생하던 원격 쿼리 실패 문제를 수정했습니다. 이 수정으로 #16574, #16231 문제가 해결되었습니다 #16610 (Winter Zhang).

ClickHouse 릴리스 v20.10.4.1-안정, 2020-11-13

버그 수정

  • 쿼리 프로파일러가 켜져 있고, 일부 함수의 비동기 언와인드 테이블이 (추정상) 깨진 glibc 버전을 사용하는 OS에 ClickHouse가 설치된 경우 드물게 아무런 메시지 없이 크래시가 발생하던 문제를 수정했습니다. 이 수정으로 #15301#13098이 해결됩니다. #16846 (alexey-milovidov).
  • transform_null_in 설정이 활성화된 상태에서 여러 컬럼과 튜플에 대한 IN 연산자 처리 문제를 수정했습니다. #15310을 해결합니다. #16722 (Anton Popov).
  • max_threads>0이고 ORDER BY에 표현식이 있는 경우 optimize_read_in_order/optimize_aggregation_in_order 문제를 수정합니다. #16637 (Azat Khuzhin).
  • 이제 입력에서 AVRO를 파싱할 때 타입에서 LowCardinality가 제거됩니다. #16188을 해결합니다. #16521 (Mike).
  • MySQL Slave에서 slave_parallel_worker가 활성화된 상태로 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine을 사용할 때, GTID 집합을 올바르게 축소해 메타데이터가 빠르게 증가하던 문제를 수정했습니다. 이 수정은 #15951을 해결합니다. #16504 (TCeason).
  • 분산에 대한 DROP TABLE 문제를 수정했습니다(INSERT와 경합 가능). #16409 (Azat Khuzhin).
  • 복제 큐의 매우 큰 항목 처리 문제를 수정했습니다. 테이블 구조가 매우 큰 경우(1 MB에 근접) ALTER 쿼리에서 이런 큰 항목이 나타날 수 있습니다. 이 수정은 #16307을 해결합니다. #16332 (alexey-milovidov).
  • MySQL 데이터베이스 관련 버그를 수정했습니다. 데이터베이스 엔진으로 사용되는 MySQL server가 중단되면, 불필요하게 비활성화된 server에서 테이블을 가져오려고 시도해 일부 쿼리에서 Exception이 발생했습니다. 예를 들어 SELECT ... FROM system.parts 쿼리는 MergeTree 테이블에 대해서만 동작해야 하며 MySQL 데이터베이스는 전혀 건드리지 않아야 합니다. #16032 (Kruglov Pavel).

개선 사항

  • 프록시로 nginx 서버를 사용하는 환경에서 S3를 사용할 때 적용할 수 있는 우회 방법입니다. 현재 Nginx는 http://domain.com?delete처럼 빈 경로가 있는 URL을 허용하지 않지만, 기본 aws-sdk-cpp는 이런 형태의 URL을 생성합니다. 이 커밋에서는 이러한 경우 http://domain.com/?delete처럼 경로를 ”/“로 지정한 URL을 생성하도록 패치된 aws-sdk-cpp 버전을 사용합니다. #16813 (ianton-ru).

ClickHouse 릴리스 v20.10.3.30, 2020-10-28

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

  • multiple_joins_rewriter_version을 더 이상 사용하지 않도록 했습니다. 조인 재작성기의 첫 번째 버전을 제거했습니다. #15472 (Artem Zuikov).
  • 사용자 기대에 더 부합하는 동작을 위해 format_regexp_escaping_rule 설정(Regexp 포맷 관련)의 기본값을 Raw로 변경했습니다(즉, 전체 하위 패턴을 하나의 값으로 읽습니다). #15426 (alexey-milovidov).
  • SQL에서 중첩된 여러 줄 주석 /* comment /* comment */ */을 지원하도록 추가했습니다. 이는 SQL 표준을 준수합니다. #14655 (alexey-milovidov).
  • 백그라운드 풀(background pool)과 복제 큐에서 TTL이 있는 머지 수를 제어하기 위한 MergeTree 설정(max_replicated_merges_with_ttl_in_queuemax_number_of_merges_with_ttl_in_pool)을 추가했습니다. 이 변경은 delete TTL을 사용하는 경우에만 이전 버전과의 호환성을 깨뜨립니다. 그 외에는 복제가 계속 호환됩니다. 모든 세그먼트의 레플리카를 한 번에 업데이트하거나, 모든 레플리카 업데이트를 완료할 때까지 SYSTEM STOP TTL MERGES를 실행하면 비호환성 문제를 피할 수 있습니다. 복제 큐에 호환되지 않는 항목이 생기면 먼저 SYSTEM STOP TTL MERGES를 실행한 다음, 호환되지 않는 TTL 머지가 할당된 파티션에 대해 ALTER TABLE ... DETACH PARTITION ...를 실행하십시오. 이후 해당 파티션을 단일 레플리카에 다시 ATTACH하십시오. #14490 (alesapin).
  • 20.5보다 오래된 버전에서 업그레이드할 때 롤링 업데이트를 수행하고, cluster에 20.5 이상 버전과 20.5 미만 버전이 함께 포함되어 있는 상태에서 이전 버전의 ClickHouse 노드를 재시작하면, 더 최신 버전이 존재하는 환경에서 이전 버전이 시작되면서 Part ... intersects previous part 오류가 발생할 수 있습니다. 이 오류를 방지하려면 먼저 모든 cluster 노드에 새 clickhouse-server 패키지를 설치한 다음 재시작하십시오(즉, clickhouse-server가 재시작될 때 새 버전으로 시작되도록 해야 합니다).

새 기능

  • 백그라운드에서 데이터 재압축. MergeTree 테이블 엔진 계열에서 TTL ... RECOMPRESS codec_name을 지정할 수 있는 기능이 추가되었습니다. #14494 (alesapin).
  • 병렬 quorum 삽입 기능을 추가했습니다. 이로써 #15601이 해결되었습니다. #15601 (Latysheva Alexandra).
  • 데이터 내구성을 더 엄격하게 보장하기 위한 설정입니다. 비복제 구성에서 유용합니다. #11948 (Anton Popov).
  • 중복 block이 로컬에 없는 레플리카(다른 레플리카에서 아직 가져오지 않은 상태)에 기록될 경우, 이를 무시하지 않고 로컬에도 기록하여 성공적으로 복제된 경우와 동일한 효과를 내도록 했습니다. #11684 (alexey-milovidov).
  • 이제 쿼리 Context에서 이름이 있는 서브쿼리를 도입하는 WITH <identifier> AS (subquery) ... 를 지원합니다. 이로써 #2416이 해결되었습니다. 이로써 #4967이 해결되었습니다. #14771 (Amos Bird).
  • 첫 번째 select의 WITH SQL 문을 동일한 수준의 다른 select 쿼리에도 전파하고, WITH SQL 문의 별칭을 서브쿼리에서도 사용할 수 있게 하는 enable_global_with_statement 설정을 도입했습니다. #15451 (Amos Bird).
  • 클러스터 간 쿼리 실행을 안전하게 수행합니다(initial_user를 현재 쿼리 사용자로 사용). #13156 (Azat Khuzhin). #15551 (Azat Khuzhin).
  • 컬럼 속성과 테이블 TTL을 제거할 수 있는 기능이 추가되었습니다. ALTER TABLE MODIFY COLUMN col_name REMOVE what_to_removeALTER TABLE REMOVE TTL 쿼리가 도입되었습니다. 두 작업 모두 가볍고 메타데이터 수준에서 실행됩니다. #14742 (alesapin).
  • 포맷 RawBLOB이 추가되었습니다. 이 포맷은 이스케이프나 구분 기호 없이 단일 값을 입력하거나 출력하는 데 사용됩니다. 이로써 #15349가 해결되었습니다. #15364 (alexey-milovidov).
  • big-endian 바이트 문자열을 UUID로 변환할 수 있는 reinterpretAsUUID 함수를 추가했습니다. #15480 (Alexander Kuzmenkov).
  • force_data_skipping_indices 설정을 추가했습니다. #15642 (Azat Khuzhin).
  • Pretty 형식에서 결과 행에 번호를 매길 수 있도록 output_format_pretty_row_numbers 설정을 추가했습니다. 이로써 #15350이 해결되었습니다. #15443 (flynn).
  • 쿼리 난독화 도구를 추가했습니다. 이 도구를 사용하면 더 나은 테스트를 위해 더 많은 쿼리를 공유할 수 있습니다. 이로써 #15268을 해결했습니다. #15321 (alexey-milovidov).
  • 테이블 함수 null('structure')를 추가했습니다. #14797 (vxider).
  • formatReadableQuantity 함수를 추가했습니다. 사람이 큰 숫자를 더 쉽게 읽을 수 있게 해 주는 데 유용합니다. #14725 (Artem Hnilov).
  • 줄바꿈으로 구분된 여러 줄 시퀀스를 허용하는 포맷 LineAsString을 추가했습니다. 각 줄 전체를 하나의 String 필드로 파싱합니다. #14703 (Nikita Mikhaylov), #13846 (hexiaoting).
  • 문자열 배열 형태로 데이터를 출력하는 JSONStrings 포맷을 추가했습니다. #14333 (hcz).
  • Regexp 포맷에 “Raw” 컬럼 포맷 지원이 추가되었습니다. 이를 통해 이스케이프 규칙 없이 하위 패턴 전체를 그대로 간단히 추출할 수 있습니다. #15363 (alexey-milovidov).
  • TSV 출력 형식에서 NULL 표현을 구성 가능하도록 했습니다. 기본값은 \N이며, 설정 output_format_tsv_null_representation으로 제어합니다. 이 변경으로 #9375가 해결되었습니다. 이 설정은 출력 형식에만 적용되며, TSV 입력 형식에서 지원되는 NULL 표현은 \N뿐입니다. #14586 (Kruglov Pavel).
  • MaterializeMySQL에서 Decimal 데이터 타입을 지원합니다. MaterializeMySQL은 실험적 기능입니다. #14535 (Winter Zhang).
  • 새로운 기능 추가: SHOW DATABASES LIKE 'xxx'. #14521 (hexiaoting).
  • 임의의 git 리포지토리를 샘플 데이터셋으로 ClickHouse에 가져오는 스크립트가 추가되었습니다. #14471 (alexey-milovidov).
  • 이제 삽입 SQL 문에서 컬럼 목록에 컬럼 변환기와 함께 별표(또는 그 변형)를 사용할 수 있습니다. #14453 (Amos Bird).
  • 리프 노드에서 읽는 최대 행 수/바이트 수를 제한하기 위한 분산 쿼리용 새 쿼리 복잡도 제한 설정 max_rows_to_read_leaf, max_bytes_to_read_leaf가 추가되었습니다. 이 제한은 루트 노드의 최종 머지 단계를 제외하고 로컬 읽기에만 적용됩니다. #14221 (Roman Khavronenko).
  • 사용자가 구성 파일의 <replicated_merge_tree> 섹션에서 ReplicatedMergeTree* 스토리지에 대한 설정을 지정할 수 있도록 했습니다. 이는 <merge_tree> 섹션과 비슷하게 동작합니다. ReplicatedMergeTree* 스토리지에는 <merge_tree><replicated_merge_tree>의 설정이 함께 적용되지만, <replicated_merge_tree>의 설정이 더 높은 우선순위를 가집니다. system.replicated_merge_tree_settings 테이블을 추가했습니다. #13573 (Amos Bird).
  • mapPopulateSeries 함수가 추가됨. #13166 (Ildus Kurbangaliev).
  • MySQL 타입을 지원합니다: decimal(ClickHouse의 Decimal로), 그리고 초 미만 정밀도를 지원하는 datetime(DateTime64로). #11512 (Vasily Nemkov).
  • system.text_log, system.trace_log, system.query_log, system.query_thread_log 테이블에 event_time_microseconds 필드가 추가되었습니다. #14760 (Bharat Nallan).
  • system.asynchronous_metric_logsystem.metric_log 테이블에 event_time_microseconds를 추가했습니다. #14514 (Bharat Nallan).
  • system.query_logsystem.query_thread_log 테이블에 query_start_time_microseconds 필드를 추가했습니다. #14252 (Bharat Nallan).

버그 수정

  • 제한과 상관없이 메모리가 한도를 초과해 할당될 수 있는 문제를 수정했습니다. 이로써 #14560이 해결되었습니다. #16206 (alexey-milovidov).
  • executable 딕셔너리 소스의 멈춤 현상을 수정했습니다. 이전 버전에서는 일부 포맷(예: JSONEachRow)을 사용할 때 자식 프로세스가 최소한 어떤 출력이라도 내기 전까지는 데이터가 자식 프로세스에 전달되지 않았습니다. 이 변경으로 #1697이 해결되었습니다. 이 변경으로 #2455가 해결되었습니다. #14525 (alexey-milovidov).
  • 함수 dictGet에서 예외가 발생할 때 발생할 수 있는 이중 해제 문제를 수정했습니다. 딕셔너리가 오류 상태로 로드된 경우 이러한 문제가 발생할 수 있었습니다. #16429 (Nikolai Kochetov).
  • 합계/롤업/cube 수정자 및 group by 키에 대한 min/max 함수를 사용하는 group by 관련 문제를 수정했습니다. #16393를 수정합니다. #16397 (Anton Popov).
  • prefer_localhost_replica=0 및 internal_replication 사용 시 비동기 분산 INSERT 문제를 수정했습니다. #16358 (Azat Khuzhin).
  • 메모리 누수로 이어질 수 있는 TwoLevelStringHashTable 구현의 심각한 오류를 수정했습니다. #16264 (Amos Bird).
  • 람다에서 집계가 잘못되는 일부 경우에 발생하던 세그폴트를 수정했습니다. #16082 (Anton Popov).
  • ReplicatedVersionedCollapsingMergeTreeALTER MODIFY ... ORDER BY 쿼리가 멈추는 문제를 수정했습니다. 이 수정으로 #15980 문제가 해결됩니다. #16011 (alesapin).
  • MaterializeMySQL (실험적 기능): collate 이름과 charset 이름 parser를 수정하고 String type에서 length = 0을 지원합니다. #16008 (Winter Zhang).
  • 복합 키를 사용하는 딕셔너리에서 direct 레이아웃을 사용할 수 있게 했습니다. #16007 (Anton Popov).
  • 비활성 상태가 일정 기간 이어진 뒤 복제 오류가 발생하면 레플리카가 5~10분 동안 멈추는 문제를 방지했습니다. #15987 (filimonov).
  • MaterializedView에 데이터를 삽입하거나 MaterializedView에서 조회하는 중 대상 테이블이 동시에 삭제될 때 드물게 발생하던 segfault를 수정했습니다(Atomic 데이터베이스 엔진). #15984 (tavplubix).
  • 설정 프로필 파싱의 모호성을 수정했습니다. 이제 CREATE USER ... SETTINGS profile readonly는 readonly 제약이 있는 profile 설정이 아니라, readonly라는 이름의 프로필을 사용하는 것으로 해석됩니다. 이 수정으로 #15628이 해결되었습니다. #15982 (Vitaly Baranov).
  • MaterializeMySQL (실험적 기능): 데이터베이스 생성에 실패할 때 발생하던 충돌을 수정했습니다. #15954 (Winter Zhang).
  • 테이블 이름이 동시에 변경되는 경우(Atomic 데이터베이스 엔진) DROP TABLE IF EXISTSTable ... does not exist 오류와 함께 실패하던 문제를 수정했습니다. 여러 테이블에 대한 일부 DDL 쿼리(DROP DATABASE, RENAME TABLE 등)를 동시에 실행할 때 드물게 발생하던 데드락을 수정했습니다. 또한 DROP/DETACH TABLE을 동시에 실행하는 경우 DROP/DETACH DATABASETable ... does not exist와 함께 실패하던 문제를 수정했습니다. #15934 (tavplubix).
  • WHERE, PREWHERE, GLOBAL IN이 포함된 쿼리를 Distributed 테이블에서 실행할 때 잘못 빈 결과가 반환되던 문제를 수정했습니다. #15792. #15933 (Nikolai Kochetov).
  • #12513 수정: 쿼리를 다시 분석할 때 동일한 alias를 사용하는 서로 다른 표현식 관련 문제를 수정했습니다. #15886 (Winter Zhang).
  • RBAC 구현에서 매우 드물게 발생할 수 있는 교착 상태 문제를 수정했습니다. #15875 (Vitaly Baranov).
  • ALTER MODIFY COLUMN 쿼리 후에 실행된 SELECT ... ORDER BY DESC 쿼리에서 발생하던 Block structure mismatch 오류를 수정했습니다. #15800. #15852 (alesapin).
  • MaterializeMySQL (실험적 기능): select count()의 부정확한 동작을 수정했습니다. #15767 (tavplubix).
  • 가상 컬럼만 선택하는 일부 쿼리의 경우를 수정했습니다. 이전에는 Not found column _nothing in block 예외가 발생할 수 있었습니다. #12298를 수정합니다. #15756 (Anton Popov).
  • Atomic 데이터베이스에서 내부 테이블이 있는 materialized view 삭제 시 발생하던 문제를 수정했습니다(MV의 내부 테이블에 대한 재귀적 DROP TABLE로 인해 worker thread가 멈추고, 그 결과 이후의 모든 DROP TABLE도 중단됨). #15743 (Azat Khuzhin).
  • 첫 번째 시도가 실패한 경우에도 part를 다른 디스크/볼륨으로 이동할 수 있게 했습니다. #15723 (Pavel Kovalenko).
  • MV 쿼리에 ARRAY JOIN이 포함된 경우 MATERIALIZED VIEW에 삽입할 때 발생할 수 있는 Cannot find column 오류를 수정했습니다. #15717 (Nikolai Kochetov).
  • max_replicated_logs_to_keep 설정의 기본값이 지나치게 낮았던 문제를 수정했습니다. 이 문제로 인해 레플리카가 너무 자주 유실될 수 있었습니다. 또한 유실된 레플리카의 복구 과정을 개선하여 가장 최신 상태인 레플리카를 복제 원본으로 선택하도록 했습니다. 아울러 유실된 레플리카에서 오래된 파트를 삭제하지 않고 대신 detach하도록 했습니다. #15701 (tavplubix).
  • MySQL의 Dictionaries 및 테이블에서 드물게 발생하던 경쟁 상태(race condition)를 수정했습니다. #15686 (alesapin).
  • AMQP-CPP의 (무해한) race condition 문제를 수정했습니다. #15667 (alesapin).
  • Buffer 테이블의 구조가 대상 테이블과 다른 상태에서 읽는 도중 발생하던 Cannot add simple transform to empty Pipe 오류를 수정했습니다. 이 문제는 대상 테이블이 쿼리에 대해 빈 결과를 반환할 때 발생할 수 있었습니다. #15529을 수정했습니다. #15662 (Nikolai Kochetov).
  • S3를 사용하는 MergeTree에 삽입할 때 오류 처리를 올바르게 수행하도록 개선했습니다. S3 기반 MergeTree는 실험적 기능입니다. #15657 (Pavel Kovalenko).
  • S3 테이블 함수 관련 버그를 수정했습니다. URL에서 가져온 리전이 S3 클라이언트 구성에 적용되지 않던 문제입니다. #15646 (Vladimir Chebotarev).
  • 쿼리 계획의 ReadFromStorage 단계에서 리소스 소멸 순서를 수정했습니다. 드물게 충돌이 발생하던 문제를 일으킬 수 있었습니다. #15610과 관련이 있을 가능성이 있습니다. #15645 (Nikolai Kochetov).
  • readonly 테이블을 detach할 때 ReadonlyReplica 메트릭이 감소하도록 수정했습니다. #15592 (sundyli).
  • JSON* 함수의 결과를 VALUES, LIMIT 또는 IN 연산자의 우변에서 사용할 때 발생하던 Element ... is not a constant expression 오류를 수정했습니다. #15589 (tavplubix).
  • 예외가 발생한 경우 쿼리가 더 빨리 종료됩니다. 예외 발생 시 원격 레플리카에서의 실행을 취소합니다. #15578 (Azat Khuzhin).
  • 오류 메시지 Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call가 발생하는 문제를 방지합니다. 이 수정은 #15541을 해결합니다. #15557 (alexey-milovidov).
  • initiator 노드에 데이터베이스가 없는 경우, IN 및 분산 테이블이 포함된 쿼리에서 Database <db> does not exist. 오류가 발생하던 문제를 수정했습니다. #15538 (Artem Zuikov).
  • MOVE 또는 REPLACE PARTITION 이후, 드물게는 DETACHDROP PARTITION 이후에 존재하지 않는 part를 기다리며 mutation이 멈출 수 있었습니다. 수정되었습니다. #15537 (tavplubix).
  • 동일한 패턴으로 LIKE를 실행한 뒤 ILIKE 연산자가 대소문자를 구분하게 되는 버그를 수정했습니다. #15536 (alesapin).
  • 데이터에 없는 컬럼을 선택할 때, 해당 컬럼이 역시 데이터에 없는 다른 컬럼에 의존하는 경우 발생하던 Missing columns 오류를 수정했습니다. #15530을 해결했습니다. #15532 (alesapin).
  • ReplicatedMergeTree에 매개변수 하나만 전달된 경우, 이를 무시하지 않고 오류를 발생시킵니다. #15516 (nvartolomei).
  • ON CLUSTER에서 드물게 쿼리가 멈추는 현상을 일으킬 수 있는 DDLWorker의 이벤트 구독 버그를 수정했습니다. #13450에서 도입되었습니다. #15477 (alesapin).
  • boundingRatio 집계 함수의 두 번째 인수 유형이 잘못되었을 때 적절한 오류를 보고하도록 수정했습니다. #15407 (detailyang).
  • #15365 수정: MySQL engine이 있는 데이터베이스를 ATTACH할 때 예외가 발생하던 문제(쿼리 Context 없음)를 수정했습니다. #15384 (Winter Zhang).
  • select 쿼리에서 컬럼 변환자가 여러 번 나타날 때의 대소문자 처리를 수정했습니다. #15378 (Amos Bird).
  • S3 스토리지의 압축 관련 문제를 수정했습니다. #15376 (Vladimir Chebotarev).
  • SELECT toStartOfDay(today())와 같은 쿼리가 비어 있는 time_zone 인수 오류로 실패하던 버그를 수정했습니다. #15319 (Bharat Nallan).
  • MergeTree 테이블 이름 변경 및 백그라운드 정리 중 발생하는 경쟁 상태(race condition)를 수정했습니다. #15304 (alesapin).
  • 시스템 로그가 활성화된 경우 서버 시작 시 드물게 발생하는 레이스 컨디션을 수정했습니다. #15300 (alesapin).
  • 동일한 MySQL 엔진 테이블을 참조하는 서브쿼리가 많은 경우 쿼리가 멈추는 문제를 수정했습니다. 이전에는 쿼리에서 동일한 MySQL 테이블을 참조하는 서브쿼리가 16개를 초과하면 무한 대기 상태에 빠졌습니다. #15299 (Anton Popov).
  • QueryLog의 MSan 보고 문제를 수정했습니다. 초기화되지 않은 메모리가 memory_usage 필드에 사용될 수 있습니다. #15258 (alexey-milovidov).
  • 쿼리에 Merge 테이블에 대한 JOIN이 포함된 경우 GROUP BY에서 발생하던 ‘Unknown identifier’ 문제를 수정했습니다. #15242 (Artem Zuikov).
  • LowCardinality 타입과 함께 joinGet을 사용할 때 인스턴스가 충돌하는 문제를 수정했습니다. 이로써 #15214가 해결되었습니다. #15220 (Amos Bird).
  • ALTER 쿼리 후 새 구조의 데이터를 Buffer에 삽입할 수 없던 테이블 엔진 Buffer의 버그를 수정했습니다. #15117을 해결했습니다. #15192 (alesapin).
  • MySQL 컬럼 정의 패킷의 Decimal 필드 크기를 조정했습니다. #15152 (maqroll).
  • join_algorithm='auto'에서 발생하던 Data compressed with different methods 오류를 수정했습니다. join_algorithm='partial_merge'에서 왼쪽 테이블 조인 키의 유형으로 LowCardinality가 유지되도록 했습니다. #15088 (Artem Zuikov).
  • affinity mask 관련 percpu_arena 문제를 해결하기 위해 jemalloc을 업데이트했습니다. #15035 (Azat Khuzhin). #14957 (Azat Khuzhin).
  • 이미 String과 FixedString 간 비교에는 패딩 비교를 사용하고 있습니다(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333). 이 PR은 동일한 로직을 필드 비교에도 적용하여 FixedString을 기본 키(primary key)로 사용할 때의 문제를 바로잡습니다. 이를 통해 #14908이 수정됩니다. #15033 (Amos Bird).
  • 함수 bar가 정교하게 조작된 인수로 호출될 경우 버퍼 오버플로우가 발생할 수 있었습니다. 이로써 #13926가 해결되었습니다. #15028 (alexey-milovidov).
  • Mac OS용 Docker에서 clickhouse-server를 실행할 때 Atomic 데이터베이스에서 DDL 쿼리를 실행하면 발생하던 Cannot rename ... errno: 22, strerror: Invalid argument 오류를 수정했습니다. #15024 (tavplubix).
  • 메모리 제한을 초과해 HashJoin을 MergeJoin으로 전환해야 할 때, join_algorith=‘auto’인 RIGHT 또는 FULL JOIN에서 발생하던 충돌을 수정했습니다. #15002 (Artem Zuikov).
  • 이제 number_of_free_entries_in_pool_to_execute_mutationnumber_of_free_entries_in_pool_to_lower_max_size_of_merge 설정을 background_pool_size와 같게 지정할 수 있습니다. #14975 (alesapin).
  • 서브쿼리에 finalizeAggregation 함수가 포함된 경우 프레디케이트 푸시다운이 작동하지 않던 문제를 수정했습니다. #14847을 해결합니다. #14937 (filimonov).
  • system.asynchronous_metrics에 각 논리 코어별 CPU 주파수를 추가합니다. 이 변경으로 #14923가 수정되었습니다. #14924 (Alexander Kuzmenkov).
  • MaterializeMySQL (실험적 기능): .metadata.tmp File exists 오류를 해결했습니다. #14898 (Winter Zhang).
  • extractAllGroups 함수의 일부 호출에서 “Memory limit exceeded” 오류가 발생할 수 있는 문제를 수정했습니다. 이로써 #13383가 해결됩니다. #14889 (alexey-milovidov).
  • file descriptor를 사용하는 StorageFile에 INSERT를 시도할 때 발생하던 SIGSEGV를 수정했습니다. #14887 (Azat Khuzhin).
  • cache 딕셔너리에서 발생하던 segfault를 해결했습니다 #14837. #14879 (Nikita Mikhaylov).
  • MaterializeMySQL (실험적 기능): MySQL binlog 이벤트 파싱 버그를 수정했습니다. 이 버그로 인해 MaterializeMySQL 데이터베이스 엔진에서 Attempt to read after eofPacket payload is not fully read 오류가 발생했습니다. #14852 (Winter Zhang).
  • 조회 대상 컬럼에 다른 컬럼에 의존하는 DEFAULT 표현식이 있고, 그 다른 컬럼 역시 DEFAULT를 가지며 SELECT 쿼리에 포함되지도 않고 디스크에도 존재하지 않을 때 SELECT 쿼리에서 드물게 발생하던 오류를 수정했습니다. #14531을 부분적으로 수정합니다. #14845 (alesapin).
  • 설정 파일을 ZK에서 가져와야 할 때(from_zk include 옵션 사용), 시작 중 서버가 ZooKeeper와 통신하는 과정에서 멈출 수 있는 문제를 수정했습니다. 이 수정으로 #14814 문제가 해결됩니다. #14843 (Alexander Kuzmenkov).
  • 부호 있는 타입의 축소 Int -> Int 캐스트에 대한 단조성 감지 오류를 수정했습니다. 이로 인해 쿼리 결과가 잘못될 수 있습니다. 이 버그는 #14513에서 확인되었습니다. #14783 (Amos Bird).
  • Replace 컬럼 변환기는 식별자를 복제된 AST로 대체해야 합니다. 이로써 #14695 문제가 해결됩니다. #14734 (Amos Bird).
  • ALTER ... MODIFY QUERY 실행 시 materialized view 메타데이터에서 기본 데이터베이스 이름이 누락되던 문제를 수정했습니다. #14664 (tavplubix).
  • 할당 표현식과 상수 값(예: UPDATE x = 42)에서 Nullable 컬럼을 사용하는 ALTER UPDATE mutation으로 인해 컬럼에 잘못된 값이 기록되거나 segfault가 발생하던 버그를 수정했습니다. #13634, #14045를 수정했습니다. #14646 (alesapin).
  • 결과 컬럼의 소수 자릿수(scale)가 잘못되어 발생한 Decimal 곱셈 결과 오류를 수정했습니다. #14603 (Artem Zuikov).
  • NullableLowCardinality에서 has 함수 문제를 수정했습니다. #14591 (Mike).
  • StorageReplicatedMergeTree Engine의 CreateQuery 처리 중 Zookeeper 예외가 발생한 후 데이터 디렉터리를 정리합니다. #14563 (Bharat Nallan).
  • 매우 큰 매개변수로 인해 오버플로우가 발생한 결과 combinator -Resample이 있는 함수에서 드물게 발생하던 segfault를 수정했습니다. #14562 (Anton Popov).
  • Nullable(String)를 Enum으로 변환할 때 발생하는 버그를 수정했습니다. 이 버그는 #12745에서 도입되었습니다. 이번 수정으로 #14435가 해결됩니다. #14530 (Amos Bird).
  • Nullable 컬럼의 잘못된 정렬 순서를 수정했습니다. 이로써 #14344가 해결됩니다. #14495 (Nikita Mikhaylov).
  • currentDatabase() 함수를 ON CLUSTER DDL 쿼리에서 사용할 수 없던 버그를 수정했습니다. #14211 (Winter Zhang).
  • MaterializeMySQL (실험적 기능): MaterializeMySQL 데이터베이스 엔진에서 발생하던 Packet payload is not fully read 오류를 해결했습니다. #14696 (BohuTANG).

개선 사항

  • 새로 생성되는 데이터베이스에 기본적으로 Atomic 데이터베이스 엔진을 사용하도록 설정합니다. #15003 (tavplubix).
  • 하위 타입이 있는 컬럼에 Delta, T64 등의 특수 코덱을 지정할 수 있는 기능을 추가했습니다. #12551을 구현했으며, #11397#4609을 수정했습니다. #15089 (alesapin).
  • zookeeper 설정의 동적 재로드. #14678 (sundyli).
  • 이제 클러스터 구성의 <internal_replication> 설정과 무관하게 ALTER ... ON CLUSTER 쿼리를 실행할 수 있습니다. #16075 (alesapin).
  • 이제 joinGet에서 다중 키 lookup을 지원합니다. #12418의 후속 작업입니다. #13015 (Amos Bird).
  • Atomic 데이터베이스에서 NO DELAY 또는 SYNC를 지정한 경우 DROP/DETACH TABLE이 실제로 완료될 때까지 대기하도록 변경했습니다. #15448 (tavplubix).
  • 이제 ALTER 쿼리를 사용해 VersionedCollapsingMergeTree의 버전 컬럼 유형을 변경할 수 있습니다. #15442 (alesapin).
  • 복제된 테이블(Replicated Table) 생성 시 zookeeper_path에서 {database}, {table}, {uuid} 매크로를 확장합니다. 서버 재시작 후 zookeeper_path가 손상될 수 있는 경우 RENAME TABLE을 허용하지 않습니다. #6917을 수정했습니다. #15348 (tavplubix).
  • 함수 now는 시간대 인수를 받을 수 있습니다. 이로써 15264가 해결되었습니다. #15285 (flynn).
  • /docker-entrypoint-initdb.d/의 모든 스크립트가 실행될 때까지 ClickHouse 서버에 대한 연결을 허용하지 않습니다. #15244 (Aleksei Kozharin).
  • EXPLAIN PLAN 쿼리에 optimize 설정이 추가되었습니다. 활성화하면 쿼리 실행 계획 수준의 최적화가 적용됩니다. 기본적으로 활성화되어 있습니다. #15201 (Nikolai Kochetov).
  • CAST의 인수 개수가 잘못되었을 때 표시되는 예외 메시지를 적절하게 수정했습니다. 이로써 #13992가 해결되었습니다. #15029 (alexey-milovidov).
  • 데이터 파트 삽입 시 TTL 이동을 비활성화하는 옵션이 추가되었습니다. #15000 (Pavel Kovalenko).
  • 뮤테이션을 수행할 때 키 제약 조건을 무시합니다. 이 pull request 없이는 force_index_by_date = 1 또는 force_primary_key = 1일 때 뮤테이션을 수행할 수 없습니다. #14973 (Amos Bird).
  • 이전 삭제 시도가 ZooKeeper 세션 만료로 인해 실패한 경우에도 Replicated 테이블을 삭제할 수 있도록 했습니다. 이로써 #11891 문제가 해결됩니다. #14926 (alexey-milovidov).
  • 분산 테이블에서 SETTINGS를 포함한 SELECT를 실행할 때 설정 제약 조건 위반이 과도하게 발생하던 문제를 수정했습니다. #14876 (Amos Bird).
  • 첫 번째 레플리카를 명시적으로 지정할 수 있도록 load_balancing_first_offset 쿼리 설정이 추가되었습니다. 이 설정은 FIRST_OR_RANDOM 로드 밸런싱 전략과 함께 사용되며, 레플리카의 부하를 제어할 수 있습니다. #14867 (Amos Bird).
  • EXPLAIN 결과에서 SETJOIN의 서브쿼리를 표시합니다. #14856 (Nikolai Kochetov).
  • 스토리지 Distributed에서 다중 볼륨 스토리지 구성을 사용할 수 있게 했습니다. #14839 (Pavel Kovalenko).
  • 동일한 timespec을 기반으로 query_start_timequery_start_time_microseconds를 생성합니다. #14831 (Bharat Nallan).
  • StorageJoinStorageSet에서 영속성을 비활성화하는 기능이 추가되었으며, 이 기능은 disable_set_and_join_persistency 설정으로 제어됩니다. 또한 이 PR로 이슈 #6318이 해결되었습니다. #14776 (vxider).
  • 이제 COLUMNS를 사용해 컬럼 목록을 묶은 뒤 컬럼 변환기를 적용할 수 있습니다. #14775 (Amos Bird).
  • 머지 점검 기능을 개선하기 위해 system.merges 테이블에 merge_algorithm을 추가했습니다. #14705 (Amos Bird).
  • ZooKeeper의 exists watch로 인해 발생할 수 있는 메모리 누수 문제를 수정했습니다. #14693 (hustnn).
  • 분산 DDL을 병렬로 실행할 수 있도록 허용합니다. #14684 (Azat Khuzhin).
  • QueryMemoryLimitExceeded 이벤트 카운터를 추가했습니다. 이 변경으로 #14589가 해결되었습니다. #14647 (fastio).
  • 쿼리 포맷팅의 일부 후행 공백을 수정했습니다. #14595 (Azat Khuzhin).
  • ClickHouse는 partition expr와 key expr를 서로 다르게 처리합니다. Partition expr는 관련 컬럼이 포함된 minmax 인덱스를 구성하는 데 사용되는 반면, primary key expr는 expr로 저장됩니다. 경우에 따라 사용자는 partition by i / 1000처럼 더 큰 단위로 테이블을 파티션할 수 있습니다. 하지만 binary 연산자는 단조성이 없으므로, 이 PR은 이를 해결하려고 합니다. 다른 사용 사례에도 도움이 될 수 있습니다. #14513 (Amos Bird).
  • DiskS3에 대한 액세스 검사를 건너뛸 수 있는 옵션이 추가되었습니다. s3 디스크는 실험적 기능입니다. #14497 (Pavel Kovalenko).
  • 진행 중인 S3 요청이 있는 경우 서버 종료 과정을 더 빠르게 진행합니다. #14496 (Pavel Kovalenko).
  • SYSTEM RELOAD CONFIG는 이제 다시 로드에 실패하면 예외를 발생시키며, 이전 users.xml을 계속 사용합니다. 백그라운드에서 주기적으로 수행되는 다시 로드 작업도 실패하면 이전 users.xml을 계속 사용합니다. #14492 (Vitaly Baranov).
  • clickhouse-client의 스크립트 모드에서 VALUES 형식의 인라인 데이터를 사용하는 삽입에서, 줄바꿈 외에도 세미콜론을 데이터 종료자로 지원합니다. #12288을 해결합니다. #13192 (Alexander Kuzmenkov).
  • 컴팩트 파트에서 사용자 지정 코덱을 지원합니다. #12183 (Anton Popov).

성능 개선

  • 작은 파트에서는 compact 파트를 기본적으로 활성화했습니다. 이에 따라 빈번한 삽입을 약간 더 효율적으로(4..100배) 처리할 수 있습니다. #11913 (alexey-milovidov).
  • quantileTDigest의 성능을 개선했습니다. 이로써 #2668 문제가 수정됩니다. #15542 (Kruglov Pavel).
  • AggregatingInOrderTransform/optimize_aggregation_in_order의 메모리 사용량을 크게 줄였습니다. #15543 (Azat Khuzhin).
  • 256비트 곱셈 속도를 높였습니다. #15418 (Artem Zuikov).
  • wide 정수의 기본 타입으로 uint64_t 또는 int64_t를 사용해 256비트 타입의 성능을 개선했습니다. 기존 wide 정수는 기본 타입으로 8비트 타입을 사용합니다. #14859 (Artem Zuikov).
  • 수직 병합 임시 데이터를 저장할 때 임시 디스크를 명시적으로 사용하도록 했습니다. #15639 (Grigory Pervakov).
  • 루프에서 여러 번 DeleteObject를 호출하는 대신 S3 DeleteObjects 요청 1회를 사용하도록 변경했습니다. 기능 변경은 없으므로 integration/test_log_family_s3와 같은 기존 테스트로 검증됩니다. #15238 (ianton-ru).
  • DateTime <op> DateTime이 느린 일반 구현을 잘못 선택하던 문제를 수정했습니다. 이로써 #15153 문제가 해결됩니다. #15178 (Amos Bird).
  • FixedString 타입의 GROUP BY 키 성능을 개선했습니다. #15034 (Amos Bird).
  • clickhouse-server 시작 시 코드 세그먼트에만 mlock을 적용합니다. 이전 버전에서는 디버그 정보를 포함해 매핑된 모든 영역이 메모리에 고정되었습니다. 디버그 정보는 보통 별도 파일로 분리되지만, 그렇지 않으면 메모리 사용량이 2..3 GiB 증가했습니다. #14929 (alexey-milovidov).
  • 링크 타임 최적화로 인해 ClickHouse 바이너리 크기가 더 작아졌습니다.

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

  • 이제 프로덕션용 ClickHouse 빌드에는 clang-11을 사용합니다. #15239 (alesapin).
  • 이제 CI에서 ClickHouse를 빌드할 때 clang-11을 사용합니다. #14846 (alesapin).
  • 바이너리 빌드(Linux, Darwin, AArch64, FreeDSD)의 컴파일러를 clang-11로 전환했습니다. #15622 (Ilya Yatsishin).
  • 이제 모든 테스트 이미지에서 llvm-symbolizer-11을 사용합니다. #15069 (alesapin).
  • llvm-11로 빌드할 수 있게 했습니다. #15366 (alexey-milovidov).
  • clang-tidy-10clang-tidy-11로 변경했습니다. #14922 (alexey-milovidov).
  • 기본적으로 LLVM의 Experimental 패스 매니저를 사용하도록 변경했습니다. #15608 (Danila Kutenin).
  • 어떤 C++ 번역 단위도 빌드 시간이 10분을 넘거나 메모리 사용량이 10 GB를 초과하지 않도록 했습니다. 이 변경으로 #14925가 수정되었습니다. #15060 (alexey-milovidov).
  • 테스트 실행과 프로파일링 실행을 분리해 성능 테스트가 더 안정적이고 대표성을 띠도록 했습니다. #15027 (alexey-milovidov).
  • 성능 테스트의 신뢰성을 높이기 위한 시도입니다. madvise를 사용해 프로세스의 실행 메모리를 런타임에 다시 매핑하여 transparent huge pages를 사용하도록 합니다. 이렇게 하면 성능 테스트 불안정성의 주요 원인인 iTLB miss 수를 줄일 수 있습니다. #14685 (alexey-milovidov).
  • python3로 전환합니다. 이로써 #14886가 종료됩니다. #15007 (Azat Khuzhin).
  • server가 응답하지 않으면 기능 테스트를 즉시 실패로 처리합니다. 이로써 #15262가 해결되었습니다. #15267 (alexey-milovidov).
  • 구성 파일 없이도 AArch64 버전의 clickhouse-server를 실행할 수 있도록 했습니다. 이로써 #15174가 용이해집니다. #15266 (alexey-milovidov).
  • CI Docker 이미지 개선: ZooKeeper를 제거하고 테스트 구성 설치를 단일 스크립트로 처리하도록 했습니다. #15215 (alesapin).
  • 빠른 테스트 스크립트에서 CMake 옵션 전달 문제를 수정했습니다. #14711의 오류를 해결합니다. #15155 (alesapin).
  • 하나의 명령으로 하드웨어 벤치마크를 수행할 수 있는 스크립트를 추가했습니다. #15115 (alexey-milovidov).
  • 대형 테스트 test_dictionaries_all_layouts_and_sources를 여러 개의 작은 테스트로 분할했습니다. #15110 (Nikita Mikhaylov).
  • base64에서 MSan 보고서가 발생할 수 있는 문제를 수정했을 수 있습니다(AVX-512를 사용하는 서버에서). 이로써 #14006가 수정됩니다. #15030 (alexey-milovidov).
  • 모든 통합 테스트 *.py 파일의 코드를 다시 포맷하고 정리했습니다. #14864 (Bharat Nallan).
  • CI에서 발견된 MaterializeMySQL의 빈 트랜잭션 관련 불안정한 테스트 케이스를 수정했습니다. #14854 (Winter Zhang).
  • 빌드를 조금 더 빠르게 하도록 개선했습니다. #14808 (alexey-milovidov).
  • 사용하지 않는 헤더를 제거해 빌드를 약간 더 빠르게 했습니다. #14714 (alexey-milovidov).
  • OSX에서 발생하던 빌드 실패를 수정했습니다. #14761 (Winter Zhang).
  • OS에서 ccache가 감지되면 cmake에서 기본적으로 활성화되도록 했습니다. #14575 (alesapin).
  • ClickHouse 리포지토리에서 CI 빌드 구성을 제어하도록 했습니다. #14547 (alesapin).
  • CMake 파일에서: - 일부 옵션 설명의 일부를 위쪽 주석으로 옮겼습니다. - option의 기본값에서 0 -> OFF, 1 -> ON으로 대체했습니다. - 일부 옵션에 설명과 문서 링크를 추가했습니다. - FUZZER 옵션을 대체했습니다(ENABLE_FUZZING이라는, 동일한 기능을 활성화하는 다른 옵션이 있기 때문입니다). - ENABLE_TESTS가 있으므로 ENABLE_GTEST_LIBRARY 옵션을 제거했습니다. 전체 설명은 PR: #14711을 참조하십시오 (Mike).
  • 바이너리 크기를 조금 줄였습니다(디버그 버전 기준 약 50 Mb). #14555 (Artem Zuikov).
  • 파일 경로를 이어 붙이기 위해 ConfigProcessor에서 std::filesystem::path를 사용합니다. #14558 (Bharat Nallan).
  • bitShiftLeft()를 음수의 큰 정수로 호출할 때 발생하던 디버그 assertion을 수정했습니다. #14697 (Artem Zuikov).

ClickHouse 릴리스 20.9

ClickHouse 릴리스 v20.9.7.11-안정, 2020-12-07

성능 개선

  • 매우 많은 수의 MergeTree 테이블에 걸친 Merge 테이블 읽기 성능을 개선했습니다. #7748을 해결합니다. #16988 (Anton Popov).

버그 수정

  • in_memory_parts_enable_wal이 비활성화된 경우 WAL에서 파트를 복원하지 않도록 합니다. #17802 (detailyang).
  • Distributed 테이블에 삽입할 때 공간이 부족하면 발생하던 segfault를 수정했습니다. #17737 (tavplubix).
  • ClickHouse가 MySQL 서버와의 connection을 다시 복원하지 못하던 문제가 수정되었습니다. #17681 (Alexander Kazakov).
  • Windows Subsystem for Linux에서 실행 중인 ClickHouse의 Atomic 데이터베이스에서 RENAME 쿼리를 실행할 때 발생하던 Function not implemented 오류를 수정했습니다. #17661을 해결했습니다. #17664 (tavplubix).
  • clickhouse-client를 대화형 모드에서 여러 줄 쿼리와 함께 사용할 때 한 줄 주석이 쿼리 끝까지 잘못 이어지던 문제가 있었습니다. 이 변경으로 #13654가 수정되었습니다. #17565 (alexey-milovidov).
  • 매우 드물게 서버가 연결을 더 이상 수락하지 않을 수 있는 문제를 수정했습니다. #17542 (alexey-milovidov).
  • 다른 레플리카에서 해당 mutation이 중지되면 alter 쿼리가 멈추던 문제를 수정했습니다. #16953를 해결했습니다. #17499 (alesapin).
  • ClickHouse에서 마크 캐시 크기를 과소평가하던 버그를 수정했습니다. 마크가 포함된 매우 작은 파일이 많을 때 이 문제가 발생할 수 있습니다. #17496 (alesapin).
  • 설정 optimize_redundant_functions_in_order_by가 활성화된 경우의 ORDER BY를 수정했습니다. #17471 (Anton Popov).
  • 잘못된 최적화로 인해 발생할 수 있었던 DISTINCT 이후의 중복을 수정했습니다. #17294를 해결했습니다. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • LowCardinality 타입의 JOIN 테이블을 읽는 중 발생하던 충돌을 수정했습니다. #17228을 수정했습니다. #17397 (Nikolai Kochetov).
  • 서브쿼리에 const 컬럼이 있을 때 Set 인덱스가 무효화되던 문제를 수정했습니다. 이로써 #17246가 해결되었습니다. #17249 (Amos Bird).
  • 충돌을 유발하는 ColumnConst 비교 문제를 수정했습니다. 이 수정으로 #17088 문제가 해결되었습니다. #17135 (Amos Bird).
  • some_tableAS table_function()으로 생성된 경우, CREATE TABLE ... AS some_table 쿼리에서 발생하던 충돌을 수정했습니다. #16944를 해결합니다. #17072 (tavplubix).
  • fuzzBits 함수의 버그를 수정했습니다. 관련 이슈: #16980. #17051 (hexiaoting).
  • LIMIT가 있는 쿼리처럼 실행 중에 취소될 수 있는 원격 쿼리에서 불필요한 네트워크 오류를 방지했습니다. #17006 (Azat Khuzhin).
  • 소규모 개선. #16866 (tavplubix).
  • MySQL 프로토콜을 통한 INSERT 쿼리에서 영향을 받은 행 수를 반환합니다. 이전에는 ClickHouse가 항상 0을 반환했지만, 이 문제가 수정되었습니다. #16605을 수정했습니다. #16715 (Winter Zhang).

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

  • 내장 시간대 데이터를 2020d 버전으로 업데이트하고 cctz도 최신 master로 업데이트했습니다. #17204 (filimonov).

ClickHouse 릴리스 v20.9.6.14-안정, 2020-11-20

개선 사항

  • SNI가 필요한 clickhouse-server 보안 endpoint에 연결할 수 있게 되었습니다. 이는 clickhouse-server가 TLS 프록시 뒤에 호스팅되는 경우에 가능합니다. #16938 (filimonov).
  • 조건부 집계 함수(예: avgIf, sumIf, maxIf)는 조건에 맞는 행이 없고 널 허용 인수를 사용하는 경우 NULL을 반환해야 합니다. #13964 (Winter Zhang).

버그 수정

  • 리더가 아닌 ReplicatedMergeTreeTables에서 ON CLUSTER 쿼리가 무기한 대기할 수 있는 버그를 수정했습니다. #17089 (alesapin).
  • 오류 발생 시 format_avro_schema_registry_url의 IP를 다시 확인하도록 수정했습니다. #16985 (filimonov).
  • SELECT에 변경 중인 컬럼에 대한 WHERE 표현식이 있고 ALTER가 아직 완료되지 않은 상태에서 ALTER TABLE ... MODIFY COLUMN ... NewType 수행 후 발생할 수 있는 server 충돌을 수정했습니다. #16968 (Amos Bird).
  • 설치 스크립트가 config 폴더에 항상 하위 디렉터리를 생성하도록 수정했습니다. 이는 사용자 지정 config를 사용하는 Docker build에만 해당합니다. #16936 (filimonov).
  • ORDER BY가 포함된 쿼리에서 발생할 수 있는 Illegal type of argument 오류를 수정했습니다. #16580을 수정합니다. #16928 (Nikolai Kochetov).
  • WriteBufferFromS3에 데이터가 전혀 기록되지 않은 경우 멀티파트 업로드를 중단하도록 수정했습니다. #16840 (Pavel Kovalenko).
  • 인수 없이 any를 사용할 때 발생하는 충돌을 수정했습니다. 이는 #16803 관련 수정입니다. cc @azat. #16826 (Amos Bird).
  • transform_null_in setting이 enabled된 상태에서 여러 컬럼과 튜플에 대한 IN 연산자 관련 버그를 수정했습니다. #15310을 수정합니다. #16722 (Anton Popov).
  • max_threads>0이고 ORDER BY에 표현식이 있을 때 optimize_read_in_order/optimize_aggregation_in_order 관련 문제를 수정했습니다. #16637 (Azat Khuzhin).
  • #16574, #16231을 수정하고, ‘if’ suffix 집계 함수를 사용할 때 발생하는 원격 쿼리 실패를 수정했습니다. #16610 (Winter Zhang).
  • 예외가 발생하면 쿼리가 더 빨리 종료되도록 했습니다. 예외 발생 시 원격 레플리카에서의 실행을 취소합니다. #15578 (Azat Khuzhin).

ClickHouse 릴리스 v20.9.5.5-안정, 2020-11-13

버그 수정

  • 쿼리 프로파일러가 켜져 있고, 일부 함수에서 (추정상) 비동기 언와인드 테이블이 손상된 glibc 버전이 포함된 OS에 ClickHouse가 설치된 경우 드물게 조용히 크래시가 발생하던 문제를 수정했습니다. 이 변경으로 #15301#13098이 수정됩니다. #16846 (alexey-milovidov).
  • 이제 입력 AVRO를 파싱할 때 타입에서 LowCardinality가 제거됩니다. #16188을 수정했습니다. #16521 (Mike).
  • GTID 집합을 올바르게 축소하도록 하여, MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine 구성을 사용하고 MySQL Slave에서 slave_parallel_worker가 활성화된 경우 메타데이터가 빠르게 증가하던 문제를 수정했습니다. 이 변경으로 #15951이 수정됩니다. #16504 (TCeason).
  • 분산 분산 테이블에서 DROP TABLE 관련 문제를 수정했습니다 (INSERT와 경쟁 상태 발생). #16409 (Azat Khuzhin).
  • 복제 큐의 매우 큰 항목 처리 문제를 수정했습니다. 매우 큰 항목은 테이블 구조가 극도로 큰 경우(1 MB에 가까움) ALTER 쿼리에서 나타날 수 있습니다. 이 변경으로 #16307이 수정됩니다. #16332 (alexey-milovidov).
  • 필터링에 사용할 Set이 생성되지 않아 반환 데이터의 일부가 삭제될 수 있던 비일관적 동작을 수정했습니다. #16308 (Nikita Mikhaylov).
  • MySQL 데이터베이스 관련 버그를 수정했습니다. 데이터베이스 엔진으로 사용되는 MySQL server가 다운되면, 불필요하게 비활성화된 server에서 테이블을 가져오려고 시도하는 일부 쿼리에서 Exception이 발생하던 문제가 있었습니다. 예를 들어 SELECT ... FROM system.parts 쿼리는 MergeTree 테이블에 대해서만 동작해야 하며 MySQL 데이터베이스를 전혀 건드리지 않아야 합니다. #16032 (Kruglov Pavel).

ClickHouse 릴리스 v20.9.4.76-안정 (2020-10-29)

버그 수정

  • dictGet 함수에서 예외가 발생할 때 이중 해제가 발생하는 문제를 수정했습니다. 딕셔너리가 오류가 있는 상태로 로드된 경우 이 문제가 발생할 수 있었습니다. #16429 (Nikolai Kochetov).
  • 합계/롤업/cube 수정자 및 group by 키에 대한 min/max 함수와 함께 사용하는 group by를 수정했습니다. #16393를 수정합니다. #16397 (Anton Popov).
  • prefer_localhost_replica=0 및 internal_replication 사용 시 비동기 분산 INSERT 문제를 수정했습니다. #16358 (Azat Khuzhin).
  • TwoLevelStringHashTable 구현의 심각하게 잘못된 코드를 수정했습니다. 이 문제는 메모리 누수로 이어질 수 있습니다. 이 버그가 이렇게 오랫동안 숨어 있었다니 놀랍습니다… #16264 (Amos Bird).
  • 제한과 무관하게 메모리가 과도하게 할당될 수 있던 문제를 수정했습니다. 이로써 #14560이 해결되었습니다. #16206 (alexey-milovidov).
  • ReplicatedVersionedCollapsingMergeTreeALTER MODIFY ... ORDER BY 쿼리가 멈추는 문제를 수정했습니다. 이 수정으로 #15980 문제가 해결됩니다. #16011 (alesapin).
  • collate 이름 및 charset 이름 parser를 수정하고 String 타입에서 length = 0도 지원하도록 했습니다. #16008 (Winter Zhang).
  • 복합 키를 사용하는 딕셔너리에서 direct layout을 사용할 수 있게 했습니다. #16007 (Anton Popov).
  • 일정 기간 비활성 상태가 지속된 뒤 복제 오류가 발생할 경우 레플리카가 5~10분간 멈추는 현상을 방지합니다. #15987 (filimonov).
  • MaterializedView에 삽입하거나 MaterializedView에서 조회하는 중 대상 테이블을 동시에 삭제할 때 드물게 발생하던 세그폴트를 수정했습니다(Atomic 데이터베이스 엔진). #15984 (tavplubix).
  • 설정 프로필 구문 분석의 모호성을 수정했습니다. 이제 CREATE USER ... SETTINGS profile readonly는 readonly 제약이 있는 profile이라는 이름의 설정이 아니라, readonly라는 이름의 프로필을 사용하는 것으로 간주됩니다. 이 변경으로 #15628이 수정되었습니다. #15982 (Vitaly Baranov).
  • 데이터베이스 생성이 실패할 때 발생하는 충돌을 수정했습니다. #15954 (Winter Zhang).
  • 테이블 이름이 동시에 변경되는 경우(Atomic 데이터베이스 엔진) DROP TABLE IF EXISTSTable ... does not exist 오류와 함께 실패하던 문제를 수정했습니다. 여러 테이블을 대상으로 하는 일부 DDL 쿼리(DROP DATABASE, RENAME TABLE 등)를 동시에 실행할 때 드물게 발생하던 교착 상태를 수정했습니다. DROP/DETACH TABLE을 동시에 실행할 때 DROP/DETACH DATABASETable ... does not exist 오류와 함께 실패하던 문제를 수정했습니다. #15934 (tavplubix).
  • WHERE, PREWHERE, GLOBAL IN이 포함된 쿼리에서 Distributed 테이블 조회 결과가 잘못 비어 있던 문제를 수정했습니다. #15792를 수정합니다. #15933 (Nikolai Kochetov).
  • RBAC에서 발생할 수 있는 교착 상태 문제를 수정했습니다. #15875 (Vitaly Baranov).
  • ALTER MODIFY COLUMN 쿼리 이후에 실행된 SELECT ... ORDER BY DESC 쿼리에서 발생하던 Block structure mismatch 예외를 수정했습니다. #15800 문제를 해결했습니다. #15852 (alesapin).
  • MaterializeMySQL에서 select count()의 부정확한 동작을 수정했습니다. #15767 (tavplubix).
  • 가상 컬럼(virtual columns)만 선택하는 일부 쿼리의 경우를 수정했습니다. 이전에는 Not found column _nothing in block 예외가 발생할 수 있었습니다. #12298를 수정했습니다. #15756 (Anton Popov).
  • max_replicated_logs_to_keep 설정의 기본값이 지나치게 낮아 레플리카가 너무 자주 유실될 수 있던 문제를 수정했습니다. 또한 가장 최신 상태의 레플리카를 선택해 복제하도록 하여 유실된 레플리카의 복구 과정을 개선했습니다. 아울러 유실된 레플리카에서 오래된 파트를 제거하지 않고 대신 detach하도록 변경했습니다. #15701 (tavplubix).
  • 대상 테이블과 구조가 다른 Buffer 테이블에서 읽는 중 발생하던 오류 Cannot add simple transform to empty Pipe를 수정했습니다. 이 문제는 대상 테이블이 쿼리에 대해 빈 결과를 반환할 때 발생할 수 있었습니다. #15529을 수정했습니다. #15662 (Nikolai Kochetov).
  • S3 테이블 함수의 글롭 패턴 관련 버그를 수정했습니다. URL의 리전 정보가 S3 클라이언트 구성에 적용되지 않던 문제를 해결했습니다. #15646 (Vladimir Chebotarev).
  • 읽기 전용 테이블을 분리할 때 ReadonlyReplica 메트릭이 감소하도록 수정했습니다. 이로써 #15598 문제가 해결되었습니다. #15592 (sundyli).
  • ReplicatedMergeTree에 단일 매개변수가 전달되면 이를 무시하지 않고 오류를 발생시킵니다. #15516 (nvartolomei).

개선

  • 이제 클러스터 구성의 <internal_replication> 설정과 관계없이 ALTER ... ON CLUSTER 쿼리를 실행할 수 있습니다. #16075 (alesapin).
  • 이제 테이블 생성 시 ReplicatedMergeTree 인수의 {database}, {table}, {uuid} 매크로가 확장됩니다. #16160 (tavplubix).

ClickHouse 릴리스 v20.9.3.45-안정 (2020-10-09)

버그 수정

  • MV 쿼리에 ARRAY JOIN이 포함된 경우 MATERIALIZED VIEW에 삽입할 때 발생할 수 있는 Cannot find column 오류를 수정했습니다. #15717 (Nikolai Kochetov).
  • AMQP-CPP의 race condition을 수정했습니다. #15667 (alesapin).
  • 쿼리 계획의 ReadFromStorage 단계에서 리소스 해제 순서를 수정했습니다. 드물게 비정상 종료가 발생할 수 있었습니다. #15610과 관련이 있을 수 있습니다. #15645 (Nikolai Kochetov).
  • VALUES, LIMIT 또는 IN 연산자의 오른쪽에서 JSON* 함수의 결과를 사용할 때 발생하던 Element ... is not a constant expression 오류를 수정했습니다. #15589 (tavplubix).
  • 오류 메시지 Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call가 발생할 수 있는 가능성을 차단했습니다. 이 수정으로 #15541를 해결했습니다. #15557 (alexey-milovidov).
  • AggregatingInOrderTransform/optimize_aggregation_in_order의 메모리 사용량을 크게 줄였습니다. #15543 (Azat Khuzhin).
  • MOVE 또는 REPLACE PARTITION 후, 드물게는 DETACH 또는 DROP PARTITION 후에 존재하지 않는 part를 기다리면서 mutation이 멈출 수 있었습니다. 이 문제가 수정되었습니다. #15537 (tavplubix).
  • 동일한 패턴으로 LIKE를 실행한 경우 ILIKE 연산자가 더 이상 대소문자를 구분하지 않게 되는 버그를 수정했습니다. #15536 (alesapin).
  • 데이터에 없는 컬럼을 선택할 때, 그 컬럼이 역시 데이터에 없는 다른 컬럼에 의존해 발생하던 Missing columns 오류를 수정했습니다. #15530. #15532 (alesapin).
  • 드물게 ON CLUSTER에서 쿼리가 멈출 수 있는 DDLWorker의 이벤트 subscription 버그를 수정했습니다. #13450에서 처음 도입되었습니다. #15477 (alesapin).
  • boundingRatio 집계 함수의 두 번째 인수 유형이 잘못된 경우 적절한 오류가 보고되도록 수정했습니다. #15407 (detailyang).
  • SELECT toStartOfDay(today())와 같은 쿼리에서 time_zone 인수가 비어 있다는 오류가 발생하며 실패하던 버그를 수정했습니다. #15319 (Bharat Nallan).
  • MergeTree 테이블 이름 변경 및 백그라운드 정리 중 발생하는 경쟁 조건을 수정했습니다. #15304 (alesapin).
  • system.logs가 활성화된 경우 서버 시작 시 드물게 발생하던 경쟁 상태를 수정했습니다. #15300 (alesapin).
  • QueryLog의 MSan 보고 문제를 수정했습니다. 초기화되지 않은 메모리가 memory_usage 필드에 사용될 수 있었습니다. #15258 (alexey-milovidov).
  • LowCardinality 타입에서 joinGet을 사용할 때 인스턴스가 충돌하던 문제를 수정했습니다. 이 수정으로 #15214 문제가 해결됩니다. #15220 (Amos Bird).
  • ALTER 쿼리 후 새 구조의 데이터를 Buffer에 삽입할 수 없던 테이블 엔진 Buffer의 버그를 수정했습니다. #15117을 수정합니다. #15192 (alesapin).
  • MySQL 컬럼 정의 패킷에서 decimals 필드의 크기를 조정합니다. #15152 (maqroll).
  • Mac OS에서 Docker로 clickhouse-server를 실행할 때 Atomic 데이터베이스에서 DDL 쿼리 실행 시 발생하던 Cannot rename ... errno: 22, strerror: Invalid argument 오류를 수정했습니다. #15024 (tavplubix).
  • 서브쿼리에 finalizeAggregation 함수가 포함된 경우 프레디케이트 푸시다운이 작동하지 않던 문제를 수정했습니다. #14847. #14937 (filimonov).
  • 설정 파일을 ZK에서 가져와야 하는 경우(from_zk include 옵션 사용), ZooKeeper와 통신하는 중 서버가 시작 시 멈출 수 있는 문제를 수정했습니다. 이 수정으로 #14814 문제가 해결됩니다. #14843 (Alexander Kuzmenkov).

개선

  • 이제 ALTER 쿼리를 사용해 VersionedCollapsingMergeTree의 버전 컬럼 유형을 변경할 수 있습니다. #15442 (alesapin).

ClickHouse 릴리스 v20.9.2.20, 2020-09-22

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

  • 20.5보다 오래된 버전에서 업그레이드할 때 롤링 업데이트를 수행하는 경우, 클러스터에 20.5 이상 버전과 20.5 미만 버전이 혼재한 상태에서 구버전 ClickHouse 노드를 재시작하면, 신버전 노드가 있는 상태에서 구버전이 시작되면서 Part ... intersects previous part 오류가 발생할 수 있습니다. 이 오류를 방지하려면 먼저 모든 클러스터 노드에 새 clickhouse-server 패키지를 설치한 다음 재시작하십시오. 그러면 clickhouse-server가 재시작될 때 새 버전으로 시작됩니다.

새로운 기능

  • 선택한 컬럼 목록에(* 또는 COLUMNS(...) 뒤) 적용할 수 있는 컬럼 변환자 EXCEPT, REPLACE, APPLY가 추가되었습니다. 예를 들어 SELECT * EXCEPT(URL) REPLACE(number + 1 AS number)와 같이 작성할 수 있습니다. 또 다른 예로, 모든 문자열 컬럼의 최대 길이를 구하기 위해 select * apply(length) apply(max) from wide_string_table를 사용할 수 있습니다. #14233 (Amos Bird).
  • 순위 상관계수를 계산하는 집계 함수 rankCorr가 추가되었습니다. #11769 (antikvist) #14411 (Nikita Mikhaylov).
  • 서브쿼리를 테이블 객체로 바꾸는 테이블 함수 view가 추가되었습니다. 이를 통해 쿼리를 다른 곳에 전달해 사용하기가 쉬워집니다. 예를 들어 remote/cluster 테이블 함수에서 사용할 수 있습니다. #12567 (Amos Bird).

버그 수정

  • ALTER UPDATE mutation에서 할당 표현식과 상수 값(예: UPDATE x = 42)에 널 허용 컬럼이 포함된 경우, 컬럼에 잘못된 값이 기록되거나 segfault가 발생하던 버그를 수정했습니다. #13634, #14045를 수정했습니다. #14646 (alesapin).
  • 결과 컬럼의 decimal scale이 잘못되어 Decimal 곱셈 결과가 잘못되는 문제를 수정했습니다. #14603 (Artem Zuikov).
  • Nullable 컬럼의 잘못된 정렬 순서를 바로잡았습니다. 이로써 #14344 문제가 해결되었습니다. #14495 (Nikita Mikhaylov).
  • 더 짧은 문자열과 비교할 때 인덱스 분석 중 FixedString 유형의 기본 키(primary key)에 대한 비교가 일관되지 않던 문제를 수정했습니다. 이 수정은 #14908을 해결합니다. #15033 (Amos Bird).
  • part가 1개뿐인 파티션이 있는 테이블에서 머지 할당이 잘못되던 버그를 수정했습니다. #14444 (alesapin).
  • 함수 bar가 특별히 조작된 인수와 함께 호출될 경우 버퍼 오버플로우가 발생할 수 있었습니다. 이로써 #13926가 해결되었습니다. #15028 (alexey-milovidov).
  • system.asynchronous_metrics에 논리 코어별 CPU 주파수를 추가했습니다. 이로써 #14923 문제가 해결됩니다. #14924 (Alexander Kuzmenkov).
  • MaterializeMySQL 데이터베이스 엔진을 사용할 때 발생하던 .metadata.tmp File exists 오류를 해결했습니다. #14898 (Winter Zhang).
  • 일부 extractAllGroups 함수 호출이 “메모리 제한 초과” 오류를 유발할 수 있는 문제를 수정했습니다. 이 수정은 #13383를 해결합니다. #14889 (alexey-milovidov).
  • StorageFile(fd)에 INSERT를 시도할 때 발생하던 SIGSEGV를 수정했습니다. #14887 (Azat Khuzhin).
  • SELECT 쿼리에서 조회 대상 컬럼에 다른 컬럼에 의존하는 DEFAULT 표현식이 있고, 그 다른 컬럼에도 DEFAULT가 설정되어 있으며 SELECT 쿼리에 포함되지 않고 디스크에도 존재하지 않는 경우 드물게 발생하던 오류를 수정했습니다. #14531을 부분적으로 수정합니다. #14845 (alesapin).
  • 부호 있는 타입의 축소 Int -> Int 캐스트에서 잘못된 단조성 판별을 수정했습니다. 이 문제로 인해 쿼리 결과가 잘못될 수 있습니다. 이 버그는 #14513에서 확인되었습니다. #14783 (Amos Bird).
  • ALTER ... MODIFY QUERY 실행 시 materialized view의 메타데이터에서 기본 데이터베이스 이름이 누락되는 문제를 수정했습니다. #14664 (tavplubix).
  • LowCardinality 및 널 허용 타입이 포함된 경우 함수 has의 결과가 잘못될 수 있는 문제를 수정했습니다. #14591 (Mike).
  • ReplicatedMergeTree Engine을 사용하는 테이블의 CREATE 쿼리에서 Zookeeper 예외가 발생한 경우 데이터 디렉터리를 정리합니다. #14563 (Bharat Nallan).
  • 매우 큰 매개변수에서 오버플로우가 발생할 때 결과에 드물게 나타날 수 있던 combinator -Resample가 있는 함수의 segfault를 수정했습니다. #14562 (Anton Popov).
  • topK 집계 함수에서 배열 크기 오버플로우를 검사하도록 했습니다. 이 검사가 없으면 사용자가 정교하게 조작된 매개변수가 포함된 쿼리를 보내 server가 충돌할 수 있습니다. 이 수정으로 #14452가 해결되었습니다. #14467 (alexey-milovidov).
  • SysVinit의 재시작/시작/중지/리로드를 systemd로 프록시합니다(사용 중인 경우). #14460 (Azat Khuzhin).
  • PipelineExecutor 자체에서 예외가 발생하면 쿼리 실행을 중단합니다. 이를 통해 드물게 발생할 수 있는 쿼리 멈춤 현상을 방지할 수 있습니다. #14334 #14402 (Nikolai Kochetov).
  • AS table_function으로 생성된 테이블에서 ALTER 쿼리 수행 중 발생하던 충돌을 수정했습니다. 이로써 #14212가 해결되었습니다. #14326 (alesapin).
  • ALTER LIVE VIEW 쿼리에서 REFRESH 명령 실행 중 발생하던 예외를 수정했습니다. LIVE VIEW는 실험적 기능입니다. #14320 (Bharat Nallan).
  • 중첩된 인터프리터를 사용하는 쿼리에서 QueryPlan의 수명(EXPLAIN PIPELINE graph=1용)을 수정했습니다. #14315 (Azat Khuzhin).
  • SSD cache 복합 키 외부 딕셔너리에서 튜플 크기 검사를 개선했습니다. 이 수정으로 #13981가 해결됩니다. #14313 (alexey-milovidov).
  • ALIAS 컬럼 유형에서는 CODEC를 사용할 수 없도록 했습니다. #13911을 수정했습니다. #14263 (Bharat Nallan).
  • 전역 수준이 아닌 범위에서 실행할 때 GRANT ALL 문의 문제를 수정했습니다. #13987 (Vitaly Baranov).
  • 람다에서의 arrayJoin() 캡처 문제 수정(논리 오류 메시지와 함께 예외가 발생하던 문제). #13792 (Azat Khuzhin).

실험 기능

  • 주어진 SELECT 쿼리를 기반으로 무작위 데이터베이스를 생성하는 db-generator 도구를 추가했습니다. 사용자에게서 불완전한 버그 보고만 받은 경우에도 문제를 재현하는 데 도움이 될 수 있습니다. #14442 (Nikita Mikhaylov) #10973 (ZeDRoman).

개선 사항

  • 분산 스토리지에서 다중 볼륨 스토리지 구성을 사용할 수 있습니다. #14839 (Pavel Kovalenko).
  • toStartOf* 계열 함수에서 빈 time_zone 인수를 허용하지 않습니다. #14509 (Bharat Nallan).
  • MySQL handler는 SET @@var = value와 같은 쿼리에 OK를 반환합니다. 이러한 statement는 무시됩니다. 일부 MySQL driver는 핸드셰이크 이후 초기 설정을 위해 SET @@ 쿼리를 보내므로 이 동작이 필요합니다 https://github.com/ClickHouse/ClickHouse/issues/9336#issuecomment-686222422 . #14469 (BohuTANG).
  • 이제 이전에 구체화되지 않은 TTL은 머지 중에 적용됩니다. #14438 (alesapin).
  • 이제 clickhouse-obfuscator#13163에서 제안된 UUID 유형을 지원합니다. #14409 (dimarub2000).
  • #11384에서 제안된 새로운 설정 system_events_show_zero_values를 추가했습니다. #14404 (dimarub2000).
  • MaterializeMySQL에서 프라이머리 키를 암묵적으로 NOT NULL로 변환합니다 (MySQL과 동일). #14114를 수정했습니다. #14397 (Winter Zhang).
  • boost multiprecision의 대형 정수(256비트)를 https://github.com/cerevra/int 의 구현으로 대체합니다. 256비트 정수는 실험적입니다. #14229 (Artem Zuikov).
  • system.part_log의 파트에 기본 압축 코덱인 default_compression_codec를 추가합니다. #14116 (alesapin).
  • DateTime 유형에 precision 인수를 추가합니다. 이제 DateTime64 대신 DateTime 이름을 사용할 수 있습니다. #13761 (Winter Zhang).
  • Redis 외부 딕셔너리에 requirepass 인증을 추가했습니다. #13688 (Ivan Torgashov).
  • RabbitMQ engine이 개선되었습니다. connection 및 channel 장애 처리, 올바른 커밋, 삽입 실패 처리, 향상된 exchange, 큐 내구성, 큐 재개 기능, 새로운 큐 설정이 추가되었습니다. 테스트도 수정했습니다. #12761 (Kseniia Sumarokova).
  • compact 파트에서 사용자 정의 코덱을 지원합니다. #12183 (Anton Popov).

성능 개선

  • optimize_skip_unused_shardsoptimize_distributed_group_by_sharding_key 사용 시, GROUP BY sharding_key를 사용하는 분산 테이블에 대해 LIMIT/LIMIT BY/ORDER BY가 포함된 쿼리를 최적화합니다. #10373 (Azat Khuzhin).
  • 여러 JOININ에 대한 Set을 병렬로 생성합니다. 서로 다른 여러 IN subquery 표현식이 있는 쿼리의 성능이 약간 향상될 수 있습니다. #14412 (Nikolai Kochetov).
  • 각 컨슈머에 독립적인 스레드를 제공해 Kafka 엔진 성능을 개선합니다. Kafka와 같은 스트리밍 엔진을 위한 별도의 스레드 풀을 추가했습니다. #13939 (fastio).

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

  • Functions에서 디버그 정보를 제거해 디버그 빌드의 바이너리 크기를 줄였습니다. 이는 매우 오래된 링커를 사용하는 Yandex의 한 내부 프로젝트에만 필요합니다. #14549 (alexey-milovidov).
  • clang 11로 빌드할 수 있도록 준비했습니다. #14455 (alexey-milovidov).
  • 백포트 스크립트의 로직을 수정했습니다. 이전 버전에서는 빨간색이 100%인 모든 레이블에 대해 동작했습니다. 이는 이상한 동작이었습니다. #14433 (alexey-milovidov).
  • 통합 테스트는 기본 base config를 사용합니다. 모든 구성 변경은 각 인스턴스별로 main_configs, user_configs, dictionaries 매개변수를 통해 명시적으로 지정합니다. #13647 (Ilya Yatsishin).

ClickHouse 릴리스 20.8

ClickHouse 릴리스 v20.8.12.2-lts, 2021-01-16

버그 수정

  • *If combinator와 단항 함수 및 널 허용 타입 관련 문제를 수정했습니다. #18806 (Azat Khuzhin).
  • wide에서 compact 파트로의 머지를 제한했습니다. 수직 병합에서는 이로 인해 손상된 결과 파트가 생성될 수 있었습니다. #18381 (Anton Popov).

ClickHouse 릴리스 v20.8.11.17-lts, 2020-12-25

버그 수정

  • 머지 중 AIO 쓰기를 비활성화했습니다. 머지 과정에서 매우 드물게 프라이머리 키 컬럼의 데이터가 손상될 수 있기 때문입니다. #18481 (alesapin).
  • Nullable(String) 타입 인수로 toType(...) 함수(toDate, toUInt32 등)를 호출할 때 발생하던 value is too short 오류를 수정했습니다. 이제 이러한 함수는 파싱 오류가 발생하면 예외를 발생시키는 대신 NULL을 반환합니다. #7673을 수정했습니다. #18445 (tavplubix).
  • 2단계 집계를 사용할 때 combinator Distinct가 적용된 집계 함수에서 발생할 수 있는 충돌을 수정했습니다. #17682을 수정했습니다. #18365 (Anton Popov).

ClickHouse 릴리스 v20.8.10.13-lts, 2020-12-24

버그 수정

  • logger.size 매개변수에 2^32보다 큰 숫자 값을 지정해 서버 로그 회전을 구성한 경우, 로그가 제대로 회전되지 않았습니다. #17905 (Alexander Kuzmenkov).
  • MergeTreeWriterSettings에서 max_compress_block_sizemin_compress_block_size로 잘못 초기화하던 문제를 수정했습니다. #17833 (flynn).
  • ClickHouse가 MySQL 서버와의 연결을 다시 수립하지 못하던 문제를 수정했습니다. #17681 (Alexander Kazakov).
  • 해당 mutation이 다른 레플리카에서 중단되었을 때 ALTER 쿼리가 멈추는 문제를 수정했습니다. 이 수정으로 #16953가 해결됩니다. #17499 (alesapin).
  • ClickHouse가 마크 캐시 크기를 실제보다 작게 산정할 때 발생하던 버그를 수정했습니다. 마크가 포함된 아주 작은 파일이 많은 경우 이런 문제가 발생할 수 있습니다. #17496 (alesapin).
  • 설정 optimize_redundant_functions_in_order_by가 활성화된 경우의 ORDER BY 문제를 수정했습니다. #17471 (Anton Popov).
  • 충돌을 유발하던 ColumnConst 비교를 수정했습니다. 이 수정으로 #17088 문제가 해결되었습니다. #17135 (Amos Bird).
  • 리더가 아닌 ReplicatedMergeTreeTables에서 ON CLUSTER 쿼리가 무기한 대기할 수 있던 버그를 수정했습니다. #17089 (alesapin).
  • 실행 중 취소될 수 있는 원격 쿼리(예: LIMIT가 있는 쿼리)에서 불필요한 네트워크 오류를 방지했습니다. #17006 (Azat Khuzhin).
  • 오류 발생 시 format_avro_schema_registry_url의 IP를 다시 조회합니다. #16985 (filimonov).
  • ALTER TABLE ... MODIFY COLUMN ... NewType 이후, 변경 중인 컬럼에 대한 WHERE 표현식이 있는 SELECT를 수행하고 ALTER가 아직 완료되지 않은 상태에서 발생할 수 있던 서버 충돌을 수정했습니다. #16968 (Amos Bird).
  • 설치 스크립트는 설정 폴더에 항상 하위 디렉터리를 생성해야 합니다. 이는 사용자 지정 설정을 사용하는 Docker build에만 관련됩니다. #16936 (filimonov).
  • ORDER BY가 있는 쿼리에서 발생할 수 있던 Illegal type of argument 오류를 수정했습니다. 관련 이슈: #16580. #16928 (Nikolai Kochetov).
  • WriteBufferFromS3에 데이터가 기록되지 않았을 경우 멀티파트 업로드를 중단합니다. #16840 (Pavel Kovalenko).
  • 인수 없이 any를 사용할 때 발생하는 충돌을 수정했습니다. #16803을 해결합니다. #16826 (Amos Bird).
  • transform_null_in 설정이 활성화된 경우 여러 컬럼과 튜플에 대한 IN 연산자를 수정했습니다. #15310을 수정했습니다. #16722 (Anton Popov).
  • optimize_read_in_order/optimize_aggregation_in_order에서 max_threads > 0이고 ORDER BY에 표현식이 있을 때 발생하던 비일관적인 동작 문제를 수정했습니다. #16637 (Azat Khuzhin).
  • ARRAY JOIN이 포함된 쿼리에서 쿼리 최적화로 인해 잘못된 결과가 반환되던 문제가 수정되었습니다. #17887 (sundyli).
  • 예외가 발생하면 쿼리가 더 빨리 종료됩니다. 예외 발생 시 원격 레플리카에서의 실행을 취소합니다. #15578 (Azat Khuzhin).

ClickHouse 릴리스 v20.8.6.6-lts, 2020-11-13

버그 수정

  • 쿼리 프로파일러가 켜져 있고, 일부 함수의 비동기 언와인드 테이블이 (추정상) 손상된 glibc 버전을 사용하는 OS에 ClickHouse가 설치된 경우 드물게 아무 메시지 없이 비정상 종료되던 문제를 수정했습니다. 이로써 #15301이 수정됩니다. 이로써 #13098도 수정됩니다. #16846 (alexey-milovidov).
  • 이제 입력으로 받은 AVRO를 파싱할 때 타입에서 LowCardinality가 제거됩니다. #16188을 수정합니다. #16521 (Mike).
  • GTID 집합을 올바르게 축소하도록 하여, MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine을 사용하고 MySQL Slave에서 slave_parallel_worker가 활성화된 경우 메타데이터가 빠르게 증가하던 문제를 수정했습니다. 이로써 #15951이 수정됩니다. #16504 (TCeason).
  • 분산의 DROP TABLE을 수정했습니다 (INSERT와 경합 발생). #16409 (Azat Khuzhin).
  • 복제 큐에서 매우 큰 항목을 처리하는 문제를 수정했습니다. 매우 큰 항목은 테이블 구조가 극도로 큰 경우(1 MB에 근접) ALTER 쿼리에서 나타날 수 있습니다. 이로써 #16307이 수정됩니다. #16332 (alexey-milovidov).
  • 필터링에 사용할 Set이 생성되지 않아 반환 데이터의 일부가 누락될 수 있었던 비일관적인 동작을 수정했습니다. #16308 (Nikita Mikhaylov).
  • MySQL 데이터베이스 관련 버그를 수정했습니다. 데이터베이스 엔진으로 사용되는 MySQL server가 다운되면, 일부 쿼리가 비활성화된 server에서 테이블을 가져오려고 시도하면서 Exception을 발생시키는 문제가 있었는데, 이는 불필요한 동작입니다. 예를 들어 SELECT ... FROM system.parts 쿼리는 MergeTree 테이블에 대해서만 동작해야 하며 MySQL 데이터베이스는 전혀 건드리지 않아야 합니다. #16032 (Kruglov Pavel).

ClickHouse 릴리스 v20.8.5.45-lts, 2020-10-29

버그 수정

  • 함수 dictGet에서 예외가 발생할 경우 이중 해제가 발생하던 문제를 수정했습니다. 이 문제는 딕셔너리를 오류가 있는 상태로 로드한 경우 발생할 수 있었습니다. #16429 (Nikolai Kochetov).
  • 합계/롤업/cube 수정자 및 GROUP BY 키에 대한 min/max 함수와 관련된 GROUP BY 문제를 수정했습니다. #16393를 수정했습니다. #16397 (Anton Popov).
  • prefer_localhost_replica=0 및 internal_replication 사용 시 비동기 분산 INSERT 문제를 수정했습니다. #16358 (Azat Khuzhin).
  • GROUP BY에서 문자열 키를 사용할 때 TwoLevelStringHashTable 구현 오류로 인해 발생할 수 있는 메모리 누수를 해결했습니다. #16264 (Amos Bird).
  • 제한과 무관하게 메모리가 한도를 초과해 할당될 수 있던 문제를 수정했습니다. 이로써 #14560이 해결되었습니다. #16206 (alexey-milovidov).
  • ReplicatedVersionedCollapsingMergeTree에서 ALTER MODIFY ... ORDER BY 쿼리가 멈추는 문제를 수정했습니다. 이로써 #15980 문제가 해결됩니다. #16011 (alesapin).
  • collate name 및 charset name 파서를 수정하고 string type에서 length = 0을 지원합니다. #16008 (Winter Zhang).
  • 복합 키를 사용하는 딕셔너리에서 direct layout을 사용할 수 있도록 지원했습니다. #16007 (Anton Popov).
  • 일정 기간 비활성 상태가 지속된 뒤 복제 오류가 발생할 때 레플리카가 5~10분간 멈추는 현상을 방지했습니다. #15987 (filimonov).
  • MaterializedView에 삽입하거나 MaterializedView에서 조회하는 중 대상 테이블을 동시에 삭제할 때 드물게 발생하던 segfault를 수정했습니다(Atomic 데이터베이스 엔진용). #15984 (tavplubix).
  • 설정 프로필 파싱의 모호성을 수정했습니다. 이제 CREATE USER ... SETTINGS profile readonly는 readonly 제약이 있는 profile 설정이 아니라, readonly라는 이름의 프로필을 사용하는 것으로 간주됩니다. 이 수정으로 #15628 문제가 해결됩니다. #15982 (Vitaly Baranov).
  • 데이터베이스 생성 실패 시 발생하던 크래시를 수정했습니다. #15954 (Winter Zhang).
  • 테이블 이름이 동시에 변경되는 경우 DROP TABLE IF EXISTSTable ... does not exist 오류로 실패하던 문제를 수정했습니다(Atomic 데이터베이스 엔진). 여러 테이블이 관련된 일부 DDL 쿼리(DROP DATABASE, RENAME TABLE 등)를 동시에 실행할 때 드물게 발생하던 데드락을 수정했습니다. DROP/DETACH TABLE을 동시에 실행할 때 DROP/DETACH DATABASETable ... does not exist 오류로 실패하던 문제를 수정했습니다. #15934 (tavplubix).
  • WHERE, PREWHERE, GLOBAL IN이 포함된 쿼리를 Distributed 테이블에서 실행할 때 결과가 잘못 비어 있던 문제를 수정했습니다. #15792를 수정합니다. #15933 (Nikolai Kochetov).
  • RBAC에서 발생할 수 있는 교착 상태를 수정했습니다. #15875 (Vitaly Baranov).
  • ALTER MODIFY COLUMN 쿼리 이후에 실행된 SELECT ... ORDER BY DESC 쿼리에서 발생하던 Block structure mismatch 예외를 수정했습니다. #15800을 해결합니다. #15852 (alesapin).
  • 가상 컬럼만 선택하는 일부 쿼리 처리 문제를 수정했습니다. 이전에는 Not found column _nothing in block 예외가 발생할 수 있었습니다. #12298을 수정했습니다. #15756 (Anton Popov).
  • MV용 쿼리에 ARRAY JOIN이 포함된 경우 MATERIALIZED VIEW에 삽입할 때 발생할 수 있는 Cannot find column 오류를 수정했습니다. #15717 (Nikolai Kochetov).
  • max_replicated_logs_to_keep 설정의 기본값이 지나치게 낮아 레플리카가 너무 자주 손실될 수 있던 문제를 수정했습니다. 손실된 레플리카 복구 과정에서는 복제 대상으로 가장 최신 상태의 레플리카를 선택하도록 개선했습니다. 또한 손실된 레플리카에서 오래된 파트를 제거하지 않고 대신 detach하도록 했습니다. #15701 (tavplubix).
  • Buffer 테이블에서 읽는 동안 발생하던 오류 Cannot add simple transform to empty Pipe를 수정했습니다. 이 문제는 Buffer 테이블의 구조가 대상 테이블의 구조와 다를 때, 대상 테이블이 쿼리에 대해 빈 결과를 반환하면 발생할 수 있었습니다. #15529을 해결했습니다. #15662 (Nikolai Kochetov).
  • S3 테이블 함수의 글롭 패턴 관련 버그를 수정했습니다. URL의 Region이 S3 클라이언트 구성에 적용되지 않던 문제를 해결했습니다. #15646 (Vladimir Chebotarev).
  • 읽기 전용 테이블을 분리할 때 ReadonlyReplica 메트릭을 감소하도록 했습니다. 이로써 #15598 문제가 수정되었습니다. #15592 (sundyli).
  • 단일 매개변수가 ReplicatedMergeTree에 전달되면 이를 무시하지 않고 오류를 발생시킵니다. #15516 (nvartolomei).

개선

  • 이제 클러스터 구성의 <internal_replication> 설정과 무관하게 ALTER ... ON CLUSTER 쿼리를 실행할 수 있습니다. #16075 (alesapin).
  • 테이블 생성 시 ReplicatedMergeTree 인수의 {database}, {table}, {uuid} 매크로가 확장됩니다. #16159 (tavplubix).

ClickHouse 릴리스 v20.8.4.11-lts, 2020-10-09

버그 수정

  • 쿼리 계획의 ReadFromStorage 단계에서 리소스의 해제 순서를 수정했습니다. 드문 경우 충돌이 발생할 수 있었습니다. #15610과 관련이 있을 수 있습니다. #15645 (Nikolai Kochetov).
  • VALUES, LIMIT 또는 IN 연산자의 우변에서 JSON* 함수 결과를 사용할 때 발생하던 Element ... is not a constant expression 오류를 수정했습니다. #15589 (tavplubix).
  • 오류 메시지 Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call가 발생할 가능성을 방지했습니다. 이 수정으로 #15541이 해결되었습니다. #15557 (alexey-milovidov).
  • AggregatingInOrderTransform/optimize_aggregation_in_order의 메모리 사용량을 대폭 줄였습니다. #15543 (Azat Khuzhin).
  • mutation이 MOVE 또는 REPLACE PARTITION 이후, 또는 드문 경우 DETACHDROP PARTITION 이후 존재하지 않는 일부 part를 기다리며 멈춘 상태가 될 수 있었습니다. 수정되었습니다. #15537 (tavplubix).
  • 동일한 패턴의 LIKE가 실행되면 ILIKE 연산자가 더 이상 대소문자를 구분하지 않지 않게 되는 버그를 수정했습니다. #15536 (alesapin).
  • 데이터에 없는 컬럼을 선택할 때, 해당 컬럼이 역시 데이터에 없는 다른 컬럼에 의존하는 경우 발생하던 Missing columns 오류를 수정했습니다. #15530을 수정했습니다. #15532 (alesapin).
  • DDLWorker의 이벤트 subscription 관련 버그를 수정했습니다. 이 버그는 드물게 ON CLUSTER에서 쿼리가 멈추는 원인이 될 수 있습니다. #13450에서 도입되었습니다. #15477 (alesapin).
  • boundingRatio 집계 함수의 두 번째 인수 유형이 잘못되었을 때 적절한 오류가 보고되도록 수정했습니다. #15407 (detailyang).
  • MergeTree 테이블 이름 변경 및 백그라운드 정리 중 발생하는 경쟁 조건을 수정했습니다. #15304 (alesapin).
  • system.logs가 활성화된 상태에서 서버 시작 시 드물게 발생하는 경합 상태(race condition)를 수정했습니다. #15300 (alesapin).
  • QueryLog의 MSan 보고 문제를 수정했습니다. 초기화되지 않은 메모리가 memory_usage 필드에 사용될 수 있습니다. #15258 (alexey-milovidov).
  • joinGet을 LowCardinality 타입과 함께 사용할 때 인스턴스가 비정상 종료되는 문제를 수정했습니다. 이 수정으로 #15214가 해결됩니다. #15220 (Amos Bird).
  • ALTER 쿼리 후 새로운 구조의 데이터를 Buffer에 삽입할 수 없던 테이블 엔진 Buffer의 버그를 수정했습니다. #15117을 해결합니다. #15192 (alesapin).
  • MySQL 컬럼 정의 패킷의 decimals 필드 크기를 조정했습니다. #15152 (maqroll).
  • 이미 String과 FixedString 간 비교에는 패딩 비교를 사용하고 있습니다(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333). 이 PR은 동일한 로직을 필드 비교에도 적용하여 FixedString을 기본 키(primary key)로 사용할 때의 동작을 바로잡습니다. 이로써 #14908이 수정됩니다. #15033 (Amos Bird).
  • 함수 bar가 특수하게 조작된 인수와 함께 호출될 경우 버퍼 오버플로우가 발생할 수 있었습니다. 이로써 #13926가 해결되었습니다. #15028 (alexey-milovidov).
  • Mac OS의 Docker 환경에서 clickhouse-server를 실행할 때 Atomic 데이터베이스에서 DDL 쿼리를 실행하면 발생하던 Cannot rename ... errno: 22, strerror: Invalid argument 오류를 수정했습니다. #15024 (tavplubix).
  • 이제 설정 number_of_free_entries_in_pool_to_execute_mutationnumber_of_free_entries_in_pool_to_lower_max_size_of_merge의 값은 background_pool_size와 같을 수 있습니다. #14975 (alesapin).
  • 서브쿼리에 finalizeAggregation 함수가 포함된 경우 프레디케이트 푸시다운이 작동하도록 수정했습니다. #14847을 해결합니다. #14937 (filimonov).
  • system.asynchronous_metrics에 논리 코어별 CPU 주파수를 추가했습니다. 이로써 #14923 문제가 수정되었습니다. #14924 (Alexander Kuzmenkov).
  • MaterializeMySQL 데이터베이스 엔진 사용 시 발생하던 .metadata.tmp File exists 오류를 수정했습니다. #14898 (Winter Zhang).
  • 설정 파일을 ZK에서 가져와야 하는 경우(from_zk include 옵션 사용), ZooKeeper와 통신하는 과정에서 서버가 시작 중 멈출 수 있는 문제를 수정했습니다. 이로써 #14814가 해결됩니다. #14843 (Alexander Kuzmenkov).
  • 부호 있는 타입의 축소 Int -> Int 캐스트에서 단조성을 잘못 감지하던 문제를 수정했습니다. 이로 인해 쿼리 결과가 잘못될 수 있었습니다. 이 버그는 #14513에서 드러났습니다. #14783 (Amos Bird).
  • Nullable 컬럼의 잘못된 정렬 순서를 수정했습니다. 이 수정으로 #14344가 해결됩니다. #14495 (Nikita Mikhaylov).

개선 사항

  • 이제 ALTER 쿼리를 사용해 VersionedCollapsingMergeTree의 버전 컬럼 타입을 변경할 수 있습니다. #15442 (alesapin).

ClickHouse 릴리스 v20.8.3.18-stable, 2020-09-18

버그 수정

  • extractAllGroups 함수의 일부 호출에서 “Memory limit exceeded” 오류가 발생할 수 있던 문제를 수정했습니다. 이 수정으로 #13383가 해결됩니다. #14889 (alexey-milovidov).
  • StorageFile(fd)에 INSERT를 시도할 때 발생하던 SIGSEGV를 수정했습니다. #14887 (Azat Khuzhin).
  • 조회 대상 컬럼에 다른 컬럼에 의존하는 DEFAULT 표현식이 있고, 그 다른 컬럼에도 DEFAULT가 설정되어 있으며 SELECT 쿼리에 포함되지 않고 디스크에도 존재하지 않는 경우 드물게 발생하던 오류를 수정했습니다. 이 수정은 #14531을 부분적으로 해결합니다. #14845 (alesapin).
  • ALTER ... MODIFY QUERY 실행 시 materialized view 메타데이터에 기본 데이터베이스 이름이 누락되던 문제를 수정했습니다. #14664 (tavplubix).
  • 할당 표현식에 널 허용 컬럼과 상수 값(예: UPDATE x = 42)이 포함된 ALTER UPDATE mutation으로 인해 컬럼에 잘못된 값이 기록되거나 segfault가 발생하던 버그를 수정했습니다. #13634, #14045를 해결합니다. #14646 (alesapin).
  • 결과 컬럼의 decimal scale이 잘못 계산되어 Decimal 곱셈 결과가 잘못되던 문제를 수정했습니다. #14603 (Artem Zuikov).
  • lc->isNullable() 또는 ls->getDictionaryPtr()->isNullable() 호출만으로는 올바른 결과를 반환하지 않던 문제를 해결하기 위해 checker를 추가했습니다. #14591 (myrrc).
  • StorageReplicatedMergeTree Engine의 CreateQuery 도중 Zookeeper 예외가 발생했을 때 데이터 디렉터리를 정리하도록 수정했습니다. #14563 (Bharat Nallan).
  • 매우 큰 매개변수로 인한 오버플로우 결과로 발생할 수 있던 combinator -Resample 함수의 드문 segfault를 수정했습니다. #14562 (Anton Popov).

개선

  • 진행 중인 S3 요청이 있을 때 서버 종료를 더 빠르게 수행합니다. #14858 (Pavel Kovalenko).
  • 분산 스토리지에서 다중 볼륨 스토리지 구성을 사용할 수 있도록 했습니다. #14839 (Pavel Kovalenko).
  • 진행 중인 S3 요청이 있을 때 서버 종료를 더 빠르게 수행합니다. #14496 (Pavel Kovalenko).
  • compact 파트에서 사용자 지정 코덱을 지원합니다. #12183 (Anton Popov).

ClickHouse 릴리스 v20.8.2.3-stable, 2020-09-08

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

  • 이제 OPTIMIZE FINAL 쿼리는 TTL이 생성되기 전에 추가된 파트의 TTL을 다시 계산하지 않습니다. 이를 계산하려면 한 번 ALTER TABLE ... MATERIALIZE TTL을 사용하십시오. 그 이후에는 OPTIMIZE FINAL이 TTL을 올바르게 평가합니다. 이 동작은 복제된 테이블(Replicated Table)에서는 원래 동작하지 않았습니다. #14220 (alesapin).
  • parallel_distributed_insert_select 설정이 확장되어 로컬 테이블에 INSERT를 실행하는 옵션이 추가되었습니다. 이 설정의 유형이 Bool에서 UInt64로 변경되므로 falsetrue 값은 더 이상 지원되지 않습니다. 서버 구성에 이러한 값이 있으면 서버가 시작되지 않습니다. 각각 01로 바꾸십시오. #14060 (Azat Khuzhin).
  • ODBCDriver 입력/출력 포맷 지원이 제거되었습니다. 이 포맷은 한때 ClickHouse ODBC 드라이버와 통신하는 데 사용되었지만, 이후 더 이상 권장되지 않게 되었고 현재는 오래전에 ODBCDriver2 포맷으로 대체되었습니다. #13629을 해결합니다. #13847 (hexiaoting).
  • 20.5보다 이전 버전에서 업그레이드할 때 롤링 업데이트를 수행하고, cluster에 20.5 이상 버전과 20.5 미만 버전이 함께 포함된 상태에서 이전 버전의 ClickHouse 노드를 재시작하면, 새 버전 노드가 있는 환경에서 이전 버전이 시작되면서 Part ... intersects previous part 오류가 발생할 수 있습니다. 이 오류를 방지하려면 먼저 모든 cluster 노드에 새 clickhouse-server 패키지를 설치한 다음 재시작하십시오(즉, clickhouse-server를 재시작할 때 새 버전으로 시작되도록 해야 합니다).

새로운 기능

  • config.xml에 지정된 설정에 해당하는 컬럼에 Default 압축 코덱을 지정할 수 있는 기능을 추가했습니다. 구현: #9074. #14049 (alesapin).
  • krb5cyrus-sasl 라이브러리를 사용해 Kafka에서 Kerberos 인증을 지원합니다. #12771 (Ilya Golshtein).
  • 리터럴, 리터럴 시퀀스, 복잡한 alias를 placeholder로 대체하는 normalizeQuery 함수를 추가했습니다. 유사한 쿼리에 대해 동일한 64비트 hash 값을 반환하는 normalizedQueryHash 함수도 추가했습니다. 이를 통해 쿼리 Log를 분석하는 데 도움이 됩니다. 이 변경으로 #11271이 해결되었습니다. #13816 (alexey-milovidov).
  • time_zones 테이블(table)을 추가했습니다. #13880 (Bharat Nallan).
  • 지정된 유형의 기본값을 반환하는 defaultValueOfTypeName 함수를 추가했습니다. #13877 (hcz).
  • 정수 또는 Decimal 컬럼의 10진 자릿수를 계산하는 countDigits(x) 함수를 추가했습니다. Decimal 컬럼의 값이 해당 precision 또는 지정한 precision 범위를 벗어났는지 확인하는 isDecimalOverflow(d, [p]) 함수도 추가했습니다. #14151 (Artem Zuikov).
  • medianExactLowmedianExactHigh에 대한 해당 alias와 함께 quantileExactLowquantileExactHigh 구현을 추가했습니다. #13818 (Bharat Nallan).
  • 날짜/시간 값을 지정된 날짜/시간 단위로 잘라내는 date_trunc 함수를 추가했습니다. #13888 (Vladimir Golovchenko).
  • 기본 config에 새로운 선택적 섹션 <user_directories>를 추가했습니다. #13425 (Vitaly Baranov).
  • 테이블의 SAMPLE 절을 변경할 수 있는 ALTER SAMPLE BY statement를 추가했습니다. #13280 (Amos Bird).
  • 이제 position 함수는 선택적 start_pos 인수를 지원합니다. #13237 (vdimir).

버그 수정

  • interactive mode의 클라이언트에서 진행률 표시줄로 인해 화면에 표시된 데이터가 덮어써지는 문제를 수정했습니다. 이 수정으로 #12562, #13369, #13584, #12964가 해결됩니다. #13691 (alexey-milovidov).
  • 여러 컬럼으로 정렬할 때 LowCardinality 컬럼의 정렬 순서가 잘못되던 문제를 수정했습니다. 이로써 #13958가 해결되었습니다. #14223 (Nikita Mikhaylov).
  • topK 집계 함수에서 배열 크기 오버플로우를 검사하도록 했습니다. 이 검사가 없으면 사용자가 정교하게 조작한 매개변수로 쿼리를 보내 서버 충돌을 유발할 수 있습니다. 이로써 #14452가 해결되었습니다. #14467 (alexey-milovidov).
  • part가 하나뿐인 파티션이 있는 테이블에서 잘못된 머지 할당이 발생할 수 있는 버그를 수정했습니다. #14444 (alesapin).
  • PipelineExecutor 자체에서 예외가 발생하면 쿼리 실행을 중지합니다. 이렇게 하면 드물게 발생할 수 있는 쿼리 중단 문제를 방지할 수 있습니다. #14334의 후속 작업입니다. #14402 #14334 (Nikolai Kochetov).
  • AS table_function으로 생성된 테이블에서 ALTER 쿼리 실행 중 발생하던 비정상 종료를 수정했습니다. #14212을 해결합니다. #14326 (alesapin).
  • REFRESH 명령이 포함된 ALTER LIVE VIEW 쿼리 수행 중 발생하는 예외를 수정했습니다. 라이브 view는 실험적 기능입니다. #14320 (Bharat Nallan).
  • 중첩된 인터프리터가 있는 쿼리에서 QueryPlan의 수명(EXPLAIN PIPELINE graph=1용)을 수정했습니다. #14315 (Azat Khuzhin).
  • 일부 외부 소스에서 스키마를 가져오는 동안 clickhouse-odbc-bridge에서 발생하던 세그폴트를 수정했습니다. 이 PR은 #13861을 수정합니다. #14267 (Vitaly Baranov).
  • #12277로 도입된 mark 포함 검색 관련 충돌 문제를 수정했습니다. #14225 (Amos Bird).
  • 이름이 지정된 Tuple이 포함된 테이블 생성 문제를 수정했습니다. 이 수정으로 #13027이 해결됩니다. #14143 (alexey-milovidov).
  • 매우 작은 음수 decimal 숫자의 포맷을 수정했습니다. 이로써 #14111 문제가 해결되었습니다. #14119 (Alexander Kuzmenkov).
  • DistributedFilesToInsert 메트릭 수정(0이 아니어야 하는데 0으로 표시되던 문제). #14095 (Azat Khuzhin).
  • pointInPolygon에서 다각형으로 상수 2차원 배열을 사용할 때의 문제를 수정했습니다. #14079 (Alexey Ilyukhov).
  • Poco::Exception: no space left on device의 추가 정보에 있는 잘못된 마운트 지점을 수정했습니다. #14050 (tavplubix).
  • 전역이 아닌 수준에서 실행될 때 GRANT ALL 문을 수정했습니다. #13987 (Vitaly Baranov).
  • 엔진이 있는 테이블 함수를 사용한 CREATE TABLE을 거부하도록 파서를 수정했습니다. #13940 (hcz).
  • optimize_duplicate_order_by_and_distinct setting이 활성화된 경우, DISTINCT 키워드가 있는 SELECT 쿼리와 UNION ALL을 포함한 서브쿼리에서 잘못된 결과가 발생하던 문제를 수정했습니다. #13925 (Artem Zuikov).
  • Distributed 테이블 이름 변경 시 발생할 수 있는 교착 상태 문제를 수정했습니다. #13922 (tavplubix).
  • 여러 컬럼으로 정렬할 때 FixedString 컬럼에서 정렬이 잘못되던 문제를 수정했습니다. #13182. #13887 (Nikolai Kochetov).
  • topK/topKWeighted 머지 결과(기본값이 아닌 매개변수 사용 시)가 부정확해질 수 있는 문제를 수정했습니다. #13817 (Azat Khuzhin).
  • NULL과 비교할 때 SET 유형의 INDEX가 있는 MergeTree 테이블에서 읽기에 실패하던 문제를 수정했습니다. 이 변경으로 #13686이 해결됩니다. #13793 (Amos Bird).
  • 람다에서 arrayJoin 캡처 문제(LOGICAL&#95;ERROR)를 수정했습니다. #13792 (Azat Khuzhin).
  • range 함수에 간격 오버플로우 검사를 추가했습니다. #13790 (Azat Khuzhin).
  • DROP DATABASECREATE TABLE을 동시에 실행할 때 발생하던 Directory not empty 오류를 해결했습니다. #13756 (alexey-milovidov).
  • h3KRing 함수에 범위 검사를 추가했습니다. 이 변경으로 #13633 문제가 수정되었습니다. #13752 (alexey-milovidov).
  • DETACH와 백그라운드 머지 사이의 경쟁 상태를 수정했습니다. DETACH 후 파트가 되살아날 수 있습니다. 이는 문제를 해결하지는 못했지만, 매우 드문 경우 실패하기 시작한 테스트를 추가해 해당 문제를 드러낸 #8602의 후속 작업입니다. #13746 (alexey-milovidov).
  • log_queries_min_type > QUERY_START인 경우 로깅 Settings.Names/Values를 수정했습니다. #13737 (Azat Khuzhin).
  • verbose=1일 때 /replicas_status endpoint의 응답 상태 코드를 수정했습니다. #13722 (javi santana).
  • 사용자 및 그룹 확인 시 clickhouse-server.init의 잘못된 메시지를 수정했습니다. #13711 (ylchou).
  • optimize_move_functions_out_of_any 설정에서는 any(arrayJoin()) -> arrayJoin()를 최적화하지 않습니다. #13681 (Azat Khuzhin).
  • StorageMerge를 사용한 JOIN에서 set enable_optimize_predicate_expression=1 설정 시 발생하던 충돌을 수정했습니다. #13679 (Artem Zuikov).
  • The value of 'number_of_free_entries_in_pool_to_lower_max_size_of_merge' setting 관련 오류 메시지의 오타를 수정했습니다. #13678 (alexey-milovidov).
  • 동시에 실행되는 ALTER ... REPLACE/MOVE PARTITION ... 쿼리에서 교착 상태가 발생할 수 있었습니다. 이 문제가 수정되었습니다. #13626 (tavplubix).
  • 일부 경우 cache 딕셔너리가 source에 있는 값을 반환해야 하는데 기본값을 반환하던 동작을 수정했습니다. #13624 (Nikita Mikhaylov).
  • compact 파트에서 발생하던 보조 인덱스 손상을 수정했습니다. compact 파트는 실험적 기능입니다. #13538 (Anton Popov).
  • 단일 레플리카에서 실행해야 하는 쿼리에서 ON CLUSTER 타임아웃이 너무 일찍 발생하던 문제를 수정했습니다. #6704, #7228, #13361, #11884를 수정합니다. #13450 (alesapin).
  • 함수 netloc의 잘못된 코드를 수정했습니다. 이 수정으로 #13335 문제가 해결되었습니다. #13446 (alexey-milovidov).
  • StorageMemory에서 발생할 수 있는 경쟁 상태를 수정했습니다. #13416 (Nikolai Kochetov).
  • TSV/CSVWithNames 포맷의 HTTP 프로토콜에서 헤더가 누락되거나 과도하게 포함되는 문제를 수정했습니다. 이로써 #12504가 해결됩니다. #13343 (Azat Khuzhin).
  • 데이터베이스 또는 테이블 이름에 점이 포함되어 있을 때 users.xml의 행 정책을 파싱하는 문제를 수정했습니다. 이 수정으로 #5779, #12527 문제가 해결됩니다. #13199 (Vitaly Baranov).
  • 연결이 한 번 끊긴 후 redis 딕셔너리에 다시 접근할 수 없던 문제를 수정했습니다. 이 문제는 cachedirect 딕셔너리 레이아웃에서도 발생할 수 있습니다. #13082 (Anton Popov).
  • ClickHouseDictionarySource를 사용해 원격 테이블에 쿼리할 때 적용되던 잘못된 인증 접근 검사를 제거했습니다. #12756 (sundyli).
  • 일부 경우 common subexpression elimination을 위해 서브쿼리를 올바르게 구분하지 못하던 문제를 수정했습니다. #8333. #8367 (Amos Bird).

개선

  • ALIAS 컬럼 유형에서는 CODEC를 허용하지 않도록 했습니다. #13911을 수정했습니다. #14263 (Bharat Nallan).
  • 딕셔너리 업데이트가 완료될 때까지 기다릴 때는 하드코딩된 값 대신 query_wait_timeout_milliseconds 설정에 지정된 timeout 값을 사용합니다. #14105 (Nikita Mikhaylov).
  • 실수로 index_granularity_bytes 설정값이 너무 낮은 테이블을 생성하지 않도록 보호하는 min_index_granularity_bytes 설정을 추가했습니다. #14139 (Bharat Nallan).
  • 이제 서로 다른 ZooKeeper를 사용하는 클러스터에서 파티션을 가져올 수 있습니다: ALTER TABLE table_name FETCH PARTITION partition_expr FROM 'zk-name:/path-in-zookeeper'. 이는 새 클러스터로 데이터를 옮길 때 유용합니다. #14155 (Amos Bird).
  • 매우 작은 블록이 매우 많이 있는 경우(그럴 가능성은 낮습니다) Memory 테이블의 성능이 약간 더 향상되었습니다. 이 아이디어의 제안자: Mark Papadakis. #14043를 해결합니다. #14056 (alexey-milovidov).
  • 조건부 집계 함수(예: avgIf, sumIf, maxIf)는 행이 없고 널 허용 인수를 사용하는 경우 NULL을 반환해야 합니다. #13964 (Winter Zhang).
  • -Resample combinator의 제한값을 1M으로 늘렸습니다. #13947 (Mikhail f. Shiryaev).
  • 비정상적으로 작고 잘못된 메시지를 수신했을 때 Kafka 테이블 엔진의 메시지 처리가 중단되던 AvroConfluent 포맷 오류를 수정했습니다. #13941 (Gervasio Varela).
  • 긴 쿼리에서 잘못된 오류가 표시되던 문제를 수정했습니다. 올바른 쿼리에도 Max query size exceeded 대신 구문 오류가 발생할 수 있었습니다. #13928 (Nikolai Kochetov).
  • TabSeparated 포맷에서 NULL 값에 대한 오류 메시지를 개선했습니다. #13906 (jiang tao).
  • arrayCompact 함수는 배열 요소의 유형이 Float32/Float64인 경우 NaN을 비트 단위로 비교합니다. 이전 버전에서는 배열 요소의 유형이 Float32/Float64이면 NaN이 항상 서로 같지 않은 것으로 처리되었고, Nullable(Float64)처럼 유형이 더 복잡한 경우에는 항상 같은 것으로 처리되었습니다. 이 변경으로 #13857가 해결되었습니다. #13868 (alexey-milovidov).
  • lgamma 함수의 데이터 레이스 문제를 수정했습니다. 이 문제는 tsan에서만 발견되었고, 실제로는 부작용이 전혀 없었습니다. #13842 (Nikolai Kochetov).
  • 배열을 필드로 처리할 때 쿼리가 지나치게 느려지는 것을 방지합니다. 대신 예외를 발생시킵니다. #13753 (alexey-milovidov).
  • Redis 딕셔너리 소스용 requirepass 인증을 추가했습니다. #13688 (Ivan Torgashov).
  • MergeTree Write-Ahead-Log (WAL) 덤프 도구를 추가했습니다. WAL은 실험 기능입니다. #13640 (BohuTANG).
  • 이전 버전에서는 lcm 함수가 특별히 조작된 인수로 호출될 경우 디버그 build에서 assertion violation이 발생할 수 있었습니다. 이 변경으로 #13368 문제가 수정되었습니다. #13510 (alexey-milovidov).
  • 더 많은 경우에서 toDate/toDateTime 함수의 단조성을 보장합니다. 단조성 정보는 인덱스 분석에 사용되며(더 복잡한 쿼리도 인덱스를 사용할 수 있습니다). 이제 입력 인수가 더 자연스럽게 포화 처리되어 단조성이 개선되었습니다. #13497 (Amos Bird).
  • 사용자 정의 설정에 복합 식별자를 지원합니다. 사용자 정의 설정은 ClickHouse 코드베이스를 다른 코드베이스와 통합하기 위한 접점이며(ClickHouse 자체에는 이점이 없음) #13496 (Vitaly Baranov).
  • 파트를 DiskLocal에서 DiskS3로 병렬 이동할 수 있습니다. DiskS3는 실험적 기능입니다. #13459 (Pavel Kovalenko).
  • 혼합 세분화 수준 파트를 기본값으로 활성화했습니다. #13449 (alesapin).
  • S3 리디렉션 시 원격 호스트를 올바르게 검사하도록 개선(보안 관련 사항). #13404 (Vladimir Chebotarev).
  • QueryTimeMicroseconds, SelectQueryTimeMicroseconds, InsertQueryTimeMicroseconds가 system.events에 추가되었습니다. #13336 (ianton-ru).
  • Decimal의 음수 지수 절댓값이 너무 클 때 발생하는 디버그 assertion 문제를 수정했습니다. #13188을 해결했습니다. #13228 (alexey-milovidov).
  • DiskS3용 캐시 계층이 추가되었습니다(로컬 디스크의 mark 및 인덱스 파일용 캐시). DiskS3는 실험적 기능입니다. #13076 (Pavel Kovalenko).
  • 이제 readline이 이력을 파일에 저장하도록 수정했습니다. #13600 (Amos Bird).
  • 기본적으로 system 데이터베이스를 Atomic 엔진으로 생성하도록 변경했습니다(어디서나 Atomic 데이터베이스 엔진을 기본값으로 활성화하기 위한 준비 작업입니다). #13680 (tavplubix).

성능 개선

  • LowCardinality를 사용하는 매우 짧은 쿼리를 소폭 최적화했습니다. #14129 (Anton Popov).
  • 설정 max_insert_threads가 지정되면 테이블 엔진 Null, Memory, Distributed, Buffer에 대해 병렬 INSERT를 활성화했습니다. #14120 (alexey-milovidov).
  • 파트 스캔 중 max_rows_to_read 제한을 초과하면 즉시 실패하도록 했습니다. 이 변경의 목적은 max_rows_to_read를 이미 초과한 것이 분명한 경우, 선택된 모든 파트에 대한 범위 스캔을 건너뛰는 것입니다. 이 변경은 많은 수의 파트에 대한 쿼리에서 특히 두드러집니다. #13677 (Roman Khavronenko).
  • UInt8/UInt16 키에 대한 집계 성능을 소폭 개선했습니다. #13099 (alexey-milovidov).
  • Array(LowCardinality(T))와 상수 우변 인수에 대해 has(), indexOf(), countEqual() 함수를 최적화했습니다. #12550 (myrrc).
  • 단순한 INSERT SELECT 쿼리를 수행할 때 max_threads를 1 또는 max_insert_threads로 자동 설정하고, max_block_sizemin_insert_block_size_rows로 설정합니다. #5907와 관련됩니다. #12195 (flynn).

실험적 기능

  • ClickHouse는 MySQL 레플리카로 동작할 수 있습니다. 이는 MaterializeMySQL 데이터베이스 엔진으로 구현되었습니다. #4006. #10851 (Winter Zhang).
  • Int128, Int256, UInt256 타입과 관련 함수를 추가했습니다. Decimal을 Decimal256까지 확장했으며, precision은 최대 76자리입니다. 새 타입은 allow_experimental_bigint_types setting에서 사용할 수 있습니다. 동작이 매우 느리고 품질도 좋지 않습니다. 구현도 완전하지 않습니다. 이 기능은 사용하지 마십시오. #13097 (Artem Zuikov).

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

  • 단일 실행 파일만 있는 경우에 유용한 clickhouse install 스크립트가 추가되었습니다. #13528 (alexey-milovidov).
  • clickhouse 바이너리를 구성 없이 실행할 수 있게 했습니다. #13515 (alexey-milovidov).
  • 코드의 오타를 검사하는 codespell check를 활성화했습니다. #13513 #13511 (alexey-milovidov).
  • CI에서 .sh 테스트용 린터인 Shellcheck를 활성화했습니다. 이로써 #13168이 해결되었습니다. #13530 #13529 (alexey-milovidov).
  • 자동 재구성 대신 구성 단계가 실패하도록 하는 CMake 옵션을 추가했으며, 기본적으로 활성화됩니다. #13687 (Konstantin).
  • system.build_options의 TZDATA_VERSION을 통해 내장된 tzdata 버전을 확인할 수 있습니다. #13648 (filimonov).
  • 빌드 과정에서 system.time_zones 테이블 생성이 개선되었습니다. #14209를 해결했습니다. #14215 (filimonov).
  • 패키지 리포지토리의 최신 tzdata를 사용해 ClickHouse를 빌드합니다. #13623 (alexey-milovidov).
  • skip_list.json에 js 스타일 주석을 쓸 수 있는 기능을 추가했습니다. #14159 (alesapin).
  • 복사해 붙여 넣은 GPL 코드가 없도록 합니다. #13514 (alexey-milovidov).
  • 테스트용 Docker 이미지가 test-base parent를 사용하도록 변경했습니다. #14167 (Ilya Yatsishin).
  • docker-compose 클러스터 구동 시 재시도 로직 추가; COMPOSE_HTTP_TIMEOUT 증가. #14112 (vzakaznikov).
  • 더 많은 버그를 찾아내기 위해 스트레스 테스트에서 system.text_log를 활성화했습니다. #13855 (Nikita Mikhaylov).
  • Testflows LDAP 모듈: openldap4용 누락된 인증서와 dhparam.pem을 추가했습니다. #13780 (vzakaznikov).
  • ZooKeeper는 CI 인프라에서 단위 테스트로 안정적으로 검증할 수 없습니다. 실제 ZooKeeper와의 상호작용을 단위 테스트에 사용하는 것 자체가 처음부터 바람직하지 않습니다(단위 테스트는 복잡한 분산 시스템을 검증하기 위한 것이 아닙니다). 이 목적에는 이미 통합 테스트를 사용하고 있으며, 통합 테스트가 더 적합합니다. #13745 (alexey-milovidov).
  • Style check용 Docker image를 추가했습니다. 모든 docker 및 docker compose 파일이 docker 디렉터리에 위치하는지 확인하는 Style check를 추가했습니다. #13724 (Ilya Yatsishin).
  • Mac OS에서 cassandra build 문제를 수정했습니다. #13708 (Ilya Yatsishin).
  • 공유 빌드의 링크 오류를 수정했습니다. #13700 (Amos Bird).
  • RBAC에서 정상적으로 작동하는지 확인할 수 있도록 LDAP 사용자 authentication 테스트 모음을 업데이트했습니다. #13656 (vzakaznikov).
  • contrib/aws에서 -DENABLE_CURL_CLIENT를 제거했습니다. #13628 (Vladimir Chebotarev).
  • ClickHouse 노드의 헬스 체크 timeout 시간을 늘리고, 비정상 컨테이너가 발견되면 docker-compose logs를 덤프하도록 지원을 추가했습니다. #13612 (vzakaznikov).
  • #10977이 무효임을 확인했습니다. #13539 (Amos Bird).
  • robot-clickhouse의 PR은 제외합니다. #13489 (Nikita Mikhaylov).
  • Dockerfile을 통합 테스트에서 docker/test 디렉터리로 옮겼습니다. docker_compose 파일은 runner docker 컨테이너에서 사용할 수 있습니다. Docker 이미지는 통합 테스트가 아니라 CI에서 빌드됩니다. #13448 (Ilya Yatsishin).

ClickHouse 릴리스 20.7

ClickHouse 릴리스 v20.7.2.30-안정, 2020-08-31

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

  • 인수 중 하나 이상이 부동소수점 수인 함수 modulo(연산자 %)는 이제 두 인수를 정수로 변환하지 않고, 부동소수점 수에 대해 직접 나눗셈의 나머지를 계산합니다. 이로써 대부분의 DBMS와 동작이 호환됩니다. 이는 Date 및 DateTime 데이터 타입에도 적용됩니다. 별칭 mod도 추가되었습니다. 이 변경으로 #7323이 해결되었습니다. #12585 (alexey-milovidov).
  • 제로 날짜 Date/DateTime 값을 0000-00-000000-00-00 00:00:00으로 특별 출력하던 방식은 더 이상 권장되지 않습니다. #12442 (alexey-milovidov).
  • 함수 groupArrayMoving*는 분산 쿼리에서 동작하지 않았습니다. 또한 결과가 잘못된 데이터 타입(가장 큰 타입으로 승격되지 않음)으로 계산되고 있었습니다. 함수 groupArrayMovingAvgavg 함수와 일관되지 않게 정수를 반환하고 있었습니다. 이 변경으로 #12568이 수정되었습니다. #12622 (alexey-milovidov).
  • MergeTree 설정에 대한 sanity check를 추가했습니다. 설정이 올바르지 않으면 server는 시작하거나 테이블 생성을 거부하고, 자세한 설명을 출력합니다. #13153 (alexey-milovidov).
  • 사용자가 background_pool_sizenumber_of_free_entries_in_pool_to_execute_mutation 또는 number_of_free_entries_in_pool_to_lower_max_size_of_merge보다 작은 값으로 설정하는 경우를 방지합니다. 이런 경우 ALTER가 동작하지 않거나 머지의 최대 크기가 지나치게 제한될 수 있습니다. 이때 어떻게 해야 하는지 설명하는 예외를 발생시킵니다. 이 변경으로 #10897이 해결되었습니다. #12728 (alexey-milovidov).
  • 20.5보다 오래된 버전에서 업그레이드할 때, 롤링 업데이트를 수행하여 클러스터에 20.5 이상 버전과 20.5 미만 버전이 함께 존재하는 상태에서 구버전 ClickHouse 노드를 재시작하면, 최신 버전 노드가 있는 환경에서 구버전이 시작되면서 Part ... intersects previous part 오류가 발생할 수 있습니다. 이 오류를 방지하려면 먼저 모든 클러스터 노드에 새 clickhouse-server 패키지를 설치한 다음 재시작하십시오(즉, clickhouse-server가 재시작될 때 새 버전으로 시작되도록 해야 합니다).

새 기능

  • 다수의 Polygon(세계 지도)으로 구성된 딕셔너리에서 좌표를 기반으로 지역을 찾는 효율적인 “역지오코딩” lookup을 제공하는 Polygon 딕셔너리 타입을 추가했습니다. 낮은 CPU 및 메모리 사용량을 유지할 수 있도록 재귀 그리드를 사용하는 정교하게 최적화된 알고리즘을 사용합니다. #9278 (achulkov2).
  • 사전 구성된 사용자에 대해 LDAP authentication(“Simple Bind” 메서드) 지원을 추가했습니다. #11234 (Denis Glazachev).
  • 일부 ALTER TABLE ... PARTITION ... 쿼리(현재 ATTACHFREEZE)에서 영향을 받은 파트 정보를 출력하는 설정 alter_partition_verbose_result를 도입했습니다. #8076을 해결했습니다. #13017 (alesapin).
  • 베이지안 A/B 테스트를 위한 bayesAB 함수를 추가했습니다. #12327 (achimbab).
  • 치명적 오류의 스택 트레이스를 수집하는 system.crash_log 테이블을 추가했습니다. 이 테이블은 비어 있어야 합니다. #12316 (alexey-milovidov).
  • 기본 데이터베이스와 출력 형식을 설정하는 데 사용할 수 있는 HTTP 헤더 X-ClickHouse-DatabaseX-ClickHouse-Format을 추가했습니다. #12981 (hcz).
  • SimpleAggregateFunctionminMapmaxMap 함수 지원을 추가했습니다. #12662 (Ildus Kurbangaliev).
  • 디스크의 데이터를 수정하는 ALTER 쿼리의 실행을 제한하는 설정 allow_non_metadata_alters를 추가했습니다. 기본적으로 비활성화되어 있습니다. #11547을 해결했습니다. #12635 (alesapin).
  • 지정한 포맷을 통해 임의의 표현식을 문자열로 변환할 수 있도록 formatRow 함수를 추가했습니다. 이 함수는 SQL 출력 조작에 유용하며 columns 함수와 함께 사용하면 매우 다양하게 활용할 수 있습니다. #12574 (Amos Bird).
  • MySQL 호환성을 위해 FROM_UNIXTIME 함수를 추가했습니다. 관련 이슈는 12149입니다. #12484 (flynn).
  • allow_nullable_key 테이블 설정이 활성화된 경우 MergeTree 테이블에서 널 허용 타입을 키로 사용할 수 있도록 허용합니다. #5319를 해결했습니다. #12433 (Amos Bird).
  • COS 통합. #12386 (fastio).
  • 키별로 매핑된 값을 더하거나 빼기 위한 mapAddmapSubtract 함수를 추가했습니다. #11735 (Ildus Kurbangaliev).

버그 수정

  • 단일 레플리카에서 실행되어야 하는 쿼리에서 ON CLUSTER 시간 초과가 너무 일찍 발생하던 문제를 수정했습니다. #6704, #7228, #13361, #11884. #13450 (alesapin).
  • #12277에서 도입된 mark 포함 검색 중 발생하던 크래시를 수정했습니다. #14225 (Amos Bird).
  • 서버 충돌로 이어질 수 있는 cache 레이아웃의 외부 딕셔너리 경쟁 상태를 수정했습니다. #12566 (alesapin).
  • 대화형 모드의 클라이언트에서 진행률 표시줄이 화면에 표시된 데이터를 덮어쓰는 문제를 수정했습니다. 이 수정으로 #12562, #13369, #13584, #12964가 해결되었습니다. #13691 (alexey-milovidov).
  • ORDER BY에 여러 컬럼을 사용할 때 LowCardinality 컬럼의 정렬 순서가 잘못 적용되던 문제를 수정했습니다. 이로써 #13958 문제가 해결됩니다. #14223 (Nikita Mikhaylov).
  • cache 딕셔너리에서 query_wait_timeout_milliseconds 설정보다 잘못 우선 적용되던 하드코딩된 timeout을 제거했습니다. #14105 (Nikita Mikhaylov).
  • Poco::Exception: no space left on device에 대한 추가 정보에서 잘못된 마운트 지점을 수정했습니다. #14050 (tavplubix).
  • optimize_duplicate_order_by_and_distinct setting이 활성화된 경우, 서브쿼리에도 DISTINCT가 있을 때 DISTINCT 키워드가 포함된 select 쿼리에서 발생하던 잘못된 쿼리 최적화를 수정했습니다. #13925 (Artem Zuikov).
  • Distributed 테이블 이름 변경 시 발생할 수 있는 잠재적인 교착 상태를 수정했습니다. #13922 (tavplubix).
  • ORDER BY에 여러 컬럼을 사용할 때 FixedString 컬럼의 잘못된 정렬 문제를 수정했습니다. #13182를 해결했습니다. #13887 (Nikolai Kochetov).
  • 기본값이 아닌 매개변수를 사용할 때 topK/topKWeighted 집계의 정밀도가 낮아질 수 있는 문제를 수정했습니다. #13817 (Azat Khuzhin).
  • NULL과 비교할 때 SET 유형의 INDEX가 있는 MergeTree 테이블에서 읽기 작업이 실패하던 문제를 수정했습니다. 이 수정은 #13686을 해결합니다. #13793 (Amos Bird).
  • 함수 range()의 간격 오버플로우를 수정했습니다. #13790 (Azat Khuzhin).
  • DROP DATABASECREATE TABLE을 동시에 실행할 때 발생하는 Directory not empty 오류를 수정했습니다. #13756 (alexey-milovidov).
  • h3KRing 함수에 범위 검사를 추가했습니다. 이 변경으로 #13633 문제가 해결됩니다. #13752 (alexey-milovidov).
  • DETACH와 백그라운드 머지 사이의 경쟁 상태를 수정했습니다. DETACH 후에도 파트가 다시 나타날 수 있었습니다. 이는 #8602의 후속 작업으로, 해당 이슈를 해결하지는 못했지만 매우 드물게 실패하기 시작한 테스트를 추가해 문제를 드러냈습니다. #13746 (alexey-milovidov).
  • log_queries_min_typeQUERY_START보다 큰 경우 로깅 Settings.Names/Values를 수정했습니다. #13737 (Azat Khuzhin).
  • 사용자 및 그룹 확인 시 clickhouse-server.init의 잘못된 메시지를 수정했습니다. #13711 (ylchou).
  • optimize_move_functions_out_of_any에서 any(arrayJoin())arrayJoin()로 최적화하지 않도록 했습니다. #13681 (Azat Khuzhin).
  • ALTER ... REPLACE/MOVE PARTITION ... 쿼리가 동시에 실행될 때 발생할 수 있는 교착 상태를 수정했습니다. #13626 (tavplubix).
  • 캐시 딕셔너리가 때때로 source에 있는 값 대신 기본값을 반환하던 문제를 수정했습니다. #13624 (Nikita Mikhaylov).
  • compact parts의 보조 인덱스 손상 문제를 수정했습니다 (compact parts는 실험적 기능입니다). #13538 (Anton Popov).
  • 함수 netloc의 잘못된 코드를 바로잡았습니다. 이로써 #13335이 해결됩니다. #13446 (alexey-milovidov).
  • parseDateTimeBestEffort 함수에 Unix timestamp가 인수로 전달되었을 때 발생하던 오류를 수정했습니다. 이로써 #13362가 해결되었습니다. #13441 (alexey-milovidov).
  • NULL 요소가 있는 튜플 비교 시 잘못된 반환 유형을 수정했습니다. #12461을 수정합니다. #13420 (Nikolai Kochetov).
  • 잘못된 최적화로 인해 SET optimize_move_functions_out_of_any = 1 설정과 any() 내부의 별칭 때문에 aggregate function any(x) is found inside another aggregate function in query 오류가 발생하던 문제를 수정했습니다. #13419 (Artem Zuikov).
  • StorageMemory에서 발생할 수 있는 경쟁 상태(race condition)를 수정했습니다. #13416 (Nikolai Kochetov).
  • ArrowParquet 포맷에서 쿼리가 0개의 행을 반환할 때 빈 출력이 생성되던 문제를 수정했습니다. 이 포맷에서는 빈 출력이 유효하지 않기 때문입니다. #13399 (hcz).
  • 상수 컬럼과 프라이머리 키의 접두사가 ORDER BY 절에 포함된 select 쿼리 문제를 수정했습니다. #13396 (Anton Popov).
  • clickhouse-localPrettyCompactMonoBlock를 수정했습니다. PrettyCompactMonoBlock에서 extremes/합계 문제를 수정했습니다. #7746을 해결했습니다. #13394 (Azat Khuzhin).
  • system.text_log의 데드락을 해결했습니다. #12452 (alexey-milovidov). 이는 #12339의 일부입니다. 이로써 #12325도 해결되었습니다. #13386 (Nikita Mikhaylov).
  • File(TSVWithNames*)를 수정했습니다(헤더가 여러 번 기록되는 문제). clickhouse-local --format CSVWithNames*를 수정했습니다(헤더가 없고 #12197 이후부터 동작이 깨진 문제). 행이 0개인 clickhouse-local --format CSVWithNames*도 수정했습니다(헤더가 없는 문제). #13343 (Azat Khuzhin).
  • 함수 groupArrayMovingSum가 빈 state를 역직렬화할 때 발생하는 segfault를 수정했습니다. #13339을 해결합니다. #13341 (alesapin).
  • JOIN ON 절에서 arrayJoin() 함수를 사용하면 오류가 발생합니다. #13330 (Artem Zuikov).
  • LEFT ASOF JOIN에서 join_use_nulls=1일 때 발생하는 충돌 문제를 수정했습니다. #13291 (Artem Zuikov).
  • 지연된 레플리카에서 온 쿼리의 경우 발생할 수 있는 오류 Totals having transform was already added to pipeline를 수정했습니다. #13290 (Nikolai Kochetov).
  • 사용자가 h3ToChildren 함수에 특수하게 조작된 인수를 전달할 경우 서버가 충돌할 수 있습니다. 이 변경으로 #13275가 수정되었습니다. #13277 (alexey-milovidov).
  • NaN 값이 있는 Float 타입에서 호출되는 uniqExact, topK, sumDistinct 및 유사한 집계 함수의 잠재적인 성능 저하와 다소 부정확한 결과 문제를 수정했습니다. 또한 디버그 빌드에서 assert를 유발하던 문제도 수정했습니다. 이 수정은 #12491을 해결합니다. #13254 (alexey-milovidov).
  • 프라이머리 키에 단조 함수가 포함된 표현식이 있고, 쿼리에 타입이 다른 상수와의 비교가 포함된 경우 KeyCondition의 assertion을 수정했습니다. 이로써 #12465가 해결되었습니다. #13251 (alexey-milovidov).
  • roundUpToPowerOfTwoOrZero() 함수에서 MSB가 설정된 숫자에 대해서는 입력된 숫자를 그대로 반환합니다. 이는 배열 크기 오버플로우 시 발생할 수 있는 잠재적인 오류를 방지합니다. #13234 (Azat Khuzhin).
  • 리터럴 NULL이 아닌 cond에 널 허용 constexpr을 사용할 때의 if 함수를 수정했습니다. #12463를 수정했습니다. #13226 (alexey-milovidov).
  • 배열 요소와 배열 첨자가 모두 널 허용인 경우 arrayElement 함수에서 발생하던 assert를 수정했습니다. 이 수정으로 #12172가 해결됩니다. #13224 (alexey-milovidov).
  • 상수 인수를 사용하는 DateTime64 변환 함수를 수정했습니다. #13205 (Azat Khuzhin).
  • 데이터베이스 또는 테이블 이름에 점(.)이 포함된 경우 users.xml에서 행 정책(row policies)을 파싱하지 못하던 문제를 수정했습니다. 이로써 #5779, #12527이 해결됩니다. #13199 (Vitaly Baranov).
  • 연결이 한 번 끊긴 후 redis 딕셔너리에 접근할 수 없던 문제를 수정했습니다. 이 문제는 cachedirect 딕셔너리 레이아웃에서 발생할 수 있습니다. #13082 (Anton Popov).
  • 함수 사용 시 잘못된 인덱스 분석을 수정했습니다. 이 문제로 인해 MergeTree 테이블을 읽을 때 일부 데이터 파트가 건너뛰어질 수 있었습니다. #13060을 수정했습니다. #12406을 수정했습니다. #13081 (Anton Popov).
  • now(), now64(), randConstant()처럼 쿼리 범위 내에서는 결정적(deterministic)이지만 쿼리 간에는 결정적이지 않은 함수를 사용하는 원격 쿼리에서, Cannot convert column because it is constant but values of constants are different in source and result 오류를 수정했습니다. #11327을 수정했습니다. #13075 (Nikolai Kochetov).
  • ORDER BY Tuple과 작은 LIMIT이 있는 쿼리에서 발생할 수 있던 크래시를 수정했습니다. #12623를 해결했습니다. #13009 (Nikolai Kochetov).
  • UNIONJOIN이 포함된 쿼리의 Block structure mismatch 오류를 수정했습니다. #12602 문제를 해결했습니다. #12989 (Nikolai Kochetov).
  • 하나의 시간 인터벌 동안 만료가 두 개 이상의 파티션에 영향을 미칠 경우 제대로 동작하지 않던 merge_with_ttl_timeout 로직을 수정했습니다. (작성자: @excitoon). #12982 (Alexander Kazakov).
  • DDL 쿼리로 생성된 range hashed 딕셔너리의 컬럼 중복 문제를 수정했습니다. 이 변경으로 #10605 문제가 해결되었습니다. #12857 (alesapin).
  • 로컬 레플리카에서 SELECT할 때 스레드 수를 불필요하게 제한하던 문제를 수정했습니다. #12840 (Nikolai Kochetov).
  • ALTER DELETEALTER MODIFY COLUMN 쿼리가 동시에 실행될 때 단일 mutation으로 처리되는 드문 버그를 수정했습니다. 이 버그로 인해 count.txt의 행 수가 잘못 기록되고, 그 결과 part의 데이터도 잘못될 수 있습니다. 또한 ALTER RENAME COLUMNALTER ADD COLUMN이 동시에 실행될 때 발생하는 사소한 버그도 수정했습니다. #12760 (alesapin).
  • 원격 테이블을 쿼리할 때 clickhouse 딕셔너리 소스에서 잘못된 자격 증명이 사용되던 문제를 수정했습니다. #12756 (sundyli).
  • CAST(Nullable(String), Enum()) 문제를 수정했습니다. #12745 (Azat Khuzhin).
  • IN 절에서 함수로 해석되는 큰 튜플의 성능을 개선했습니다. 이는 어떤 특별한 이유로 사용자가 WHERE x IN (1, 2, ...) 대신 WHERE x IN tuple(1, 2, ...)를 작성하는 경우입니다. #12700 (Anton Popov).
  • input_format_parallel_parsing의 메모리 추적 문제를 수정했습니다(스레드를 그룹에 연결하는 방식으로). #12672 (Azat Khuzhin).
  • any(func(<lambda>))의 경우 optimize_move_functions_out_of_any=1 최적화가 잘못 적용되는 문제를 수정했습니다. #12664 (Artem Zuikov).
  • const 표현식이 있는 블룸 필터 인덱스 관련 #10572 문제를 수정했습니다. #12659 (Winter Zhang).
  • 브로커를 사용할 수 없을 때뿐 아니라 그 밖의 경우에도 StorageKafka에서 발생하는 SIGSEGV를 수정했습니다. #12658 (Azat Khuzhin).
  • 함수 ifArray(UUID) 인수 지원을 추가했습니다. 이로써 #11066 문제가 수정되었습니다. #12648 (alexey-milovidov).
  • 이제 CREATE USER IF NOT EXISTS는 사용자가 이미 존재해도 Exception을 발생시키지 않습니다. 이로써 #12507 문제가 수정되었습니다. #12646 (Vitaly Baranov).
  • 예기치 않은 상황(예: UInt64 컬럼에서 값을 빼는 경우)에서 ALTER ... UPDATE 수행 중 There is no supertype... 예외가 발생할 수 있습니다. 이 변경으로 #7306이 수정되었습니다. 이 변경으로 #4165가 수정되었습니다. #12633 (alexey-milovidov).
  • 외부 정렬을 사용하는 쿼리에서 발생할 수 있는 Pipeline stuck 오류를 수정했습니다. #12617을 해결했습니다. #12618 (Nikolai Kochetov).
  • OPTIMIZE DEDUPLICATE에서 발생하던 오류 Output of TreeExecutor is not sorted를 수정했습니다. #11572를 수정했습니다. #12613 (Nikolai Kochetov).
  • 함수 any 결과의 별칭(alias)이 쿼리 최적화 과정에서 사라질 수 있던 문제를 수정했습니다. #12593 (Anton Popov).
  • DROP TABLE 시 분산 테이블의 데이터(async INSERT에서 생성된 block)를 삭제합니다. #12556 (Azat Khuzhin).
  • 이제 파일 checksums.txt가 없을 때 ClickHouse가 파트의 체크섬을 다시 계산합니다. #9827 이후 동작하지 않던 문제였습니다. #12545 (alesapin).
  • enable_mixed_granularity_parts=1일 때 ALTER DELETE 쿼리 후 기존 파트가 손상되던 버그를 수정했습니다. #12536을 해결합니다. #12543 (alesapin).
  • 데이터 중복을 일으킬 수 있던 라이브 view 테이블의 race condition을 수정했습니다. LIVE VIEW는 실험적 기능입니다. #12519 (vzakaznikov).
  • AggregateFunction(avg, ...) 값의 바이너리 형식에 대한 하위 호환성 문제를 수정했습니다. 이 변경으로 #12342 문제가 해결됩니다. #12486 (alexey-milovidov).
  • 딕셔너리 키 표현식을 기준으로 딕셔너리와 JOIN할 때 발생하던 크래시를 수정했습니다: t JOIN dict ON expr(dict.id) = t.id. 이 경우에는 딕셔너리 JOIN 최적화를 비활성화했습니다. #12458 (Artem Zuikov).
  • 매우 큰 LIMIT 또는 OFFSET이 지정되었을 때 발생하는 오버플로우를 수정했습니다. 이로써 #10470이 해결되었습니다. 이로써 #11372가 해결되었습니다. #12427 (alexey-milovidov).
  • kafka: batch 중간에 오류가 있는 메시지가 있을 때 발생하던 SIGSEGV 문제를 수정했습니다. #12302 (Azat Khuzhin).

개선 사항

  • ZooKeeper에 저장되는 로그 양을 줄입니다. 서버/테이블/삽입 작업이 많은 환경에서 레플리카가 오프라인인 경우 ZooKeeper 노드가 과도하게 증가하는 것을 방지합니다. #13100 (alexey-milovidov).
  • 이제 ALTER 또는 mutation 중 오류가 발생하면 예외가 클라이언트에 전달됩니다. #11329가 해결되었습니다. #12666 (alesapin).
  • QueryTimeMicroseconds, SelectQueryTimeMicroseconds, InsertQueryTimeMicrosecondssystem.events와 system.metrics, processes, query_log 등에 추가했습니다. #13028 (ianton-ru).
  • SelectedRowsSelectedBytessystem.events와 함께 system.metrics, processes, query_log 등에도 추가되었습니다. #12638 (ianton-ru).
  • system.query_logcurrent_database 정보가 추가되었습니다. #12652 (Amos Bird).
  • 입력 형식으로 TabSeparatedRaw를 허용합니다. #12009 (hcz).
  • 이제 joinGet에서 다중 키 조회를 지원합니다. #12418 (Amos Bird).
  • NULL이 포함된 배열에서도 *Map 집계 함수가 동작할 수 있도록 합니다. #13157 문제를 수정합니다. #13225 (alexey-milovidov).
  • DateTime 값을 parsing할 때 해당 시간대에서 음수 Unix timestamp가 되는 경우(예: 모스크바의 1970-01-01 00:00:00) 오버플로우가 발생하지 않도록 수정했습니다. 대신 0으로 고정됩니다. 이 변경으로 #3470이 수정되었습니다. 이 변경으로 #4172가 수정되었습니다. #12443 (alexey-milovidov).
  • AvroConfluent: Kafka tombstone 레코드 건너뛰기 - 손상된 레코드도 건너뛰기 지원 #13203 (Andrew Onyshchuk).
  • 긴 쿼리에서 잘못된 오류가 표시되는 문제를 수정했습니다. 올바른 쿼리에서도 Max query size exceeded 대신 구문 오류가 발생할 수 있었습니다. #13928 (Nikolai Kochetov).
  • lgamma 함수의 데이터 레이스를 수정했습니다. 이 문제는 tsan에서만 발견되었고, 실제 부작용은 발생하지 않았습니다. #13842 (Nikolai Kochetov).
  • ATTACH/ALTER/CREATE QUOTA SQL 문의 ‘Week’ 인터벌 포맷 문제를 수정했습니다. #13417 (vladimir-golovchenko).
  • 이제 compact part 처리 과정에서 손상된 파트를 발견하면 해당 파트도 보고됩니다. Compact parts는 실험적 기능입니다. #13282 (Amos Bird).
  • geohashesInBox의 assert를 수정했습니다. 이로써 #12554가 해결됩니다. #13229 (alexey-milovidov).
  • parseDateTimeBestEffort의 assert를 수정했습니다. 이 변경으로 #12649 문제가 해결되었습니다. #13227 (alexey-milovidov).
  • Processors/PipelineExecutor의 소규모 최적화: 그렇게 하는 것이 합리적일 때 루프를 빠져나오도록 했습니다. #13058 (Mark Papadakis).
  • TABLE 키워드 없이도 TRUNCATE를 지원합니다. #12653 (Winter Zhang).
  • 기본값으로 explain 쿼리 포맷이 덮어써지던 문제를 수정했습니다. 이로써 #12541을 해결합니다. #12541 (BohuTANG).
  • 보다 표준적인 방식으로 JOIN kind와 유형을 지정할 수 있습니다. 즉, SEMI LEFT JOIN 대신 LEFT SEMI JOIN을 사용할 수 있습니다. 현재는 두 방식 모두 올바릅니다. #12520 (Artem Zuikov).
  • multiple_joins_rewriter_version의 기본값이 2로 변경되었습니다. 이에 따라 컬럼 이름을 인식하는 새로운 다중 조인 재작성기가 활성화됩니다. #12469 (Artem Zuikov).
  • S3 스토리지 요청에 대한 메트릭 여러 개를 추가했습니다. #12464 (ianton-ru).
  • clickhouse-benchmark에서 --secure 인수를 사용할 때 올바른 기본 보안 포트를 사용하도록 했습니다. 이 변경으로 #11044가 수정되었습니다. #12440 (alexey-milovidov).
  • Log, TinyLog, StripeLog 엔진에서 삽입 오류 발생 시 롤백을 수행합니다. 이전 버전에서는 삽입 오류가 발생하면 테이블 상태가 일관되지 않게 될 수 있었습니다(이는 문서화된 동작이며, 이러한 테이블 엔진에서는 정상입니다). 이 변경으로 #12402가 수정되었습니다. #12426 (alexey-milovidov).
  • Atomic 데이터베이스 엔진에 RENAME DATABASERENAME DICTIONARY를 구현했습니다 - ReplicatedMergeTree의 ZooKeeper 경로에서 사용할 수 있는 암묵적 {uuid} 매크로를 추가했습니다. 이는 CREATE ... ON CLUSTER ... 쿼리에서 작동합니다. 이를 사용하려면 show_table_uuid_in_table_create_query_if_not_niltrue로 설정하십시오. - ReplicatedMergeTree 엔진 인수를 선택 사항으로 변경했으며, 기본적으로 /clickhouse/tables/{uuid}/{shard}/{replica}를 사용합니다. #12135를 해결했습니다. - 사소한 수정. - 이러한 변경 사항은 Atomic 데이터베이스 엔진의 하위 호환성을 깨뜨립니다. 이전에 생성된 Atomic 데이터베이스는 새 포맷으로 수동 변환해야 합니다. Atomic 데이터베이스는 실험적 기능입니다. #12343 (tavplubix).
  • AWSAuthV4Signer를 별도의 로거로 분리하고, 로그 메시지에서 불필요하게 반복되던 AWSClient: AWSClient를 제거했습니다. #12320 (Vladimir Chebotarev).
  • 디스크 액세스 스토리지에서의 예외 메시지가 개선되었습니다. #12625 (alesapin).
  • 인수 개수가 잘못된 함수 in에 대해 더 나은 예외 메시지를 제공합니다. #12529 (Anton Popov).
  • 적응형 세분화 수준 관련 오류 메시지를 수정했습니다. #12624 (alesapin).
  • FORMAT 이후 SETTINGS 파싱을 수정했습니다. #12480 (Azat Khuzhin).
  • MergeTree 테이블에 ORDER BY 또는 PARTITION BY가 없을 경우, 모든 컬럼을 CLEAR하는 ALTER를 요청할 수 있었고 이로 인해 ALTER가 멈추는 문제가 있었습니다. #7941에서 수정되었습니다. #12382 (alexey-milovidov).
  • 각 쿼리 후 이력 파일에서 자동 완성을 다시 불러오지 않도록 했습니다(다른 클라이언트 session의 이력과 겹치는 것을 방지하기 위해). #13086 (Azat Khuzhin).

성능 개선

  • 일부 작업의 메모리 사용량을 최대 2배까지 줄였습니다. #12424 (alexey-milovidov).
  • 정확한 PK 범위와 일치하는 쿼리에 대한 프라이머리 키(PK) lookup을 최적화했습니다. #12277 (Ivan Babrou).
  • LowCardinality를 사용하는 매우 짧은 쿼리를 약간 최적화했습니다. #14129 (Anton Popov).
  • UInt8/UInt16 키에 대한 집계 성능을 약간 개선했습니다. #13091 and #13055 (alexey-milovidov).
  • 쿼리 계획 내에서 LIMIT 단계를 푸시다운합니다(서브쿼리 내부). #13016 (Nikolai Kochetov).
  • #11564에 설명된 대로, 파트에서 프라이머리 키 lookup과 스키핑 인덱스 단계를 병렬로 수행합니다. #12589 (Ivan Babrou).
  • set optimize_if_transform_strings_to_enum = 1인 경우 함수 “if”와 “transform”의 String 유형 인수를 enum으로 변환합니다. #12515 (Artem Zuikov).
  • set optimize_monotonous_functions_in_order_by=1인 경우 ORDER BY에서 단조 함수를 해당 인수로 대체합니다. #12467 (Artem Zuikov).
  • set optimize_redundant_functions_in_order_by = 1인 경우 ORDER BY x, f(x)ORDER BY x로 재작성하는 ORDER BY 최적화를 추가했습니다. #12404 (Artem Zuikov).
  • 서브쿼리에 WITH 절이 포함된 경우 프레디케이트 푸시다운을 허용합니다. 이 변경으로 #12293가 수정됩니다. #12663 (Winter Zhang).
  • 컴팩트 파트에서 읽기 성능을 개선했습니다. 컴팩트 파트는 실험적 기능입니다. #12492 (Anton Popov).
  • DiskS3에 스트리밍 최적화를 구현하려고 시도했습니다. DiskS3는 실험적 기능입니다. #12434 (Vladimir Chebotarev).

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

  • sh 테스트 린팅에는 shellcheck를 사용합니다. #13200 #13207 (alexey-milovidov).
  • GitHub 훅에서 pull request에 레이블을 설정하는 스크립트를 추가했습니다. #13183 (alesapin).
  • 재귀적 서브모듈 일부를 제거했습니다. #13378을 참조하십시오. #13379 (alexey-milovidov).
  • 모든 서브모듈이 올바른 URL을 사용하도록 합니다. #13379의 후속 작업입니다. 이 변경으로 #13378이 수정됩니다. #13397 (alexey-milovidov).
  • 사용자 선언 설정 지원이 추가되었으며, 이러한 설정은 쿼리 내부에서 사용할 수 있습니다. 이는 ClickHouse engine을 다른 시스템의 구성 요소로 사용할 때 필요합니다. #13013 (Vitaly Baranov).
  • TestFlows에서 INSERT 권한의 RBAC 기능에 대한 테스트를 추가했습니다. SELECT 테스트 대상 테이블을 확대했습니다. 새로운 테이블 엔진 테스트에 맞게 Requirements를 추가했습니다. #13340 (MyroTk).
  • 스트레스 테스트 중 서버 재시작 시 발생하는 타임아웃 오류를 수정했습니다. #13321 (alesapin).
  • 이제 빠른 테스트는 재시도하면서 서버를 기다립니다. #13284 (alesapin).
  • Function materialize()(ClickHouse 테스트용 함수)는 예상대로 NULL에 대해서도 동작하며, 이를 비상수 컬럼으로 변환합니다. #13212 (alexey-milovidov).
  • AArch64에서 libunwind build 문제를 수정했습니다. 이 수정으로 #13204가 해결됩니다. #13208 (alexey-milovidov).
  • 테스트 불안정성을 방지하기 위해 zkutil gtest의 재시도 횟수를 더 늘렸습니다. #13165 (alexey-milovidov).
  • RBAC TestFlows의 소규모 수정입니다. #13152 (vzakaznikov).
  • 00960_live_view_watch_events_live.py 테스트를 수정했습니다. #13108 (vzakaznikov).
  • 문서 배포 스크립트의 캐시 삭제 기능을 개선했습니다. #13107 (alesapin).
  • 일부 독립 테스트를 gtest로 다시 작성했습니다. 테스트에서 불필요한 include를 제거했습니다. #13073 (Nikita Mikhaylov).
  • TestFlows에서 SELECT 권한에 대한 RBAC 기능 테스트를 추가했습니다. #13061 (Ritaank Tiwari).
  • 빠른 테스트 체크에서 일부 테스트를 다시 실행합니다. #12992 (alesapin).
  • “rdkafka” 라이브러리의 MSan 오류를 수정했습니다. 이로써 #12990 문제가 해결되었습니다. rdkafka를 버전 1.5(master)로 업데이트했습니다. #12991 (alexey-milovidov).
  • 테스트가 AVX-512를 지원하는 서버에서 실행된 경우 base64의 UBSan 보고서를 수정했습니다. 이 변경으로 #12318이 해결됩니다. 작성자: @qoega. #12441 (alexey-milovidov).
  • HDFS 라이브러리의 UBSan 리포트 문제를 수정했습니다. 이로써 #12330이 해결됩니다. #12453 (alexey-milovidov).
  • 이전 버전의 백업을 새 버전에서 복원할 수 있는지 확인합니다. 이로써 #8979가 해결되었습니다. #12959 (alesapin).
  • 통합 테스트에서는 helper_container 이미지를 빌드하지 않습니다. Docker 컨테이너는 CI에서 빌드하고, 통합 테스트에서는 사전 구축된 helper_container를 사용합니다. #12953 (Ilya Yatsishin).
  • 프라이머리 키 컬럼에 대한 ALTER TABLE CLEAR COLUMN 쿼리의 테스트를 추가했습니다. #12951 (alesapin).
  • testflows 테스트의 timeout 시간을 늘렸습니다. #12949 (vzakaznikov).
  • Mac OS X에서 테스트 build를 수정했습니다. 이로써 #12767를 해결했습니다. #12772 (alexey-milovidov).
  • Connector-ODBC가 mysql-connector-odbc-8.0.21로 갱신되었습니다. #12739 (Ilya Yatsishin).
  • TestFlows에 RBAC 구문 테스트를 추가했습니다. #12642 (vzakaznikov).
  • TestKeeper의 성능을 개선했습니다. 이에 따라 복제된 테이블(Replicated tables)을 많이 사용하는 테스트가 더 빨라집니다. #12505 (alexey-milovidov).
  • 이제 스트레스 테스트 실행 후에도 server가 시작되는지 확인합니다. 이를 통해 #12473를 수정했습니다. #12496 (alesapin).
  • fmtlib를 master 브랜치(7.0.1)로 업데이트했습니다. #12446 (alexey-milovidov).
  • 빠른 테스트용 Docker image를 추가했습니다. #12294 (alesapin).
  • 통합 테스트용 구성 경로를 재정비했습니다. #12285 (Ilya Yatsishin).
  • 스택 프레임이 지나치게 커지지 않도록 제어하는 컴파일러 옵션을 추가했습니다. 이를 통해 스택 크기가 작은 파이버에서도 코드를 실행할 수 있습니다. #11524 (alexey-milovidov).
  • gitignore 파일을 업데이트했습니다. #13447 (vladimir-golovchenko).

ClickHouse 릴리스 20.6

ClickHouse 릴리스 v20.6.3.28-안정

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

  • 20.5보다 이전 버전에서 업그레이드할 때 롤링 업데이트를 수행하는 경우, 클러스터에 20.5 이상 버전과 20.5 미만 버전이 함께 존재하고 이전 버전의 ClickHouse 노드를 재시작한 뒤 더 최신 버전이 있는 상태에서 이전 버전이 시작되면 Part ... intersects previous part 오류가 발생할 수 있습니다. 이 오류를 방지하려면 먼저 클러스터의 모든 노드에 새 clickhouse-server 패키지를 설치한 다음 재시작하십시오(즉, clickhouse-server를 재시작할 때 새 버전으로 시작되도록 하십시오).

새 기능

  • EXPLAIN 쿼리의 초기 구현이 추가되었습니다. 구문: EXPLAIN SELECT .... 이로써 #1118 문제가 수정되었습니다. #11873 (Nikolai Kochetov).
  • RabbitMQ 스토리지가 추가되었습니다. #11069 (Kseniia Sumarokova).
  • PostgreSQL과 유사한 ILIKE 연산자가 구현되었습니다. #11710. #12125 (Mike).
  • SET join_algorithm = 'partial_merge'에서 RIGHT 및 FULL JOIN을 지원합니다. ALL 엄격성만 허용되며, ANY, SEMI, ANTI, ASOF는 허용되지 않습니다. #12118 (Artem Zuikov).
  • 단일 값을 기반으로 집계를 초기화하는 함수 initializeAggregation이 추가되었습니다. #12109 (Guillaume Tassery).
  • ALTER TABLE ... [ADD|MODIFY] COLUMN ... FIRST를 지원합니다. #4006. #12073 (Winter Zhang).
  • 함수 parseDateTimeBestEffortUS가 추가되었습니다. #12028 (flynn).
  • 출력용 ORC 포맷도 지원합니다(이전에는 입력만 지원됨). #11662 (Kruglov Pavel).

버그 수정

  • SET optimize_move_functions_out_of_any = 1 설정 및 any() 내부의 별칭과 관련해 발생하던 aggregate function any(x) is found inside another aggregate function in query 오류를 수정했습니다. #13419 (Artem Zuikov).
  • clickhouse-local의 PrettyCompactMonoBlock를 수정했습니다. PrettyCompactMonoBlock의 extremes/합계 관련 문제를 수정했습니다. 이 변경으로 #7746가 해결됩니다. #13394 (Azat Khuzhin).
  • 지연된 레플리카에서 들어온 쿼리에서 발생할 수 있던 오류 Totals having transform was already added to pipeline를 수정했습니다. #13290 (Nikolai Kochetov).
  • h3ToChildren 함수에 악의적으로 조작된 인수가 전달되면 server가 충돌할 수 있습니다. 이 변경으로 #13275가 수정되었습니다. #13277 (alexey-milovidov).
  • NaN 값이 포함된 Float 타입에 대해 호출된 uniqExact, topK, sumDistinct 및 유사한 집계 함수에서 발생할 수 있던 성능 저하와 다소 부정확한 결과 문제를 수정했습니다. 또한 디버그 빌드에서 assert가 트리거되던 문제도 수정했습니다. 이 수정은 #12491을 해결합니다. #13254 (alexey-milovidov).
  • cond로 리터럴 NULL이 아닌 널 허용 constexpr를 사용하는 if 함수 문제를 수정했습니다. #12463를 해결합니다. #13226 (alexey-milovidov).
  • 배열 요소와 배열 첨자가 모두 널 허용인 경우 arrayElement 함수의 assert를 수정했습니다. 이로써 #12172가 해결됩니다. #13224 (alexey-milovidov).
  • 상수 인수를 받는 DateTime64 변환 함수를 수정했습니다. #13205 (Azat Khuzhin).
  • 함수 사용 시 잘못되던 인덱스 분석을 수정했습니다. 이 문제로 MergeTree 테이블에서 읽는 동안 잘못된 파트가 프루닝될 수 있었습니다. #13060을 수정합니다. #12406을 수정합니다. #13081 (Anton Popov).
  • 쿼리 범위 내에서는 결정적이지만 쿼리 간에는 그렇지 않은 now(), now64(), randConstant() 같은 함수를 쿼리 범위에서 사용하는 원격 쿼리에서 발생하던 Cannot convert column because it is constant but values of constants are different in source and result 오류를 수정했습니다. #11327을 해결했습니다. #13075 (Nikolai Kochetov).
  • 로컬 레플리카에서 수행되는 SELECT의 스레드 수를 불필요하게 제한하던 문제를 수정했습니다. #12840 (Nikolai Kochetov).
  • ALTER DELETEALTER MODIFY COLUMN 쿼리가 단일 mutation으로 동시에 실행될 때 드물게 발생하던 버그를 수정했습니다. 이 버그로 인해 count.txt의 행 수가 잘못 기록되고, 그 결과 part 내 데이터도 잘못될 수 있었습니다. 또한 ALTER RENAME COLUMNALTER ADD COLUMN이 동시에 실행될 때 발생하는 사소한 버그도 수정했습니다. #12760 (alesapin).
  • CAST(Nullable(String), Enum()) 문제를 수정했습니다. #12745 (Azat Khuzhin).
  • IN 절에서 함수로 해석되는 큰 튜플로 인해 발생하던 성능 문제를 수정했습니다. 이는 드문 경우이지만, 사용자가 어떤 이유로 WHERE x IN (1, 2, ...) 대신 WHERE x IN tuple(1, 2, ...)를 작성할 때 발생합니다. #12700 (Anton Popov).
  • input_format_parallel_parsing의 메모리 추적을 수정했습니다(스레드를 그룹에 연결하는 방식으로). #12672 (Azat Khuzhin).
  • const 표현식이 포함된 블룸 필터 인덱스를 수정했습니다. 이로써 #10572 문제가 해결되었습니다. #12659 (Winter Zhang).
  • 브로커를 사용할 수 없을 때를 포함해 여러 경우에 StorageKafka에서 발생하던 SIGSEGV를 수정했습니다. #12658 (Azat Khuzhin).
  • 함수 if에서 Array(UUID) 인수를 지원하도록 했습니다. 이로써 #11066 문제가 수정되었습니다. #12648 (alexey-milovidov).
  • CREATE USER IF NOT EXISTS는 사용자가 이미 존재해도 이제 Exception을 발생시키지 않습니다. #12507 문제가 수정되었습니다. #12646 (Vitaly Baranov).
  • 디스크 액세스 스토리지의 예외 메시지를 개선했습니다. #12625 (alesapin).
  • 함수 groupArrayMoving*는 분산 쿼리에서 작동하지 않았습니다. 결과가 잘못된 데이터 타입으로 계산되었으며(가장 큰 타입으로 승격되지 않음), 함수 groupArrayMovingAvgavg 함수와 일치하지 않는 정수를 반환했습니다. 이 변경으로 #12568가 수정되었습니다. #12622 (alexey-milovidov).
  • 함수 any의 별칭 누락 문제를 수정했습니다. #12593 (Anton Popov).
  • 서버 충돌을 일으킬 수 있는 cache 레이아웃을 사용하는 외부 딕셔너리의 race condition을 수정했습니다. #12566 (alesapin).
  • DROP TABLE 시 분산 테이블의 데이터(async INSERT로 생성된 블록)를 삭제합니다. #12556 (Azat Khuzhin).
  • enable_mixed_granularity_parts=1일 때 ALTER DELETE 쿼리 후 기존 파트가 손상되던 버그를 수정했습니다. #12536을 해결했습니다. #12543 (alesapin).
  • 인수 개수가 잘못된 함수 in에 대한 예외 메시지를 개선했습니다. #12529 (Anton Popov).
  • 데이터 중복을 일으킬 수 있던 라이브 view 테이블에서의 race condition을 수정했습니다. #12519 (vzakaznikov).
  • compact 파트를 읽을 때 발생하던 성능 문제를 수정했습니다. #12492 (Anton Popov).
  • AggregateFunction(avg, ...) 값의 바이너리 형식에서 이전 버전과의 호환성 문제를 수정했습니다. 이로써 #12342가 해결됩니다. #12486 (alexey-milovidov).
  • FORMAT 뒤의 SETTINGS 파싱 문제를 수정했습니다. #12480 (Azat Khuzhin).
  • text_log이 활성화되어 있을 때 발생하던 교착 상태를 수정했습니다. #12452 (alexey-milovidov).
  • 매우 큰 LIMIT 또는 OFFSET을 지정했을 때 발생하는 오버플로우를 수정했습니다. 이 수정으로 #10470 문제가 해결되었습니다. 이 수정으로 #11372 문제가 해결되었습니다. #12427 (alexey-milovidov).
  • StorageMerge에서 발생할 수 있는 segfault를 수정했습니다. 이로써 #12054가 해결되었습니다. #12401 (tavplubix).
  • #12098을 해결하기 위해 #11079에서 도입된 변경 사항을 되돌렸습니다. #12397 (Mike).
  • 블룸 필터 인덱스 인수에 대한 추가 검증입니다. 이로써 #11408이 해결되었습니다. #12388 (alexey-milovidov).
  • 인덱스가 설정된 테이블의 WHERE 조건에서 음수 또는 부동소수점 상수를 사용할 때 발생하던 예외를 방지했습니다. 이 수정은 #11905를 해결합니다. #12384 (alexey-milovidov).
  • 해당 컬럼에 의존하는 DEFAULT 표현식이 있더라도 컬럼을 CLEAR할 수 있도록 했습니다. 이 변경으로 #12333 문제가 수정되었습니다. #12378 (alexey-milovidov).
  • 인수가 -StateNullable인 집계 함수에서 TOTALS/ROLLUP/CUBE 관련 문제를 수정했습니다. 이 수정으로 #12163가 해결되었습니다. #12376 (alexey-milovidov).
  • RENAME이 허용되지 않는 경우 ALTER RENAME COLUMN 쿼리의 오류 메시지와 종료 코드를 수정했습니다. #12301#12303을 수정했습니다. #12335 (alesapin).
  • ReplicatedMergeTreeQueue에서 아주 드물게 발생하던 경쟁 상태를 수정했습니다. #12315 (alexey-milovidov).
  • 고정 폭이 아닌 타입에 코덱 Delta 또는 DoubleDelta를 사용할 경우, 코드 BAD_ARGUMENTS의 예외 대신 코드 LOGICAL_ERROR의 예외가 반환되었습니다(코드가 logical error인 예외는 절대 발생하지 않도록 보장합니다). 이로써 #12110이 수정되었습니다. #12308 (alexey-milovidov).
  • WITH FILL 수정자에서 컬럼 순서를 바로잡았습니다. 이전에는 ORDER BY 구문의 컬럼 순서가 반영되지 않았습니다. #12306 (Anton Popov).
  • 가상 컬럼(Merge 테이블의 _table 등)이나 시스템 테이블에서 “index” 컬럼으로 데이터를 필터링하는 표현식(예: system.tables를 쿼리할 때 데이터베이스 이름으로 필터링하는 경우)이 Nullable 타입을 반환할 때 “bad cast” 예외가 발생하지 않도록 수정했습니다. 이로써 #12166이 수정되었습니다. #12305 (alexey-milovidov).
  • TTL 표현식이 의존하는 컬럼의 이름을 변경한 후 TTL이 수정되었습니다. #12304 (Anton Popov).
  • Kafka 엔진에서 배치 중간에 오류가 있는 메시지가 포함된 경우 발생하던 SIGSEGV를 수정했습니다. #12302 (Azat Khuzhin).
  • DNS cache 업데이트 중 일부 스레드가 간헐적으로 몇 초간 멈추던 문제를 수정했습니다. #12296 (tavplubix).
  • 설정 이름의 오타를 바로잡았습니다. #12292 (alexey-milovidov).
  • TrieDictionary 로드 실패 후 오류를 표시합니다. #12290 (Vitaly Baranov).
  • 함수 arrayFill이 빈 배열에서 잘못 동작해 크래시를 일으킬 수 있던 문제를 수정했습니다. 이 수정은 #12263를 해결합니다. #12279 (alexey-milovidov).
  • LowCardinality 타입에 대해 공통 타입으로 변환하도록 구현했습니다. 이제 LowCardinality 컬럼과 다른 컬럼이 있는 테이블에서도 UNION ALL을 실행할 수 있습니다. 이로써 #8212가 수정되었습니다. 이로써 #4342가 수정되었습니다. #12275 (alexey-milovidov).
  • S3 스토리지 요청이 리디렉션 한도에 도달했을 때의 동작을 수정했습니다. #12256 (ianton-ru).
  • StorageFile에서 여러 차례 연속으로 삽입하는 동안 일부 특수 타입의 헤더가 두 번 이상 기록되던 문제를 수정했습니다. 이로써 #6155가 해결되었습니다. #12197 (Nikita Mikhaylov).
  • 0 또는 1이 아닌 UInt8 값에서 논리 함수가 올바르게 동작하도록 수정했습니다. #12196 (Alexander Kazakov).
  • max_memory_usage*의 상한을 프로세스 상주 메모리로 제한합니다. #12182 (Azat Khuzhin).
  • GROUP BY에서 단사 함수 제거 시 dictGet 인수 검사 문제를 수정했습니다. #12179 (Azat Khuzhin).
  • SummingMergeTree 엔진이 파티션 키 컬럼을 합산할 때의 동작을 수정했습니다. 합산할 컬럼을 명시적으로 정의한 경우, 해당 컬럼이 파티션 키 컬럼과 겹치면 예외를 추가했습니다. 이 수정으로 #7867이 해결되었습니다. #12173 (Nikita Mikhaylov).
  • ODBC 연결에서 스키마를 지원하지 않으면 딕셔너리 소스의 테이블 이름을 스키마와 테이블 이름으로 나누지 않습니다. #12165 (Vitaly Baranov).
  • 조건이 NULL로 평가될 때 레코드가 삭제되는 문제를 일으키던 ALTER DELETE의 잘못된 로직을 수정했습니다. 이 수정으로 #9088이 해결되었습니다. 이로써 #12106이 종료되었습니다. #12153 (alexey-milovidov).
  • 별칭이 있을 때 외부 DBMS(예: MySQL, ODBC)로 전송할 쿼리 변환이 올바르게 처리되도록 수정했습니다. 이로써 #12032 문제가 해결됩니다. #12151 (alexey-milovidov).
  • 중복된 ORDER BY 최적화에서 잘못된 코드를 수정했습니다. 이 버그는 #10067에서 처음 도입되었습니다. #12148 (alexey-milovidov).
  • 정수 나눗셈에서 발생할 수 있는 잠재적인 오버플로우를 수정했습니다. 이로써 #12119 문제가 해결되었습니다. #12140 (alexey-milovidov).
  • greatCircleDistance, geoDistance에서 발생할 수 있는 무한 루프 문제를 수정했습니다. 이 수정으로 #12117 문제가 해결됩니다. #12137 (alexey-milovidov).
  • “pid” 파일 처리를 정상화했습니다. 이전 버전에서는 server가 정상적으로 종료되지 않은 상태에서 강제 종료되었고, 이전에 실행되었던 server와 동일한 pid를 가진 다른 프로세스가 있으면 server 시작이 거부될 수 있었습니다. 또한 server 시작에 실패한 경우에도 다른 server가 실행 중이면 pid 파일이 제거될 수 있었습니다. 이 변경으로 #3501이 수정되었습니다. #12133 (alexey-milovidov).
  • ZooKeepeer에서 ReplicatedVersionedCollapsingMergeTree 테이블의 메타데이터가 잘못 기록되는 버그를 수정했습니다. #12093를 해결합니다. #12121 (alesapin).
  • 시스템 로그(system.query_log, metric_log 등) 또는 engine=Buffer 기반 테이블에 연결된, 조인 또는 서브쿼리가 있는 materialized view에서 “There is no query” 예외가 발생하지 않도록 했습니다. #12120 (filimonov).
  • ENGINE=Dictionary인 테이블의 딕셔너리 종속성 처리 방식을 수정했습니다. 이 변경으로 #10994#10397 문제가 해결되었습니다. #12116 (Vitaly Baranov).
  • Parquet 포맷이 이제 LowCardinalityLowCardinality(Nullable) 타입에서 정상적으로 작동합니다. #12086, #8406을 수정합니다. #12108 (Nikolai Kochetov).
  • 전체 스레드 수 제한이 잘못 설정되어 UNION이 포함된 SELECT 쿼리의 성능이 저하되던 문제를 수정했습니다. #12030을 해결합니다. #12103 (Nikolai Kochetov).
  • -StateResample combinator에서 발생하던 세그폴트를 수정했습니다. #12092 (Anton Popov).
  • SELECT 쿼리에서 system.quey_log의 비어 있던 result_rowsresult_bytes 메트릭 문제를 수정했습니다. #11595를 해결합니다. #12089 (Nikolai Kochetov).
  • VIEW에서 SELECT를 수행할 때 스레드 수를 불필요하게 제한하던 문제를 수정했습니다. #11937. #12085 (Nikolai Kochetov).
  • DROP TABLE 시 StorageKafka에서 발생하던 SIGSEGV를 수정했습니다. #12075 (Azat Khuzhin).
  • PREWHERE에 잘못된 유형을 사용했을 때 발생할 수 있는 크래시를 수정했습니다. #12053, #12060을 수정합니다. #12060 (Nikolai Kochetov).
  • Tuple(LowCardinality) 인수가 있는 고차 함수에서 Cannot capture column 오류를 수정했습니다. #9766를 해결합니다. #12055 (Nikolai Kochetov).
  • 제약 조건이 상수 표현식인지 확인하는 검사를 수정했습니다. 이로써 #11360이 해결되었습니다. #12042 (alexey-milovidov).
  • 크기가 서로 다른 FixedString 유형의 인수로 함수 if를 호출할 때 잘못된 결과가 반환되거나 잠재적으로 충돌이 발생하던 문제를 수정했습니다. 이 수정으로 #11362가 해결됩니다. #12021 (alexey-milovidov).

개선

  • JOIN kind와 유형을 더 표준적인 방식으로 지정할 수 있게 했습니다. 이제 SEMI LEFT JOIN 대신 LEFT SEMI JOIN을 사용할 수 있습니다. 현재는 두 방식 모두 올바릅니다. #12520 (Artem Zuikov).
  • Buffer engine에 lifetime_rows/lifetime_bytes를 추가했습니다. #12421 (Azat Khuzhin).
  • ‘MySQL server has gone away’ 대신 자세한 Exception 메시지를 클라이언트에 기록하도록 했습니다. #12383 (BohuTANG).
  • 그리드 경계를 출력할 때 사용하는 문자 집합을 변경할 수 있게 했습니다. 사용할 수 있는 문자 집합은 UTF-8, ASCII입니다. output_format_pretty_grid_charset 설정으로 이 기능을 활성화할 수 있습니다. #12372 (Sabyanin Maxim).
  • MySQL SELECT DATABASE()를 지원합니다. #9336 2. MySQL 대체 쿼리 통합 테스트를 추가했습니다. #12314 (BohuTANG).
  • MySQL 클라이언트/driver에서 장시간 실행되는 쿼리를 취소할 수 있도록 KILL QUERY [connection_id]를 추가했습니다. 관련 이슈: #12038. #12152 (BohuTANG).
  • formatDateTime 함수에 %g(2자리 ISO 연도) 및 %G(4자리 ISO 연도) substitutions 지원을 추가했습니다. #12136 (vivarum).
  • system.disks에 ‘type’ 컬럼을 추가했습니다. #12115 (ianton-ru).
  • REVOKE 명령을 개선했습니다. 이제 취소할 접근 권한에 대해서만 grant/admin 옵션이 필요합니다. 예를 들어, 이제 REVOKE ALL ON *.* FROM user1을 실행할 때 grant 옵션으로 부여된 전체 접근 권한이 없어도 됩니다. REVOKE ALL FROM user1 명령도 추가했습니다. 이 명령은 user1에 부여된 모든 역할을 취소합니다. #12083 (Vitaly Baranov).
  • load_balancing에 레플리카 우선순위를 추가했습니다(로드 밸런싱 우선순위를 수동으로 지정하기 위함). #11995 (Azat Khuzhin).
  • S3 메타데이터의 경로를 상대 경로로 변경하여 S3 blob을 더 쉽게 처리할 수 있게 했습니다. #11892 (Vladimir Chebotarev).

성능 개선

  • 정렬 키의 접두사를 사용하는 ‘ORDER BY’ 및 ‘GROUP BY’의 성능을 개선했습니다(optimize_aggregation_in_order 설정으로 활성화되며, 기본값은 비활성화입니다). #11696 (Anton Popov).
  • set optimize_injective_functions_inside_uniq=1 설정 시 uniq*() 내부의 단사 함수를 제거합니다. #12337 (Ruslan Kamalov).
  • 리터럴을 사용하는 IN 연산자에서 인덱스가 사용되지 않아 발생하던, v19.3 무렵 도입된 성능 회귀를 수정했습니다. 이로써 #10574가 해결됩니다. #12062 (nvartolomei).
  • DiskS3에 대한 단일 파트 업로드를 구현했습니다(실험적 기능). #12026 (Vladimir Chebotarev).

실험적 기능

  • MergeTree 계열 테이블에 메모리에 데이터를 저장하는 새로운 인메모리 파트 포맷이 추가되었습니다. 파트는 첫 번째 머지 시점에 디스크에 기록됩니다. 파트의 행 수 또는 바이트 크기가 임계값 min_rows_for_compact_partmin_bytes_for_compact_part보다 작으면 인메모리 포맷으로 생성됩니다. 또한 Write-Ahead-Log에 대한 선택적 지원도 제공되며, 이는 기본적으로 활성화되어 있고 in_memory_parts_enable_wal 설정으로 제어됩니다. #10697 (Anton Popov).

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

  • clickhouse-client용 AST 기반 쿼리 퍼징 모드를 구현했습니다. 퍼징으로 최근 발견한 이슈 목록은 이 레이블을 참조하십시오. 대부분은 이 도구로 발견되었고, 일부는 SQLancer와 00746_sql_fuzzy.pl로 발견되었습니다. #12111 (Alexander Kuzmenkov).
  • Testflows 프레임워크를 기반으로 하는 새로운 유형의 테스트를 추가했습니다. #12090 (vzakaznikov).
  • S3 HTTPS 통합 테스트를 추가했습니다. #12412 (Pavel Kovalenko).
  • 별도 스레드에서 새니타이저 트랩 메시지를 기록합니다. 이를 통해 Thread sanitizer에서 발생할 수 있는 데드락을 방지할 수 있습니다. #12313 (alexey-milovidov).
  • 이제 기능 테스트와 스트레스 테스트를 이전 버전의 clickhouse-test 스크립트로 실행할 수 있습니다. #12287 (alesapin).
  • orc 빌드 중 생성되던 이상한 파일을 제거했습니다. #12258 (Nikita Mikhaylov).
  • 공통 docker compose 파일을 통합 docker 컨테이너에 배치했습니다. #12168 (Ilya Yatsishin).
  • CodeQL 경고를 수정했습니다. CodeQL은 이미 사용 중인 clang-tidy, PVS-Studio와 함께 사용할 또 다른 정적 분석기입니다. #12138 (alexey-milovidov).
  • UNBUNDLED 빌드를 위한 사소한 CMake 수정을 적용했습니다. #12131 (Matwey V. Kornilov).
  • Linux 배포판을 전혀 사용하지 않는 최소 Docker 이미지 예제를 추가했습니다. #12126 (alexey-milovidov).
  • clickhouse-server Docker 이미지의 시스템 패키지를 업그레이드했습니다. #12124 (Ivan Blinkov).
  • system.build_options 테이블에 UNBUNDLED 플래그를 추가했습니다. clickhouse-test의 skip list를 clickhouse 저장소로 옮겼습니다. #12107 (alesapin).
  • clickhouse-server Docker 이미지에서 CVE를 탐지하는 Anchore Container Analysis 보안 분석 도구의 정기 check를 추가했습니다. 또한 Dockerfile이 빌드 가능한지도 확인합니다. masterDockerfile에 대한 pull request에서 매일 실행됩니다. #12102 (Ivan Blinkov).
  • CWE를 탐지하는 GitHub CodeQL 보안 분석 도구의 일일 check를 추가했습니다. #12101 (Ivan Blinkov).
  • Dockerfile에서 첫 번째 apt-get update를 실행하기 전에 ca-certificates를 설치하도록 했습니다. #12095 (Ivan Blinkov).

ClickHouse 20.5 릴리스

ClickHouse 릴리스 v20.5.4.40-안정 2020-08-10

버그 수정

  • 함수 사용 시 잘못되었던 인덱스 분석을 수정했습니다. 이 문제로 인해 MergeTree 테이블을 읽는 동안 잘못된 파트가 프루닝될 수 있었습니다. #13060을 수정했습니다. #12406을 수정했습니다. #13081 (Anton Popov).
  • 로컬 레플리카에서 SELECT를 수행할 때 스레드 수를 불필요하게 제한하던 문제를 수정했습니다. #12840 (Nikolai Kochetov).
  • IN 절에서 함수로 해석되는 큰 튜플의 성능을 개선했습니다. 이는 어떤 이유에서인지 사용자가 WHERE x IN (1, 2, ...) 대신 WHERE x IN tuple(1, 2, ...)를 작성하는 경우입니다. #12700 (Anton Popov).
  • 스레드를 그룹에 연결하여 input_format_parallel_parsing의 메모리 추적 문제를 수정했습니다. #12672 (Azat Khuzhin).
  • const 표현식이 포함된 블룸 필터 인덱스를 수정했습니다. 이로써 #10572가 해결되었습니다. #12659 (Winter Zhang).
  • 브로커를 사용할 수 없는 경우를 포함해, 그 밖의 상황에서도 StorageKafka에서 발생하던 SIGSEGV를 수정했습니다. #12658 (Azat Khuzhin).
  • Array(UUID) 인수를 받는 함수 if 지원이 추가되었습니다. 이로써 #11066 문제가 수정되었습니다. #12648 (alexey-milovidov).
  • 함수 any에 별칭이 없던 문제를 해결했습니다. #12593 (Anton Popov).
  • 서버 충돌로 이어질 수 있는 cache 레이아웃의 외부 딕셔너리 경쟁 상태 문제를 수정했습니다. #12566 (alesapin).
  • DROP TABLE 시 분산 테이블용 데이터(async INSERT의 블록)를 삭제합니다. #12556 (Azat Khuzhin).
  • enable_mixed_granularity_parts=1일 때 ALTER DELETE 쿼리 이후 기존 파트가 손상되는 버그를 수정했습니다. #12536을 해결합니다. #12543 (alesapin).
  • 인수 개수가 잘못된 함수 in에 대해 더 나은 예외 메시지를 제공합니다. #12529 (Anton Popov).
  • 데이터 중복을 일으킬 수 있던 라이브 view 테이블의 race condition을 수정했습니다. #12519 (vzakaznikov).
  • compact 파트를 읽을 때 발생하던 성능 문제를 수정했습니다. #12492 (Anton Popov).
  • AggregateFunction(avg, ...) 값의 바이너리 형식에서 이전 버전과의 호환성 문제가 수정되었습니다. 이로써 #12342가 해결되었습니다. #12486 (alexey-milovidov).
  • text_log가 활성화된 경우 발생하던 교착 상태를 해결했습니다. #12452 (alexey-milovidov).
  • 매우 큰 LIMIT 또는 OFFSET을 지정했을 때 발생하는 오버플로우를 수정했습니다. 이에 따라 #10470이 해결되었습니다. 이에 따라 #11372이 해결되었습니다. #12427 (alexey-milovidov).
  • StorageMerge에서 발생할 수 있던 세그폴트 문제를 수정했습니다. #12054를 해결합니다. #12401 (tavplubix).
  • #12098를 해결하기 위해 #11079에서 도입된 변경 사항을 되돌립니다. #12397 (Mike).
  • 인덱스가 있는 테이블의 WHERE 조건에서 음수 또는 부동소수점 상수를 사용할 때 예외가 발생하는 문제를 방지했습니다. 이로써 #11905가 수정되었습니다. #12384 (alexey-milovidov).
  • 종속된 DEFAULT 표현식이 있더라도 컬럼을 CLEAR할 수 있도록 합니다. 이로써 #12333 문제가 수정되었습니다. #12378 (alexey-milovidov).
  • -StateNullable 인수가 있는 집계 함수에서 TOTALS/ROLLUP/CUBE 관련 문제를 수정했습니다. 이 수정으로 #12163 문제가 해결되었습니다. #12376 (alexey-milovidov).
  • Kafka Engine에서 배치 중간에 오류가 포함된 메시지가 있을 때 발생하던 SIGSEGV를 수정했습니다. #12302 (Azat Khuzhin).
  • SummingMergeTree engine가 파티션 키 컬럼을 합산할 때의 동작을 수정했습니다. 합산할 컬럼을 명시적으로 정의한 경우, 해당 컬럼이 파티션 키 컬럼과 겹치면 Exception이 발생하도록 추가했습니다. 이 수정으로 #7867이 해결되었습니다. #12173 (Nikita Mikhaylov).
  • 별칭이 있을 때 외부 DBMS(예: MySQL, ODBC)로 전송하는 쿼리 변환을 수정했습니다. 이 수정으로 #12032가 해결되었습니다. #12151 (alexey-milovidov).
  • ReplicatedVersionedCollapsingMergeTree 테이블에서 ZooKeeper에 잘못된 테이블 메타데이터가 기록되던 버그를 수정했습니다. 이 수정으로 #12093가 해결되었습니다. #12121 (alesapin).
  • VIEW에서 select를 수행할 때 스레드 수를 불필요하게 제한하던 문제를 수정했습니다. 이로써 #11937가 해결되었습니다. #12085 (Nikolai Kochetov).
  • join_algorithm=partial_merge를 사용할 때 LowCardinality 유형의 JOIN에서 발생하던 충돌을 수정했습니다. #12035 (Artem Zuikov).
  • 조건에 NULL이 있을 때 if()가 잘못된 결과를 반환하는 문제를 수정했습니다. #11807 (Artem Zuikov).

성능 개선

  • 리터럴이 포함된 IN 연산자에서 인덱스가 사용되지 않아, v19.3 전후에 도입된 성능 회귀를 수정했습니다. 이 변경으로 #10574가 해결되었습니다. #12062 (nvartolomei).

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

  • Dockerfile에서 첫 번째 apt-get update를 실행하기 전에 ca-certificates를 설치하도록 개선했습니다. #12095 (Ivan Blinkov).

ClickHouse 릴리스 v20.5.2.7-안정 2020-07-02

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

  • COUNT(DISTINCT) 및 uniq 집계 함수 계열은 이제 널 허용이 아닌 결과를 반환합니다. 전달된 값이 모두 NULL이면 대신 0을 반환합니다. 이로써 SQL 호환성이 향상됩니다. #11661 (alexey-milovidov).
  • 사용자 수준 설정이 잘못된 위치에 지정된 경우를 검사하는 기능이 추가되었습니다. 사용자 수준 설정은 특정 사용자 프로필의 <profile> 섹션 안에 있는 users.xml에 지정해야 하며(기본 설정은 <default>에 지정), 그렇지 않으면 서버가 로그에 예외 메시지를 남기고 시작되지 않습니다. 이는 #9051을 수정합니다. 이 검사를 건너뛰려면 설정을 올바른 위치로 옮기거나 config.xml<skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>를 추가할 수 있습니다. #11449 (alexey-milovidov).
  • input_format_with_names_use_header 설정이 기본적으로 활성화됩니다. 이에 따라 입력 형식 -WithNames-WithNamesAndTypes의 파싱에 영향을 줍니다. #10937 (alexey-milovidov).
  • experimental_use_processors 설정이 제거되었습니다. 이제 기본적으로 활성화됩니다. #10924 (Nikolai Kochetov).
  • zstd가 1.4.4로 업데이트되었습니다. 성능과 압축률이 소폭 개선되었습니다. 서로 다른 버전의 ClickHouse에서 레플리카를 실행하는 경우 Data after merge is not byte-identical to data on another replicas.라는 오류 메시지와 함께 설명이 표시될 수 있습니다. 이러한 메시지는 정상 동작이므로 걱정하지 않으셔도 됩니다. 이 변경은 하위 호환되지만, 이러한 메시지가 왜 나타나는지 궁금할 수 있으므로 changelog에 여기에 함께 기재합니다. #10663 (alexey-milovidov).
  • 의미 없는 코덱을 검사하는 기능과, 이 검사를 제어하는 allow_suspicious_codecs 설정이 추가되었습니다. 이로써 #4966이 해결되었습니다. #10645 (alexey-milovidov).
  • 여러 Kafka 설정의 기본값이 변경되었습니다. #11388을 참조하십시오.
  • 20.5보다 오래된 버전에서 업그레이드할 때 롤링 업데이트를 수행하고, cluster에 20.5 이상 버전과 20.5 미만 버전이 함께 포함되어 있는 상태에서 이전 버전의 ClickHouse 노드를 재시작하면, 새 버전 노드가 존재하는 상황에서 이전 버전 노드가 시작되면서 Part ... intersects previous part 오류가 발생할 수 있습니다. 이 오류를 방지하려면 먼저 모든 cluster 노드에 새 clickhouse-server 패키지를 설치한 다음 재시작하십시오(즉, clickhouse-server가 재시작될 때 새 버전으로 시작되도록 하십시오).

새로운 기능

  • 테이블에서 데이터 세분성을 자동으로 낮추고 롤업하기 위한 TTL DELETE WHERETTL GROUP BY. #10537 (expl0si0nn).
  • PostgreSQL wire 프로토콜을 구현했습니다. #10242 (Movses).
  • 사용자, 역할, 권한 부여, 설정 프로필, 쿼터, 행 정책용 시스템 테이블이 추가되었으며, SHOW USER, SHOW [CURRENT|ENABLED] ROLES, SHOW SETTINGS PROFILES 명령도 추가되었습니다. #10387 (Vitaly Baranov).
  • ODBC 테이블 함수에 대한 쓰기를 지원합니다 #10554 (ageraab). #10901 (tavplubix).
  • Linux perf_events 기반의 쿼리 성능 메트릭을 추가했습니다(이 메트릭은 하드웨어 CPU 카운터와 OS 카운터를 사용해 계산됩니다). 이 기능은 선택 사항이며, clickhouse 바이너리에 CAP_SYS_ADMIN이 설정되어 있어야 합니다. #9545 Andrey Skobtsov. #11226 (Alexander Kuzmenkov).
  • 이제 CREATE 쿼리에서 데이터 타입에 NULLNOT NULL 수정자를 사용할 수 있습니다. #11057 (Павел Потемкин).
  • ArrowStream 입력 포맷과 출력 포맷이 추가되었습니다. #11088 (hcz).
  • Cassandra를 외부 딕셔너리 소스로 사용할 수 있도록 지원합니다. #4978 (favstovol).
  • 데이터를 저장하거나 캐싱하지 않고, 각 쿼리마다 소스에서 모든 데이터를 직접 로드하는 새 레이아웃 direct가 추가되었습니다. #10622 (Artem Streltsov).
  • 쿼리 실행 중에는 로컬에 아무것도 저장하지 않는 새로운 complex_key_direct layout이 딕셔너리에 추가되었습니다. #10850 (Artem Streltsov).
  • MySQL 스타일의 전역 변수 구문(stub) 지원이 추가되었습니다. 이는 MySQL 프로토콜과의 호환성을 위해 필요합니다. #11832 (alexey-milovidov).
  • replxx를 사용하여 clickhouse-client에 구문 강조 기능을 추가했습니다. #11422 (Tagir Kuskarov).
  • minMapmaxMap 함수가 추가되었습니다. #11603 (Ildus Kurbangaliev).
  • system.asynchronous_metrics의 과거 메트릭을 기록하는 system.asynchronous_metric_log 테이블을 추가했습니다. #11588 (Alexander Kuzmenkov).
  • extractAllGroupsHorizontal(haystack, re)extractAllGroupsVertical(haystack, re) 함수를 추가했습니다. #11554 (Vasily Nemkov).
  • SHOW CLUSTER(S) 쿼리 지원을 추가했습니다. #11467 (hexiaoting).
  • 네트워크 위치를 추출하는 netloc 함수를 추가했습니다. Python의 urlparse(url)에 있는 netloc와 유사합니다. #11356 (Guillaume Tassery).
  • 메시지 헤더에 접근할 수 있도록 engine=Kafka에 가상 컬럼 2개를 추가로 추가했습니다. #11283 (filimonov).
  • Kafka engine에 _timestamp_ms 가상 컬럼이 추가되었습니다(유형은 Nullable(DateTime64(3))). #11260 (filimonov).
  • 함수 randomFixedString이 추가되었습니다. #10866 (Andrei Nekrashevich).
  • 주어진 확률로 문자열 내 비트를 무작위로 뒤집는 함수 fuzzBits를 추가했습니다. #11237 (Andrei Nekrashevich).
  • 비교 연산자, IN 및 VALUES 절에서 숫자와 상수 문자열을 비교할 수 있습니다. #11647 (alexey-milovidov).
  • round_robin load_balancing 모드를 추가하였습니다. #11645 (Azat Khuzhin).
  • cast_keep_nullable 설정을 추가했습니다. 이 설정을 활성화하면 CAST(something_nullable AS Type)Nullable(Type)을 반환합니다. #11733 (Artem Zuikov).
  • system.columns 테이블에 position 컬럼이, system.parts_columns 테이블에 column_position 컬럼이 추가되었습니다. 이 컬럼에는 테이블 내 컬럼의 순서 위치가 1부터 시작하는 값으로 저장됩니다. 이로써 #7744가 해결되었습니다. #11655 (alexey-milovidov).
  • SYSTEM {FLUSH DISTRIBUTED,STOP/START DISTRIBUTED SEND}의 ON CLUSTER 지원. #11415 (Azat Khuzhin).
  • system.distribution_queue 테이블이 추가되었습니다. #11394 (Azat Khuzhin).
  • Kafka에서 모든 포맷 설정을 지원하고, 일부 설정은 테이블 수준에서 노출하며, 더 나은 성능을 위해 기본값을 조정했습니다. #11388 (filimonov).
  • port 함수를 추가했습니다(URL에서 포트를 추출). #11120 (Azat Khuzhin).
  • 이제 dictGet* 함수에서 테이블 이름도 사용할 수 있습니다. #11050 (Vitaly Baranov).
  • -n 인수를 사용하면 이제 clickhouse-format 도구에서 여러 쿼리를 포맷할 수 있습니다. #10852 (Darío).
  • DiskS3용 프록시 리졸버를 구성할 수 있게 되었습니다. #10744 (Pavel Kovalenko).
  • pointInPolygon이 상수가 아닌 다각형에서도 작동하도록 개선했습니다. 이제 PointInPolygon은 두 번째 인수로 다각형과 홀의 배열인 Array(Array(Tuple(…, …)))을 받을 수 있습니다. #10623 (Alexey Ilyukhov) #11421 (Alexey Ilyukhov).
  • system.partsmove_ttl_info를 추가하여 move TTL 기능에 대한 내부 검사를 제공합니다. #10591 (Vladimir Chebotarev).
  • 프록시를 통해 S3를 사용할 수 있게 되었습니다. #10576 (Pavel Kovalenko).
  • 데이터 타입의 NCHARNVARCHAR 동의어를 추가했습니다. #11025 (alexey-milovidov).
  • #7224를 해결했습니다. system.events 테이블에 FailedQuery, FailedSelectQuery, FailedInsertQuery 메트릭을 추가했습니다. #11151 (Nikita Orlov).
  • 더 많은 jemalloc 통계를 system.asynchronous_metrics에 추가하고, 해당 통계에 최신 값이 반영되도록 했습니다. #11748 (Alexander Kuzmenkov).
  • 기본 S3 자격 증명과 사용자 지정 인증 헤더를 지정할 수 있도록 지원합니다. #11134 (Grigory Pervakov).
  • 다양한 정밀도에서 DateTime64를 Int64로, 또는 그 반대로 변환하는 새 함수 to-/fromUnixTimestamp64Milli/-Micro/-Nano가 추가되었습니다. #10923 (Vasily Nemkov).
  • MongoDB 딕셔너리에서 mongodb:// URI를 지정할 수 있도록 했습니다. #10915 (Alexander Kuzmenkov).
  • 이제 OFFSET 키워드는 LIMIT 절 없이도 사용할 수 있습니다. #10802 (Guillaume Tassery).
  • system.licenses 테이블이 추가되었습니다. 이 테이블에는 contrib 디렉터리에 있는 서드파티 라이브러리의 라이선스가 포함되어 있습니다. 이로써 #2890가 해결되었습니다. #10795 (alexey-milovidov).
  • DateTime64 값의 초 미만 부분을 0으로 만드는 새 함수 toStartOfSecond(DateTime64) -> DateTime64를 추가했습니다. #10722 (Vasily Nemkov).
  • 줄바꿈, 공백 및/또는 쉼표로 구분된 JSON 객체 시퀀스를 허용하는 새 입력 형식 JSONAsString이 추가되었습니다. #10607 (Kruglov Pavel).
  • 4 MiB보다 더 작은 간격으로 메모리를 더 세밀하게 프로파일링할 수 있게 되었습니다. 임의의 메모리 할당/해제를 포착하는 샘플링 메모리 프로파일러를 추가했습니다. #10598 (alexey-milovidov).
  • SimpleAggregateFunction이 이제 sumMap도 지원합니다. #10000 (Ildus Kurbangaliev).
  • 분산 테이블 엔진에서 ALTER RENAME COLUMN을 지원하도록 했습니다. #10727의 후속 작업입니다. #10747를 수정합니다. #10887 (alesapin).

버그 수정

  • Decimal parse에서 발생한 UBSan 보고를 수정했습니다. 이 변경으로 #7540 문제가 해결되었습니다. #10512 (alexey-milovidov).
  • DateTime64를 파싱하는 과정에서 발생할 수 있는 부동소수점 예외 가능성을 수정했습니다. 이로써 #11374가 해결됩니다. #11875 (alexey-milovidov).
  • Nullable 컬럼을 prewhere 조건에서 사용할 때 드물게 발생하던 크래시를 수정했습니다. #11895 #11608 #11869 (Nikolai Kochetov).
  • 고차 함수 내부에서는 arrayJoin을 허용하지 않습니다. 이 문제로 인해 프로토콜 동기화가 깨졌습니다. 이는 #3933을 해결합니다. #11846 (alexey-milovidov).
  • 상수 String과 FixedString을 비교할 때 잘못된 결과가 반환되던 문제를 수정했습니다. 이 수정으로 #11393가 해결됩니다. 이 버그는 20.4 버전에서 발생했습니다. #11828 (alexey-milovidov).
  • 조건식에 NULL이 있는 if에서 잘못된 결과가 반환되던 문제를 수정했습니다. #11807 (Artem Zuikov).
  • 쿼리에서 스레드를 너무 많이 사용하던 문제를 수정했습니다. #11788 (Nikolai Kochetov).
  • SELECT ... FROM merge_tree_table ...에서 WITH <scalar subquery> ...를 사용할 때 발생하던 Scalar does not exist Exception을 해결했습니다 #11621. #11767 (Amos Bird).
  • SELECT *, xyz.*와 같은 쿼리에서 오류가 발생해야 하는데도 성공하던 예기치 않은 동작을 수정했습니다. #11753 (hexiaoting).
  • 이제 메타데이터 alter 중에는 레플리카 fetch 작업이 취소됩니다. #11744 (alesapin).
  • 동등성을 확인하기 전에 zookeeper에 저장된 메타데이터를 먼저 파싱합니다. #11739 (Azat Khuzhin).
  • Values 입력 형식에서 복합 리터럴의 유형이 잘못 추론되어 발생하던 LOGICAL_ERROR를 수정했습니다. #11732 (tavplubix).
  • const 컬럼에서의 ORDER BY ... WITH FILL 문제를 수정했습니다. #11697 (Anton Popov).
  • SYSTEM SYNC REPLICA에서 매우 드물게 발생하는 경쟁 상태(race condition)를 수정했습니다. 복제된 테이블(Replicated Table)이 생성되는 시점에, 별도 connection에서 다른 클라이언트가 동시에 해당 테이블에 대해 SYSTEM SYNC REPLICA 명령을 실행하면(다른 클라이언트가 테이블 생성 사실을 알고 있어야 하므로 이런 상황은 드뭅니다), nullptr 역참조가 발생할 수 있었습니다. #11691 (alexey-milovidov).
  • XDBC bridge와 통신할 때 적절한 timeout이 전달되도록 수정했습니다. 최근에는 bridge의 활성 상태를 확인하고 메타 정보를 받아올 때 timeout이 제대로 적용되지 않았습니다. #11690 (alexey-milovidov).
  • 별칭이 포함된 ORDER BY 구문과 함께 LIMIT n WITH TIES를 사용할 때 발생하던 문제를 수정했습니다. #11689 (Anton Popov).
  • 병렬 FINAL을 사용하는 select 쿼리에서 발생할 수 있는 Pipeline stuck 문제를 수정했습니다. #11636을 해결했습니다. #11682 (Nikolai Kochetov).
  • system.mutations가 잘못된 상태로 표시되는 오류를 수정했습니다. 전체 뮤테이션이 이미 완료된 것처럼 보일 수 있지만, 서버에는 여전히 복제 큐에 MUTATE_PART 작업이 남아 있어 이를 계속 실행하려고 시도할 수 있습니다. 이 수정은 #11611을 해결합니다. #11681 (alesapin).
  • CREATE USER 쿼리의 구문 강조를 수정했습니다. #11664 (alexey-milovidov).
  • 대소문자를 구분하지 않는 플래그를 사용하는 정규식 지원을 추가했습니다. 이로써 #11101#11506 문제가 수정되었습니다. #11649 (alexey-milovidov).
  • 행 수준 보안이 설정된 경우 단순 count 쿼리 최적화를 제거했습니다. 이전 버전에서는 필터링된 결과가 아니라 테이블의 전체 레코드 수가 사용자에게 반환되었습니다. 이 변경으로 #11352가 수정되었습니다. #11644 (alexey-milovidov).
  • String용 블룸 필터(데이터 스키핑 인덱스)를 수정했습니다. #11638 (Azat Khuzhin).
  • -q 옵션이 없으면 시작할 때 데이터베이스가 생성되지 않습니다. #11604 (giordyb).
  • 샘플링을 사용해 Buffer 테이블을 읽는 쿼리에서 발생하던 Block structure mismatch 오류를 수정했습니다. #11602 (Nikolai Kochetov).
  • exception.code() % 256 == 0인 경우 clickhouse-client의 종료 코드가 잘못되던 문제를 수정했습니다. #11601 (filimonov).
  • ReplicatedMergeTree의 서로 다른 레플리카에서 CREATE/DROP 수행 시 발생하는 경쟁 상태(race condition)를 수정했습니다. 테이블이 ZooKeeper에서 완전히 제거되지 않았거나 생성이 성공적으로 완료되지 않은 경우에도 계속 작동합니다. 이 변경으로 #11432가 해결되었습니다. #11592 (alexey-milovidov).
  • 서버 시작 시 “마크 캐시 크기가 줄어들었습니다”라는 로그 메시지의 사소한 오류를 수정했습니다. 이로써 #11399가 해결되었습니다. #11589 (alexey-milovidov).
  • PREWHERE column in (subquery)ARRAY JOIN이 있는 쿼리에서 발생하는 Size of offsets does not match size of column 오류를 수정했습니다. #11580 (Nikolai Kochetov).
  • SHOW CREATE TABLE에서 드물게 발생하던 세그멘테이션 오류를 수정했습니다. #11490을 해결합니다. #11579 (tavplubix).
  • HTTP 세션의 모든 쿼리가 동일한 query_id를 가지던 문제가 수정되었습니다. #11578 (tavplubix).
  • 이제 clickhouse-server Docker 컨테이너는 server가 살아 있는지 확인할 때 IPv6를 우선 사용합니다. #11550 (Ivan Starkov).
  • min_bytes_to_use_direct_io가 활성화되어 있고 PREWHERE가 적용된 상태에서 SAMPLE을 사용하거나 스레드 수가 많을 때 발생할 수 있는 Data compressed with different methods 오류를 수정했습니다. 이 수정으로 #11539이 해결됩니다. #11540 (alexey-milovidov).
  • <node>의 shard_num/replica_num을 수정했습니다(use_compact_format_in_distributed_parts_names가 깨지는 문제). #11528 (Azat Khuzhin).
  • prefer_localhost_replica=0이고 internal_replication이 없는 경우 분산 테이블에 대한 async INSERT를 수정했습니다. #11527 (Azat Khuzhin).
  • -State 함수로 집계하는 중간에 예외가 발생할 때 생기던 메모리 누수를 수정했습니다. 이로써 #8995가 해결됩니다. #11496 (alexey-milovidov).
  • SELECT(max_threads>1)에는 여러 스트림이 있지만 INSERT에는 하나만 있는(max_insert_threads==0) 경우, 발생하던 INSERT SELECT FINALPipeline stuck 예외를 수정했습니다. #11455 (Azat Khuzhin).
  • select count() from t, u와 같은 쿼리에서 잘못된 결과가 반환되던 문제를 수정했습니다. #11454 (Artem Zuikov).
  • 코덱의 압축된 크기 반환 문제를 수정했습니다. #11448 (Nikolai Kochetov).
  • 컬럼에 리터럴이 아닌 인수가 있는 압축 코덱이 설정된 경우 발생하던 server 충돌 문제를 수정했습니다. #11365를 수정합니다. #11431 (alesapin).
  • 테이블이 성공적으로 생성되지 않았을 때 MergeTree 종료 시 발생할 수 있는 초기화되지 않은 메모리 읽기 문제를 수정했습니다. #11420 (alexey-milovidov).
  • LowCarinality(T)Nullable(T)에 대한 JOIN 중 발생하던 크래시를 수정했습니다. #11380. #11414 (Artem Zuikov).
  • USING 키가 잘못된 경우의 오류 코드를 수정했습니다. #11373. #11404 (Artem Zuikov).
  • 위도/경도 범위를 벗어난 인수에서 발생하던 geohashesInBox 문제를 수정했습니다. #11403 (Vasily Nemkov).
  • joinGet() 함수의 오류 메시지가 개선되었습니다. #11389 (Artem Zuikov).
  • 외부 정렬과 limit가 포함된 쿼리에서 발생할 수 있는 Pipeline stuck 오류를 수정했습니다. #11359를 해결합니다. #11366 (Nikolai Kochetov).
  • ReplicatedMergeTree에서 파트 전송 중 발생하는 불필요한 잠금을 제거했습니다. #11354 (alesapin).
  • 멀티라인 모드의 clickhouse-client에서 \G(세로 출력) 지원 문제를 수정했습니다. 이 변경으로 #9933가 해결되었습니다. #11350 (alexey-milovidov).
  • Lazy 데이터베이스 사용 시 발생할 수 있는 segfault 문제를 수정했습니다. #11348 (alexey-milovidov).
  • Join 테이블 엔진을 JOIN 없이 직접 조회할 때 발생하던 충돌과 잘못된 NULL 허용 속성 문제를 수정했습니다. #11340 (Artem Zuikov).
  • quantilesExactWeightedArray에서 발생하던 충돌을 수정했습니다. #11337 (Nikolai Kochetov).
  • 이제 ALTER 쿼리에서 메타데이터를 변경하기 전에 머지 작업이 중지됩니다. #11335 (alesapin).
  • 설정 parallel_view_processing = 1에서 MATERIALIZED VIEW에 대한 쓰기가 다시 병렬로 수행되도록 했습니다. #10241을 수정했습니다. #11330 (Nikolai Kochetov).
  • 추출된 JSON에 짝이 맞지 않는 { 또는 [가 포함된 문자열이 있는 경우 visitParamExtractRaw 문제를 수정했습니다. #11318 (Ewout).
  • 매우 드물게 발생하던 ThreadPool의 race condition을 수정했습니다. #11314 (alexey-milovidov).
  • clickhouse-copier의 사소한 data race를 수정했습니다. 통합 테스트에서 발견되었습니다. #11313 (alexey-milovidov).
  • 변환 과정에서 초기화되지 않은 메모리가 사용될 가능성이 있는 문제를 수정했습니다. 예시: SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov).
  • 테이블의 프라이머리 키(primary key)에 배열(Array) 컬럼이 있고, 쿼리에서 empty 또는 notEmpty 함수로 이 컬럼을 필터링할 때 인덱스 분석이 작동하지 않는 문제를 수정했습니다. 이 수정은 #11286을 해결합니다. #11303 (alexey-milovidov).
  • 쿼리 속도 추정이 부정확해질 수 있고, 쿼리가 max_network_bandwidth, max_execution_speed 또는 priority 설정으로 인해 속도 제한(throttling)되면 min_execution_speed 제한이 적용되지 않거나 잘못 적용될 수 있는 버그를 수정했습니다. 또한 timeout_before_checking_execution_speed의 기본값을 0이 아닌 값으로 변경했습니다. 그렇지 않으면 min_execution_speedmax_execution_speed 설정이 아무런 효과를 내지 못하기 때문입니다. 이 수정은 #11297을 해결합니다. 이 수정은 #5732를 해결합니다. 이 수정은 #6228를 해결합니다. 사용성 개선: clickhouse-client에서 예외 메시지가 진행률 표시줄과 이어서 붙지 않도록 했습니다. #11296 (alexey-milovidov).
  • SET DEFAULT ROLE이 잘못된 인수로 호출될 때 발생하는 충돌을 수정했습니다. 이 변경으로 #10586가 해결됩니다. #11278 (Vitaly Baranov).
  • Protobuf 포맷의 잘못된 데이터를 읽는 중 발생하던 충돌을 수정했습니다. 이로써 #5957, #11203 문제가 해결되었습니다. #11258 (Vitaly Baranov).
  • cache 딕셔너리가 기본값이 아닌 정상 값을 반환해야 하는 상황에서 기본값을 반환할 수 있던 버그를 수정했습니다(만료된 키만 있는 경우). 이 문제는 문자열 필드에만 영향을 줍니다. #11233 (Nikita Mikhaylov).
  • 내부 쿼리에 상수가 포함된 VIEW를 읽을 때 발생하던 Block structure mismatch in QueryPipeline 오류를 수정했습니다. #11181. #11205 (Nikolai Kochetov).
  • 발생 가능한 예외 Invalid status for associated output를 수정했습니다. #11200 (Nikolai Kochetov).
  • 이제 CREATE 쿼리에 primary.idx가 정의되어 있으면 이를 확인합니다. #11199 (alesapin).
  • Array(Array(LowCardinality))가 캡처된 인수로 사용된 고차 함수에서 발생할 수 있는 Cannot capture column 오류를 수정했습니다. #11185 (Nikolai Kochetov).
  • 키가 1000개를 초과하는 경우 및 일부 백엔드에서 실패할 수 있었던 S3 글로빙을 수정했습니다. #11179 (Vladimir Chebotarev).
  • 데이터 스키핑 인덱스가 백그라운드 머지 중에 수정되는 컬럼에 의존하는 경우(SummingMergeTree, AggregatingMergeTree, 그리고 TTL GROUP BY), 잘못 계산되는 문제가 있었습니다. 이 문제는 인덱스 계산을 머지 이후로 옮겨, 머지된 데이터 기준으로 인덱스를 계산하도록 수정했습니다. #11162 (Azat Khuzhin).
  • 테이블 엔진이 Kafka인 테이블을 DROP하는 중(또는 서버 재시작 중)에 가끔 발생하던 멈춤 현상을 수정했습니다. #11145 (filimonov).
  • 단순한 쿼리에 스레드가 과도하게 예약되던 문제를 수정했습니다(스레드 수를 줄이기 위한 최적화가 있었지만, 파이프라인 변경 이후 일부가 제대로 작동하지 않았습니다). #11114 (Azat Khuzhin).
  • 아무것도 최종화되지 않은 경우 mutation 최종화 작업의 로깅을 제거했습니다. #11109 (alesapin).
  • system 로그 테이블 구조가 변경된 업데이트 이후 서버 시작 중 발생하던 교착 상태를 수정했습니다. #11106 (alesapin).
  • registerDiskS3의 메모리 누수를 수정했습니다. #11074 (Pavel Kovalenko).
  • JOIN이 PREWHERE와 함께 사용되거나 optimize_move_to_prewhere가 WHERE를 PREWHERE로 변환할 때 발생하는 No such name in Block::erase() 오류를 수정했습니다. #11051 (Artem Zuikov).
  • Kafka engine 테이블이 종료되는 동안 발생할 수 있는 데이터 누락 문제를 수정했습니다. #11048 (filimonov).
  • parseDateTime64BestEffort의 인수 해석 관련 버그를 수정했습니다. #10925. #11038 (Vasily Nemkov).
  • 이제 단일 ALTER 쿼리에서 같은 컬럼에 대해 ADD/DROPRENAME를 함께 수행할 수 있습니다. MODIFYRENAME를 동시에 수행할 때의 예외 메시지도 더 명확해졌습니다. #10669를 부분적으로 해결합니다. #11037 (alesapin).
  • S3 URL 파싱 문제를 수정했습니다. #11036 (Vladimir Chebotarev).
  • LIMIT가 있을 때 2단계 GROUP BY에서 메모리 추적을 수정했습니다. #11022 (Azat Khuzhin).
  • 테이블(table)이 성공적으로 생성되지 않은 경우 MergeTree에서 매우 드물게 발생할 수 있는 잠재적 use-after-free 오류를 수정했습니다. #10986 (alexey-milovidov).
  • Atomic 데이터베이스의 메타데이터(rename 시 상대 경로) 및 데이터(symlink용 상대 경로) 처리 문제를 수정했습니다. #10980 (Azat Khuzhin).
  • Atomic 데이터베이스 엔진에서 동시에 실행되는 ALTERDROP DATABASE 쿼리로 인해 발생하던 서버 충돌을 수정했습니다. #10968 (tavplubix).
  • 메서드 getRawData()의 원시 데이터 크기가 잘못 계산되던 문제를 수정했습니다. #10964 (Igr).
  • 20.1 이하 버전과의 2단계 집계 비호환성을 수정했습니다. 이 비호환성은 initiator 노드와 원격 노드에서 서로 다른 버전의 ClickHouse를 사용하고, GROUP BY 결과 크기가 크며, 단일 String 필드에 대해 집계가 수행될 때 발생합니다. 이로 인해 결과에서 단일 키에 대해 머지되지 않은 여러 행이 생깁니다. #10952 (alexey-milovidov).
  • DistributedBlockOutputStream에서 부분적으로만 작성된 파일이 전송되지 않도록 했습니다. #10940 (Azat Khuzhin).
  • SELECT count(notNullIn(NULL, []))에서 발생하던 충돌을 수정했습니다. #10920 (Nikolai Kochetov).
  • 테이블 엔진이 Kafka인 테이블을 삭제(DROP)할 때(또는 서버 재시작 중) 가끔 발생하던 멈춤 현상을 수정했습니다. #10910 (filimonov).
  • 이제 a TO b, c TO a와 같이 여러 ALTER RENAME을 실행할 수 있습니다. #10895 (alesapin).
  • 동일한 컬럼에 대해 여러 thread에서 집계 함수 state의 결과를 가져올 때 발생할 수 있는 race condition을 수정했습니다. 제가 확인한 바로는, 이 문제는 quanite* 함수의 AggregateFunction state를 저장하는 Memory engine 테이블을 읽는 동안 finalizeAggregation 함수를 사용할 때에만 발생할 수 있습니다. #10890 (Nikolai Kochetov).
  • 분산 테이블에서 튜플의 이전 버전과의 호환성 문제를 수정했습니다. #10889 (Anton Popov).
  • StringHashTable에서 SIGSEGV를 수정했습니다(해당 키가 없을 때). #10870 (Azat Khuzhin).
  • Atomic 엔진을 사용하는 데이터베이스에서 LiveView 테이블을 삭제한 뒤 WATCH가 멈추는 문제를 수정했습니다. #10859 (tavplubix).
  • 레플리카가 비활성 상태가 된 후 해당 레플리카를 기다리느라 일부 ALTER 또는 OPTIMIZE 쿼리가 멈출 수 있던 ReplicatedMergeTree 버그를 수정했습니다. #10849 (tavplubix).
  • 이제 CONSTRAINT 표현식에 포함된 컬럼의 이름이 변경되면 제약 조건도 업데이트됩니다. #10844를 수정했습니다. #10847 (alesapin).
  • 캐시 딕셔너리에서 초기화되지 않은 메모리를 읽을 수 있는 잠재적 문제를 수정했습니다. #10834 (alexey-milovidov).
  • Block::sortColumns() 이후 컬럼 순서를 바로잡았습니다(또한 이것이 실제 사용 사례인 Buffer 엔진에 영향을 미친다는 점을 보여주는 테스트도 추가했습니다). #10826 (Azat Khuzhin).
  • 식별자에 따옴표를 사용하지 않도록 요청한 경우 ODBC bridge에서 발생하던 문제를 수정했습니다. 이 수정으로 #7984가 해결됩니다. #10821 (alexey-milovidov).
  • DateLUT에서 UBSan 및 MSan이 보고한 문제를 수정했습니다. #10798 (alexey-milovidov).
  • 키 조건에서 올바른 형 변환을 위해 src_type을 사용합니다. #6287을 수정했습니다. #10791 (Andrew Onyshchuk).
  • 오래된 libunwind 패치를 제거했습니다. https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 이로써 clang build에서 -fno-omit-frame-pointer를 비활성화할 수 있게 되어 평균적으로 최소 1%의 성능 향상이 이루어집니다. #10761 (Amos Bird).
  • 여러 세그먼트에 걸쳐 부동소수점 가중치를 사용할 때 발생하던 avgWeighted 문제를 수정했습니다. #10758 (Baudouin Giard).
  • parallel_view_processing 동작을 수정했습니다. 이제 예외가 발생하더라도 MATERIALIZED VIEW에 대한 모든 삽입이 예외 없이 완료됩니다. #10241을 수정했습니다. #10757 (Nikolai Kochetov).
  • -State와 함께 사용할 때 combinator -OrNull 및 -OrDefault의 문제를 수정했습니다. #10741 (hcz).
  • 중첩 타입이 있는 generateRandom에서 발생하던 충돌을 수정했습니다. #10583. #10734 (Nikolai Kochetov).
  • 머지 후 발생할 수 있었던 SummingMergeTreeLowCardinality(FixedString) 키 컬럼 데이터 손상을 수정했습니다. #10489을 해결합니다. #10721 (Nikolai Kochetov).
  • 함수로 감싼 기본 키(primary key)를 사용할 때 ‘FINAL’ 수정자와 ‘ORDER BY’ 최적화 관련 문제를 수정했습니다. #10715 (Anton Popov).
  • 함수 h3EdgeAngle에서 발생할 수 있는 버퍼 오버플로우를 수정했습니다. #10711 (alexey-milovidov).
  • 사라지던 합계 문제를 수정했습니다. 쿼리에 외부 WHERE 조건이 있는 join 또는 서브쿼리가 포함된 경우 합계가 필터링될 수 있었습니다. #10674 문제를 수정했습니다. #10698 (Nikolai Kochetov).
  • HTTP 삽입의 원자성 문제를 수정했습니다. 이 수정으로 #9666가 해결됩니다. #10687 (Andrew Onyshchuk).
  • 하나의 쿼리에서 동일한 집합에 IN 연산자를 여러 번 사용하는 경우를 수정했습니다. #10686 (Anton Popov).
  • readonly=2이고 cancel_http_readonly_queries_on_client_close=1일 때 클라이언트가 종료되면 HTTP 요청이 멈춘 상태로 남는 버그를 수정했습니다. #7939, #7019, #7736, #7091을 해결합니다. #10684 (tavplubix).
  • AggregateTransform 생성자에서 매개변수 순서를 수정했습니다. #10667 (palasonic1).
  • distributed_aggregation_memory_efficient가 활성화된 상태에서 원격 쿼리가 병렬로 실행되지 않던 문제를 수정했습니다. #10655를 해결했습니다. #10664 (Nikolai Kochetov).
  • LIMIT가 있는 쿼리에서 행 수가 잘못 계산될 수 있는 문제를 수정했습니다. #10566, #10709을 해결했습니다. #10660 (Nikolai Kochetov).
  • 테이블에 파트가 많은 경우 동시 ALTER 작업이 잠기는 버그를 수정했습니다. #10659 (alesapin).
  • 테이블 시작 전에 서버가 종료된 경우 StorageBuffer에서 nullptr를 역참조하던 문제를 수정했습니다. #10641 (alexey-milovidov).
  • 분산 쿼리에 대한 프레디케이트 최적화(enable_optimize_predicate_expression=1)에서 HAVING 절이 있는 쿼리(즉, 서버 시작 노드에서 필터링이 필요한 경우)의 문제를 수정했습니다. 표현식의 순서를 유지하도록 했으며(이것만으로도 수정에 충분함), 집계기가 인덱스 대신 컬럼 이름을 사용하도록 강제했습니다. 수정: #10613, #11413. #10621 (Azat Khuzhin).
  • LowCardinality에서 optimize_skip_unused_shards 관련 문제를 수정했습니다. #10611 (Azat Khuzhin).
  • 서버 시작 시 예외가 발생할 때 StorageBuffer에서 발생하는 segfault를 수정했습니다. #10550을 해결합니다. #10609 (tavplubix).
  • SYSTEM DROP DNS CACHE 쿼리를 실행하면, 특정 IP 주소에서 사용자의 연결이 허용되는지 확인하는 데 사용되는 캐시도 함께 삭제됩니다. #10608 (tavplubix).
  • MATERIALIZED VIEW의 내부 쿼리에 의존 테이블이 포함된 경우 발생하던 잘못된 스칼라 결과를 수정했습니다. #10603 (Nikolai Kochetov).
  • 동기식 뮤테이션의 조건 변수 처리 방식이 수정되었습니다. 일부 경우 해당 조건 변수에 대한 신호가 유실될 수 있었습니다. #10588 (Vladimir Chebotarev).
  • loadStoredObject()가 완료되기 전에 createDictionary()가 호출될 경우 발생할 수 있는 크래시를 수정했습니다. #10587 (Vitaly Baranov).
  • the BloomFilter false positive must be a double number between 0 and 1 오류를 수정했습니다 #10551. #10569 (Winter Zhang).
  • 기본 표현식의 유형이 컬럼 유형과 다른 컬럼 ALIAS에 대한 SELECT를 수정했습니다. #10563 (Azat Khuzhin).
  • DateTime와 동일하게 DateTime64와 String 값 사이의 비교를 구현했습니다. #10560 (Vasily Nemkov).
  • compact parts를 다른 compact part로 머지할 때 일부 경우에 발생하던 인덱스 손상을 수정했습니다. #10531 (Anton Popov).
  • 기본적으로 GROUP BY 세그먼트 분할_키 최적화를 비활성화하고(optimize_distributed_group_by_sharding_key는 세그먼트 분할_키 분석이 까다로운 경우가 있어 도입 당시부터 기본적으로 비활성화되어 있었으며, 간단한 예로 세그먼트 분할 키의 if가 있습니다), WITH ROLLUP/CUBE/TOTALS에서도 올바르게 동작하도록 수정했습니다. #10516 (Azat Khuzhin).
  • 수정: #10263 (해당 PR 이후 INSERT를 통한 dist 전송이 INSERT가 실행될 때마다 지연되고 있었습니다) 수정: #8756 (해당 PR은 다음 조건이 모두 충족되면 분산 전송에 문제를 일으킵니다(현재로서는 가능성이 낮은 구성으로 보입니다): internal_replication == false, 여러 로컬 세그먼트(하드링킹 코드를 활성화함), 그리고 distributed_storage_policy (link(2)EXDEV에서 실패하게 만듦)). #10486 (Azat Khuzhin).
  • “max_rows_to_sort” 제한과 관련된 오류를 수정했습니다. #10268 (alexey-milovidov).
  • 외부 딕셔너리를 읽는 함수를 호출할 때마다 딕셔너리를 가져오고 접근 권한을 확인하는 작업이 호출당 한 번만 수행되도록 했습니다. #10928 (Vitaly Baranov).

개선 사항

  • 이전 데이터에는 ALTER MODIFY TTL 쿼리 후 TTL이 적용됩니다. 이 동작은 기본적으로 활성화되어 있는 materialize_ttl_after_modify 설정으로 제어됩니다. #11042 (Anton Popov).
  • 문자열 리터럴, VALUES 및 다양한 텍스트 형식에서 C 스타일 백슬래시 이스케이프를 파싱할 때(이는 ClickHouse와 MySQL에서 널리 사용되는 SQL 표준의 확장입니다), 알 수 없는 이스케이프 시퀀스가 발견되면(예: \% 또는 \w) 백슬래시를 유지하도록 하여 LIKEmatch 정규식 사용이 더 편리해지고(이제 name LIKE 'used\\_cars' 대신 name LIKE 'used\_cars'만 쓰면 됩니다) 동시에 호환성도 향상되었습니다. 이 변경으로 #10922가 수정되었습니다. #11208 (alexey-milovidov).
  • Decimal 값을 읽을 때 소수점 이하의 불필요한 자릿수는 잘라냅니다. 이 동작은 MySQL 및 PostgreSQL과 더 잘 호환됩니다. 이로써 #10202 문제가 수정되었습니다. #11831 (alexey-milovidov).
  • ZooKeeper의 메타데이터가 이미 삭제되어 더 이상 존재하지 않는 경우에도 복제된 테이블(Replicated Table)에 대해 DROP을 허용합니다(테스트용으로 TestKeeper를 사용한 뒤 서버를 재시작한 경우도 이에 해당합니다). ZooKeeper와 통신하는 중 오류가 발생하더라도 복제된 테이블의 RENAME을 허용합니다. 이 변경으로 #10720이 수정되었습니다. #11652 (alexey-milovidov).
  • 문자열에서 decimal을 읽을 때의 진단 메시지를 약간 개선했습니다. 이로써 #10202가 해결되었습니다. #11829 (alexey-milovidov).
  • 시그널 핸들러의 sleep 호출을 수정했습니다. 예상보다 짧은 시간만 대기하던 문제를 해결했습니다. #11825 (alexey-milovidov).
  • (Linux에서만) CAP_NET_ADMIN capability 없이도 CPU 및 I/O 관련 OS 성능 메트릭이 작동합니다. #10544 (Alexander Kazakov).
  • 함수 hostName에 대한 alias로 hostname이 추가되었습니다. 이 기능은 Yandex.Metrica의 Victor Tarnavskiy가 제안했습니다. #11821 (alexey-milovidov).
  • 교차 복제 클러스터에서 분산 DDL(업데이트/삭제/파티션 삭제) 지원이 추가되었습니다. #11703 (Nikita Mikhaylov).
  • 시작 시 수신 주소 중 하나에서 listen할 수 없는 경우(예: Docker 내부에서 IPv6를 사용할 수 없는 경우), server 로그에 오류 대신 경고를 기록합니다. server가 나열된 모든 주소에서 listen하지 못하면 이전과 마찬가지로 시작을 거부합니다. 이 변경으로 #4406 문제가 수정되었습니다. #11687 (alexey-milovidov).
  • Docker 이미지가 시작될 때 기본 사용자 및 데이터베이스를 생성합니다. #10637 (Paramtamtam).
  • 여러 줄 쿼리를 server log에 출력할 때 줄이 하나로 합쳐집니다. 여러 줄 문자열 리터럴, 식별자, 단일 행 주석의 경우에도 올바르게 동작하도록 수정했습니다. 이로써 #3853가 해결됩니다. #11686 (alexey-milovidov).
  • 이제 CREATE USER, CREATE ROLE, ALTER USER, SHOW CREATE USER, SHOW GRANTS 등의 명령에서 여러 이름을 허용합니다. #11670 (Vitaly Baranov).
  • 교차 복제 클러스터에서 분산 DDL(UPDATE/DELETE/DROP PARTITION)을 지원하도록 개선했습니다. #11508 (frank lee).
  • 사용자가 명시적 값으로 비밀번호를 지정한 경우 clickhouse-clientclickhouse-benchmark의 명령줄에서 해당 비밀번호를 제거합니다. 이렇게 하면 ps 및 유사한 도구를 통해 비밀번호가 노출되는 것을 방지할 수 있습니다. #11665 (alexey-milovidov).
  • 실행 중인 바이너리와 일치하지 않으면 ELF 파일의 디버그 정보를 사용하지 않습니다. 이는 스택 트레이스에 잘못된 함수 이름과 소스 위치가 출력되는 것을 방지하기 위해 필요합니다. 이 변경으로 #7514가 수정되었습니다. #11657 (alexey-milovidov).
  • parseDateTimeBestEffortOrNull/Zero 함수에서 값을 완전히 parse하지 못한 경우 NULL/0을 반환하도록 했습니다. 이로써 #7876가 수정되었습니다. #11653 (alexey-milovidov).
  • 요청된 URL의 비어 있는 매개변수는 건너뜁니다. 이는 http://localhost:8123/?&a=b 또는 http://localhost:8123/?a=b&&c=d처럼 입력할 때 나타날 수 있습니다. 이 변경으로 #10749를 해결합니다. #11651 (alexey-milovidov).
  • groupArrayArraygroupUniqArrayArraySimpleAggregateFunction으로 사용할 수 있게 되었습니다. #11650 (Volodymyr Kuznetsov).
  • 다른 타입의 인덱스 조건을 분석할 때 암시적 변환을 사용해 상수 문자열과 비교할 수 있도록 했습니다. 이를 통해 #11630이 해결될 수 있습니다. #11648 (alexey-milovidov).
  • https://github.com/ClickHouse/ClickHouse/pull/7572#issuecomment-642815377 기본 HTTPHandlers 설정을 지원합니다. #11628 (Winter Zhang).
  • Kafka engine에서 더 많은 입력 형식을 사용할 수 있도록 했습니다. 조기 플러시 문제를 수정했습니다. kafka_num_consumers가 토픽의 파티션 수보다 클 때 발생하는 성능 문제를 수정했습니다. #11599 (filimonov).
  • multiple_joins_rewriter_version=2 로직을 개선했습니다. 람다 별칭에서 발생하던 알 수 없는 컬럼 오류를 수정했습니다. #11587 (Artem Zuikov).
  • 컬럼 선언 목록을 파싱할 수 없을 때 표시되는 예외 메시지가 개선되었습니다. 이로써 #10403이 해결되었습니다. #11537 (alexey-milovidov).
  • VIEW용 enable_optimize_predicate_expression=1 로직 개선. #11513 (Artem Zuikov).
  • 라이브 view 테이블에 PREWHERE 지원이 추가되었습니다. #11495 (vzakaznikov).
  • 사용자의 특정 주소 접속 허용 여부를 확인하는 데 사용되는 DNS 캐시를 자동으로 업데이트합니다. #11487 (tavplubix).
  • OPTIMIZE FINAL은 concurrent 머지가 수행 중인 경우에도 강제로 머지를 실행합니다. 이 변경으로 #11309#11322가 해결되었습니다. #11346 (alexey-milovidov).
  • clickhouse-client에서 취소된 쿼리의 출력이 표시되지 않도록 했습니다. 이전 버전에서는 쿼리를 취소하려고 Ctrl+C를 눌러도 결과가 터미널에 계속 출력될 수 있었습니다. 이 변경으로 #9473 문제가 해결되었습니다. #11342 (alexey-milovidov).
  • 이제 각 쿼리 후 이력 파일이 업데이트되며, 여러 클라이언트가 하나의 이력 파일을 사용해도 경쟁 상태가 발생하지 않습니다. 이 변경으로 #9897가 해결되었습니다. #11453 (Tagir Kuskarov).
  • 구성을 다시 로드하는 동안의 로그 메시지를 개선했습니다. #11341 (alexey-milovidov).
  • 일부 경우 clickhouse-client 또는 clickhouse-format에서 포맷된 쿼리의 끝부분 공백을 제거합니다. #11325 (alexey-milovidov).
  • 설정 “output_format_pretty_max_value_width”을 추가했습니다. 값이 이보다 길면 터미널에 지나치게 큰 값이 출력되지 않도록 잘라냅니다. 이로써 #11140이 해결되었습니다. #11324 (alexey-milovidov).
  • 메모리 매핑이 부족할 때 표시되는 예외 메시지가 개선되었습니다. 이 변경으로 #11027이 해결되었습니다. #11316 (alexey-milovidov).
  • ASOF JOIN에서 (U)Int8, (U)Int16, Date를 지원합니다. #11301 (Artem Zuikov).
  • Kafka 테이블에서 kafka_client_id 매개변수를 지원합니다. 또한 ClickHouse가 Kafka와 통신할 때 사용하는 기본 client.id를 더 구체적이고 사용하기 쉬운 값으로 변경합니다. #11252 (filimonov).
  • 예외가 발생해도 DistributedFilesToInsert 메트릭 값이 유지되도록 했습니다. 이전 버전에서는 일부 파일을 전송하려고 할 때 값이 설정되었지만, 예외가 발생해 일부 파일이 아직 대기 중인 경우에는 값이 0이었습니다. 이제 이 값은 파일 시스템에서 대기 중인 파일 수를 나타냅니다. #11220 (alexey-milovidov).
  • SQL 호환성을 높이기 위해 DOUBLE PRECISION, CHAR VARYING와 같은 여러 단어로 이루어진 데이터 타입 이름을 지원하도록 했습니다. #11214 (Павел Потемкин).
  • 일부 데이터 타입에 동의어를 추가했습니다. #10856 (Павел Потемкин).
  • 이제부터 쿼리 로그가 기본적으로 활성화됩니다. #11184 (Ivan Blinkov).
  • system.users 테이블과 SHOW CREATE USER 쿼리 실행 시 인증 유형을 표시합니다. #11080 (Vitaly Baranov).
  • 명시적으로 DROP DATABASE를 실행할 때 Memory 데이터베이스 엔진의 데이터가 삭제되도록 했습니다. #10557를 수정했습니다. #11021 (tavplubix).
  • rdkafka 라이브러리의 내부 thread에 이름을 설정합니다. rdkafka의 logs를 server logs에서 사용할 수 있게 합니다. #10983 (Azat Khuzhin).
  • 쿼리에서 유니코드 공백 문자를 지원합니다. Word나 웹 페이지에서 쿼리를 복사해 붙여넣을 때 유용합니다. 이 변경으로 #10896 문제가 수정되었습니다. #10903 (alexey-milovidov).
  • 함수 tupleElement에서 큰 UInt 타입도 인덱스로 사용할 수 있게 했습니다. #10874 (hcz).
  • Distributed에 INSERT할 때 prefer_localhost_replica/load_balancing 설정을 준수합니다. #10867 (Azat Khuzhin).
  • min_insert_block_size_rows_for_materialized_views, min_insert_block_size_bytes_for_materialized_views 설정을 도입했습니다. 이 설정은 min_insert_block_size_rowsmin_insert_block_size_bytes와 유사하지만, MATERIALIZED VIEW에 삽입되는 블록에만 적용됩니다. 이를 통해 MV로 푸시하는 동안 블록 합치기를 제어하고 과도한 메모리 사용량을 방지할 수 있습니다. #10858 (Azat Khuzhin).
  • server 종료 중 복제된 큐에서 발생하던 예외를 제거했습니다. #10819를 수정했습니다. #10841 (alesapin).
  • 수치 오차로 인해 varSamp, varPop이 음수 값을 반환하지 않도록 하고, stddevSamp, stddevPop이 음수 분산에서 계산되지 않도록 했습니다. 이로써 #10532를 수정했습니다. #10829 (alexey-milovidov).
  • 더 나은 DNS 예외 메시지입니다. 이로써 #10813이 수정되었습니다. #10828 (alexey-milovidov).
  • 일부 파싱 오류의 경우 HTTP 응답 코드를 400 Bad Request로 변경했습니다. 이 수정으로 #10636 문제가 해결되었습니다. #10640 (alexey-milovidov).
  • clickhouse-client가 clickhouse-server보다 최신 버전이면 메시지를 표시합니다. #10627 (alexey-milovidov).
  • INSERT INTO [db.]table WATCH 쿼리 지원이 추가되었습니다. #10498 (vzakaznikov).
  • clickhouse-client에서 quota_key를 전달할 수 있게 되었습니다. 이로써 #10227이 해결되었습니다. #10270 (alexey-milovidov).

성능 개선

  • 여러 레플리카가 머지, 뮤테이션, 파티션 삭제, 이동 및 대체 작업을 동시에 할당할 수 있게 했습니다. 이로써 #10367이 해결되었습니다. #11639 (alexey-milovidov) #11795 (alexey-milovidov).
  • 테이블 정렬 키를 고려한 GROUP BY 최적화이며, optimize_aggregation_in_order 설정으로 활성화됩니다. #9113 (dimarub2000).
  • final이 포함된 SELECT 쿼리는 병렬로 실행됩니다. 사용되는 스레드 수를 제한하는 설정 max_final_threads가 추가되었습니다. #10463 (Nikolai Kochetov).
  • 작은 블록이 생성될 때(병렬 구문 분석의 일반적인 경우) INSERT SELECT를 통한 INSERT 쿼리 또는 clickhouse-client를 사용한 INSERT의 성능을 개선했습니다. 이로써 #11275가 수정되었습니다. DEFAULT 필드에 CONSTRAINT가 적용되지 않던 문제를 수정했습니다. 이로써 #11273가 수정되었습니다. TEMPORARY 테이블에서 CONSTRAINT가 무시되던 문제를 수정했습니다. 이로써 #11274가 수정되었습니다. #11276 (alexey-milovidov).
  • SELECT 섹션에서 GROUP BY 키에 대한 min/max/any 집계 함수를 제거하는 최적화로, optimize_aggregators_of_group_by_keys setting으로 활성화됩니다. #11667 (xPoSx). #11806 (Azat Khuzhin).
  • any 함수의 모든 연산을 함수 밖으로 이동시키는 새로운 최적화가 추가되었으며, optimize_move_functions_out_of_any를 통해 활성화됩니다 #11529 (Ruslan).
  • Pretty 형식을 사용할 때 clickhouse-client의 대화형 모드 성능을 개선했습니다. 이전 버전에서는 UTF-8 문자열의 표시 너비를 계산하는 데 많은 시간이 소요될 수 있었습니다. 이 변경으로 #11323이 해결되었습니다. #11323 (alexey-milovidov).
  • ORDER BY와 작은 LIMIT(max_block_size보다 작은 값)을 사용하는 쿼리의 성능이 개선되었습니다. #11171 (Albert Kidrachev).
  • 최적의 함수 구현을 선택해 디스패치할 수 있도록 런타임 CPU 감지를 추가했습니다. 여러 대상에 대한 코드 생성 지원을 추가했습니다. 이로써 #1017이 해결됩니다. #10058 (DimasKovas).
  • 기본적으로 ClickHouse 바이너리에 mlock을 활성화합니다. 이렇게 하면 높은 IO 부하 시 ClickHouse 실행 파일이 페이지 아웃되지 않도록 방지합니다. #11139 (alexey-milovidov).
  • GROUP BY 키 없이 sum 집계 함수를 사용하는 쿼리가 몇 배 더 빠르게 실행되도록 개선했습니다. #10992 (alexey-milovidov).
  • 중복된 일부 데이터 이동을 제거해 radix sort(ORDER BY에서 단순 키에 사용)를 개선했습니다. #10981 (Arslan Gumerov).
  • MergeJoin에서 왼쪽 테이블의 더 큰 파트를 정렬합니다. 왼쪽 블록을 메모리에 버퍼링합니다. 왼쪽 블록 버퍼의 크기를 관리하기 위해 partial_merge_join_left_table_buffer_bytes 설정을 추가했습니다. #10601 (Artem Zuikov).
  • 서브쿼리에서 중복된 ORDER BY 및 DISTINCT를 제거합니다. 이 최적화는 optimize_duplicate_order_by_and_distinct로 활성화됩니다 #10067 (Mikhail Malafeev).
  • 이 기능은 optimize_group_by_function_keys를 활성화하면 GROUP BY 절에서 다른 키에 적용된 함수를 제거합니다 #10051 (xPoSx).
  • 집계 함수에서 산술 연산을 분리해 내는 새로운 최적화가 추가되었으며, optimize_arithmetic_operations_in_aggregate_functions 설정으로 활성화할 수 있습니다 #10047 (Ruslan).
  • curl 대신 Poco 기반 S3용 HTTP 클라이언트를 사용합니다. 이로써 S3 스토리지와 테이블 함수의 성능이 향상되고 메모리 사용량이 줄어듭니다. #11230 (Pavel Kovalenko).
  • 항상 적용되던 제한값 기반 재스케줄링과 관련된 Kafka 성능 문제를 수정했습니다. #11149 (filimonov).
  • jemalloc에 percpu_arena:percpu를 활성화했습니다(이렇게 하면 스레드 풀로 인한 메모리 단편화가 줄어듭니다). #11084 (Azat Khuzhin).
  • S3 HTTP 클라이언트의 응답을 읽을 때 메모리 사용량을 최적화했습니다. #11561 (Pavel Kovalenko).
  • 성능 향상을 위해 기본 Kafka 설정을 조정했습니다. #11388 (filimonov).

실험적 기능

  • 데이터 타입 Point(Tuple(Float64, Float64)) 및 Polygon(Array(Array(Tuple(Float64, Float64)))을 추가했습니다. #10678 (Alexey Ilyukhov).
  • 배열에서 부분 수열을 찾을 수 있는 hasSubstr 함수를 추가했습니다. 참고: 이 함수는 별도 공지 없이 이름이 변경될 수 있습니다. #11071 (Ryad Zenine).
  • OpenCL 지원과 bitonic sort 알고리즘을 추가했습니다. 이 알고리즘은 단일 컬럼의 정수 타입 데이터를 정렬하는 데 사용할 수 있습니다. -DENABLE_OPENCL=1 플래그를 사용해 빌드해야 합니다. 다른 알고리즘 대신 bitonic sort 알고리즘을 사용하려면 설정 옵션 special_sortbitonic_sort로 지정하고, OpenCL을 사용할 수 있는지 확인해야 합니다. 이 기능은 성능이나 그 밖의 요소를 개선하지 않으며, 예시 및 시연 목적으로만 제공됩니다. 이 방향으로 추가 개발이 이루어지지 않으면 가까운 시일 내에 제거될 가능성이 높습니다. #10232 (Ri).

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

  • 프로그램과 유틸리티에 clang-tidy를 활성화했습니다. #10991 (alexey-milovidov).
  • tzdata 의존성을 제거했습니다. /usr/share/zoneinfo 디렉터리가 없어도 실패하지 않습니다. 시스템에 tzdata가 설치되어 있지 않아도 ClickHouse에서는 모든 시간대가 정상적으로 작동합니다. #11827 (alexey-milovidov).
  • MSan 및 UBSan 스트레스 테스트를 추가했습니다. MSan과 UBSan은 이미 기능 테스트에 대해 사용하고 있으며, “stress” 테스트는 별도의 테스트 유형이라는 점에 유의하십시오. #10871 (alexey-milovidov).
  • 충돌 메시지에 컴파일러 build id를 출력합니다. 이렇게 하면 어떤 실행 파일이 충돌했는지 조금 더 정확하게 파악할 수 있습니다. 새로운 함수 buildId를 추가했습니다. #11824 (alexey-milovidov).
  • FREEZE 쿼리 이후에도 뮤테이션이 계속 동작하는지 확인하는 테스트가 추가되었습니다. #11820 (alexey-milovidov).
  • 이름에 “fail” substring이 포함된 테스트는 허용하지 않습니다. 브라우저에서 Ctrl+F로 “fail”을 검색할 때 테스트 결과를 살펴보기가 불편해지기 때문입니다. #11817 (alexey-milovidov).
  • HTTPHandlerFactory에서 사용하지 않는 import를 제거했습니다. #11660 (Bharat Nallan).
  • copier를 실행하는 인스턴스를 무작위로 샘플링하도록 추가했습니다. 이는 Too many simultaneous queries 오류를 방지하기 위해 필요합니다. 또한 timeout을 늘리고 장애 발생 확률을 낮췄습니다. #11573 (Nikita Mikhaylov).
  • 빠진 include를 수정했습니다. #11525 (Matwey V. Kornilov).
  • 오래된 예제 프로그램을 제거해 build 속도를 높였습니다. 또한 더 이상 참조되지 않는 기능 테스트도 일부 발견했습니다. #11486 (alexey-milovidov).
  • CI 빌드용 ccache 크기를 늘렸습니다. #11450 (alesapin).
  • deb 빌드에서는 unit_tests_dbms만 남겼습니다. #11429 (Ilya Yatsishin).
  • librdkafka를 1.4.2 버전으로 업데이트했습니다. #11256 (filimonov).
  • CMake 빌드 파일을 리팩터링했습니다. #11390 (Ivan).
  • 간헐적으로 실패하던 통합 테스트 여러 건을 수정했습니다. #11355 (alesapin).
  • UBSan으로 실행하는 단위 테스트 지원을 추가했습니다. #11345 (alexey-milovidov).
  • 통합 테스트 test_insertion_sync_fails_with_timeout에서 중복된 timeout을 제거했습니다. #11343 (alesapin).
  • clickhouse-test에서 멈춘 쿼리를 더 잘 감지합니다. #11321 (alexey-milovidov).
  • server가 디버그로 빌드되었거나 새니타이저를 사용해 빌드된 경우 경고를 표시합니다. #11304 (alexey-milovidov).
  • 이제 clickhouse-test는 테스트를 실행하기 전에 서버가 정상 동작 중인지 확인합니다. #11285 (alesapin).
  • 간헐적으로 불안정할 수 있는 테스트 00731_long_merge_tree_select_opened_files.sh를 수정했습니다. 이 테스트는 자주 실패하지는 않지만, ThreadFuzzer로 실험하던 중 이 테스트에 잠재적인 경쟁 상태(race condition)가 있음을 발견했습니다: #9814 예시는 link를 참조하십시오. #11270 (alexey-milovidov).
  • curl 호출이 시간 초과되면 CI에서 테스트를 다시 실행합니다. 이는 CI infrastructure에서 일반적으로 발생하는 10초 이상의 시스템 멈춤 현상 때문일 수 있습니다. 이 변경으로 #11267이 수정되었습니다. #11268 (alexey-milovidov).
  • @donmikel의 Join table engine용 테스트를 추가했습니다. 이로써 #9158가 해결되었습니다. #11265 (alexey-milovidov).
  • 단위 테스트의 몇 가지 사소한 오류를 수정했습니다. #11262 (alesapin).
  • 이제 cctz 라이브러리의 링커 명령 일부가 다른 라이브러리와 섞이지 않습니다. #11213 (alesapin).
  • /programs/server를 실제 실행 프로그램과 라이브러리로 분리했습니다. #11186 (Ivan).
  • protobuf 및 gRPC의 빌드 스크립트 개선. #11172 (Vitaly Baranov).
  • 작동하지 않던 성능 테스트를 다시 활성화했습니다. #11158 (alexey-milovidov).
  • 테스트용 루트 S3 버킷은 CH 인스턴스를 시작하기 전에 먼저 생성합니다. #11142 (Pavel Kovalenko).
  • 상수가 아닌 Polygon에 대한 성능 테스트를 추가했습니다. #11141 (alexey-milovidov).
  • 00979_live_view_watch_continuous_aggregates 테스트를 수정했습니다. #11024 (vzakaznikov).
  • integration tests에서 tmpfs 상에서 Zookeeper를 실행할 수 있도록 했습니다. #11002 (alesapin).
  • 지수 백오프 방식으로 odbc-bridge를 기다리도록 했습니다. 이전의 200 ms 대기 시간은 CI 환경에서는 충분하지 않았습니다. #10990 (alexey-milovidov).
  • 결정적이지 않은 테스트를 수정했습니다. #10989 (alexey-milovidov).
  • 비어 있는 외부 데이터에 대한 테스트를 추가했습니다. #10926 (alexey-milovidov).
  • 각 테스트마다 데이터베이스를 새로 생성합니다. 이렇게 하면 테스트 간 격리가 개선됩니다. #10902 (alexey-milovidov).
  • 컬럼 관련 코드에 assert를 추가했습니다. #10833 (alexey-milovidov).
  • 새니타이저와의 연동이 개선되었습니다. 새니타이저 실패 메시지에 query_id 정보를 출력합니다. #10832 (alexey-milovidov).
  • “Split build smoke test” check의 명백한 race condition을 수정했습니다. #10820 (alexey-milovidov).
  • MergeTreeIndexFullText의 (잘못된) MSan 보고를 수정했습니다. 이 문제는 #9968에서 처음 발생했습니다. #10801 (alexey-milovidov).
  • MariaDB Client 라이브러리에 MSan suppression을 추가했습니다. #10800 (alexey-milovidov).
  • GRPC make에서 protobuf 파일을 찾지 못해, 올바른 링크를 추가해 make 파일을 수정했습니다. #10794 (mnkonkova).
  • base, utils, programs에 추가 경고(-Weverything)를 활성화했습니다. 대부분의 코드에는 이미 적용되어 있다는 점에 유의하세요. #10779 (alexey-milovidov).
  • 라이브러리 경고 억제가 #10396에서 실수로 public으로 선언되었습니다. #10776 (alexey-milovidov).
  • #10396에서 실수로 삭제된 패치를 복원했습니다. #10774 (alexey-milovidov).
  • 성능 테스트 오류 수정, 2부. #10773 (alexey-milovidov).
  • 성능 테스트 오류를 수정했습니다. #10766 (alexey-milovidov).
  • 크로스 빌드에 clang-10 컴파일러를 사용하도록 변경했습니다. #10724 (Ivan).
  • RPM 패키지 설치 지침을 업데이트했습니다. 이 변경은 Denis(TG 로그인 @ldviolet)의 제안으로 이루어졌으며, Arkady Shejn이 구현했습니다. #10707 (alexey-milovidov).
  • tests/queries/0_stateless/01246_insert_into_watch_live_view.py 테스트 수정 시도. #10670 (vzakaznikov).
  • 00979_live_view_watch_continuous_aggregates.py 테스트를 수정하고 재활성화했습니다. #10658 (vzakaznikov).
  • ASan 스트레스 테스트의 OOM을 수정했습니다. #10646 (alexey-milovidov).
  • clang-10으로 마이그레이션한 뒤 발생한 HashTable의 UBSan 리포트(nullptr에 0을 더하는 문제)를 수정했습니다. #10638 (alexey-milovidov).
  • 컴파일 시 tzdata 처리 과정에서 ld (bfd) 링커에 대한 외부 호출을 제거했습니다. #10634 (alesapin).
  • lld를 사용해 blob(리소스)을 링크할 수 있게 했습니다. #10632 (alexey-milovidov).
  • LZ4 라이브러리에서 UBSan이 보고한 문제를 수정했습니다. #10631 (alexey-milovidov). 관련 항목 https://github.com/lz4/lz4/issues/857
  • LZ4를 최신 dev 브랜치로 업데이트했습니다. #10630 (alexey-milovidov).
  • 안정 버전 목록이 포함된 자동 생성된 기계 판독용 파일을 추가했습니다. #10628 (alexey-milovidov).
  • capnp::UnalignedFlatArrayMessageReadercapnproto 버전 확인 로직을 수정했습니다. #10618 (Matwey V. Kornilov).
  • 테스트 시 메모리 사용량 감소. #10617 (alexey-milovidov).
  • 새로운 라이브 view 테스트의 하드코딩된 타임아웃을 수정했습니다. #10604 (vzakaznikov).
  • tests/queries/0_stateless/helpers/client.py에서 클라이언트를 열 때 타임아웃 시간을 늘렸습니다. #10599 (vzakaznikov).
  • clang 빌드에 ThinLTO를 활성화했습니다. #10435의 후속 작업입니다. #10585 (Amos Bird).
  • 퍼저를 추가하고 oss-fuzz 통합을 준비했습니다. #10546 (kyprizel).
  • FreeBSD 빌드를 수정했습니다. #10150 (Ivan).
  • pytest 프레임워크를 사용하는 쿼리 테스트용 새 빌드를 추가했습니다. #10039 (Ivan).

ClickHouse 릴리스 v20.4

ClickHouse 릴리스 v20.4.8.99-안정 2020-08-10

버그 수정

  • 인수로 Unix timestamp를 전달할 때 parseDateTimeBestEffort 함수에서 발생하던 오류를 수정했습니다. 이로써 #13362가 해결됩니다. #13441 (alexey-milovidov).
  • NaN 값이 있는 Float 타입에 대해 uniqExact, topK, sumDistinct 및 유사한 집계 함수를 호출할 때 발생할 수 있던 성능 저하와 다소 부정확한 결과 문제를 수정했습니다. 또한 디버그 build에서 assert가 트리거되던 문제도 수정했습니다. 이 변경으로 #12491이 해결되었습니다. #13254 (alexey-milovidov).
  • 리터럴 NULL이 아닌 cond로 널 허용 constexpr를 사용할 때 발생하던 if 함수 문제가 수정되었습니다. #12463를 수정했습니다. #13226 (alexey-milovidov).
  • 배열 요소가 널 허용이고 배열 첨자도 널 허용인 경우 arrayElement 함수에서 발생하던 assert를 수정했습니다. 이 수정으로 #12172 문제도 해결되었습니다. #13224 (alexey-milovidov).
  • 함수 사용 시 잘못된 인덱스 분석이 이루어지던 문제를 수정했습니다. 이 문제로 인해 MergeTree 테이블을 읽는 동안 잘못된 파트가 프루닝될 수 있었습니다. #13060을 수정했습니다. #12406을 수정했습니다. #13081 (Anton Popov).
  • 로컬 레플리카에서 SELECT를 수행할 때 스레드 수에 적용되던 불필요한 제한을 수정했습니다. #12840 (Nikolai Kochetov).
  • WITH TOTALS 쿼리에서 데이터에 추가 오버플로우 행이 나타날 수 있는 문제를 수정했습니다. #12747 (Nikolai Kochetov).
  • 큰 튜플이 IN 절에서 함수로 해석될 때의 성능을 개선했습니다. 즉, 어떤 이유에서인지 사용자가 WHERE x IN (1, 2, ...) 대신 WHERE x IN tuple(1, 2, ...)를 작성하는 경우입니다. #12700 (Anton Popov).
  • input_format_parallel_parsing의 메모리 추적을 수정했습니다(스레드를 그룹에 연결하여 해결). #12672 (Azat Khuzhin).
  • 하위 쿼리에 WITH 절이 포함된 경우에도 push predicate를 허용하도록 #12293를 수정했습니다. #12663 (Winter Zhang).
  • const 표현식이 포함된 블룸 필터 인덱스 수정 관련 #10572 문제를 해결했습니다. #12659 (Winter Zhang).
  • broker를 사용할 수 없을 때를 비롯한 여러 상황에서 StorageKafka에 발생하던 SIGSEGV를 수정했습니다. #12658 (Azat Khuzhin).
  • Array(UUID) 인수를 사용하는 함수 if 지원이 추가되었습니다. 이로써 #11066가 수정되었습니다. #12648 (alexey-milovidov).
  • 서버 충돌로 이어질 수 있던 cache 레이아웃을 사용하는 외부 딕셔너리의 경쟁 상태 문제를 수정했습니다. #12566 (alesapin).
  • DROP TABLE 시 분산 테이블의 데이터(async INSERT의 블록)를 삭제하도록 했습니다. #12556 (Azat Khuzhin).
  • enable_mixed_granularity_parts=1일 때 ALTER DELETE 쿼리 이후 기존 파트가 손상되는 버그를 수정했습니다. #12536을 해결했습니다. #12543 (alesapin).
  • 인수 개수가 잘못된 함수 in에 대해 더 나은 예외를 제공합니다. #12529 (Anton Popov).
  • compact 파트를 읽을 때 발생하던 성능 문제를 수정했습니다. #12492 (Anton Popov).
  • 딕셔너리 키 표현식을 대상으로 조인할 때 발생하던 딕셔너리 JOIN 크래시를 수정했습니다: t JOIN dict ON expr(dict.id) = t.id. 이 경우에는 딕셔너리 JOIN 최적화를 비활성화했습니다. #12458 (Artem Zuikov).
  • StorageMerge에서 발생할 수 있던 segfault를 수정했습니다. #12054를 해결했습니다. #12401 (tavplubix).
  • WITH FILL 수정자에서 컬럼 순서를 수정했습니다. 이전에는 ORDER BY 절의 컬럼 순서가 반영되지 않았습니다. #12306 (Anton Popov).
  • 가상 컬럼(예: Merge 테이블의 _table) 또는 시스템 테이블의 “index” 컬럼으로 데이터를 필터링하는 표현식(예: system.tables를 쿼리할 때 데이터베이스 이름으로 필터링하는 경우)이 널 허용 유형을 반환할 때 발생하는 “bad cast” 예외를 방지합니다. 이 변경으로 #12166가 수정되었습니다. #12305 (alexey-milovidov).
  • TrieDictionary 로드에 실패한 후 오류를 표시하도록 했습니다. #12290 (Vitaly Baranov).
  • arrayFill 함수가 빈 배열에서 잘못 동작해 충돌이 발생할 수 있었습니다. 이 수정으로 #12263가 해결되었습니다. #12279 (alexey-milovidov).
  • LowCardinality 타입에 대해 공통 타입으로 변환하는 기능을 구현했습니다. 이제 LowCardinality 컬럼과 다른 컬럼이 있는 테이블에 대해 UNION ALL을 실행할 수 있습니다. 이로써 #8212 문제가 수정되었습니다. 이로써 #4342 문제가 수정되었습니다. #12275 (alexey-milovidov).
  • StorageFile에서 여러 차례 연속으로 삽입할 때 일부 특수 타입의 헤더가 여러 번 기록되던 문제를 수정했습니다. 이로써 #6155가 해결되었습니다. #12197 (Nikita Mikhaylov).
  • UInt8 값이 0이나 1이 아닐 때의 논리 함수를 수정했습니다. #12196 (Alexander Kazakov).
  • max_memory_usage*의 상한을 프로세스 상주 메모리에 맞춥니다. #12182 (Azat Khuzhin).
  • GROUP BY에서 단사 함수 제거 시 dictGet 인수 검사를 수정했습니다. #12179 (Azat Khuzhin).
  • 스키마를 지원하지 않는 ODBC 연결에서는 딕셔너리 소스의 테이블 이름을 스키마와 테이블 이름으로 나누지 않습니다. #12165 (Vitaly Baranov).
  • 조건이 NULL로 평가될 때 레코드가 삭제되던 ALTER DELETE의 잘못된 로직을 수정했습니다. 이로써 #9088이 해결되었습니다. 이로써 #12106이 종료되었습니다. #12153 (alexey-milovidov).
  • 별칭이 있을 때 외부 DBMS(예: MySQL, ODBC)로 전송할 쿼리 변환을 수정했습니다. 이로써 #12032 문제가 해결되었습니다. #12151 (alexey-milovidov).
  • 정수 나눗셈에서 발생할 수 있는 오버플로우를 해결했습니다. 이로써 #12119 문제가 수정되었습니다. #12140 (alexey-milovidov).
  • greatCircleDistance, geoDistance에서 발생할 수 있는 무한 루프 문제를 수정했습니다. 이 수정으로 #12117이 해결됩니다. #12137 (alexey-milovidov).
  • “pid” 파일 처리 방식을 정리했습니다. 이전 버전에서는 server가 정상적으로 종료되지 않은 채 강제 종료되었고, 이전에 실행되던 server와 동일한 pid를 가진 다른 프로세스가 있는 경우 server가 시작을 거부할 수 있었습니다. 또한 server 시작에 실패한 경우에도 다른 server가 실행 중이면 pid 파일이 삭제될 수 있었습니다. 이 변경으로 #3501이 수정되었습니다. #12133 (alexey-milovidov).
  • 딕셔너리에 대한 ENGINE=Dictionary 테이블의 종속성 처리 방식을 수정했습니다. 이로써 #10994가 해결되었습니다. 이로써 #10397가 해결되었습니다. #12116 (Vitaly Baranov).
  • 총 스레드 수 상한이 잘못 설정되어 발생한 UNION이 포함된 SELECT 쿼리의 성능 문제를 수정했습니다. #12030을 수정했습니다. #12103 (Nikolai Kochetov).
  • -StateResample combinator에서 발생하던 세그폴트를 수정했습니다. #12092 (Anton Popov).
  • SELECT 쿼리에서 system.quey_log의 비어 있던 result_rowsresult_bytes 메트릭을 수정했습니다. #11595를 해결합니다. #12089 (Nikolai Kochetov).
  • VIEW에서 select를 수행할 때 스레드 수를 불필요하게 제한하던 문제를 수정했습니다. #11937 문제를 수정했습니다. #12085 (Nikolai Kochetov).
  • PREWHERE에 잘못된 타입을 사용할 때 발생할 수 있던 크래시를 수정했습니다. #12053, #12060를 해결했습니다. #12060 (Nikolai Kochetov).
  • LowCardinality 유형에서 함수 defaultValueOfArgumentType 사용 시 발생하던 오류 Expected single dictionary argument for function를 수정했습니다. #11808. #12056 (Nikolai Kochetov).
  • Tuple(LowCardinality) 인수를 사용하는 고차 함수에서 Cannot capture column 오류를 수정했습니다. #9766를 해결했습니다. #12055 (Nikolai Kochetov).
  • 데이터베이스를 로드할 때 테이블 메타데이터를 병렬로 파싱합니다. 이를 통해 테이블 수가 많을 때 서버 시작이 느려지는 문제를 해결합니다. #12045 (tavplubix).
  • Enum 타입에서는 topK 집계 함수가 Enum을 반환하도록 수정했습니다. 이로써 #3740이 해결되었습니다. #12043 (alexey-milovidov).
  • 제약 조건이 상수 표현식인지 확인하는 검사를 수정했습니다. 이 수정은 #11360을 해결합니다. #12042 (alexey-milovidov).
  • Nullable 컬럼이 포함된 튜플의 잘못된 비교를 수정했습니다. #11985를 해결했습니다. #12039 (Nikolai Kochetov).
  • allow_introspection_functions=0일 때 접근 권한 계산이 올바르게 이루어지도록 수정했습니다. #12031 (Vitaly Baranov).
  • 크기가 서로 다른 FixedString 유형의 인수로 함수 if를 호출할 때 발생할 수 있던 잘못된 결과와 잠재적 충돌을 수정했습니다. 이 수정으로 #11362가 해결됩니다. #12021 (alexey-milovidov).
  • neighbor 함수를 유일한 반환 표현식으로 사용하는 쿼리에서, 함수가 offset -9223372036854775808로 호출되면 결과가 비어 있을 수 있습니다. 이 변경으로 #11367이 수정되었습니다. #12019 (alexey-milovidov).
  • allow_ddl=0일 때 접근 권한 계산이 올바르게 이루어지도록 수정했습니다. #12015 (Vitaly Baranov).
  • 충돌을 유발할 수 있는 generateRandom의 잠재적 배열 크기 오버플로우를 수정했습니다. 이로써 #11371이 해결됩니다. #12013 (alexey-milovidov).
  • 발생할 수 있는 부동소수점 예외를 수정했습니다. 이로써 #11378 문제가 해결되었습니다. #12005 (alexey-milovidov).
  • 서버 시작 시 출력되는 로그 메시지의 잘못된 설정 이름을 수정했습니다. #11997 (alexey-milovidov).
  • Values 포맷에서 Query parameter was not set 문제가 수정되었습니다. #11918이 해결되었습니다. #11936 (tavplubix).
  • 매개변수화된 쿼리에서 치환용 별칭을 유지합니다. 이로써 #11914가 수정됩니다. #11916 (alexey-milovidov).
  • 기본 스토리지 정책에서 다른 정책으로 변경할 때 이동 작업이 수행되지 않던 버그를 수정했습니다. #11893 (Vladimir Chebotarev).
  • DateTime64를 parsing하는 중 발생할 수 있는 잠재적 부동소수점 예외를 수정했습니다. 이 변경으로 #11374가 해결됩니다. #11875 (alexey-milovidov).
  • HTTP 인터페이스를 통한 메모리 사용량 계산을 수정했습니다(wait_end_of_query=1 사용 시 영향이 클 수 있습니다). #11840 (Azat Khuzhin).
  • 동일한지 확인하기 전에 ZooKeeper에 저장된 메타데이터를 파싱합니다. #11739 (Azat Khuzhin).

성능 개선

  • 리터럴이 포함된 IN 연산자에서 인덱스가 사용되지 않아 발생하던 문제로 인해, v19.3 무렵에 도입된 성능 회귀를 수정했습니다. 이 변경으로 #10574가 해결됩니다. #12062 (nvartolomei).

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

  • Dockerfile에서 첫 번째 apt-get update를 실행하기 전에 ca-certificates를 설치합니다. #12095 (Ivan Blinkov).

ClickHouse 릴리스 v20.4.6.53-안정 2020-06-25

버그 수정

  • prewhere 조건에서 Nullable 컬럼을 사용할 때 드물게 발생하던 크래시를 수정했습니다. #11608의 후속입니다. #11869 (Nikolai Kochetov).
  • 고차 함수 내부에서는 arrayJoin을 허용하지 않습니다. 이로 인해 프로토콜 동기화가 깨지는 문제가 있었습니다. 이 변경으로 #3933을 해결합니다. #11846 (alexey-milovidov).
  • FixedString과 상수 String을 비교할 때 잘못된 결과가 반환되던 문제를 수정했습니다. 이 수정으로 #11393 문제가 해결됩니다. 이 버그는 버전 20.4에서 발생했습니다. #11828 (alexey-milovidov).
  • 조건에 NULL이 포함된 경우 if()가 잘못된 결과를 반환하던 문제를 수정했습니다. #11807 (Artem Zuikov).
  • 쿼리에 과도하게 많은 스레드를 사용하는 문제를 수정했습니다. #11788 (Nikolai Kochetov).
  • 오류가 발생해야 했지만 성공하던 SELECT *, xyz.*와 같은 쿼리의 예기치 않은 동작을 수정했습니다. #11753 (hexiaoting).
  • 이제 메타데이터를 변경하는 동안 복제 fetch 작업이 취소됩니다. #11744 (alesapin).
  • Values 입력 형식에서 복합 리터럴의 타입을 잘못 추론해 발생한 LOGICAL_ERROR를 수정했습니다. #11732 (tavplubix).
  • const 컬럼에서의 ORDER BY ... WITH FILL 문제를 수정했습니다. #11697 (Anton Popov).
  • XDBC bridge와 통신할 때 적절한 timeout을 전달하도록 수정했습니다. 최근 bridge의 상태 확인과 메타 정보 수신 시 timeout이 제대로 적용되지 않았습니다. #11690 (alexey-milovidov).
  • 별칭이 포함된 ORDER BY 절과 함께 LIMIT n WITH TIES를 사용할 때 발생하던 문제를 수정했습니다. #11689 (Anton Popov).
  • system.mutations가 잘못된 상태가 되는 오류를 수정했습니다. 전체 뮤테이션이 이미 완료된 것으로 표시될 수 있지만, 서버에는 여전히 복제 큐에 MUTATE_PART 작업이 남아 있어 이를 계속 실행하려고 시도합니다. 이 수정은 #11611을 해결합니다. #11681 (alesapin).
  • 대소문자를 구분하지 않는 플래그가 적용된 정규식 지원을 추가했습니다. 이로써 #11101#11506 문제가 수정되었습니다. #11649 (alexey-milovidov).
  • 행 수준 보안이 설정된 경우 단순 count 쿼리 최적화를 제거했습니다. 이전 버전에서는 필터링된 개수 대신 테이블의 전체 레코드 수가 반환되었습니다. 이 수정은 #11352를 해결합니다. #11644 (alexey-milovidov).
  • String용 블룸 필터(데이터 스키핑 인덱스)를 수정했습니다. #11638 (Azat Khuzhin).
  • 널 허용 컬럼을 prewhere 조건에서 사용할 때 드물게 발생하던 크래시를 수정했습니다. (아마도 #11572와 어떤 식으로든 관련이 있는 것으로 보입니다). #11608 (Nikolai Kochetov).
  • Buffer 테이블에서 읽는 샘플링 쿼리에서 발생하던 Block structure mismatch 오류를 수정했습니다. #11602 (Nikolai Kochetov).
  • exception.code() % 256 = 0일 때 clickhouse-client의 종료 코드가 잘못되는 문제를 수정했습니다. #11601 (filimonov).
  • 서버 시작 시 표시되는 “마크 캐시 크기가 줄어들었습니다” 로그 메시지의 사소한 오류를 수정했습니다. 이로써 #11399가 해결되었습니다. #11589 (alexey-milovidov).
  • PREWHERE column in (subquery)ARRAY JOIN이 포함된 쿼리에서 Size of offsets does not match size of column 오류를 수정했습니다. #11580 (Nikolai Kochetov).
  • SHOW CREATE TABLE에서 드물게 발생하던 segfault를 수정했습니다. #11490를 해결합니다. #11579 (tavplubix).
  • HTTP session의 모든 쿼리가 동일한 query_id를 가지던 문제가 수정되었습니다. #11578 (tavplubix).
  • 이제 clickhouse-server docker container는 서버 가동 상태를 확인할 때 IPv6를 우선 사용합니다. #11550 (Ivan Starkov).
  • <node>의 shard_num/replica_num을 수정했습니다(use_compact_format_in_distributed_parts_names를 깨뜨리던 문제). #11528 (Azat Khuzhin).
  • 테이블 삭제 중 예외가 발생할 수 있는 경쟁 상태를 수정했습니다. 다소 까다로운 문제이지만 전혀 위험하지는 않습니다. 설명이 필요하면 Telegram으로 알려 주십시오. #11523 (alesapin).
  • -State 함수로 집계하는 중간에 예외가 발생할 때 생기던 메모리 누수를 수정했습니다. 이 변경으로 #8995가 해결되었습니다. #11496 (alexey-milovidov).
  • 데이터 스키핑 인덱스가 백그라운드 머지 중 수정되는 컬럼(SummingMergeTree, AggregatingMergeTree, TTL GROUP BY)에 의존하는 경우 잘못 계산되던 문제가 있었습니다. 이 문제는 인덱스 계산을 머지 이후로 옮겨, 머지된 데이터를 기준으로 인덱스를 계산하도록 수정했습니다. #11162 (Azat Khuzhin).
  • 오래된 libunwind 패치를 제거했습니다. https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 이로써 clang builds에서 -fno-omit-frame-pointer를 비활성화할 수 있게 되어 평균적으로 성능이 최소 1% 향상됩니다. #10761 (Amos Bird).
  • 함수로 감싼 기본 키(primary key)를 사용할 때 ‘FINAL’ 수정자 및 ‘ORDER BY’ 최적화와 관련된 문제를 수정했습니다. #10715 (Anton Popov).

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

  • 단위 테스트의 사소한 오류 여러 건을 수정했습니다. #11262 (alesapin).
  • MergeTreeIndexFullText의 MSan 오탐 보고를 수정했습니다. 이 문제는 #9968에서 처음 나타났습니다. #10801 (alexey-milovidov).

ClickHouse 릴리스 v20.4.5.36-안정 2020-06-10

버그 수정

  • min_bytes_to_use_direct_io가 활성화된 상태에서 PREWHERE를 사용하고, SAMPLE 또는 많은 수의 스레드를 사용하는 경우 발생할 수 있는 Data compressed with different methods 오류를 수정했습니다. 이 수정으로 #11539가 해결됩니다. #11540 (alexey-milovidov).
  • 코덱의 압축된 크기가 반환되도록 수정했습니다. #11448 (Nikolai Kochetov).
  • 압축 코덱에 리터럴이 아닌 인수가 지정된 컬럼(column)에서 서버가 비정상 종료되던 문제를 수정했습니다. #11365를 해결합니다. #11431 (alesapin).
  • 점이 nan인 경우 pointInPolygon을 수정했습니다. #11375를 해결합니다. #11421 (Alexey Ilyukhov).
  • 테이블이 성공적으로 생성되지 않은 경우 MergeTree 종료 시 초기화되지 않은 메모리를 읽을 수 있는 잠재적 문제를 수정했습니다. #11420 (alexey-milovidov).
  • 위도/경도 범위를 벗어나는 인수에 대해 geohashesInBox를 수정했습니다. #11403 (Vasily Nemkov).
  • 외부 정렬과 limit가 있는 쿼리에서 발생할 수 있는 Pipeline stuck 오류를 수정했습니다. #11359을 해결합니다. #11366 (Nikolai Kochetov).
  • ReplicatedMergeTree에서 파트 전송 시 불필요한 잠금을 제거했습니다. #11354 (alesapin).
  • 멀티라인 모드에서 clickhouse-client의 \G(세로 출력) 지원 문제를 수정했습니다. 이로써 #9933 문제가 해결되었습니다. #11350 (alexey-milovidov).
  • Lazy 데이터베이스 사용 시 발생할 수 있는 segfault 문제를 수정했습니다. #11348 (alexey-milovidov).
  • quantilesExactWeightedArray의 크래시를 수정했습니다. #11337 (Nikolai Kochetov).
  • 이제 ALTER 쿼리에서 메타데이터를 변경하기 전에 머지가 중지됩니다. #11335 (alesapin).
  • parallel_view_processing = 1 설정 시 MATERIALIZED VIEW에 대한 쓰기가 다시 병렬로 수행되도록 했습니다. #10241을 수정했습니다. #11330 (Nikolai Kochetov).
  • 추출된 JSON에 짝이 맞지 않는 { 또는 [가 포함된 문자열이 있는 경우 visitParamExtractRaw를 수정했습니다. #11318 (Ewout).
  • ThreadPool에서 매우 드물게 발생하는 레이스 컨디션을 수정했습니다. #11314 (alexey-milovidov).
  • clickhouse-copier의 사소한 데이터 레이스를 수정했습니다. 통합 테스트에서 발견되었습니다. #11313 (alexey-milovidov).
  • 변환 과정에서 초기화되지 않은 메모리가 사용될 가능성을 수정했습니다. 예시: SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov).
  • 테이블의 프라이머리 키에 배열 컬럼이 포함되어 있고, 쿼리에서 empty 또는 notEmpty 함수로 이 컬럼을 필터링할 때 인덱스 분석이 작동하지 않는 문제를 수정했습니다. 이 수정으로 #11286 문제가 해결됩니다. #11303 (alexey-milovidov).
  • max_network_bandwidth, max_execution_speed 또는 priority 설정으로 인해 쿼리 속도가 제한되면, 쿼리 속도 추정이 부정확해지고 min_execution_speed 제한이 적용되지 않거나 잘못 적용될 수 있던 버그를 수정했습니다. 또한 timeout_before_checking_execution_speed의 기본값을 0이 아닌 값으로 변경했습니다. 그렇지 않으면 min_execution_speedmax_execution_speed 설정이 아무런 효과가 없기 때문입니다. 이로써 #11297이 수정되었습니다. 이로써 #5732가 수정되었습니다. 이로써 #6228가 수정되었습니다. 사용성 개선: clickhouse-client에서 예외 메시지가 진행률 표시줄과 이어 붙지 않도록 했습니다. #11296 (alexey-milovidov).
  • 잘못된 인수로 SET DEFAULT ROLE을 호출할 때 발생하던 충돌을 수정했습니다. 이로써 #10586가 해결되었습니다. #11278 (Vitaly Baranov).
  • Protobuf 형식의 비정상 데이터를 읽는 중 발생하던 충돌을 수정했습니다. 이로써 #5957#11203 문제가 해결되었습니다. #11258 (Vitaly Baranov).
  • cache 딕셔너리가 정상적인 값 대신 기본값을 반환할 수 있던 버그를 수정했습니다(만료된 키만 있는 경우). 이는 String 필드에만 영향을 미칩니다. #11233 (Nikita Mikhaylov).
  • 내부 쿼리에 상수가 포함된 VIEW에서 읽을 때 발생하는 Block structure mismatch in QueryPipeline 오류를 수정했습니다. #11181을 해결합니다. #11205 (Nikolai Kochetov).
  • 발생할 수 있는 예외 Invalid status for associated output를 수정했습니다. #11200 (Nikolai Kochetov).
  • Array(Array(LowCardinality)) 인수를 캡처할 때 고차 함수에서 발생할 수 있는 Cannot capture column 오류를 수정했습니다. #11185 (Nikolai Kochetov).
  • 1000개가 넘는 객체와 일부 백엔드에서 S3 globbing이 실패할 수 있던 문제를 수정했습니다. #11179 (Vladimir Chebotarev).
  • 데이터 스키핑 인덱스가 백그라운드 머지 중 변경되는 컬럼에 의존하는 경우(SummingMergeTree, AggregatingMergeTree 및 TTL GROUP BY), 인덱스가 잘못 계산되었습니다. 이 문제는 인덱스 계산을 머지 후로 옮겨 병합된 데이터 기준으로 인덱스를 계산하도록 수정하여 해결했습니다. #11162 (Azat Khuzhin).
  • 항상 적용되는 제한값 기반 재스케줄링과 관련된 Kafka 성능 문제를 수정했습니다. #11149 (filimonov).
  • 테이블 엔진이 Kafka인 테이블을 삭제(DROP)하는 중(또는 서버 재시작 중)에 가끔 발생하던 멈춤 문제를 수정했습니다. #11145 (filimonov).
  • 단순한 쿼리에서 스레드를 과도하게 예약하는 문제를 수정했습니다(스레드 수를 줄이기 위한 최적화가 파이프라인 변경 이후 부분적으로 깨진 상태였습니다). #11114 (Azat Khuzhin).
  • 표현식의 순서를 유지하고(이것만으로도 수정하기에 충분합니다), 집계기가 인덱스 대신 컬럼 이름을 사용하도록 강제하여, HAVING 절이 있는 쿼리(즉, 시작 서버에서 필터링이 필요한 경우)에 대한 분산 쿼리의 프레디케이트 최적화(enable_optimize_predicate_expression=1)를 수정했습니다. 수정: #10613, #11413. #10621 (Azat Khuzhin).

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

  • 간헐적으로 실패하던 통합 테스트 여러 건을 수정했습니다. #11355 (alesapin).

ClickHouse 릴리스 v20.4.4.18-안정 2020-05-26

v20.4.3.16-안정 대비 변경 사항이 없습니다.

ClickHouse 릴리스 v20.4.3.16-안정 2020-05-23

버그 수정

  • 아무것도 최종 처리되지 않았을 경우 mutation 최종화 작업의 로깅을 제거했습니다. #11109 (alesapin).
  • registerDiskS3에서 발생하던 메모리 누수를 수정했습니다. #11074 (Pavel Kovalenko).
  • Kafka engine 테이블 종료 시 발생할 수 있는 데이터 누락 가능성을 해결했습니다. #11048 (filimonov).
  • parseDateTime64BestEffort 인수 해석 관련 버그를 수정했습니다. #11038 (Vasily Nemkov).
  • MergeTree에서 테이블이 성공적으로 생성되지 않은 경우 매우 드물게 발생할 수 있는 잠재적인 use-after-free 오류를 수정했습니다. #10986, #10970 (alexey-milovidov).
  • Atomic 데이터베이스의 메타데이터(rename용 상대 경로) 및 데이터(symlink용 상대 경로) 처리를 수정했습니다. #10980 (Azat Khuzhin).
  • Atomic 데이터베이스 엔진에서 ALTERDROP DATABASE 쿼리가 동시에 실행될 때 발생하던 서버 충돌을 수정했습니다. #10968 (tavplubix).
  • getRawData() 메서드에서 원시 데이터 크기가 잘못 표시되던 문제를 수정했습니다. #10964 (Igr).
  • 20.1 및 그 이전 버전 간 2단계 집계 비호환성을 수정했습니다. 이 비호환성은 initiator 노드와 원격 노드에서 서로 다른 버전의 ClickHouse를 사용하고, GROUP BY 결과 크기가 크며, 단일 String 필드에 대해 집계가 수행될 때 발생합니다. 이로 인해 결과에서 단일 키에 대해 병합되지 않은 여러 행이 나타납니다. #10952 (alexey-milovidov).
  • DistributedBlockOutputStream에서 부분만 기록된 파일이 전송되는 문제를 수정했습니다. #10940 (Azat Khuzhin).
  • SELECT count(notNullIn(NULL, [])) 실행 시 발생하던 충돌을 수정했습니다. #10920 (Nikolai Kochetov).
  • Kafka 테이블 엔진 삭제 중(또는 서버 재시작 중) 가끔 발생하던 멈춤 현상을 수정했습니다. #10910 (filimonov).
  • a TO b, c TO a와 같은 여러 ALTER RENAME을 실행할 수 없었던 문제를 수정했습니다. #10895 (alesapin).
  • 동일한 컬럼의 집계 함수 상태 결과를 여러 스레드에서 가져올 때 발생할 수 있는 경쟁 상태를 수정했습니다. 이 문제는 quantile* 함수의 AggregateFunction 상태를 저장하는 Memory 엔진을 사용하는 테이블(table)에서 읽는 중 finalizeAggregation 함수를 사용할 때만 발생할 수 있습니다. #10890 (Nikolai Kochetov).
  • 분산 테이블에서 튜플의 하위 호환성 문제를 수정했습니다. #10889 (Anton Popov).
  • 해당 키가 존재하지 않을 때 StringHashTable에서 발생하던 SIGSEGV를 수정했습니다. #10870 (Azat Khuzhin).
  • Atomic engine을 사용하는 데이터베이스에서 LiveView 테이블이 삭제된 후 WATCH가 멈추는 현상을 수정했습니다. #10859 (tavplubix).
  • 비활성화된 레플리카를 기다리다가 일부 ALTER 또는 OPTIMIZE 쿼리가 멈출 수 있던 ReplicatedMergeTree의 버그를 수정했습니다. #10849 (tavplubix).
  • 이제 CONSTRAINT 표현식에 사용된 컬럼의 이름이 변경되면 제약 조건도 함께 업데이트됩니다. #10844를 수정했습니다. #10847 (alesapin).
  • cache 딕셔너리에서 초기화되지 않은 메모리를 읽을 수 있는 잠재적 문제를 수정했습니다. #10834 (alexey-milovidov).
  • Block::sortColumns() 후 컬럼 순서를 수정했습니다. #10826 (Azat Khuzhin).
  • 식별자에 따옴표를 사용하지 않도록 지정한 경우 ODBC 브리지에서 발생하던 문제를 수정했습니다. #7984를 해결합니다. #10821 (alexey-milovidov).
  • DateLUT에서 발생한 UBSanMSan 보고를 수정했습니다. #10798 (alexey-milovidov).
  • 키 조건에서 잘못된 유형 변환을 수정했습니다. #6287을 수정했습니다. #10791 (Andrew Onyshchuk).
  • parallel_view_processing 동작을 수정했습니다. 이제 예외가 발생한 경우에도 MATERIALIZED VIEW로의 모든 삽입이 빠짐없이 완료됩니다. #10241을 수정했습니다. #10757 (Nikolai Kochetov).
  • -State와 함께 사용할 때 -OrNull-OrDefault combinator가 올바르게 동작하도록 수정했습니다. #10741 (hcz).
  • 함수 h3EdgeAngle에서 발생할 수 있는 버퍼 오버플로우 문제를 수정했습니다. #10711 (alexey-milovidov).
  • 테이블에 파트가 많을 때 동시 ALTER 작업이 잠기는 버그를 수정했습니다. #10659 (alesapin).
  • StorageBuffer에서 서버가 테이블 시작 전에 종료된 경우 발생하던 nullptr 역참조 문제를 수정했습니다. #10641 (alexey-milovidov).
  • LowCardinality 사용 시 optimize_skip_unused_shards가 수정되었습니다. #10611 (Azat Khuzhin).
  • 동기식 뮤테이션의 조건 변수 처리 방식을 수정했습니다. 일부 경우 해당 조건 변수에 대한 신호가 유실될 수 있었습니다. #10588 (Vladimir Chebotarev).
  • loadStoredObject()가 완료되기 전에 createDictionary()가 호출될 경우 발생할 수 있는 충돌을 수정했습니다. #10587 (Vitaly Baranov).
  • 기본 표현식 유형이 컬럼 유형과 다른 ALIAS 컬럼에 대한 SELECT를 수정했습니다. #10563 (Azat Khuzhin).
  • DateTime64와 String 값 간 비교를 구현했습니다. #10560 (Vasily Nemkov).
  • 기본적으로 GROUP BY sharding_key 최적화를 비활성화하고(optimize_distributed_group_by_sharding_key는 이전에 도입되었지만, sharding_key 분석의 복잡성 때문에 기본적으로 비활성화되어 있었습니다. 간단한 예로 sharding key에 if가 있는 경우가 있습니다), WITH ROLLUP/CUBE/TOTALS에 대해서도 이를 수정했습니다. #10516 (Azat Khuzhin).
  • #10263를 해결했습니다. #10486 (Azat Khuzhin).
  • max_rows_to_sort 설정 관련 테스트를 추가했습니다. #10268 (alexey-milovidov).
  • 블룸 필터 인덱스 생성에 대한 하위 호환성이 추가되었습니다. #10551. #10569 (Winter Zhang).

ClickHouse 릴리스 v20.4.2.9, 2020-05-12

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

  • 시스템 테이블(예: system.query_log, system.trace_log, system.metric_log)은 크기가 10 MiB보다 작은 파트에 compact 데이터 파트 포맷을 사용합니다. compact 데이터 파트 포맷은 버전 20.3부터 지원됩니다. 20.3 미만 버전으로 다운그레이드할 경우 /var/lib/clickhouse/data/system/에서 시스템 로그용 테이블 데이터를 수동으로 삭제해야 합니다.
  • 문자열 비교에 FixedString이 포함되고 비교 대상 인수의 크기가 서로 다르면, 더 짧은 문자열이 더 긴 문자열의 길이에 맞게 패딩된 것처럼 비교합니다. 이는 FixedString 데이터 타입이 SQL CHAR에 해당한다고 가정할 때 SQL 호환성을 위한 것입니다. 이 변경으로 #9272가 해결되었습니다. #10363 (alexey-milovidov)
  • SHOW CREATE TABLE이 여러 줄로 표시되도록 변경했습니다. 이제 가독성이 더 좋아졌고 MySQL과도 더 비슷해졌습니다. #10049 (Azat Khuzhin)
  • pointInPolygon 함수에서 사용되며 기본적으로 활성화되는 validate_polygons 설정을 추가했습니다. #9857 (alexey-milovidov)

새로운 기능

  • ClickHouse에서 ZooKeeper로의 보안 연결 지원 추가 #10184 (Konstantin Lebedev)
  • 사용자 지정 HTTP 핸들러를 지원합니다. 자세한 내용은 #5436을 참조하십시오. #7572 (Winter Zhang)
  • MessagePack 입력/출력 포맷이 추가되었습니다. #9889 (Kruglov Pavel)
  • Regexp 입력 형식을 추가했습니다. #9196 (Kruglov Pavel)
  • 마크다운 문서에 표를 삽입할 수 있는 출력 형식 Markdown이 추가되었습니다. #10317 (Kruglov Pavel)
  • 딕셔너리에 사용자 지정 설정 섹션 지원을 추가했습니다. 또한 #2829 문제를 수정했습니다. #10137 (Artem Streltsov)
  • DDL 쿼리에서 CREATE DICTIONARY의 사용자 지정 설정 지원이 추가되었습니다 #10465 (Artem Streltsov)
  • 서버 메모리 사용량이 다음 할당 임계값을 초과할 때 할당 컨텍스트를 수집하는 간단한 서버 전역 메모리 프로파일러를 추가했습니다. #10444 (alexey-milovidov)
  • 레플리카가 파트를 자체적으로 머지하는 것을 제한하고, 항상 다른 레플리카에서 다운로드하는 방식을 우선하도록 하는 always_fetch_merged_part 설정을 추가했습니다. #10379 (alesapin)
  • JSON 객체의 원시 데이터를 추출하는 함수 JSONExtractKeysAndValuesRaw를 추가했습니다 #10378 (hcz)
  • OS 메모리 사용량을 system.asynchronous_metrics에 추가했습니다. #10361 (alexey-milovidov)
  • 함수 leastgreatest에 제네릭 버전이 추가되었습니다. 이제 임의의 타입 인수를 개수에 관계없이 처리할 수 있습니다. 이 변경으로 #4767이 수정되었습니다 #10318 (alexey-milovidov)
  • 이제 ClickHouse가 딕셔너리 소스의 타임아웃을 ClickHouse 측에서 제어합니다. cache 딕셔너리 구성에 두 개의 새로운 설정이 추가되었습니다: strict_max_lifetime_seconds의 기본값은 max_lifetime이고, query_wait_timeout_milliseconds의 기본값은 1분입니다. 첫 번째 설정은 allow_read_expired_keys 설정과 함께 사용할 때도 유용합니다(오래전에 만료된 키의 읽기를 금지하는 데 사용). #10337 (Nikita Mikhaylov)
  • query_log에 기록할 항목을 필터링하는 log_queries_min_type 추가 #10053 (Azat Khuzhin)
  • 함수 isConstant이 추가되었습니다. 이 함수는 인수가 상수 표현식인지 확인하여 1 또는 0을 반환합니다. 개발, 디버깅 및 데모 목적으로 사용됩니다. #10198 (alexey-milovidov)
  • 키가 없을 때 기본값 대신 NULL을 반환하는 joinGetOrNull을 추가했습니다. #10094 (Amos Bird)
  • transform_null_in 옵션이 설정된 경우 IN 연산자에서 NULLNULL과 같다고 간주합니다. #10085 (achimbab)
  • MergeTree 테이블 엔진 계열에 대해 ALTER TABLE ... RENAME COLUMN을 추가했습니다. #9948 (alesapin)
  • 병렬 분산 INSERT SELECT를 지원합니다. #9759 (vxider)
  • distributed_group_by_no_merge 없이 Distributed over Distributed 쿼리 기능 추가 … #9923 (Azat Khuzhin)
  • 지정된 범위의 배열 요소를 집계하는 함수 arrayReduceInRanges를 추가했습니다. #9598 (hcz)
  • Prometheus exporter에 딕셔너리 상태를 추가했습니다. #9622 (Guillaume Tassery)
  • arrayAUC 함수 추가 #8698 (taiyang-li)
  • TPC-H 호환성을 개선하기 위해 DROP VIEW 문을 지원합니다. #9831 (Amos Bird)
  • windowFunnel()에 ‘strict_order’ 옵션을 추가 #9773 (achimbab)
  • DATETIMESTAMP SQL 연산자를 지원합니다. 예를 들면 SELECT date '2001-01-01'입니다. #9691 (Artem Zuikov)

실험적 기능

  • 실험적 데이터베이스 엔진 Atomic이 추가되었습니다. 이 엔진은 비차단 DROP, RENAME TABLE 쿼리와 원자적으로 수행되는 EXCHANGE TABLES t1 AND t2 쿼리를 지원합니다 #7512 (tavplubix)
  • S3 기반 ReplicatedMergeTree에 대한 초기 지원이 추가되었습니다(아직 최적화되지 않은 방식으로 작동합니다) #10126 (Pavel Kovalenko)

버그 수정

  • 종속 테이블이 포함된 경우 MATERIALIZED VIEW의 내부 쿼리에서 잘못된 스칼라 결과가 나오던 문제를 수정했습니다 #10603 (Nikolai Kochetov)
  • readonly=2cancel_http_readonly_queries_on_client_close=1일 때 클라이언트가 연결을 닫으면 HTTP 요청이 중단되는 버그를 수정했습니다. #10684 (tavplubix)
  • 서버 시작 시 예외가 발생할 때 StorageBuffer에서 발생하는 segfault를 수정했습니다. #10550 #10609 (tavplubix)
  • 쿼리SYSTEM DROP DNS CACHE는 이제 사용자가 특정 IP 주소에서의 연결이 허용되는지 확인하는 데 사용되는 캐시도 삭제합니다 #10608 (tavplubix)
  • 하나의 쿼리에서 동일한 집합에 여러 IN 연산자를 사용할 때 발생하던 문제를 수정했습니다. #10539 #10686 (Anton Popov)
  • generateRandom에서 중첩 타입 사용 시 발생하던 크래시를 수정했습니다. #10583. #10734 (Nikolai Kochetov)
  • 머지 후 발생했을 수 있는 SummingMergeTreeLowCardinality(FixedString) 키 컬럼 데이터 손상을 수정했습니다. #10489을 해결합니다. #10721 (Nikolai Kochetov)
  • aggregation_memory_efficient_merge_threads 설정 로직을 수정했습니다. #10667 (palasonic1)
  • 사라지는 합계 문제를 수정했습니다. 쿼리에 JOIN이 있거나 외부 WHERE 조건이 있는 서브쿼리가 있으면 합계가 필터링될 수 있었습니다. #10674 #10698을 수정했습니다. (Nikolai Kochetov)
  • distributed_aggregation_memory_efficient가 활성화된 상태에서 원격 쿼리가 병렬로 실행되지 않던 문제를 수정했습니다. #10655 #10664 (Nikolai Kochetov)
  • LIMIT가 있는 쿼리에서 행 수가 잘못될 수 있는 문제를 수정했습니다. #10566, #10709, #10660 수정. (Nikolai Kochetov)
  • 일부 경우 compact parts를 다른 compact part로 병합한 후 발생할 수 있는 인덱스 손상을 수정했습니다. #10531 (Anton Popov)
  • mutation이 모든 파트를 완료했지만 is_done=0 상태에서 멈추는 문제를 수정했습니다. #10526 (alesapin)
  • UTC 대비 소수 오프셋을 사용하는 시간대에서 Unix epoch 시작 시점에 발생하는 오버플로우를 수정했습니다. #9335를 수정합니다. #10513 (alexey-milovidov)
  • 입력 형식의 진단 기능이 개선되었습니다. #10204 수정 #10418 (tavplubix)
  • 큰 정수에서 발생하는 simpleLinearRegression()의 숫자 오버플로우 수정 #10474 (hcz)
  • 분산 종료 시 발생하는 use-after-free를 수정하고, 모든 배치 전송이 완료될 때까지 기다리지 않도록 했습니다 #10491 (Azat Khuzhin)
  • clickhouse-server Docker image에 CA 인증서 추가 #10476 (filimonov)
  • addressToLine 함수 또는 AggregateFunctionState 컬럼 사용 시 드물게 발생할 수 있던 무한 루프 문제를 수정했습니다. #10466 (Alexander Kuzmenkov)
  • 분산 쿼리 중 zookeeper “노드 없음” 오류 처리 #10050 (Daniel Chen)
  • 컬럼(column)의 기본값을 변경한 후 서버가 테이블(table)을 ATTACH하지 못하던 버그를 수정했습니다. #10441 (alesapin)
  • ALIAS 컬럼에 대해 기본 표현식의 유형을 컬럼 유형으로 암시적으로 형변환 #10563 (Azat Khuzhin)
  • ATTACH DATABASE가 실패해도 메타데이터 디렉터리를 삭제하지 않음 #10442 (Winter Zhang)
  • system tzdata에 대한 의존성을 피합니다. CentOS 8에서 Africa/Casablanca 시간대 로딩 문제를 수정했습니다. #10211 #10425 (alexey-milovidov)
  • quorum으로 데이터가 삽입된 뒤 삭제되는 경우(DROP PARTITION, TTL 등)에 발생하던 몇 가지 문제를 수정했습니다. 이 문제로 인해 INSERT가 멈추거나 SELECT에서 거짓 양성 예외가 발생했습니다. 수정: #9946 #10188 (Nikita Mikhaylov)
  • BloomFilter 인덱스 생성 시 인수 개수와 유형을 확인하도록 수정 #9623 #10431 (Winter Zhang)
  • skip_unavailable_shards보다 fallback_to_stale_replicas를 우선 사용합니다. 그렇지 않으면 두 설정이 모두 지정되어 있고 최신 상태의 레플리카가 없을 때 쿼리가 실패합니다(패치: @alex-zaitsev). #10422 (Azat Khuzhin)
  • ARRAY JOIN, ORDER BY 및 LIMIT가 포함된 쿼리가 불완전한 결과를 반환할 수 있는 문제를 수정했습니다. #10226를 수정합니다. #10427 (Vadim Plakhtinskiy)
  • DETACH/ATTACH 후 딕셔너리 이름 뒤에 데이터베이스 이름을 추가합니다. 이에 따라 system.dictionaries 테이블과 SYSTEM RELOAD 쿼리의 문제가 수정됩니다 #10415 (Azat Khuzhin)
  • processors 파이프라인에서 extremes의 결과가 잘못될 수 있는 문제를 수정했습니다. #10131 (Nikolai Kochetov)
  • 설정 distributed_group_by_no_merge가 활성화된 경우 발생할 수 있는 segfault를 수정했습니다(이 설정은 20.3.7.46에서 #10131로 도입되었습니다). #10399 (Nikolai Kochetov)
  • Array(Tuple(...)) 데이터 타입이 잘못 평탄화되던 문제를 수정했습니다. #10259 #10390 (alexey-milovidov)
  • JOIN 외부 상수 이름과 충돌할 수 있는 JOIN 내부 상수의 컬럼 이름을 바로잡았습니다 #9950 (Alexander Kuzmenkov)
  • Block::sortColumns() 호출 후 컬럼 순서 수정 #10826 (Azat Khuzhin)
  • 원격 쿼리 중 발생할 수 있는 ConcatProcessorPipeline stuck 오류를 수정했습니다. #10381 (Nikolai Kochetov)
  • 집계에 대해 디스크 예약을 하지 않도록 수정했습니다. #9241 #10375 (Azat Khuzhin)
  • UTC 기준 오프셋이 양수와 음수 사이에서 바뀐 시간대(예: Pacific/Kiritimati)에서 datetime 함수가 잘못 동작하던 문제를 수정했습니다. #7202 #10369 (alexey-milovidov)
  • dictIsIn 함수에서 무한 루프를 방지합니다. #515를 수정했습니다 #10365 (alexey-milovidov)
  • 기본값으로 GROUP BY sharding_key 최적화를 비활성화하고 WITH ROLLUP/CUBE/TOTALS에서의 동작을 수정했습니다 #10516 (Azat Khuzhin)
  • 파트를 검사할 때 오류 코드를 확인하고, 오류가 “not enough memory”와 같은 경우에는 해당 파트를 손상된 것으로 표시하지 않도록 수정했습니다. 수정 사항 #6269 #10364 (alexey-milovidov)
  • 로드되지 않은 Dictionaries 정보를 시스템 테이블(system tables)에 표시합니다. #10234 (Vitaly Baranov)
  • server가 테이블 시작 전에 종료된 경우 StorageBuffer의 nullptr 역참조를 수정했습니다. #10641 (alexey-milovidov)
  • ReplicatedMergeTree에서 DROPOPTIMIZE 간의 경합 문제를 수정했습니다. 동시 OPTIMIZE 쿼리가 있을 경우 DROP으로 인해 ZooKeeper의 레플리카 경로에 일부 불필요한 데이터가 남을 수 있었습니다. #10312 (tavplubix)
  • 쉼표 조인과 이름이 지정된 조인이 혼합된 쿼리에서 발생하던 ‘Logical error: CROSS JOIN has expressions’ 오류를 수정했습니다. #9910 #10311 (Artem Zuikov)
  • max_bytes_before_external_group_by를 사용할 때의 쿼리를 수정했습니다. #10302 (Artem Zuikov)
  • 특정한 경우 파서의 최대 재귀 깊이 제한과 관련된 문제를 수정했습니다. 이로써 #10283 문제가 해결됩니다. 이 수정으로 인해 경미한 비호환성이 발생할 수 있습니다. clickhouse-client를 통해 실행하는 길고 중첩이 깊은 쿼리가 동작하지 않을 수 있으므로, 설정 max_query_sizemax_parser_depth를 그에 맞게 조정해야 합니다. #10295 (alexey-milovidov)
  • 여러 조인이 있을 때 count(*)를 사용할 수 있도록 합니다. #9853 #10291 수정 (Artem Zuikov)
  • max_rows_to_group_bygroup_by_overflow_mode = 'break' 사용 시 발생하던 Pipeline stuck 오류를 수정했습니다. #10279 (Nikolai Kochetov)
  • DDL 쿼리로 range_hashed 딕셔너리를 생성할 때 발생하던 ‘Cannot add column’ 오류를 수정했습니다. #10093. #10235 (alesapin)
  • 드물게 발생하던 예외 Cannot drain connections: cancel first를 수정했습니다. #10239 (Nikolai Kochetov)
  • 사용자가 ENGINE = Replicated*인 테이블에서 ALTER UPDATE/DELETE를 실행하려고 할 때 ClickHouse가 “Unknown function lambda.” 오류 메시지를 표시하던 버그를 수정했습니다. 이제 비결정적 함수 검사에서 람다 표현식을 올바르게 처리합니다. #10237 (Alexander Kazakov)
  • Lazy engine가 있는 데이터베이스에서 SELECT … FROM system.tables를 실행할 때 StorageSystemTables에서 발생하던 비교적 드문 segfault를 수정했습니다. #10209 (Alexander Kazakov)
  • system.numbers 또는 system.zeros처럼 무한한 소스에서 읽는 동안, 실제로는 LIMIT에서 멈춰야 하는 쿼리가 무한히 실행될 수 있는 문제를 수정했습니다. #10206 (Nikolai Kochetov)
  • Date 유형의 “generateRandom” 함수 문제를 수정했습니다. 이로써 #9973이 해결됩니다. 구식 파티셔닝을 사용하는 MergeTree 테이블에 연도가 2106인 날짜를 삽입할 때 파티션 이름이 1970년으로 지정되는 예외적인 경우를 수정했습니다. #10218 (alexey-milovidov)
  • View의 테이블 정의가 SELECT 쿼리와 맞지 않으면 타입을 변환합니다. 이 변경으로 #10180, #10022, #10217 문제가 해결됩니다 (alexey-milovidov)
  • 요일이 화요일 또는 목요일인 RFC-2822 형식의 문자열에서 parseDateTimeBestEffort를 수정했습니다. 이로써 #10082 #10214가 해결되었습니다 (alexey-milovidov)
  • JOIN 내부 상수의 컬럼 이름이 JOIN 외부 상수의 이름과 충돌할 수 있는 문제를 수정했습니다. #10207 (alexey-milovidov)
  • arrayJoin 함수가 있는 경우(일부 경우) move-to-prewhere 최적화 문제를 수정했습니다. 이로써 #10092 #10195 문제가 해결되었습니다 (alexey-milovidov)
  • 네이티브 mysql-connector-java (JDBC) 사용 시 SCRAMBLE에 구분자가 포함되는 문제를 수정했습니다 #10140 (BohuTANG)
  • 데이터베이스가 지정되지 않은 경우, 접근 검사 시 현재 데이터베이스를 사용하도록 수정했습니다. #10192 (Vitaly Baranov)
  • compact 파트를 사용하는 테이블의 ALTER를 수정했습니다. #10130 (Anton Popov)
  • allow_nondeterministic_mutations 설정을 통해 뮤테이션에서 비결정적 함수 사용 제한을 완화할 수 있도록 했습니다. #10186 (filimonov)
  • 딕셔너리에 대해 호출되던 DROP TABLE 수정 #10165 (Azat Khuzhin)
  • 분산 테이블에 INSERT할 때 구조가 맞지 않으면 블록을 변환합니다 #10135 (Azat Khuzhin)
  • 파티션 키에 따라 삽입된 block이 파트별로 분할될 때 행 수가 잘못 기록되었습니다(모든 파트의 합계로 기록됨). #10138 (alexey-milovidov)
  • MySQL 데이터베이스 엔진에 일부 인수 검사 기능을 추가하고 식별자 인수를 지원 #10077 (Winter Zhang)
  • 새 레플리카를 생성할 때 잘못된 index_granularity_bytes 검사 문제를 수정했습니다. #10098을 수정합니다. #10121 (alesapin)
  • 테이블에 스킵 인덱스가 있는 경우 CHECK TABLE 쿼리에서 발생하던 버그를 수정했습니다. #10068 (alesapin)
  • 중첩 테이블에 세그먼트가 하나만 있는 경우의 분산-over-분산 문제를 수정했습니다 #9997 (Azat Khuzhin)
  • JOINUNION ALL이 포함된 쿼리에서 발생할 수 있는 행 손실 문제를 수정했습니다. #9826, #10113을 수정했습니다. … #10099 (Nikolai Kochetov)
  • 로컬 ClickHouse 서버를 소스로 사용할 때 딕셔너리에서 발생하던 버그를 수정했습니다. 딕셔너리와 소스의 타입이 호환되지 않으면 메모리 손상이 발생할 수 있었습니다. #10071 (alesapin)
  • 이전 ClickHouse 버전에서 업데이트할 때 /table/replicas/replica_name/metadata 노드가 없어 발생하던 복제된 테이블(Replicated Table) 시작 문제가 수정되었습니다. #10037을 해결합니다. #10095 (alesapin)
  • 오류 Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform를 수정했습니다. 이 오류는 distributed_aggregation_memory_efficient 설정이 활성화된 상태에서 분산 쿼리가 서로 다른 세그먼트의 단일 단계 및 2단계 집계가 혼재된 집계 데이터를 읽을 때 발생했습니다. #10063 (Nikolai Kochetov)
  • 시작 시 materialized view가 있는 데이터베이스에서 ATTACH가 실패할 때 발생하던 데드락 수정 #10054 (Azat Khuzhin)
  • 끝에 0 바이트가 포함된 문자열 키로 GROUP BY를 수행할 때 발생할 수 있던 세그멘테이션 폴트를 수정했습니다 (#8636, #8925). … #10025 (Alexander Kuzmenkov)
  • 별칭이 수식된 컬럼 이름을 덮어써 분산 쿼리 결과가 잘못되던 문제를 수정했습니다. #9672 #9714 #9972 (Artem Zuikov)
  • SYSTEM RESTART REPLICAS에서 발생할 수 있는 데드락 문제 수정 #9955 (tavplubix)
  • 원격 쿼리 실행에 사용되는 스레드 수를 고정했습니다(20.3부터의 성능 회귀). 이 문제는 Distributed 테이블의 쿼리가 로컬 및 원격 세그먼트에서 동시에 실행될 때 발생했습니다. #9965 #9971에서 해결했습니다 (Nikolai Kochetov)
  • ATTACH PARTDeleteOnDestroy 로직을 수정해 attached 상태인 파트가 자동으로 제거될 수 있던 문제를 해결하고, 몇 가지 테스트를 추가했습니다 #9410 (Vladimir Chebotarev)
  • 서버 시작 시 ON CLUSTER DDL 쿼리가 멈추는 문제를 수정했습니다. #9927 (Gagan Arneja)
  • 일부 데이터베이스에 대한 쿼리 처리 단계 중 하나에서 필요한 테이블을 가져오지 못하던 버그를 수정했습니다. #9699을 수정합니다. #9949 (achulkov2)
  • JOINTOTALS와 함께 사용될 때 발생하는 ‘Not found column in block’ 오류를 수정했습니다. 수정 사항: #9839 #9939 (Artem Zuikov)
  • CREATE USER 명령에 지정된 여러 호스트를 파싱할 때 발생하던 문제 수정 #9924 (Vitaly Baranov)
  • Join 테이블 엔진의 TRUNCATE 수정 (#9917). #9920 (Amos Bird)
  • ReplicatedMergeTree에서 삭제와 optimize 사이의 race condition을 수정했습니다. #9901 (alesapin)
  • optimize_skip_unused_shards가 설정된 경우 분산에서의 DISTINCT를 수정했습니다. #9808 (Azat Khuzhin)
  • ALTER문에서 “scalar does not exist” 오류를 수정했습니다 (#9878). … #9904 (Amos Bird)
  • distributed_product_mode=\'local\'에서 수식된 이름 관련 오류를 수정했습니다. #4756 #9891 (Artem Zuikov)
  • 이제 INSERT 쿼리에서 세그먼트는 예외를 발생시키는 대신 initiator의 설정을 각 세그먼트의 제약 조건에 맞게 조정합니다. 이 수정으로 서로 다른 제약 조건을 가진 세그먼트로도 INSERT 쿼리를 전송할 수 있게 되었습니다. 이 변경으로 #9447의 수정 사항이 개선되었습니다. #9852 (Vitaly Baranov)
  • Kafka broker에 오프셋을 커밋할 때 재시도를 일부 추가했습니다. offsets.commit.timeout.ms 동안 __consumer_offsets 토픽에 사용 가능한 레플리카가 충분하지 않으면 broker가 커밋을 거부할 수 있기 때문입니다 #9884 (filimonov)
  • 기반 테이블의 가상 컬럼이 WHERE에서 사용될 때 분산 엔진 동작 수정 #9847 (Azat Khuzhin)
  • 함수 인수의 시간대가 제대로 적용되지 않던 일부 경우를 수정했습니다. #9574 (Vasily Nemkov)
  • 쿼리에서 분산 테이블에 PREWHERE와 WHERE가 모두 있고 SET distributed_product_mode = 'local'로 설정된 경우 발생하던 ‘동일한 별칭을 가진 서로 다른 표현식’ 오류를 수정했습니다. #9871 (Artem Zuikov)
  • 복합 프라이머리 키가 있는 테이블의 뮤테이션에서 발생하던 과도한 메모리 사용 문제를 수정했습니다. 이 변경은 #9850을 수정합니다. #9860 (alesapin)
  • 설정 allow_introspection_functions에 따른 인트로스펙션 함수의 권한 계산을 수정했습니다. #9840 (Vitaly Baranov)
  • Processors 사용 여부와 관계없이 max_distributed_connections 수정 #9673 (Azat Khuzhin)
  • 클라이언트에서 발생할 수 있는 예외 Got 0 in totals chunk, expected 1를 수정했습니다. 이 문제는 JOIN이 포함된 쿼리에서 오른쪽 조인 테이블에 행이 0개인 경우 발생했습니다. 예시: select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;. #9777을 수정합니다. … #9823 (Nikolai Kochetov)
  • 테이블 목록 외부(즉, WHERE 절)에 COMMA JOIN이 있는 서브쿼리에서 발생하는 ‘COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query’ 오류를 수정했습니다. #9782 #9830 (Artem Zuikov)
  • optimize_skip_unused_shards가 설정되어 있고 키 표현식을 해당 필드 유형으로 변환할 수 없을 때 발생하던 서버 충돌 문제 수정 #9804 (Azat Khuzhin)
  • splitByString의 빈 문자열 처리 수정. #9767 (hcz)
  • compact 파트용 ALTER TABLE DELETE COLUMN 쿼리의 오류를 수정했습니다. #9779 (alesapin)
  • HTTP를 통한 쿼리에서 rows_before_limit_at_least가 누락되던 문제를 수정했습니다(processors 파이프라인 사용 시). #9730 #9757 (Nikolai Kochetov)
  • ALTER 쿼리(뮤테이션)에서 발생하던 과도한 메모리 사용 문제를 수정했습니다. 이로써 #9533#9670 문제가 해결됩니다. #9754 (alesapin)
  • 영구적인 “작업을 예약할 수 없습니다” 오류가 발생할 수 있는 문제를 수정했습니다. #9154 (Azat Khuzhin)
  • 외부 딕셔너리 DDL의 백쿼팅 버그를 수정했습니다. #9619를 해결했습니다. #9734 (alesapin)
  • text_log의 데이터 경합을 수정했습니다. 실제 버그와는 관련이 없습니다. #9726 (alexey-milovidov)
  • 이전 버전에서 사용자가 뮤테이션을 실행한 경우 복제가 작동하지 않던 버그를 수정했습니다. 이 수정은 #9645를 해결합니다. #9652 (alesapin)
  • sumKahansumWithOverflow의 잘못된 내부 함수 이름을 수정했습니다. 이로 인해 원격 쿼리에서 해당 함수들을 사용할 때 예외가 발생하던 문제가 있었습니다. #9636 (Azat Khuzhin)
  • INSERT 쿼리에서 Distributed 테이블에 파일을 더 간결한 포맷으로 쓸 수 있게 하는 설정 use_compact_format_in_distributed_parts_names을 추가했습니다. 이 변경으로 #9647 문제가 수정되었습니다. #9653 (alesapin)
  • JOIN 키에 LowCardinality를 사용할 때 발생하던 RIGHT 및 FULL JOIN 문제를 수정했습니다. #9610 (Artem Zuikov)
  • MergeTreeRangeReader에서 발생할 수 있는 Size of filter does not match size of columnInvalid number of rows in Chunk 예외를 수정했습니다. 일부 상황에서는 PREWHERE 실행 중 이러한 예외가 발생할 수 있었습니다. #9612 (Anton Popov)
  • 내부 복제가 있는 분산 테이블에서 ALTER ON CLUSTER를 허용합니다. 이로써 #3268 #9617 문제가 해결되었습니다. (shinoi2)
  • time + 1과 같은 단순한 산술 표현식을 작성할 때(time + INTERVAL 1 SECOND와 같은 표현식과 달리) 시간대가 유지되지 않던 문제를 수정했습니다. 이 변경으로 #5743가 해결되었습니다 #9323 (alexey-milovidov)

개선 사항

  • DateTime을 문자열 리터럴과 비교할 때 time zone을 사용하도록 했습니다. 이로써 #5206 문제가 수정되었습니다. #10515 (alexey-milovidov)
  • 텍스트 입력 형식에서 Decimal 값을 파싱하지 못하면 자세한 진단 정보를 출력합니다. #10205 (alexey-milovidov)
  • distributed/buffer 스케줄 풀에 작업/메모리 메트릭 추가 #10449 (Azat Khuzhin)
  • clickhouse-local과 HTTP 인터페이스에서 SELECT DISTINCT 쿼리의 결과가 준비되는 즉시 표시합니다. 이로써 #8951 #9559가 해결되었습니다 (alexey-milovidov)
  • clickhouse-copier에서 분할 시 cityHash64(PRIMARY KEY) % N == n 대신 SAMPLE OFFSET 쿼리를 사용할 수 있도록 했습니다. 이 기능을 사용하려면 명령줄 인수로 --experimental-use-sample-offset 1을 전달하십시오. #10414 (Nikita Mikhaylov)
  • 첫 번째 컬럼 값에 BOM이 포함될 수 없는 경우 TSV에서 BOM을 파싱할 수 있도록 했습니다. 이로써 #10301이 해결되었습니다 #10424 (alexey-milovidov)
  • Avro 중첩 필드 삽입 지원 추가 #10354 (Andrew Onyshchuk)
  • 동일한 타입이 지정된 경우 데이터 비수정 모드에서도 컬럼 변경이 허용됩니다. #10382 (Vladimir Chebotarev)
  • GROUP BY 세그먼트 분할 키에 대해 distributed_group_by_no_merge 자동 적용(optimize_skip_unused_shards가 설정된 경우) #10341 (Azat Khuzhin)
  • GROUP BY sharding_key가 있는 분산 테이블에 대한 LIMIT/LIMIT BY/ORDER BY 쿼리를 최적화했습니다 #10373 (Azat Khuzhin)
  • 서버의 총 메모리 사용량을 제한하는 설정 max_server_memory_usage가 추가되었습니다. 이제 메트릭 MemoryTracking은 오차 없이 계산됩니다. 설정 max_memory_usage_for_all_queries는 이제 사용 중단되었으며 아무런 동작도 하지 않습니다. 이로써 #10293가 해결되었습니다. #10362 (alexey-milovidov)
  • system_tables_lazy_load config 옵션을 추가했습니다. 이를 false로 설정하면 로그가 있는 system table이 server 시작 시 로드됩니다. Alexander Burmak, Svyatoslav Tkhon Il Pak, #9642 #10359 (alexey-milovidov)
  • 분산 전송에 백그라운드 스레드 풀 (background&#95;schedule&#95;pool&#95;size) 사용 #10263 (Azat Khuzhin)
  • 백그라운드 버퍼 플러시에 백그라운드 스레드 풀을 사용하도록 변경했습니다. #10315 (Azat Khuzhin)
  • 불완전하게 기록된 파트를 제거하는 특수한 경우 1가지를 지원합니다. 이로써 #9940 문제가 수정되었습니다. #10221 (alexey-milovidov)
  • GROUP BY 최적화에는 이러한 함수의 수동 목록 대신 isInjective()를 사용합니다. #10342 (Azat Khuzhin)
  • 클라이언트가 연결되자마자 RST 패킷을 보내더라도 로그에 오류 메시지를 출력하지 않도록 했습니다. 이는 keepalived 및 VRRP를 사용하는 IPVS 밸런서에서 흔히 나타나는 동작입니다. 이 변경으로 #1851 #10274가 수정되었습니다 (alexey-milovidov)
  • 부동소수점 타입에서 +inf를 파싱할 수 있도록 했습니다. 이로써 #1839가 해결되었습니다 #10272 (alexey-milovidov)
  • Nested 타입용 generateRandom 테이블 함수를 구현했습니다. 이로써 #9903이 종료되었습니다 #10219 (alexey-milovidov)
  • 일부 클라이언트가 MySQL 프로토콜을 통해 ClickHouse와 통신할 수 있도록 MySQL 호환 인터페이스에 max_allowed_packed를 추가했습니다. #10199 (BohuTANG)
  • GLOBAL IN에서 리터럴 사용을 허용합니다(예: SELECT * FROM remote('localhost', system.one) WHERE dummy global in (0)) #10196 (Azat Khuzhin)
  • clickhouse-client의 대화형 모드에서 여러 사소한 문제를 수정했습니다 #10194 (alexey-milovidov)
  • 불필요한 Dictionaries 로드를 방지(system.tables, DROP/SHOW CREATE TABLE) #10164 (Azat Khuzhin)
  • RWLock 업데이트: getLock()에 timeout 매개변수 추가 + 단계 공정성(phase fair)을 보장하도록 구현 재작업 #10073 (Alexander Kazakov)
  • 네이티브 mysql-connector-java(JDBC)와의 호환성이 개선되었습니다 #10021 (BohuTANG)
  • 함수 toString은 단조 함수로 간주되며, String 또는 LowCardinality(String) 인수에 대해 자명한 경우에 적용되더라도 인덱스 분석에 사용할 수 있습니다. #10110 (Amos Bird)
  • 명령어 {CREATE|DROP} USER/ROLE/ROW POLICY/SETTINGS PROFILE/QUOTA, GRANTON CLUSTER 절 지원을 추가했습니다. #9811 (Vitaly Baranov)
  • S3 URI용 가상 호스팅 스타일 지원 #9998 (Pavel Kovalenko)
  • 이제 인수가 없는 사전의 layout 유형은 사전 DDL 쿼리에서 둥근 괄호 없이 지정할 수 있습니다. 문제 #10057을 수정했습니다. #10064 (alesapin)
  • filepath에서 앞에 0이 붙은 숫자 범위를 사용할 수 있도록 기능 추가 #9989 (Olga Khvostikova)
  • CROSS JOIN의 메모리 사용량이 개선되었습니다. #10029 (Artem Zuikov)
  • 원격 테이블의 구조를 가져올 때 skip_unavailable_shards가 설정된 경우 클러스터의 모든 세그먼트에 연결을 시도합니다. #7278 (nvartolomei)
  • system.tables 테이블에 total_rows/total_bytes 컬럼을 추가했습니다. #9919 (Azat Khuzhin)
  • 시스템 로그 테이블은 이제 기본적으로 폴리모픽 파트를 사용합니다. #9905 (Anton Popov)
  • system.settings/merge_tree_settings에 type 컬럼을 추가 #9909 (Azat Khuzhin)
  • server 시작 시점에 가능한 한 이른 단계에서 사용 가능한 CPU 명령어를 확인합니다. #9888 (alexey-milovidov)
  • 단일 스레드에서 정렬된 단일 파트만 읽으므로 뮤테이션에서 ORDER BY 단계를 제거했습니다. 또한 뮤테이션의 행이 정렬 키(sorting key) 순서대로 정렬되어 있고 이 순서가 깨지지 않는지 확인하는 검사를 추가했습니다. #9886 (alesapin)
  • 왼쪽 피연산자가 FixedString인 경우 LIKE 연산자를 구현했습니다. 이는 TPC-DS 쿼리를 더 잘 지원하기 위해 필요합니다. #9890 (alexey-milovidov)
  • 중첩된 분산 테이블에서는 force_optimize_skip_unused_shards를 비활성화하는 force_optimize_skip_unused_shards_no_nested를 추가했습니다 #9812 (Azat Khuzhin)
  • 이제 MergeTree 데이터 파트의 컬럼 크기는 한 번만 계산됩니다. #9827 (alesapin)
  • optimize_skip_unused_shards에 대한 상수 표현식을 평가하도록 개선했습니다(즉, SELECT * FROM foo_dist WHERE key=xxHash32(0)) #8846 (Azat Khuzhin)
  • TTL 표현식에서 Date 또는 DateTime 컬럼 사용 여부를 확인하던 검사가 제거되었습니다. #9967 (Vladimir Chebotarev)
  • DiskS3 하드 링크 구현 최적화. #9760 (Pavel Kovalenko)
  • set multiple_joins_rewriter_version = 2를 설정하면 이름이 충돌하지 않는 컬럼을 그대로 유지하는 다중 JOIN 재작성의 두 번째 버전이 활성화됩니다. 이 기능은 USING 절을 사용하는 다중 JOIN을 지원하며, 서브쿼리가 포함된 JOIN에서 select *를 허용합니다. #9739 (Artem Zuikov)
  • StorageMergeTree에 대한 “non-blocking” alter 구현 #9606 (alesapin)
  • DiskS3에 MergeTree 완전 지원 추가 #9646 (Pavel Kovalenko)
  • 빈 문자열도 구분자로 지원하도록 splitByString을 확장했습니다. #9742 (hcz)
  • system.trace_logtimestamp_ns 컬럼을 추가했습니다. 이 컬럼에는 trace 이벤트의 고정밀 타임스탬프가 포함되어 있어 스레드 프로필(“flame charts”)의 타임라인을 생성할 수 있습니다. #9696 (Alexander Kuzmenkov)
  • 설정 send_logs_level이 활성화되면 로그 메시지와 쿼리 진행 상황이 서로 섞이지 않도록 했습니다. #9634 (Azat Khuzhin)
  • MATERIALIZE TTL IN PARTITION 구문 지원이 추가되었습니다. #9581 (Vladimir Chebotarev)
  • Avro의 중첩 필드에서 복합 타입 지원 #10502 (Andrew Onyshchuk)

성능 개선

  • Partial MergeJoin에서 오른쪽 테이블에 대한 삽입 로직을 개선했습니다. #10467 (Artem Zuikov)
  • 행 지향 포맷의 성능을 개선했습니다(CSV는 10% 이상, 좁은 테이블의 경우 Avro는 35% 이상). #10503 (Andrew Onyshchuk)
  • IN 연산자 오른쪽에 명시적으로 정의된 Set과 왼쪽의 튜플을 사용하는 쿼리의 성능을 개선했습니다. #10385 (Anton Popov)
  • HashJoin에서 해시 테이블의 메모리 사용량을 줄였습니다. #10416 (Artem Zuikov)
  • StorageDictionary용 특수 HashJoin을 추가했습니다. dictGet() 함수를 JOIN으로 재작성할 수 있습니다. 이 자체로는 하위 호환성이 깨지지 않지만, 일부 설치 환경에서는 #8400이 드러날 수 있습니다. #10133 (Artem Zuikov)
  • 대상 테이블이 지원하는 경우 materialized view의 병렬 삽입을 활성화했습니다. #10052 (vxider)
  • 단조 함수(monotonic functions)를 사용하는 인덱스 분석의 성능을 개선했습니다. #9607#10026 (Anton Popov)
  • 블룸 필터의 토큰화 속도를 높이기 위해 SSE2 또는 SSE4.2 SIMD 인트린식을 사용합니다. #9968 (Vasily Nemkov)
  • IN 연산자 오른쪽에 명시적으로 정의된 Set을 사용하는 쿼리의 성능을 개선했습니다. 이 변경으로 20.3 버전의 성능 회귀를 수정했습니다. #9740 (Anton Popov)
  • 이제 clickhouse-copier는 각 파티션을 여러 조각으로 나누어 각각을 독립적으로 복사합니다. #9075 (Nikita Mikhaylov)
  • 더 많은 집계 메서드를 추가했습니다. 예를 들어 이제 TPC-H 쿼리 1은 FixedHashMap<UInt16, AggregateDataPtr>를 선택해 25%의 성능 향상을 얻습니다. #9829 (Amos Bird)
  • pre-limit transform에서 여러 스트림에 단일 행 카운터를 사용합니다. 이를 통해 limit은 있지만 order by는 없는 쿼리(예: select f(x) from (select x from t limit 1000000000))에서 파이프라인 스트림을 하나로 합치지 않고도 이후 처리에 여러 thread를 사용할 수 있습니다. #9602 (Nikolai Kochetov)

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

  • ClickHouse-Extras의 AWS SDK 라이브러리 포크 버전을 사용합니다 #10527 (Pavel Kovalenko)
  • 새 ALTER RENAME COLUMN 쿼리에 대한 통합 테스트를 추가했습니다. #10654 (vzakaznikov)
  • 잘못된 인수로 함수 now64를 호출할 때 발생할 수 있는 부호 있는 정수 오버플로우를 수정했습니다. 이 수정으로 #8973 #10511이 해결됩니다. (alexey-milovidov)
  • 빌드 구성이 Oss-fuzz와 호환되도록 퍼저와 새니타이저 구성을 분리했습니다. #10494 (kyprizel)
  • clang-10의 clang-tidy 관련 수정 사항. #10420 (alexey-milovidov)
  • 오류 메시지에 절대 경로를 표시합니다. 그렇지 않으면 KDevelop는 올바른 파일로 이동하지 못하고 새 파일을 대신 엽니다. #10434 (alexey-milovidov)
  • Address 새니타이저를 사용한 CI 스트레스 테스트의 오류를 조사하기 위해 ASAN_OPTIONS 환경 변수를 추가했습니다. #10440 (Nikita Mikhaylov)
  • clang 빌드에서 ThinLTO를 활성화합니다(실험 기능). #10435 (alexey-milovidov)
  • 시스템에 Z3 solver가 설치되어 있을 때 생길 수 있는 Z3에 대한 의도치 않은 종속성을 제거했습니다. #10426 (alexey-milovidov)
  • 통합 테스트용 docker 파일을 docker/ 디렉터리로 이동. #10335 (Ilya Yatsishin)
  • CI에서 clang-10을 사용할 수 있게 했습니다. 이로써 #10238 문제가 해결됩니다. #10384 (alexey-milovidov)
  • OpenSSL을 upstream master로 업데이트했습니다. TLS 연결이 OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal errorSSL Exception: error:2400006E:random number generator::error retrieving entropy 메시지와 함께 실패할 수 있는 문제를 수정했습니다. 이 문제는 버전 20.1에 있었습니다. #8956 (alexey-milovidov)
  • clang-10 빌드 문제를 수정했습니다. #10238 #10370 (Amos Bird)
  • materialized view용 Parallel INSERT 성능 테스트를 추가했습니다. #10345 (vxider)
  • 불안정하게 실패하던 테스트 test_settings_constraints_distributed.test_insert_clamps_settings를 수정했습니다. #10346 (Vitaly Baranov)
  • CI ClickHouse에 테스트 결과 업로드용 유틸리티 추가 #10330 (Ilya Yatsishin)
  • junit_to_html 도구에서 테스트 결과를 JSONEachRow 포맷으로 변환 #10323 (Ilya Yatsishin)
  • cctz 업데이트. #10215 (alexey-milovidov)
  • 가장 기본적인 JUnit XML 보고서만으로도 HTML 보고서를 생성할 수 있게 했습니다. #10247 (Ilya Yatsishin)
  • 최소 컴파일러 버전 확인을 업데이트했습니다. 문제 #10250의 근본 원인을 수정했습니다 #10256 (alexey-milovidov)
  • 분산 테이블 기반 라이브 view 테이블에 대한 초기 지원 #10179 (vzakaznikov)
  • MergeTreeIndexFullText의 (오탐) MSan 보고를 수정했습니다. 이 문제는 #9968에서 처음 나타났습니다. #10801 (alexey-milovidov)
  • clickhouse-docker-util #10151 (filimonov)
  • pdqsort를 최신 버전으로 업데이트 #10171 (Ivan)
  • libdivide를 v3.0으로 업데이트 #10169 (Ivan)
  • 다형성 파트가 활성화된 경우를 확인하는 검사를 추가했습니다. #10086 (Anton Popov)
  • FreeBSD용 크로스 컴파일 build를 추가했습니다. 이로써 #9465 #9643가 해결됩니다 (Ivan)
  • #6924 관련 성능 테스트 추가 #6980 (filimonov)
  • 성능 테스트를 개선하기 위해 File 엔진에 /dev/null 지원 추가 #8455 (Amos Bird)
  • /dbms 내부의 모든 폴더를 한 단계 상위로 이동 #9974 (Ivan)
  • 단일 스레드로 MergeTree를 읽을 때 순서대로 수행되는지 확인하는 테스트를 추가했습니다. #9670의 추가 사항입니다 #9762 (alexey-milovidov)
  • 레이스 컨디션을 방지하도록 00964_live_view_watch_events_heartbeat.py 테스트를 수정했습니다. #9944 (vzakaznikov)
  • 통합 테스트 test_settings_constraints를 수정했습니다 #9962 (Vitaly Baranov)
  • 각 함수를 별도 파일로 분리, 12편. #9922 (alexey-milovidov)
  • 튜플 배열 분석이 극도로 느린 경우에 대한 성능 테스트를 추가했습니다. #9872 (alexey-milovidov)
  • zstd를 1.4.4로 업데이트했습니다. 성능과 압축률이 소폭 개선되었습니다. 서로 다른 버전의 ClickHouse로 레플리카를 실행하면 설명과 함께 Data after merge is not byte-identical to data on another replicas.라는 오류 메시지가 표시될 수 있습니다. 이러한 메시지는 정상 동작이므로 걱정하지 않아도 됩니다. #10663 (alexey-milovidov)
  • system.stack_trace의 TSan 리포트를 수정했습니다. #9832 (alexey-milovidov)
  • clock_getres 의존성을 제거했습니다. #9833 (alexey-milovidov)
  • clang-tidy를 사용한 식별자 이름 검사를 추가했습니다. #9799 (alexey-milovidov)
  • “builder” Docker image를 업데이트했습니다. 이 이미지는 CI에서 사용되지는 않지만 개발자에게 유용합니다. #9809 (alexey-milovidov)
  • CI에서 더 이상 사용하지 않는 기존 performance-test 도구를 제거했습니다. clickhouse-performance-test도 훌륭한 도구이지만, 이제는 환경이 다양하게 바뀌더라도 정교한 통계 공식을 사용해 비교 테스트를 수행하고 신뢰도 높은 결과를 얻을 수 있는 훨씬 더 우수한 도구를 사용합니다. #9796 (alexey-milovidov)
  • 대부분의 clang-static-analyzer 검사를 추가했습니다. #9765 (alexey-milovidov)
  • MongoDB URI 지원을 준비하기 위해 Poco를 1.9.3으로 업데이트했습니다. #6892 (Alexander Kuzmenkov)
  • -DUSE_STATIC_LIBRARIES=0 -DENABLE_JEMALLOC=0를 사용한 빌드 수정 #9651 (Artem Zuikov)
  • 변경 로그 스크립트에서 머지 커밋이 릴리스 브랜치로 체리픽된 경우, 커밋 설명에서 PR 이름을 가져오도록 변경했습니다. #9708 (Nikolai Kochetov)
  • 백포트 스크립트에서 vX.X-conflicts 태그를 지원하도록 했습니다. #9705 (Nikolai Kochetov)
  • 백포트 스크립트의 auto-label을 수정했습니다. #9685 (Nikolai Kochetov)
  • Darwin 크로스 빌드에서 libc++를 사용해 네이티브 빌드와 일관성을 맞춥니다. #9665 (Hui Wang)
  • 불안정한 테스트 01017_uniqCombined_memory_usage를 수정했습니다. #7236의 후속 작업입니다. #9667 (alexey-milovidov)
  • 네이티브 macOS Clang 컴파일러용 빌드 문제 수정 #9649 (Ivan)
  • pthread_mutex_lock, pthread_mutex_unlock 함수 호출 주변에 다양한 이상 동작을 추가할 수 있게 했습니다. #9635 (alexey-milovidov)
  • packager 스크립트에 clang-tidy 지원이 추가되었습니다. #9625 (alexey-milovidov)
  • 번들에 포함되지 않은 msgpack을 사용할 수 있도록 했습니다. #10168 (Azat Khuzhin)

ClickHouse 릴리스 v20.3

ClickHouse 릴리스 v20.3.21.2-lts, 2020-11-02

버그 수정

  • sharding_key에서 dictGet 관련 문제(및 이와 유사하게 함수 Context가 영구적으로 저장되는 위치의 문제)를 수정했습니다. #16205 (Azat Khuzhin).
  • 쿼리에 WHERE, PREWHERE, GLOBAL IN이 포함된 경우 Distributed 테이블에서 쿼리 결과가 잘못 비어 있던 문제를 수정했습니다. #15792를 해결했습니다. #15933 (Nikolai Kochetov).
  • TSV/CSVWithNames 포맷에서 헤더가 누락되거나 과도하게 포함되던 문제를 수정했습니다. 이 변경으로 #12504를 해결했습니다. #13343 (Azat Khuzhin).

ClickHouse 릴리스 v20.3.20.6-lts, 2020-10-09

버그 수정

  • MOVE 또는 REPLACE PARTITION 이후, 드물게는 DETACH 또는 DROP PARTITION 이후에 존재하지 않는 part를 기다리며 mutation이 멈출 수 있었습니다. 이 문제가 수정되었습니다. #15724, #15537 (tavplubix).
  • 동일한 MySQL 엔진 테이블에 대한 서브쿼리가 많은 쿼리에서 발생하던 멈춤 문제를 수정했습니다. 이전에는 하나의 쿼리에서 동일한 MySQL 테이블에 대한 서브쿼리가 16개를 초과하면 무한정 멈춰 있었습니다. #15299 (Anton Popov).
  • 쿼리에 Merge 테이블에 대한 JOIN이 있을 때 GROUP BY에서 발생하던 ‘Unknown identifier’ 문제를 수정했습니다. #15242 (Artem Zuikov).
  • 서브쿼리에 finalizeAggregation 함수가 포함된 경우 프레디케이트 push down이 동작하도록 수정했습니다. #14847 문제를 수정했습니다. #14937 (filimonov).
  • 동시에 실행되는 ALTER ... REPLACE/MOVE PARTITION ... 쿼리로 인해 교착 상태가 발생할 수 있었습니다. 이 문제가 수정되었습니다. #13626 (tavplubix).

ClickHouse 릴리스 v20.3.19.4-lts, 2020-09-18

버그 수정

  • 조회 대상 컬럼에 다른 컬럼에 의존하는 DEFAULT 표현식이 있고, 그 다른 컬럼도 DEFAULT를 가지며 SELECT 쿼리에 포함되지 않고 디스크에도 존재하지 않는 경우 드물게 발생하던 오류를 수정했습니다. #14531을 부분적으로 수정합니다. #14845 (alesapin).
  • 할당 표현식에 널 허용 컬럼과 상수 값(예: UPDATE x = 42)이 포함된 ALTER UPDATE mutation에서 컬럼 값이 잘못되거나 segfault가 발생하던 버그를 수정했습니다. #13634, #14045를 수정합니다. #14646 (alesapin).
  • 결과 컬럼의 decimal scale이 잘못 계산되어 Decimal 곱셈 결과가 잘못되던 문제를 수정했습니다. #14603 (Artem Zuikov).

개선 사항

  • 컴팩트 파트에서 사용자 지정 코덱을 지원합니다. #12183 (Anton Popov).

ClickHouse 릴리스 v20.3.18.10-lts, 2020-09-08

버그 수정

  • PipelineExecutor 자체에서 예외가 발생하면 쿼리 실행을 중단하도록 수정했습니다. 이로써 드물게 발생할 수 있는 쿼리 멈춤 현상을 방지할 수 있습니다. #14334의 후속 작업입니다. #14402 (Nikolai Kochetov).
  • cache 딕셔너리가 소스에 존재하는 값 대신 기본값을 반환하던 경우를 수정했습니다. #13624 (Nikita Mikhaylov).
  • 데이터베이스 또는 테이블 이름에 점이 포함된 경우 users.xml에서 행 정책을 파싱할 때 발생하던 문제를 수정했습니다. 이로써 #5779, #12527가 해결됩니다. #13199 (Vitaly Baranov).
  • CAST(Nullable(String), Enum()) 문제를 수정했습니다. #12745 (Azat Khuzhin).
  • text_log의 data race를 수정했습니다. 이는 실제 버그에 해당하지 않습니다. #9726 (alexey-milovidov).

개선 사항

  • 긴 쿼리에서 발생하던 잘못된 오류를 수정했습니다. 올바른 쿼리임에도 Max query size exceeded가 아닌 구문 오류가 반환될 수 있었습니다. #13928 (Nikolai Kochetov).
  • parseDateTimeBestEffortOrNull/Zero 함수에서 값을 완전히 parse하지 못한 경우 NULL/0을 반환하도록 했습니다. 이 변경으로 #7876을 수정했습니다. #11653 (alexey-milovidov).

성능 개선

  • LowCardinality를 사용하는 매우 짧은 쿼리를 소폭 최적화했습니다. #14129 (Anton Popov).

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

  • clang-10으로 마이그레이션한 후 HashTable에서 발생한 UBSan 경고(nullptr에 0을 더하는 문제)를 수정했습니다. #10638 (alexey-milovidov).

ClickHouse 릴리스 v20.3.17.173-lts, 2020-08-15

버그 수정

  • StorageMerge와 set enable_optimize_predicate_expression=1 사용 시 JOIN에서 발생하던 충돌을 수정했습니다. #13679 (Artem Zuikov).
  • NULL 요소가 있는 튜플 비교 시 잘못된 반환 타입을 수정했습니다. #12461을 해결했습니다. #13420 (Nikolai Kochetov).
  • 상수 컬럼이 있고 프라이머리 키의 ORDER BY 접두사를 사용하는 쿼리를 수정했습니다. #13396 (Anton Popov).
  • roundUpToPowerOfTwoOrZero()에서 MSB가 설정된 숫자에 대해 전달된 숫자를 그대로 반환하도록 수정했습니다. #13234 (Azat Khuzhin).

ClickHouse 릴리스 v20.3.16.165-lts 2020-08-10

버그 수정

  • parseDateTimeBestEffort 함수에 Unix timestamp가 인수로 전달될 때 발생하던 오류를 수정했습니다. 이 수정으로 #13362가 해결됩니다. #13441 (alexey-milovidov).
  • NaN 값을 포함하는 Float 타입에 대해 호출된 uniqExact, topK, sumDistinct 및 유사한 집계 함수에서 발생할 수 있던 성능 저하와 약간 잘못된 결과 문제를 수정했습니다. 또한 디버그 빌드에서 assert를 발생시키던 문제도 수정했습니다. 이 수정으로 #12491이 해결되었습니다. #13254 (alexey-milovidov).
  • cond로 리터럴 NULL이 아닌 널 허용 constexpr를 사용할 때 발생하던 if 함수 문제를 수정했습니다. #12463를 해결합니다. #13226 (alexey-milovidov).
  • 배열 요소와 배열 첨자가 모두 널 허용인 경우 arrayElement 함수의 assert를 수정했습니다. 이로써 #12172가 해결되었습니다. #13224 (alexey-milovidov).
  • 로컬 레플리카에서 SELECT를 수행할 때 스레드 수가 불필요하게 제한되던 문제를 수정했습니다. #12840 (Nikolai Kochetov).
  • WITH TOTALS 쿼리에서 나타날 수 있던 데이터의 불필요한 오버플로우 행 문제를 수정했습니다. #12747 (Nikolai Kochetov).
  • IN 절에서 함수로 해석되는 큰 튜플의 성능을 개선했습니다. 이는 어떤 불분명한 이유로 사용자가 WHERE x IN (1, 2, ...) 대신 WHERE x IN tuple(1, 2, ...)를 작성하는 경우입니다. #12700 (Anton Popov).
  • input_format_parallel_parsing의 메모리 추적 문제를 수정했습니다(스레드를 그룹에 연결하여). #12672 (Azat Khuzhin).
  • #12293를 수정하여 서브쿼리에 WITH 절이 포함된 경우에도 프레디케이트 푸시를 허용하도록 했습니다. #12663 (Winter Zhang).
  • const 표현식이 있는 블룸 필터 인덱스 문제를 수정했습니다. #10572 #12659 (Winter Zhang).
  • 브로커를 사용할 수 없을 때를 비롯해 여러 경우에 StorageKafka에서 발생하던 SIGSEGV를 수정했습니다. #12658 (Azat Khuzhin).
  • 서버 충돌로 이어질 수 있던 cache 레이아웃 외부 딕셔너리의 경쟁 상태를 수정했습니다. #12566 (alesapin).
  • enable_mixed_granularity_parts=1일 때 ALTER DELETE 쿼리 후 기존 파트가 손상되던 버그를 수정했습니다. #12536을 해결합니다. #12543 (alesapin).
  • 인수 개수가 잘못된 함수 in에 대한 예외 메시지를 개선했습니다. #12529 (Anton Popov).
  • compact 파트를 읽을 때 발생하던 성능 문제를 수정했습니다. #12492 (Anton Popov).
  • text_log이 활성화된 경우 발생하던 교착 상태를 해결했습니다. #12452 (alexey-milovidov).
  • StorageMerge에서 발생할 수 있는 segfault를 수정했습니다. #12054를 해결합니다. #12401 (tavplubix).
  • -StateNullable 인수가 있는 집계 함수에서 TOTALS/ROLLUP/CUBE가 올바르게 동작하도록 수정했습니다. 이로써 #12163가 해결됩니다. #12376 (alexey-milovidov).
  • WITH FILL 수정자에서 컬럼 순서를 바로잡았습니다. 이전에는 ORDER BY 문의 컬럼 순서가 반영되지 않았습니다. #12306 (Anton Popov).
  • 가상 컬럼(예: Merge 테이블의 _table)이나 system.tables를 쿼리할 때 데이터베이스 이름으로 필터링하는 경우처럼, 시스템 테이블의 “index” 컬럼 또는 가상 컬럼으로 데이터를 필터링하는 표현식이 Nullable 타입을 반환할 때 발생하는 “bad cast” 예외를 방지합니다. 이로써 #12166가 수정되었습니다. #12305 (alexey-milovidov).
  • TrieDictionary 로드 실패 후 오류를 표시합니다. #12290 (Vitaly Baranov).
  • 함수 arrayFill가 빈 배열에서 잘못 동작해 충돌이 발생할 수 있던 문제를 수정했습니다. 이 수정은 #12263을 해결합니다. #12279 (alexey-milovidov).
  • LowCardinality 타입에 대해 공통 타입으로 변환하는 기능을 구현했습니다. 이를 통해 LowCardinality 컬럼과 다른 컬럼을 가진 테이블에 대해 UNION ALL을 실행할 수 있습니다. 이로써 #8212 문제가 해결됩니다. 이로써 #4342 문제가 해결됩니다. #12275 (alexey-milovidov).
  • StorageFile에서 여러 차례 연속으로 삽입할 때 일부 특수 타입의 헤더가 두 번 이상 기록되던 문제를 수정했습니다. 이로써 #6155가 해결되었습니다. #12197 (Nikita Mikhaylov).
  • 0 또는 1이 아닌 UInt8 값에 대한 논리 함수를 수정했습니다. #12196 (Alexander Kazakov).
  • GROUP BY 단사 함수 제거 시 dictGet 인수 검사 로직을 수정했습니다. #12179 (Azat Khuzhin).
  • 조건이 NULL로 평가될 때 레코드가 삭제되는 문제를 일으키던 ALTER DELETE의 잘못된 로직을 수정했습니다. 이로써 #9088이 해결되었습니다. 이로써 #12106이 종료되었습니다. #12153 (alexey-milovidov).
  • 별칭(alias)이 있는 경우 외부 DBMS(예: MySQL, ODBC)로 전송할 쿼리 변환을 수정했습니다. 이로써 #12032 문제가 해결되었습니다. #12151 (alexey-milovidov).
  • 정수 나눗셈에서 발생할 수 있는 오버플로우 문제를 수정했습니다. 이 변경으로 #12119 문제가 해결됩니다. #12140 (alexey-milovidov).
  • greatCircleDistance, geoDistance에서 발생할 수 있는 무한 루프 문제를 수정했습니다. 이 수정으로 #12117 문제도 해결되었습니다. #12137 (alexey-milovidov).
  • 시스템 로그(system.query_log, metric_log 등) 또는 engine=Buffer의 기본 테이블에 연결된 조인이나 서브쿼리가 있는 materialized view에서 There is no query 예외가 발생하지 않도록 수정했습니다. #12120 (filimonov).
  • 전체 thread 수 제한이 잘못 적용되어 발생하던 UNION이 포함된 SELECT 쿼리의 성능 문제를 수정했습니다. #12030을 해결합니다. #12103 (Nikolai Kochetov).
  • -StateResample combinator에서 발생하던 segfault 문제를 수정했습니다. #12092 (Anton Popov).
  • VIEW에서 select를 수행할 때 스레드 수가 불필요하게 제한되던 문제를 수정했습니다. #11937. #12085 (Nikolai Kochetov).
  • PREWHERE에 잘못된 타입을 사용할 때 발생할 수 있던 비정상 종료 문제를 수정했습니다. #12053, #12060을 수정했습니다. #12060 (Nikolai Kochetov).
  • LowCardinality 유형에서 함수 defaultValueOfArgumentType의 오류 Expected single dictionary argument for function를 수정했습니다. #11808을 해결했습니다. #12056 (Nikolai Kochetov).
  • Tuple(LowCardinality) 인수를 사용하는 고차 함수에서 발생하던 Cannot capture column 오류를 수정했습니다. #9766 관련 수정입니다. #12055 (Nikolai Kochetov).
  • 데이터베이스를 로드할 때 테이블 메타데이터를 병렬로 파싱합니다. 이로써 테이블 수가 많을 때 서버 시작이 느려지는 문제가 해결됩니다. #12045 (tavplubix).
  • topK 집계 함수가 Enum 타입에 대해 Enum을 반환하도록 변경했습니다. 이로써 #3740 문제가 수정되었습니다. #12043 (alexey-milovidov).
  • 제약 조건이 상수 표현식인지 확인하는 검사를 수정했습니다. 이로써 #11360이 수정되었습니다. #12042 (alexey-milovidov).
  • Nullable 컬럼이 포함된 튜플의 잘못된 비교를 수정했습니다. #11985를 해결했습니다. #12039 (Nikolai Kochetov).
  • 크기가 서로 다른 FixedString 유형의 인수로 함수 if를 호출할 때 잘못된 결과가 반환되거나 잠재적으로 충돌이 발생하던 문제를 수정했습니다. 이로써 #11362가 해결되었습니다. #12021 (alexey-milovidov).
  • 반환 표현식이 neighbor 함수 하나뿐인 쿼리는, 해당 함수가 오프셋 -9223372036854775808로 호출되면 빈 결과를 반환할 수 있습니다. 이 수정은 #11367을 해결합니다. #12019 (alexey-milovidov).
  • 크래시로 이어질 수 있는 generateRandom의 잠재적인 배열 크기 오버플로우를 수정했습니다. 이 수정으로 #11371이 해결됩니다. #12013 (alexey-milovidov).
  • 발생할 수 있는 부동소수점 예외를 수정했습니다. 이로써 #11378 문제가 해결되었습니다. #12005 (alexey-milovidov).
  • server 시작 시 로그 메시지에 잘못 표시되던 설정 이름을 수정했습니다. #11997 (alexey-milovidov).
  • Values 포맷에서 Query parameter was not set 문제가 수정되었습니다. #11918을 해결합니다. #11936 (tavplubix).
  • 쿼리(매개변수화된 쿼리)에서 치환용 별칭을 유지합니다. 이로써 #11914를 수정했습니다. #11916 (alexey-milovidov).
  • DateTime64를 파싱할 때 발생할 수 있는 잠재적인 부동소수점 예외를 수정했습니다. 이로써 #11374 문제가 해결되었습니다. #11875 (alexey-milovidov).
  • HTTP 인터페이스를 통한 메모리 사용량 집계를 수정했습니다(wait_end_of_query=1일 때 영향이 클 수 있습니다). #11840 (Azat Khuzhin).
  • 조건에 NULL이 포함된 if()의 잘못된 결과를 수정했습니다. #11807 (Artem Zuikov).
  • 동등성을 확인하기 전에 zookeeper에 저장된 메타데이터를 파싱합니다. #11739 (Azat Khuzhin).
  • 별칭이 포함된 ORDER BY 구문과 함께 LIMIT n WITH TIES를 사용할 때 발생하던 문제가 수정되었습니다. #11689 (Anton Popov).
  • cache 딕셔너리에서 초기화되지 않은 메모리를 읽을 수 있는 잠재적 문제를 수정했습니다. #10834 (alexey-milovidov).

성능 개선

  • 리터럴을 사용하는 IN 연산자에서 인덱스가 사용되지 않아 발생하던 문제로, v19.3 무렵에 도입된 성능 회귀를 수정했습니다. 이 변경으로 #10574가 해결됩니다. #12062 (nvartolomei).

ClickHouse 릴리스 v20.3.12.112-lts 2020-06-25

버그 수정

  • prewhere 조건에서 Nullable 컬럼 사용으로 인해 드물게 발생하던 크래시를 수정했습니다. #11608의 후속입니다. #11869 (Nikolai Kochetov).
  • 고차 함수 내에서는 arrayJoin을 허용하지 않도록 했습니다. 이로 인해 프로토콜 동기화가 깨지는 문제가 발생했습니다. 이 변경으로 #3933이 해결되었습니다. #11846 (alexey-milovidov).
  • 쿼리에 너무 많은 스레드가 사용되는 문제를 수정했습니다. #11788 (Nikolai Kochetov).
  • SELECT *, xyz.*와 같은 쿼리에서 오류가 발생해야 하는데도 성공하던 예기치 않은 동작을 수정했습니다. #11753 (hexiaoting).
  • 이제 메타데이터 alter 중에는 레플리카 fetch 작업이 취소됩니다. #11744 (alesapin).
  • Values 입력 형식에서 복합 리터럴의 타입을 잘못 추론해 발생하던 LOGICAL_ERROR를 수정했습니다. #11732 (tavplubix).
  • 상수 컬럼에 대한 ORDER BY ... WITH FILL 문제를 수정했습니다. #11697 (Anton Popov).
  • XDBC bridge와 통신할 때 적절한 timeout이 전달되도록 수정했습니다. 최근에는 bridge의 활성 상태를 확인하고 메타 정보를 가져올 때 timeout이 제대로 적용되지 않았습니다. #11690 (alexey-milovidov).
  • system.mutations가 잘못된 상태로 표시되게 하는 오류를 수정했습니다. 전체 뮤테이션이 이미 완료된 것으로 표시될 수 있지만, 서버의 복제 큐에는 여전히 MUTATE_PART 작업이 남아 있어 이를 계속 실행하려고 시도합니다. 이 수정은 #11611을 해결합니다. #11681 (alesapin).
  • 대소문자를 구분하지 않는 플래그가 지정된 정규식 지원을 추가했습니다. 이로써 #11101#11506 문제가 수정되었습니다. #11649 (alexey-milovidov).
  • 행 수준 보안이 설정된 경우 단순한 count 쿼리 최적화를 제거했습니다. 이전 버전에서는 필터링된 개수 대신 테이블의 전체 레코드 수가 사용자에게 반환되었습니다. 이 변경으로 #11352가 수정되었습니다. #11644 (alexey-milovidov).
  • String용 블룸 필터(데이터 스키핑 인덱스)를 수정했습니다. #11638 (Azat Khuzhin).
  • Nullable 컬럼을 prewhere 조건에서 사용할 때 드물게 발생하던 크래시를 수정했습니다. (아마도 #11572와 어떤 식으로든 관련이 있는 것으로 보입니다.) #11608 (Nikolai Kochetov).
  • 샘플링으로 Buffer 테이블을 읽는 쿼리에서 발생하던 오류 Block structure mismatch를 수정했습니다. #11602 (Nikolai Kochetov).
  • exception.code() % 256 = 0인 경우 clickhouse-client의 종료 코드가 잘못되는 문제를 수정했습니다. #11601 (filimonov).
  • server 시작 시 “마크 캐시 크기가 줄어들었습니다”라는 로그 메시지의 사소한 오류를 수정했습니다. 이로써 #11399가 해결되었습니다. #11589 (alexey-milovidov).
  • PREWHERE column in (subquery)ARRAY JOIN이 포함된 쿼리에서 Size of offsets does not match size of column 오류가 발생하던 문제를 수정했습니다. #11580 (Nikolai Kochetov).
  • HTTP 세션의 모든 쿼리가 동일한 query_id를 갖는 문제가 있었습니다. 이 문제가 수정되었습니다. #11578 (tavplubix).
  • 이제 clickhouse-server Docker 컨테이너는 서버의 활성 상태를 확인할 때 IPv6를 우선적으로 사용합니다. #11550 (Ivan Starkov).
  • <node>의 shard_num/replica_num을 수정했습니다(use_compact_format_in_distributed_parts_names가 깨지는 문제). #11528 (Azat Khuzhin).
  • -State 함수로 집계하던 중간에 예외가 발생할 때 생기던 메모리 누수를 수정했습니다. 이로써 #8995가 해결되었습니다. #11496 (alexey-milovidov).
  • 별칭이 한정된 컬럼 이름을 덮어쓸 수 있을 때 분산 쿼리에서 잘못된 결과가 나오던 문제를 수정했습니다. #9672 #9714를 수정했습니다. #9972 (Artem Zuikov).

ClickHouse 릴리스 v20.3.11.97-lts 2020-06-10

새로운 기능

  • 이제 ClickHouse가 딕셔너리 소스의 timeout을 자체적으로 제어합니다. cache 딕셔너리 구성에 두 개의 새로운 설정이 추가되었습니다. strict_max_lifetime_seconds의 기본값은 max_lifetime이며, query_wait_timeout_milliseconds의 기본값은 1분입니다. 첫 번째 설정은 allow_read_expired_keys 설정과 함께 사용할 때도 유용하며(지나치게 오래된 만료 키의 읽기를 금지), #10337 (Nikita Mikhaylov).

버그 수정

  • min_bytes_to_use_direct_io가 활성화된 상태에서 PREWHERE가 활성화되어 있고 SAMPLE을 사용하거나 스레드 수가 많을 때 발생할 수 있는 오류 Data compressed with different methods를 수정했습니다. 이 수정은 #11539를 해결합니다. #11540 (alexey-milovidov).
  • 코덱에 대해 반환되는 압축된 크기 문제를 수정했습니다. #11448 (Nikolai Kochetov).
  • 컬럼에 리터럴이 아닌 인수가 있는 압축 코덱이 설정된 경우 발생하던 server 충돌을 수정했습니다. #11365를 해결했습니다. #11431 (alesapin).
  • 점이 nan인 경우 pointInPolygon을 수정했습니다. #11375를 해결합니다. #11421 (Alexey Ilyukhov).
  • LowCardinality(T) 및 Nullable(T)에 대한 JOIN에서 발생하던 충돌을 수정했습니다. #11380. #11414 (Artem Zuikov).
  • 잘못된 USING 키에 대한 오류 코드를 수정했습니다. #11373. #11404 (Artem Zuikov).
  • 위도/경도 범위를 벗어난 인수가 전달될 때 발생하던 geohashesInBox 문제가 수정되었습니다. #11403 (Vasily Nemkov).
  • joinGet() 함수의 오류 메시지가 개선되었습니다. #11389 (Artem Zuikov).
  • 외부 정렬과 limit이 있는 쿼리에서 발생할 수 있는 Pipeline stuck 오류를 수정했습니다. #11359를 해결합니다. #11366 (Nikolai Kochetov).
  • ReplicatedMergeTree에서 파트 전송 중 중복된 잠금 제거. #11354 (alesapin).
  • 멀티라인 모드에서 clickhouse-client의 \G(세로 출력) 지원이 제대로 동작하도록 수정했습니다. 이로써 #9933이 해결되었습니다. #11350 (alexey-milovidov).
  • StorageJoin에서 JOIN 없이 직접 select할 때 발생하던 충돌과 잘못된 NULL 허용 여부를 수정했습니다. #11340 (Artem Zuikov).
  • quantilesExactWeightedArray에서 발생하는 충돌을 수정했습니다. #11337 (Nikolai Kochetov).
  • 이제 ALTER 쿼리에서 메타데이터를 변경하기 전에 머지가 중지됩니다. #11335 (alesapin).
  • 설정 parallel_view_processing = 1을 사용하면 MATERIALIZED VIEW에 대한 쓰기 작업이 다시 병렬로 수행되도록 했습니다. #10241을 수정했습니다. #11330 (Nikolai Kochetov).
  • 추출된 JSON에 짝이 맞지 않는 { 또는 [가 들어 있는 문자열이 있는 경우 visitParamExtractRaw를 수정했습니다. #11318 (Ewout).
  • ThreadPool에서 매우 드물게 발생하던 race condition을 수정했습니다. #11314 (alexey-milovidov).
  • 변환 과정에서 초기화되지 않은 메모리가 사용될 가능성이 있는 문제를 수정했습니다. 예시: SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov).
  • 테이블의 프라이머리 키에 배열 컬럼이 있고, empty 또는 notEmpty 함수로 이 컬럼을 필터링하는 쿼리에서 인덱스 분석이 작동하지 않는 문제를 수정했습니다. 이 수정으로 #11286가 해결됩니다. #11303 (alexey-milovidov).
  • max_network_bandwidth, max_execution_speed 또는 priority 설정으로 쿼리 속도가 제한되는 경우, 쿼리 속도 추정이 부정확해지고 min_execution_speed 제한이 적용되지 않거나 잘못 적용될 수 있던 버그를 수정했습니다. 또한 timeout_before_checking_execution_speed의 기본값을 0이 아닌 값으로 변경했습니다. 그렇지 않으면 min_execution_speedmax_execution_speed 설정이 전혀 효과가 없기 때문입니다. 이로써 #11297가 수정되었습니다. 이로써 #5732가 수정되었습니다. 이로써 #6228가 수정되었습니다. 사용성 개선: clickhouse-client에서 예외 메시지와 진행 표시줄이 서로 붙어 표시되지 않도록 했습니다. #11296 (alexey-milovidov).
  • Protobuf 형식의 손상된 데이터를 읽는 중 발생하던 충돌을 수정했습니다. 이 수정으로 #5957#11203이 해결됩니다. #11258 (Vitaly Baranov).
  • cache 딕셔너리가 정상 값 대신 기본값을 반환할 수 있던 버그를 수정했습니다(만료된 키만 있는 경우). 이는 String 필드에만 영향을 미칩니다. #11233 (Nikita Mikhaylov).
  • 내부 쿼리에 상수가 포함된 VIEW를 읽을 때 발생하던 Block structure mismatch in QueryPipeline 오류를 수정했습니다. #11181. #11205 (Nikolai Kochetov).
  • 발생할 수 있는 예외 Invalid status for associated output를 수정했습니다. #11200 (Nikolai Kochetov).
  • Array(Array(LowCardinality))를 캡처한 인수가 있는 고차 함수에서 발생할 수 있는 Cannot capture column 오류를 수정했습니다. #11185 (Nikolai Kochetov).
  • 키가 1000개를 초과하거나 일부 백엔드에서 실패할 수 있던 S3 글로빙 문제를 수정했습니다. #11179 (Vladimir Chebotarev).
  • 데이터 스키핑 인덱스가 백그라운드 머지 중에 변경되는 컬럼에 의존하는 경우(SummingMergeTree, AggregatingMergeTree, 그리고 TTL GROUP BY), 잘못 계산되던 문제가 있었습니다. 이 문제는 인덱스 계산을 머지 이후로 옮겨, 머지된 데이터 기준으로 인덱스를 계산하도록 수정하여 해결했습니다. #11162 (Azat Khuzhin).
  • 단순한 쿼리에서 스레드를 과도하게 예약하던 문제를 수정했습니다(스레드 수를 줄이기 위한 최적화가 pipeline 변경 이후 부분적으로 깨져 있었습니다). #11114 (Azat Khuzhin).
  • HAVING 절이 있는 쿼리(즉, 이니시에이터 서버에서 필터링이 필요한 경우)에 대해 분산 쿼리의 프레디케이트 최적화(enable_optimize_predicate_expression=1)를 수정했습니다. 이를 위해 표현식의 순서를 유지하도록 했고(이것만으로도 수정에 충분함), 집계기가 인덱스 대신 컬럼 이름을 사용하도록 강제했습니다. 수정: #10613, #11413. #10621 (Azat Khuzhin).
  • 오프셋 커밋이 실패하는 드문 경우 Kafka에서 중복이 발생할 가능성을 줄이기 위해 커밋 재시도 로직을 도입했습니다. #9884 (filimonov).

성능 개선

  • 외부 딕셔너리를 읽는 함수를 호출할 때마다 딕셔너리를 가져오고 접근 권한을 확인하는 작업을 각각 한 번만 수행합니다. #10928 (Vitaly Baranov).

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

  • 간헐적으로 실패하던 여러 통합 테스트를 수정했습니다. #11355 (alesapin).

ClickHouse 릴리스 v20.3.10.75-lts 2020-05-23

버그 수정

  • 최종화된 내용이 없을 경우 mutation 최종화 작업의 로깅을 제거했습니다. #11109 (alesapin).
  • parseDateTime64BestEffort 인수 해석 관련 버그를 수정했습니다. #11038 (Vasily Nemkov).
  • getRawData() 메서드에서 원시 데이터 크기가 잘못 계산되던 문제를 수정했습니다. #10964 (Igr).
  • 20.1 및 그 이전 버전 간 2단계 집계 비호환성을 수정했습니다. 이 비호환성은 initiator 노드와 원격 노드에서 서로 다른 버전의 ClickHouse를 사용하고, GROUP BY 결과 크기가 크며, 단일 String 필드에 대해 집계가 수행될 때 발생합니다. 이로 인해 결과에서 하나의 키에 대해 머지되지 않은 여러 행이 생길 수 있습니다. #10952 (alexey-milovidov).
  • Distributed 테이블에서 튜플의 하위 호환성 문제를 수정했습니다. #10889 (Anton Popov).
  • 해당 키가 없을 때 StringHashTable에서 발생하던 SIGSEGV를 수정했습니다. #10870 (Azat Khuzhin).
  • 비활성화된 레플리카를 기다리느라 OPTIMIZE 쿼리의 일부 ALTER가 멈출 수 있던 ReplicatedMergeTree 버그를 수정했습니다. #10849 (tavplubix).
  • Block::sortColumns() 이후 컬럼 순서가 올바르게 유지되도록 수정했습니다. #10826 (Azat Khuzhin).
  • 식별자에 따옴표를 사용하지 않도록 요청한 경우 ODBC 브리지에서 발생하던 문제를 수정했습니다. #7984를 해결합니다. #10821 (alexey-milovidov).
  • DateLUTUBSanMSan 리포트 문제를 수정했습니다. #10798 (alexey-milovidov).
  • 키 조건의 잘못된 형 변환을 수정했습니다. #6287 문제를 수정했습니다. #10791 (Andrew Onyshchuk)
  • parallel_view_processing 동작을 수정했습니다. 이제 예외가 발생하더라도 MATERIALIZED VIEW로의 모든 삽입이 빠짐없이 완료됩니다. #10241을 수정했습니다. #10757 (Nikolai Kochetov).
  • combinator인 -OrNull-OrDefault-State와 함께 사용할 때의 문제를 수정했습니다. #10741 (hcz).
  • 중첩 타입에서 generateRandom 사용 시 발생하던 충돌을 수정했습니다. #10583를 해결했습니다. #10734 (Nikolai Kochetov).
  • 머지 후 발생할 수 있었던 SummingMergeTreeLowCardinality(FixedString) 키 컬럼 데이터 손상을 수정했습니다. #10489을 수정합니다. #10721 (Nikolai Kochetov).
  • 함수 h3EdgeAngle에서 발생할 수 있는 버퍼 오버플로우를 수정했습니다. #10711 (alexey-milovidov).
  • 합계가 사라지는 문제를 수정했습니다. 쿼리에 외부 WHERE 조건이 있는 조인 또는 서브쿼리가 있으면 합계가 필터링될 수 있었습니다. #10674을 수정했습니다. #10698 (Nikolai Kochetov).
  • 하나의 쿼리에서 동일한 Set에 IN 연산자를 여러 번 사용하는 문제를 수정했습니다. #10686 (Anton Popov).
  • readonly=2이고 cancel_http_readonly_queries_on_client_close=1일 때 클라이언트 종료 시 HTTP 요청이 중단된 채 멈추는 버그를 수정했습니다. #7939, #7019, #7736, #7091을 해결합니다. #10684 (tavplubix).
  • AggregateTransform 생성자의 매개변수 순서를 수정했습니다. #10667 (palasonic1).
  • distributed_aggregation_memory_efficient이 활성화된 상태에서 원격 쿼리가 병렬로 실행되지 않던 문제를 수정했습니다. #10655를 해결합니다. #10664 (Nikolai Kochetov).
  • LIMIT가 있는 쿼리에서 행 수가 잘못 계산될 수 있던 문제를 수정했습니다. #10566, #10709을 해결합니다. #10660 (Nikolai Kochetov).
  • 테이블에 파트가 많을 때 동시 ALTER가 잠기는 버그를 수정했습니다. #10659 (alesapin).
  • SYSTEM DROP DNS CACHE 쿼리 실행 시 일부 IP 주소에서 사용자의 연결 허용 여부를 확인하는 데 사용되는 캐시까지 함께 삭제되던 버그를 수정했습니다. #10608 (tavplubix).
  • MATERIALIZED VIEW의 내부 쿼리에 종속 테이블이 포함되어 있을 때, 내부 쿼리에서 잘못된 스칼라 결과가 나오던 문제를 수정했습니다. #10603 (Nikolai Kochetov).
  • 기본 표현식 유형이 컬럼 유형과 다른 ALIAS 컬럼에 대한 SELECT를 수정했습니다. #10563 (Azat Khuzhin).
  • DateTime64와 String 값 간 비교를 구현했습니다. #10560 (Vasily Nemkov).
  • 일부 경우 compact 파트를 다른 compact 파트로 머지한 뒤 발생할 수 있던 인덱스 손상을 수정했습니다. #10531 (Anton Popov).
  • mutation이 모든 파트 처리를 완료했는데도 is_done=0 상태에 머물던 문제를 수정했습니다. #10526 (alesapin).
  • UTC 대비 분수 오프셋을 사용하는 시간대에서 unix epoch 시작 시점에 발생하던 오버플로우를 수정했습니다. 이로써 #9335가 해결됩니다. #10513 (alexey-milovidov).
  • Distributed 스토리지의 비정상 종료 문제를 수정했습니다. #10491 (Azat Khuzhin).
  • 큰 정수에서 발생하던 simpleLinearRegression의 숫자 오버플로우를 수정했습니다. #10474 (hcz).

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

  • LZ4 라이브러리의 UBSan 보고 문제를 수정했습니다. #10631 (alexey-milovidov).
  • clang-10 빌드 문제를 수정했습니다. #10238. #10370 (Amos Bird).
  • max_rows_to_sort 설정 관련 실패 테스트를 추가했습니다. #10268 (alexey-milovidov).
  • 입력 형식에서 진단 정보 출력과 관련된 몇 가지 개선 사항을 추가했습니다. #10204을 수정했습니다. #10418 (tavplubix).
  • clickhouse-server Docker image에 CA 인증서를 추가했습니다. #10476 (filimonov).

버그 수정

  • the BloomFilter false positive must be a double number between 0 and 1 오류를 수정했습니다. #10551. #10569 (Winter Zhang).

ClickHouse 릴리스 v20.3.8.53, 2020-04-23

버그 수정

  • UTC 기준 오프셋이 양수에서 음수로 바뀌는 시간대(예: Pacific/Kiritimati)에서 datetime 함수가 잘못 동작하던 문제를 수정했습니다. 이로써 #7202, #10369이 해결되었습니다 (alexey-milovidov)
  • distributed_group_by_no_merge가 활성화된 경우 발생할 수 있는 segfault를 수정했습니다(20.3.7.46에 #10131로 도입). #10399 (Nikolai Kochetov)
  • Array(Tuple(...)) 데이터 타입의 잘못된 평탄화 문제를 수정했습니다. 이로써 #10259이 해결됩니다 #10390 (alexey-milovidov)
  • Aggregator의 디스크 예약을 제거했습니다. 이로써 디스크 공간 예약 버그를 수정하여, 정상적으로 완료될 수 있었던 대규모 외부 집계가 실패할 수 있던 문제가 해결됩니다 #10375 (Azat Khuzhin)
  • ReplicatedMergeTree에서 DROPOPTIMIZE 사이의 경쟁 상태를 수정했습니다. OPTIMIZE 쿼리가 동시에 실행되면 DROP으로 인해 ZooKeeper의 레플리카 경로에 일부 잔여 데이터가 남을 수 있었습니다. #10312 (tavplubix)
  • 컬럼 기본값 변경 후 서버가 테이블을 ATTACH하지 못하던 버그를 수정했습니다. #10441 (alesapin)
  • 테이블을 로드하기 전에 데이터베이스 ATTACH가 실패하더라도 메타데이터 디렉터리를 제거하지 않도록 수정했습니다. #10442 (Winter Zhang)
  • 일부 데이터가 quorum으로 삽입된 후 어떤 방식으로든 삭제되고(DROP PARTITION, TTL), 그 결과 INSERT가 멈추거나 SELECT에서 잘못된 예외가 발생하던 여러 버그를 수정했습니다. 이 수정은 #9946 #10188에 해당합니다 (Nikita Mikhaylov)
  • 원격 쿼리에서 발생할 수 있던 ConcatProcessorPipeline stuck 오류를 수정했습니다. #10381 (Nikolai Kochetov)
  • 버퍼에서 HashMap을 읽을 때 컴파일 오류를 발생시키던 HashTable의 잘못된 동작을 수정했습니다. #10386 (palasonic1)
  • 여러 조인에서 count(*)를 사용할 수 있도록 했습니다. #9853 수정 #10291 (Artem Zuikov)
  • skip_unavailable_shards보다 fallback_to_stale_replicas를 우선 적용합니다. 그렇지 않으면 두 설정이 모두 지정된 상태에서 최신 레플리카가 없을 경우 쿼리가 실패합니다(@alex-zaitsev의 패치). 수정: #2564. #10422 (Azat Khuzhin)
  • ARRAY JOIN, ORDER BY 및 LIMIT가 포함된 쿼리에서 불완전한 결과가 반환될 수 있는 문제를 수정했습니다. 이 수정으로 #10226가 해결됩니다. 작성자: Vadim Plakhtinskiy. #10427 (alexey-milovidov)
  • BloomFilter 인덱스 생성 시 인수의 개수와 유형 확인 #9623 #10431 (Winter Zhang)

성능 개선

  • IN 연산자의 오른쪽에 명시적으로 정의된 집합을 두고 왼쪽에 튜플을 사용하는 쿼리의 성능을 개선했습니다. 이로써 20.3 버전에서 발생한 성능 회귀를 수정했습니다. #9740, #10385 (Anton Popov)

ClickHouse 릴리스 v20.3.7.46, 2020-04-17

버그 수정

  • 쉼표 구문과 이름이 지정된 조인을 함께 사용한 쿼리에서 발생하는 Logical error: CROSS JOIN has expressions 오류를 수정했습니다. #10311 (Artem Zuikov).
  • max_bytes_before_external_group_by를 사용하는 쿼리 관련 문제를 수정했습니다. #10302 (Artem Zuikov).
  • arrayJoin 함수가 있는 경우(일부 사례) move-to-prewhere 최적화를 수정했습니다. 이로써 #10092가 해결됩니다. #10195 (alexey-milovidov).
  • allow_nondeterministic_mutations 설정으로 뮤테이션에서 비결정적 함수 사용 제한을 완화할 수 있는 기능을 추가했습니다. #10186 (filimonov).

ClickHouse 릴리스 v20.3.6.40, 2020-04-16

새 기능

  • 함수 isConstant가 추가되었습니다. 이 함수는 인수가 상수 표현식인지 확인하여 1 또는 0을 반환합니다. 개발, 디버깅 및 데모 목적으로 사용하기 위한 기능입니다. #10198 (alexey-milovidov).

버그 수정

  • max_rows_to_group_bygroup_by_overflow_mode = 'break' 사용 시 발생하던 Pipeline stuck 오류를 수정했습니다. #10279 (Nikolai Kochetov).
  • 드물게 발생할 수 있는 Cannot drain connections: cancel first 예외를 수정했습니다. #10239 (Nikolai Kochetov).
  • 사용자가 ENGINE = Replicated*인 테이블에서 ALTER UPDATE/DELETE를 실행하려고 할 때 ClickHouse가 “Unknown function lambda.” 오류 메시지를 표시하던 버그를 수정했습니다. 이제 비결정적 함수 검사가 람다 표현식을 올바르게 처리합니다. #10237 (Alexander Kazakov).
  • Date 유형의 “generateRandom” 함수가 수정되었습니다. 이 수정으로 #9973가 해결되었습니다. 기존 방식의 파티셔닝을 사용하는 MergeTree 테이블에 2106년 날짜를 삽입할 때 파티션 이름이 1970년으로 지정되던 예외적인 경우를 수정했습니다. #10218 (alexey-milovidov).
  • View의 테이블 정의가 SELECT 쿼리와 일치하지 않는 경우 타입을 변환합니다. 이 변경으로 #10180#10022 문제가 수정됩니다. #10217 (alexey-milovidov).
  • 요일이 화요일 또는 목요일인 RFC-2822 형식 문자열에 대해 parseDateTimeBestEffort를 수정했습니다. 이로써 #10082가 해결됩니다. #10214 (alexey-milovidov).
  • JOIN 외부 상수 이름과 충돌할 수 있는 JOIN 내부 상수의 컬럼 이름을 수정했습니다. #10207 (alexey-milovidov).
  • system.numbers 또는 system.zeros와 같은 무한 소스에서 읽을 때, 실제로는 LIMIT에서 중지되어야 하는 쿼리가 무한히 실행될 수 있는 문제를 수정했습니다. #10206 (Nikolai Kochetov).
  • 데이터베이스가 지정되지 않은 경우 액세스 확인 시 현재 데이터베이스를 사용하도록 수정했습니다. #10192 (Vitaly Baranov).
  • Distributed()에 INSERT할 때 구조가 일치하지 않으면 블록을 변환합니다. #10135 (Azat Khuzhin).
  • processors 파이프라인에서 extremes 결과가 잘못될 수 있는 문제를 수정했습니다. #10131 (Nikolai Kochetov).
  • compact parts와 관련된 일부 ALTER를 수정했습니다. #10130 (Anton Popov).
  • 새 레플리카를 생성할 때 잘못된 index_granularity_bytes 검사를 수정했습니다. #10098를 해결했습니다. #10121 (alesapin).
  • 구조가 기반이 되는 테이블과 다를 때 분산 테이블에 INSERT할 경우 발생하는 SIGSEGV를 수정했습니다. #10105 (Azat Khuzhin).
  • JOINUNION ALL이 포함된 쿼리에서 발생할 수 있는 행 손실 문제를 수정했습니다. #9826, #10113을 해결했습니다. #10099 (Nikolai Kochetov).
  • /table/replicas/replica_name/metadata 노드가 없는 이전 ClickHouse 버전에서 업데이트할 때 발생하던 복제된 테이블의 시작 문제가 수정되었습니다. #10037을 해결합니다. #10095 (alesapin).
  • 일부 인수 검사를 추가했으며 MySQL 데이터베이스 엔진에서 식별자 인수를 지원하도록 했습니다. #10077 (Winter Zhang).
  • localhost의 ClickHouse 서버를 사용하는 ClickHouse 딕셔너리 소스의 버그를 수정했습니다. 이 버그는 딕셔너리와 소스의 타입이 호환되지 않으면 메모리 손상을 일으킬 수 있습니다. #10071 (alesapin).
  • 테이블에 스킵 인덱스가 있는 경우 CHECK TABLE 쿼리의 버그를 수정했습니다. #10068 (alesapin).
  • distributed_aggregation_memory_efficient 설정이 활성화된 상태에서, 분산 쿼리가 서로 다른 세그먼트의 서로 다른 수준의 집계 데이터를 읽을 때(단일 수준 집계와 2단계 집계가 혼합된 경우) 발생하던 오류 Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform를 수정했습니다. #10063 (Nikolai Kochetov).
  • 후행 0바이트를 포함한 문자열 키로 GROUP BY를 수행할 때 발생할 수 있던 segmentation fault를 수정했습니다 (#8636, #8925). #10025 (Alexander Kuzmenkov).
  • 원격 쿼리 실행에 사용되는 스레드 수를 수정했습니다(20.3부터의 성능 회귀). 이 문제는 Distributed 테이블의 쿼리가 로컬 및 원격 세그먼트에서 동시에 실행될 때 발생했습니다. #9965를 수정했습니다. #9971 (Nikolai Kochetov).
  • 일부 데이터베이스에 대한 쿼리 처리 단계 중 하나에서 필요한 테이블을 가져오지 못하던 버그를 수정했습니다. #9699를 수정합니다. #9949 (achulkov2).
  • JOINTOTALS와 함께 사용될 때 발생하던 ‘block에서 컬럼을 찾을 수 없음’ 오류를 수정했습니다. #9839. #9939 (Artem Zuikov).
  • 서버 시작 시 ON CLUSTER DDL 쿼리가 멈추는 버그를 수정했습니다. #9927 (Gagan Arneja).
  • CREATE USER 명령에서 설정된 여러 호스트를 파싱하는 문제를 수정했습니다. 예: CREATE USER user6 HOST NAME REGEXP 'lo.?*host', NAME REGEXP 'lo*host'. #9924 (Vitaly Baranov).
  • Join 테이블 엔진에서 TRUNCATE 문제를 수정했습니다 (#9917). #9920 (Amos Bird).
  • ALTER 문에서 발생하던 “스칼라가 존재하지 않음” 오류를 수정했습니다 (#9878). #9904 (Amos Bird).
  • ReplicatedMergeTree에서 삭제와 최적화 작업 간 경쟁 상태를 수정했습니다. #9901 (alesapin).
  • distributed_product_mode='local'에서 한정된 이름 관련 오류를 수정했습니다. #4756를 해결했습니다. #9891 (Artem Zuikov).
  • 설정 ‘allow_introspection_functions’에서 인트로스펙션 함수의 권한 부여 계산 문제를 수정했습니다. #9840 (Vitaly Baranov).

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

ClickHouse 릴리스 v20.3.5.21, 2020-03-27

버그 수정

  • 분산 테이블에서 SET distributed_product_mode = 'local'로 설정되어 있고 쿼리에 PREWHERE와 WHERE가 함께 있을 때 발생하던 ‘Different expressions with the same alias’ 오류를 수정했습니다. #9871 (Artem Zuikov).
  • 복합 프라이머리 키가 있는 테이블에서 뮤테이션 수행 시 메모리 사용량이 과도하게 증가하던 문제를 수정했습니다. 이 변경으로 #9850이 해결됩니다. #9860 (alesapin).
  • 이제 INSERT 쿼리에서 세그먼트는 initiator로부터 받은 설정을 세그먼트의 제약 조건 범위에 맞게 조정하며, 예외를 발생시키지 않습니다. 이 수정으로 서로 다른 제약 조건을 가진 세그먼트로도 INSERT 쿼리를 보낼 수 있습니다. 이 변경은 #9447 수정 사항을 개선합니다. #9852 (Vitaly Baranov).
  • 테이블 목록 밖(즉, WHERE 절)에서 COMMA JOIN을 사용하는 서브쿼리에서 발생하던 ‘COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query’ 오류를 수정했습니다. #9782를 해결합니다. #9830 (Artem Zuikov).
  • 클라이언트에서 발생할 수 있는 Got 0 in totals chunk, expected 1 예외를 수정했습니다. 이 문제는 JOIN이 포함된 쿼리에서 오른쪽에 조인된 테이블의 행이 0개일 때 발생했습니다. 예시: select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;. #9777를 해결합니다. #9823 (Nikolai Kochetov).
  • 타입을 변환할 수 없을 때 optimize_skip_unused_shards에서 발생하던 SIGSEGV를 수정했습니다. #9804 (Azat Khuzhin).
  • compact 파트에서 ALTER TABLE DELETE COLUMN 쿼리가 정상 동작하지 않던 문제를 수정했습니다. #9779 (alesapin).
  • max_distributed_connections 관련 문제를 수정했습니다(Processors 사용 여부와 관계없이). #9673 (Azat Khuzhin).
  • 함수 인수의 시간대가 올바르게 적용되지 않던 몇 가지 경우를 수정했습니다. #9574 (Vasily Nemkov).

개선 사항

  • 단일 스레드에서 하나의 정렬된 part를 읽으므로 뮤테이션에서 ORDER BY 단계를 제거합니다. 또한 뮤테이션의 행 순서가 정렬 키 순서대로 정렬되어 있고, 이 순서가 깨지지 않는지 확인하는 검사도 추가합니다. #9886 (alesapin).

ClickHouse 릴리스 v20.3.4.10, 2020-03-20

버그 수정

  • 이번 릴리스에는 20.1.8.41의 모든 버그 수정도 포함되어 있습니다
  • http를 통한 쿼리(processors 파이프라인 사용 시)에서 rows_before_limit_at_least가 누락되던 문제를 수정했습니다. 이로써 #9730 문제가 해결됩니다. #9757 (Nikolai Kochetov)

ClickHouse 릴리스 v20.3.3.6, 2020-03-17

버그 수정

  • 이번 릴리스에는 20.1.7.38의 모든 버그 수정도 포함되어 있습니다
  • 사용자가 이전 버전에서 뮤테이션을 실행한 경우 복제가 동작하지 않는 버그를 수정했습니다. 이로써 #9645가 해결됩니다. #9652 (alesapin). 이 변경으로 버전 20.3이 다시 이전 버전과 호환됩니다.
  • use_compact_format_in_distributed_parts_names 설정을 추가하여 Distributed 테이블에 대한 INSERT 쿼리의 파일을 더 간결한 포맷으로 쓸 수 있게 했습니다. 이로써 #9647가 해결됩니다. #9653 (alesapin). 이 변경으로 버전 20.3이 다시 이전 버전과 호환됩니다.

ClickHouse 릴리스 v20.3.2.1, 2020-03-12

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

  • 많은 수의 레플리카가 있는 Distributed 테이블로 데이터를 전송할 때 발생하던 file name too long 문제를 수정했습니다. 레플리카 자격 증명이 서버 로그에 노출되던 문제를 수정했습니다. 디스크에 저장되는 디렉터리 이름 포맷이 [shard{shard_index}[_replica{replica_index}]]로 변경되었습니다. #8911 (Mikhail Korotov) 새 버전으로 업그레이드한 후에는 수동 조치 없이는 다운그레이드할 수 없습니다. 이전 서버 버전에서 새 디렉터리 포맷을 인식하지 못하기 때문입니다. 다운그레이드하려면 해당 디렉터리 이름을 이전 포맷으로 수동으로 변경해야 합니다. 이 변경 사항은 Distributed 테이블에 비동기 INSERT를 사용한 경우에만 해당합니다. 20.3.3 버전에서는 새 포맷을 점진적으로 활성화할 수 있도록 하는 설정을 도입할 예정입니다.
  • 뮤테이션 명령의 복제 로그 엔트리 포맷이 변경되었습니다. 새 버전을 설치하기 전에 기존 뮤테이션 처리가 완료될 때까지 기다려야 합니다.
  • 소프트 할당 한도를 기준으로 N바이트마다 system.trace_log에 스택트레이스를 덤프하는 간단한 메모리 프로파일러를 구현했습니다 #8765 (Ivan) #9472 (alexey-milovidov) system.trace_log의 컬럼 이름이 timer_type에서 trace_type으로 변경되었습니다. 이에 따라 서드파티 성능 분석 도구와 플레임 그래프 처리 도구를 수정해야 합니다.
  • 내부 thread 번호 대신 모든 곳에서 OS thread id를 사용합니다. 이 변경으로 #7477가 해결됩니다. 이전 clickhouse-clientsend_logs_level 설정이 활성화된 경우 server에서 전송된 logs를 수신할 수 없습니다. 구조화된 log messages의 이름과 타입이 변경되었기 때문입니다. 반면 서로 다른 server 버전끼리는 서로 다른 타입의 logs를 주고받을 수 있습니다. send_logs_level 설정을 사용하지 않는다면 신경 쓰지 않아도 됩니다. #8954 (alexey-milovidov)
  • indexHint 함수 제거 #9542 (alexey-milovidov)
  • findClusterIndex, findClusterValue 함수를 제거했습니다. 이로써 #8641이 수정됩니다. 이 함수들을 사용 중이었다면 clickhouse-feedback@yandex-team.com으로 이메일을 보내주십시오 #9543 (alexey-milovidov)
  • 이제 SELECT 하위 쿼리를 기본 표현식으로 사용하는 컬럼 생성이나 컬럼 추가는 허용되지 않습니다. #9481 (alesapin)
  • JOIN의 서브쿼리에는 별칭을 반드시 지정해야 합니다. #9274 (Artem Zuikov)
  • ALTER MODIFY/ADD 쿼리 로직이 개선되었습니다. 이제 타입 없이 컬럼을 ADD할 수 없고, MODIFY 기본 표현식은 컬럼 타입을 변경하지 않으며, MODIFY 타입은 기본 표현식 값을 잃지 않습니다. #8669을 수정했습니다. #9227 (alesapin)
  • 로깅 구성 변경 사항을 적용하려면 서버를 재시작해야 합니다. 이는 서버가 삭제된 로그 파일에 계속 로그를 기록하는 버그를 피하기 위한 임시 우회책입니다(#8696 참조). #8707 (Alexander Kuzmenkov)
  • 설정 experimental_use_processors는 기본적으로 활성화되어 있습니다. 이 설정을 사용하면 새로운 쿼리 파이프라인을 사용할 수 있습니다. 이는 내부 리팩터링이므로 눈에 띄는 변경 사항은 없을 것으로 예상합니다. 문제가 발생하면 값을 다시 0으로 설정하십시오. #8768 (alexey-milovidov)

새 기능

  • AvroAvroConfluent 입력/출력 포맷을 추가 #8571 (Andrew Onyshchuk) #8957 (Andrew Onyshchuk) #8717 (alexey-milovidov)
  • cache Dictionaries에서 만료된 키를 다중 스레드 및 비차단 방식으로 업데이트합니다(선택적으로 이전 키를 읽는 것도 허용). #8303 (Nikita Mikhaylov)
  • 쿼리 ALTER ... MATERIALIZE TTL를 추가했습니다. 이 쿼리는 TTL로 만료된 데이터를 강제로 제거하고 모든 파트의 TTL 메타정보를 다시 계산하는 mutation을 실행합니다. #8775 (Anton Popov)
  • 필요한 경우 HashJoin에서 디스크 기반 MergeJoin으로 전환 #9082 (Artem Zuikov)
  • ALTER TABLEMOVE PARTITION 명령이 추가되었습니다 #4729 #6168 (Guillaume Tassery)
  • 실행 중에 설정 파일에서 스토리지 구성을 다시 로드합니다. #8594 (Vladimir Chebotarev)
  • storage_policy를 기존과 같거나 더 풍부한 정책으로 변경할 수 있게 했습니다. #8107 (Vladimir Chebotarev)
  • S3 스토리지 및 테이블 함수에서 글롭 패턴/와일드카드를 지원하도록 추가되었습니다. #8851 (Vladimir Chebotarev)
  • FixedString(N) 데이터 타입에 bitAnd, bitOr, bitXor, bitNot를 구현했습니다. #9091 (Guillaume Tassery)
  • 함수 bitCount를 추가했습니다. 이 변경으로 #8702 문제가 수정되었습니다. #8708 (alexey-milovidov) #8749 (ikopylov)
  • 주어진 스키마에 따라 무작위 행을 생성하는 generateRandom 테이블 함수를 추가했습니다. 이를 통해 임의의 테스트 테이블을 데이터로 채울 수 있습니다. #8994 (Ilya Yatsishin)
  • JSONEachRowFormat: 객체가 최상위 배열로 감싸진 특수한 경우를 지원합니다. #8860 (Kruglov Pavel)
  • 이제 기본 ALIAS 표현식이 설정된 컬럼에 의존하는 DEFAULT 표현식이 있는 컬럼을 생성할 수 있습니다. #9489 (alesapin)
  • clickhouse-obfuscator에서 원본 데이터 크기를 초과하는 --limit도 지정할 수 있습니다. 데이터는 서로 다른 랜덤 시드를 사용해 반복됩니다. #9155 (alexey-milovidov)
  • groupArraySample 함수를 추가했습니다(groupArray와 유사하며 reservoir 샘플링 알고리즘을 사용합니다). #8286 (Amos Bird)
  • 이제 시스템 메트릭을 통해 cache/complex_key_cache 딕셔너리의 업데이트 큐 크기를 모니터링할 수 있습니다. #9413 (Nikita Mikhaylov)
  • 설정 output_format_csv_crlf_end_of_line을 1로 지정하면 CSV 출력 형식에서 줄 구분자로 CRLF를 사용할 수 있습니다 #8934 #8935 #8963 (Mikhail Korotov)
  • H3 API 함수 h3GetBaseCell, h3HexAreaM2, h3IndexesAreNeighbors, h3ToChildren, h3ToString, stringToH3를 추가로 구현했습니다 #8938 (Nico Mandery)
  • 새로운 설정이 도입되었습니다: max_parser_depth를 추가하여 최대 스택 크기를 제어하고 크고 복잡한 쿼리도 처리할 수 있도록 했습니다. 이로써 #6681#7668이 수정되었습니다. #8647 (Maxim Smirnov)
  • 사용되지 않는 세그먼트를 스키핑할 수 없는 경우 예외를 발생시키는 force_optimize_skip_unused_shards 설정을 추가했습니다 #8805 (Azat Khuzhin)
  • Distributed 엔진에서 전송용 데이터를 저장할 수 있도록 여러 디스크/볼륨을 구성할 수 있게 했습니다 #8756 (Azat Khuzhin)
  • 임시 데이터 저장을 위한 저장소 정책(<tmp_policy>)을 지원합니다. #8750 (Azat Khuzhin)
  • 데이터 전송 전에 예외가 발생한 경우 설정되는 X-ClickHouse-Exception-Code HTTP header를 추가했습니다. 이는 #4971을 구현한 것입니다. #8786 (Mikhail Korotov)
  • 함수 ifNotFinite가 추가되었습니다. 이는 단지 문법 편의 구문일 뿐입니다: ifNotFinite(x, y) = isFinite(x) ? x : y. #8710 (alexey-milovidov)
  • system.dictionaries 테이블에 last_successful_update_time 컬럼이 추가되었습니다 #9394 (Nikita Mikhaylov)
  • blockSerializedSize 함수를 추가했습니다(압축 없이 디스크에 저장된 크기) #8952 (Azat Khuzhin)
  • moduloOrZero 함수 추가 #9358 (hcz)
  • 시스템 테이블 system.zerossystem.zeros_mt와 테이블 함수 zeros()zeros_mt()가 추가되었습니다. 테이블(및 테이블 함수)에는 이름이 zero이고 유형이 UInt8인 단일 컬럼이 포함됩니다. 이 컬럼에는 0 값이 들어 있습니다. 테스트 목적으로 많은 행을 생성하는 가장 빠른 메서드가 필요했기 때문입니다. 이 변경으로 #6604 #9593가 수정되었습니다 (Nikolai Kochetov)

실험적 기능

  • MergeTree 계열 테이블에 모든 컬럼을 하나의 파일에 저장하는 새로운 compact 파트 포맷을 추가했습니다. 이 포맷은 작고 빈번한 삽입의 성능 향상에 도움이 됩니다. 기존 포맷(컬럼마다 파일 1개)은 이제 wide라고 부릅니다. 데이터 저장 포맷은 설정 min_bytes_for_wide_partmin_rows_for_wide_part로 제어됩니다. #8290 (Anton Popov)
  • Log, TinyLog, StripeLog 테이블에 S3 storage를 지원합니다. #8862 (Pavel Kovalenko)

버그 수정

  • 로그 메시지에서 일관되지 않던 공백을 수정했습니다. #9322 (alexey-milovidov)
  • 이름이 없는 튜플 배열이 테이블 생성 시 Nested 구조로 평탄화되는 버그를 수정했습니다. #8866 (achulkov2)
  • File 테이블 또는 file 테이블 함수에서 glob 패턴과 일치하는 파일이 너무 많을 때 “Too many open files” 오류가 발생할 수 있던 문제를 수정했습니다. 이제 파일은 필요할 때만 열립니다. 이로써 #8857 #8861이 해결되었습니다 (alexey-milovidov)
  • DROP TEMPORARY TABLE은 이제 임시 테이블만 삭제하도록 변경되었습니다. #8907 (Vitaly Baranov)
  • 서버 종료 시 또는 테이블을 DETACH/ATTACH할 때 오래된 파티션을 제거합니다. #8602 (Guillaume Tassery)
  • 기본 디스크에서 data 하위 디렉터리를 기준으로 여유 공간을 계산하는 방식을 수정했습니다. data 디렉터리가 별도의 장치에 마운트된 경우(드문 사례) 여유 공간이 올바르게 계산되지 않던 문제를 수정했습니다. 이 변경으로 #7441 #9257가 해결되었습니다 (Mikhail Korotov)
  • IN ()을 포함한 쉼표(크로스) 조인을 허용합니다. #9251 (Artem Zuikov)
  • WHERE 절에 [NOT] LIKE 연산자가 있는 경우 CROSS를 INNER JOIN으로 재작성할 수 있도록 개선했습니다. #9229 (Artem Zuikov)
  • 설정 distributed_aggregation_memory_efficient가 enabled된 상태에서 GROUP BY 이후 잘못된 결과가 발생할 수 있는 문제를 수정했습니다. #9134. #9289 (Nikolai Kochetov)
  • 캐시 딕셔너리 메트릭에서 발견된 키가 누락된 것으로 집계되던 문제를 수정했습니다. #9411 (Nikita Mikhaylov)
  • #8598에서 도입된 복제 프로토콜 비호환성 문제를 수정했습니다. #9412 (alesapin)
  • ReplicatedMergeTree 테이블 시작 시점에 queue_task_handle에서 발생하던 경쟁 상태를 수정했습니다. #9552 (alexey-milovidov)
  • 토큰 NOTSHOW TABLES NOT LIKE 쿼리에서 동작하지 않던 문제 #8727 #8940 (alexey-milovidov)
  • 함수 h3EdgeLengthM에 범위 검사를 추가했습니다. 이 검사가 없으면 버퍼 오버플로우가 발생할 수 있습니다. #8945 (alexey-milovidov)
  • 여러 인수(10개 초과)를 사용하는 3항 논리 연산자의 배치 계산에서 발생하던 버그를 수정했습니다. #8718 (Alexander Kazakov)
  • segfault 또는 Inconsistent number of columns got from MergeTreeRangeReader 예외를 일으킬 수 있던 PREWHERE 최적화 오류를 수정했습니다. #9024 (Anton Popov)
  • 실제로 timeout이 초과되기 전에 보안 연결에서 간헐적으로 발생하고, 쿼리 프로파일러가 활성화된 경우 나타나던 예상치 못한 Timeout exceeded while reading from socket 예외를 수정했습니다. 또한 connect_timeout_with_failover_ms와 유사하지만 보안 연결에 사용하는 connect_timeout_with_failover_secure_ms 설정(기본값 100ms)을 추가했습니다(SSL 핸드셰이크는 일반 TCP 연결보다 더 느리기 때문입니다) #9026 (tavplubix)
  • parts_to_do=0is_done=0 상태에서 뮤테이션이 멈출 수 있던 뮤테이션 완료 처리 버그를 수정했습니다. #9022 (alesapin)
  • partial_merge_join 설정으로 새로운 ANY JOIN 로직을 사용할 수 있습니다. 이제 partial_merge_join=1을 사용해 ANY|ALL|SEMI LEFTALL INNER 조인을 수행할 수 있습니다. #8932 (Artem Zuikov)
  • 세그먼트는 이제 initiator에서 받은 설정을 세그먼트의 제약 조건에 맞게 조정하며, 예외를 발생시키지 않습니다. 이 수정으로 제약 조건이 다른 세그먼트에도 쿼리를 보낼 수 있습니다. #9447 (Vitaly Baranov)
  • MergeTreeReadPool의 메모리 관리 문제가 해결되었습니다. #8791 (Vladimir Chebotarev)
  • 문자열 e를 인수로 호출할 때의 toDecimal*OrNull() 함수 계열 문제를 수정했습니다. #8312 #8764 (Artem Zuikov)
  • FORMAT Null이 클라이언트에 데이터를 전송하지 않도록 수정했습니다. #8767 (Alexander Kuzmenkov)
  • LiveViewBlockInputStream에서 timestamp가 업데이트되지 않던 버그를 수정했습니다. LIVE VIEW는 실험적 기능입니다. #8644 (vxider) #8625 (vxider)
  • 기존 TTL 표현식을 삭제하지 못하던 ALTER MODIFY TTL의 잘못된 동작을 수정했습니다. #8422 (Vladimir Chebotarev)
  • MergeTreeIndexSet의 UBSan 보고 문제를 수정했습니다. 이 수정으로 #9250 #9365가 해결됩니다 (alexey-milovidov)
  • matchextract 함수에서 haystack이 0바이트일 때의 동작을 수정했습니다. haystack이 상수일 때 동작이 잘못되던 문제를 바로잡았습니다. 이 수정은 #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov)를 해결합니다.
  • Apache Avro 타사 라이브러리의 소멸자에서 예외를 던지지 않도록 수정했습니다. #9066 (Andrew Onyshchuk)
  • 데이터 누락이 발생할 수 있으므로 Kafka에서 폴링한 배치를 부분적으로 커밋하지 마십시오. #8876 (filimonov)
  • joinGet의 널 허용 반환 타입에서 발생하던 문제를 수정했습니다. #8919 #9014 (Amos Bird)
  • T64 코덱으로 압축할 때 발생하는 데이터 비호환성 문제를 수정했습니다. #9016 (Artem Zuikov) 영향받는 버전에서 잘못된 압축 및 압축 해제를 유발하던 T64 압축 코덱의 데이터 타입 ID를 수정했습니다. #9033 (Artem Zuikov)
  • enable_early_constant_folding 설정을 추가하고, 오류가 발생하는 일부 경우에는 이를 비활성화하도록 했습니다. #9010 (Artem Zuikov)
  • VIEW에서 푸시다운 프레디케이트 최적화기를 수정하고 테스트를 활성화함 #9011 (Winter Zhang)
  • File 스토리지에서 읽을 때 발생할 수 있는 Merge 테이블의 세그폴트를 수정 #9387 (tavplubix)
  • ATTACH PARTITION FROM, REPLACE PARTITION, MOVE TO TABLE에 스토리지 정책 검사 기능이 추가되었습니다. 그렇지 않으면 재시작 후 part의 데이터에 접근할 수 없게 되어 ClickHouse가 시작되지 않을 수 있었습니다. #9383 (Vladimir Chebotarev)
  • 테이블에 TTL이 설정된 경우 ALTER가 동작하도록 수정했습니다. #8800 (Anton Popov)
  • 일부 딕셔너리가 수정, 추가 또는 삭제되는 중에 SYSTEM RELOAD ALL DICTIONARIES를 실행할 때 발생할 수 있는 경쟁 상태를 수정했습니다. #8801 (Vitaly Baranov)
  • 이전 버전에서는 Memory 데이터베이스 엔진이 빈 데이터 경로를 사용했기 때문에, 테이블이 데이터베이스의 데이터 디렉터리(예: /var/lib/clickhouse/db_name)가 아니라 path 디렉터리(예: /var/lib/clickhouse/)에 생성되었습니다. #8753 (tavplubix)
  • 기본 디스크 또는 정책이 없다고 표시되는 잘못된 로그 메시지를 수정했습니다. #9530 (Vladimir Chebotarev)
  • 배열 타입용 bloom_filter 인덱스의 not(has()) 문제를 수정했습니다. #9407 (achimbab)
  • Log 엔진을 사용하는 테이블에서 첫 번째 컬럼(들)을 별칭(alias)으로 허용 #9231 (Ivan)
  • 하나의 스레드에서 MergeTree 테이블을 읽을 때 범위 순서를 바로잡았습니다. 이 문제로 인해 MergeTreeRangeReader에서 예외가 발생하거나 쿼리 결과가 잘못될 수 있었습니다. #9050 (Anton Popov)
  • reinterpretAsFixedStringString 대신 FixedString을 반환하게 했습니다. #9052 (Andrew Onyshchuk)
  • 사용자에게 잘못된 오류 메시지(상세한 오류 설명 대신 Success)가 표시되는 매우 드문 경우가 발생하지 않도록 했습니다. #9457 (alexey-milovidov)
  • 빈 행 템플릿을 사용하는 Template 포맷에서 충돌이 발생하지 않도록 수정했습니다. #8785 (Alexander Kuzmenkov)
  • 시스템 테이블의 메타데이터 파일이 잘못된 위치에 생성될 수 있던 문제를 수정했습니다 #8653 (tavplubix). 이는 #8581을 해결합니다.
  • cache 딕셔너리의 exception_ptr에서 발생하는 데이터 레이스 수정 #8303. #9379 (Nikita Mikhaylov)
  • ATTACH TABLE IF NOT EXISTS 쿼리에서는 예외를 발생시키지 않습니다. 이전에는 IF NOT EXISTS 절이 있어도 테이블(table)이 이미 존재하면 예외가 발생했습니다. #8967 (Anton Popov)
  • 예외 메시지에서 빠진 닫는 괄호를 수정했습니다. #8811 (alexey-milovidov)
  • 대화형 모드에서 clickhouse-client 시작 시 Possible deadlock avoided 메시지가 표시되지 않도록 했습니다. #9455 (alexey-milovidov)
  • base64로 인코딩된 값 끝의 패딩이 잘못될 수 있던 문제를 수정했습니다. base64 라이브러리를 업데이트했습니다. 이로써 #9491을 수정하고, #9492 #9500을 종료했습니다. (alexey-milovidov)
  • suffix를 읽은 후 커밋하기 전에 예외가 발생하는 드문 경우 Kafka에서 데이터가 손실되지 않도록 했습니다. #9378 #9507 수정 (filimonov)
  • DROP TABLE IF EXISTS에서 발생하던 예외를 수정했습니다 #8663 (Nikita Vasilev)
  • 사용자가 구형 형식의 MergeTree 테이블 엔진 계열에 대해 ALTER MODIFY SETTING을 시도할 때 발생하던 충돌을 수정했습니다. #9435 (alesapin)
  • JSON 관련 함수에서 Int64 범위를 벗어나는 UInt64 숫자를 지원합니다. SIMDJSON을 master로 업데이트했습니다. 이로써 #9209 #9344 문제가 수정됩니다 (alexey-milovidov)
  • 엄격한 단조성이 없는 함수형 인덱스를 사용할 때 역전된 프레디케이트가 올바르게 실행되도록 수정했습니다. #9223 (Alexander Kazakov)
  • GROUP BY에서 IN 상수 폴딩을 시도하지 않음 #8868 (Amos Bird)
  • 인덱스 손상을 초래하는 ALTER DELETE 뮤테이션의 버그를 수정했습니다. 이로써 #9019#8982가 해결됩니다. 또한 ReplicatedMergeTree ALTER 쿼리에서 매우 드물게 발생하는 경쟁 상태도 수정했습니다. #9048 (alesapin)
  • 설정 compile_expressions를 활성화하면 Nullable 유형을 사용할 때 LLVMExecutableFunction에서 unexpected column 오류가 발생할 수 있습니다 #8910 (Guillaume Tassery)
  • Kafka engine의 여러 수정 사항: 1) consumer group 리밸런싱 중 발생하던 중복 문제를 수정했습니다. 2) 여러 파티션에서 한 번의 poll로 데이터를 가져오고 일부만 commit했을 때 드물게 발생하던 ‘holes’ 문제를 수정했습니다(이제 poll된 전체 메시지 block을 항상 처리하고 commit합니다). 3) block 크기 기준 플러시를 수정했습니다(이전에는 timeout 기준 플러시만 제대로 작동했습니다). 4) subscription 절차를 개선했습니다(assignment 피드백 포함). 5) 테스트가 더 빠르게 실행되도록 개선했습니다(기본 인터벌 및 timeout 기준). 이전에는 문서에 명시된 대로 데이터가 block 크기에 따라 플러시되지 않았기 때문에, 이 PR로 인해 기본 설정에서는 일부 성능 저하가 발생할 수 있습니다(더 자주, 더 작은 단위로 플러시되어 효율이 떨어지기 때문입니다). 이 변경 후 성능 문제가 발생하면 테이블의 kafka_max_block_size 값을 더 크게 늘리십시오(예: CREATE TABLE ...Engine=Kafka ... SETTINGS ... kafka_max_block_size=524288). 수정 #7259 #8917 (filimonov)
  • PREWHERE 최적화 후 일부 쿼리에서 발생하던 Parameter out of bound 예외를 해결했습니다. #8914 (Baudouin Giard)
  • 함수 arrayZip 인수에서 상수와 비상수가 혼합된 경우의 처리를 수정했습니다. #8705 (alexey-milovidov)
  • CREATE 쿼리 실행 시 스토리지 엔진 인수의 상수 표현식을 접습니다. 빈 데이터베이스 이름은 현재 데이터베이스 이름으로 대체합니다. #6508, #3492 #9262를 수정했습니다. (tavplubix)
  • 이제 a DEFAULT b, b DEFAULT a와 같은 단순한 순환 별칭이 지정된 컬럼은 생성하거나 추가할 수 없습니다. #9603 (alesapin)
  • 원본 파트가 손상될 수 있는 이중 이동 버그를 수정했습니다. ALTER TABLE MOVE를 사용하는 경우 이 문제의 영향을 받을 수 있습니다 #8680 (Vladimir Chebotarev)
  • interval 식별자가 백틱 없이도 올바르게 파싱되도록 했습니다. interval 식별자를 백틱이나 큰따옴표로 감싸도 쿼리를 실행할 수 없던 문제를 수정했습니다. 이로써 #9124가 해결되었습니다. #9142 (alexey-milovidov)
  • bitTestAll/bitTestAny 함수의 퍼즈 테스트를 수정하고 잘못된 동작을 바로잡았습니다. #9143 (alexey-milovidov)
  • LIMIT n WITH TIES에서 n번째 행과 같은 값의 행이 매우 많은 경우 발생할 수 있는 크래시/행 수 오류 문제를 수정했습니다. #9464 (tavplubix)
  • insert_quorum이 활성화된 상태에서 기록된 파트의 뮤테이션을 수정했습니다. #9463 (alesapin)
  • Poco::HTTPServer 종료 시 발생하는 데이터 레이스를 수정했습니다. 서버가 시작된 직후 바로 종료될 때 이 문제가 발생할 수 있었습니다. #9468 (Anton Popov)
  • SHOW CREATE TABLE a_table_that_does_not_exist를 실행할 때 잘못된 인상을 주는 오류 메시지가 표시되던 버그를 수정했습니다. #8899 (achulkov2)
  • 일부 드문 경우에 SELECT 절에 상수가 포함되어 있고 ORDER BYLIMIT 절이 있을 때 발생하던 Parameters are out of bound 예외를 수정했습니다. #8892 (Guillaume Tassery)
  • 이미 완료된 뮤테이션의 상태가 is_done=0으로 표시될 수 있던 뮤테이션 최종화 문제를 수정했습니다. #9217 (alesapin)
  • 작동하지 않으므로 이전 구문을 사용하는 MergeTree 테이블에서는 ALTER ADD INDEX가 실행되지 않도록 했습니다. #8822 (Mikhail Korotov)
  • 서버 시작 시 LIVE VIEW가 의존하는 테이블에 접근하지 않도록 하여 서버가 정상적으로 시작되도록 했습니다. 또한 LIVE VIEW를 분리할 때 LIVE VIEW 의존성도 제거합니다. LIVE VIEW는 실험적 기능입니다. #8824 (tavplubix)
  • PREWHERE 실행 중 MergeTreeRangeReader에서 발생할 수 있는 segfault 문제를 수정했습니다. #9106 (Anton Popov)
  • 컬럼 TTL로 인해 발생할 수 있는 체크섬 불일치를 수정했습니다. #9451 (Anton Popov)
  • 볼륨이 하나뿐인 경우, TTL 규칙에 따라 백그라운드에서 파트가 이동되지 않던 버그를 수정했습니다. #8672 (Vladimir Chebotarev)
  • Method createColumn() is not implemented for data type Set 문제를 수정했습니다. 이로써 #7799 문제가 해결됩니다. #8674 (alexey-milovidov)
  • 이제 뮤테이션이 더 자주 완료되도록 합니다. #9427 (alesapin)
  • -1 상수 관련 intDiv 수정 #9351 (hcz)
  • BlockIO의 잠재적인 race condition을 수정했습니다. #9356 (Nikolai Kochetov)
  • 잘못된 매개변수로 생성된 Kafka 테이블을 사용하거나 삭제하려고 할 때 서버가 종료되던 버그를 수정했습니다. #9513 (filimonov)
  • OS가 timer_create 함수에 대해 잘못된 결과를 반환할 때를 대비한 우회 방법을 추가했습니다. #8837 (alexey-milovidov)
  • min_marks_for_seek 매개변수 사용과 관련된 오류를 수정했습니다. 분산 테이블에 세그먼트 분할 키가 없는 상태에서 사용되지 않는 세그먼트를 건너뛰려고 할 때 표시되는 오류 메시지를 수정했습니다. #8908 (Azat Khuzhin)

개선 사항

  • ReplicatedMergeTree* 엔진 계열에서 ALTER MODIFY/DROP 쿼리를 뮤테이션을 기반으로 구현했습니다. 이제 ALTERS는 메타데이터 업데이트 단계에서만 블록되며, 그 이후에는 블록되지 않습니다. #8701 (alesapin)
  • WHERE 절에 수식되지 않은 이름이 포함된 경우 CROSS를 INNER JOIN으로 재작성하는 기능을 추가했습니다. #9512 (Artem Zuikov)
  • SHOW TABLESSHOW DATABASES 쿼리에서 WHERE 표현식과 FROM/IN을 지원하도록 개선했습니다 #9076 (sundyli)
  • deduplicate_blocks_in_dependent_materialized_views 설정이 추가되었습니다. #9070 (urykhy)
  • 최근 변경 이후 MySQL client가 바이너리 문자열을 16진수로 출력하기 시작해 읽을 수 없게 되었습니다(#9032). ClickHouse의 우회 방법은 문자열 컬럼을 UTF-8로 표시하는 것으로, 항상 그런 것은 아니지만 대부분의 경우에 해당합니다. #9079 (Yuriy Baranov)
  • sumMap에 String 및 FixedString 키에 대한 지원 추가 #8903 (Baudouin Giard)
  • SummingMergeTree 맵에서 문자열 키를 지원 #8933 (Baudouin Giard)
  • 스레드에서 예외가 발생했더라도 스레드 종료를 스레드 풀에 알리도록 개선 #8736 (Ding Xiang Fei)
  • clickhouse-benchmark에서 query_id를 설정할 수 있게 함 #9416 (Anton Popov)
  • ALTER TABLE ... PARTITION partition 쿼리에서 비정상적인 표현식을 허용하지 않도록 했습니다. 이는 #7192 #8835를 해결합니다 (alexey-milovidov)
  • 이제 system.table_engines 테이블에서 기능 지원 정보(supports_ttl, supports_sort_order 등)를 제공합니다. #8830 (Max Akhmedov)
  • 기본적으로 system.metric_log를 활성화합니다. 이 테이블에는 “collect_interval_milliseconds” 인터벌(기본값 1초)로 수집된 ProfileEvents 및 CurrentMetrics 값이 담긴 행이 저장됩니다. 테이블 크기는 매우 작아(보통 수 MB 수준) 이 데이터를 기본적으로 수집하는 것이 타당합니다. #9225 (alexey-milovidov)
  • 그룹의 모든 스레드에 대해 쿼리 프로파일러를 초기화하여, 예를 들어 삽입 쿼리를 전체적으로 프로파일링할 수 있게 했습니다. #6964 #8874 수정 (Ivan)
  • 이제 임시 LIVE VIEWCREATE TEMPORARY LIVE VIEW ... 대신 CREATE LIVE VIEW name WITH TIMEOUT [42] ...를 사용해 생성합니다. 기존 구문이 CREATE TEMPORARY TABLE ...과 일관되지 않았기 때문입니다 #9131 (tavplubix)
  • system.text_log 테이블에 기록되는 항목을 제한하는 text_log.level 구성 매개변수를 추가했습니다 #8809 (Azat Khuzhin)
  • TTL 규칙에 따라 다운로드한 part를 디스크/볼륨에 배치할 수 있도록 허용 #8598 (Vladimir Chebotarev)
  • 외부 MySQL 사전에서 MySQL 연결 풀을 공용으로 사용해 사전 간에 “공유”할 수 있도록 했습니다. 이 옵션은 MySQL 서버에 대한 연결 수를 크게 줄입니다. #9409 (Clément Rodriguez)
  • clickhouse-benchmark 출력에서 보간된 값 대신 분위수에 가장 가까운 쿼리 실행 시간을 표시합니다. 일부 쿼리의 실제 실행 시간에 해당하는 값을 표시하는 편이 더 낫습니다. #8712 (alexey-milovidov)
  • Kafka에 데이터를 삽입할 때 메시지에 key와 타임스탬프를 추가할 수 있게 되었습니다. #7198 #8969 수정 (filimonov)
  • 서버를 터미널에서 실행하는 경우, 스레드 번호, Query id 및 로그 우선순위를 색상으로 강조 표시합니다. 이는 개발자가 서로 연관된 로그 메시지를 더 쉽게 읽을 수 있도록 하기 위한 것입니다. #8961 (alexey-milovidov)
  • Ordinary 데이터베이스의 테이블 로드 중 예외 메시지를 개선했습니다. #9527 (alexey-milovidov)
  • 집계 함수 상태를 포함한 배열에 arraySlice를 구현했습니다. 이로써 #9388 #9391 문제가 수정되었습니다 (alexey-milovidov)
  • 상수 함수와 상수 배열을 IN 연산자의 오른쪽에 사용할 수 있도록 허용했습니다. #8813 (Anton Popov)
  • system.replicas의 데이터를 가져오는 중 ZooKeeper 예외가 발생하면, 이를 별도의 컬럼에 표시합니다. 이는 #9137 #9138을 구현한 것입니다 (alexey-milovidov)
  • 삭제할 때 MergeTree 데이터 파트를 원자적으로 제거합니다. #8402 (Vladimir Chebotarev)
  • 분산 테이블에 행 수준 보안을 지원합니다. #8926 (Ivan)
  • 이제 설정 값에서 KB, KiB 등의 접미사를 인식합니다. #8072 (Mikhail Korotov)
  • 대규모 JOIN 결과를 구성하는 동안 메모리 부족이 발생하는 문제를 방지했습니다. #8637 (Artem Zuikov)
  • clickhouse-client의 대화형 모드에서 제안 목록에 클러스터 이름을 추가했습니다. #8709 (alexey-milovidov)
  • 그룹의 모든 스레드에 대해 쿼리 프로파일러를 초기화해, 예를 들어 삽입 쿼리를 완전히 프로파일링할 수 있도록 했습니다 #8820 (Ivan)
  • system.query_log 테이블에 exception_code 컬럼이 추가되었습니다. #8770 (Mikhail Korotov)
  • 기본 서버 설정 파일에서 포트 9004의 MySQL 호환 서버를 활성화했습니다. 구성 예시의 비밀번호 생성 명령을 수정했습니다. #8771 (Yuriy Baranov)
  • 파일 시스템이 읽기 전용인 경우 종료 시 비정상 중단이 발생하지 않도록 했습니다. 이 변경으로 #9094 #9100이 수정되었습니다 (alexey-milovidov)
  • HTTP POST 쿼리에서 길이 지정이 필요한 경우 Exception 메시지가 더 명확해졌습니다. #9453 (alexey-milovidov)
  • HDFSFile 엔진과 hdfsfile 테이블 함수에 _path_file 가상 컬럼 추가 #8489 (Olga Khvostikova)
  • 뷰의 내부 테이블에 새 컬럼이 추가된 경우 MATERIALIZED VIEW에 삽입할 때 발생하던 Cannot find column 오류를 수정했습니다. #8766 #8788 (vzakaznikov) #8788 #8806 (Nikolai Kochetov) #8803 (Nikolai Kochetov)
  • 네이티브 클라이언트-서버 프로토콜의 Progress를 수정해, logs와 마찬가지로 최종 업데이트 후에도 Progress를 전송하도록 했습니다. 이는 네이티브 프로토콜을 사용하는 일부 서드파티 도구에만 해당될 수 있습니다. #9495 (Azat Khuzhin)
  • MySQL 프로토콜을 사용하는 클라이언트 연결 수를 추적하는 시스템 메트릭이 추가되었습니다(#9013). #9015 (Eugene Klimov)
  • 이제부터 HTTP 응답의 X-ClickHouse-Timezone header에는 SELECT timezone()이 반환하는 것과 동일한 시간대 값이 설정됩니다. #9493 (Denis Glazachev)

성능 개선

  • IN을 사용하는 인덱스 분석의 성능을 개선했습니다. #9261 (Anton Popov)
  • Logical Functions의 코드를 더 단순하고 효율적으로 개선하고, 코드 정리도 수행했습니다. #8718의 후속 작업입니다. #8728 (Alexander Kazakov)
  • C++20 기능을 활용해 더 엄격한 aliasing을 보장함으로써 전반적인 성능을 개선했습니다(영향을 받는 쿼리에서 5%~200% 범위). #9304 (Amos Bird)
  • 비교 함수의 내부 루프에 더 엄격한 aliasing을 적용했습니다. #9327 (alexey-milovidov)
  • 산술 함수의 내부 루프에 더 엄격한 aliasing을 적용했습니다. #9325 (alexey-milovidov)
  • ColumnVector::replicate()를 약 3배 더 빠르게 구현했습니다. 이를 통해 ColumnConst::convertToFullColumn()도 구현됩니다. 또한 상수를 구체화할 때 테스트에도 유용합니다. #9293 (Alexander Kazakov)
  • ColumnVector::replicate()에 대한 또 다른 소규모 성능 개선입니다(materialize 함수와 고차 함수의 속도를 높입니다). #9293의 추가 개선입니다. #9442 (Alexander Kazakov)
  • stochasticLinearRegression 집계 함수의 성능을 개선했습니다. 이 패치는 Intel이 기여했습니다. #8652 (alexey-milovidov)
  • reinterpretAsFixedString 함수의 성능을 개선했습니다. #9342 (alexey-milovidov)
  • processors 파이프라인에서 Null 포맷의 경우 클라이언트에 block을 전송하지 않도록 했습니다. #8797 (Nikolai Kochetov) #8767 (Alexander Kuzmenkov)

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

  • Windows Subsystem for Linux에서 예외 처리가 이제 정상적으로 작동합니다. https://github.com/ClickHouse-Extras/libunwind/pull/3 을 참조하십시오. 이 수정으로 #6480 #9564가 해결되었습니다. (sobolevsv)
  • clickhouse-client의 대화형 줄 편집을 위해 readlinereplxx로 대체했습니다 #8416 (Ivan)
  • 빌드 시간이 단축되고 FunctionsComparison에서 템플릿 인스턴스화가 줄어들었습니다. #9324 (alexey-milovidov)
  • CI에 clang-tidy 통합 기능을 추가했습니다. 관련 항목: #6044 #9566 (alexey-milovidov)
  • 이제 CI에서는 gcc를 사용할 때도 lld로 ClickHouse를 링크합니다. #9049 (alesapin)
  • THREAD_FUZZER_* 환경 변수가 설정되면 스레드 스케줄링을 무작위화하고 오류를 주입할 수 있도록 했습니다. 이는 테스트에 도움이 됩니다. #9459 (alexey-milovidov)
  • stateless tests에서 보안 소켓을 활성화 #9288 (tavplubix)
  • SPLIT_SHARED_LIBRARIES=OFF의 안정성 강화 #9156 (Azat Khuzhin)
  • 무작위 서버 멈춤 현상에도 “performance_introspection_and_logging” 테스트가 안정적으로 동작하도록 개선했습니다. 이는 CI 환경에서 발생할 수 있습니다. 관련 항목 #9515 #9528 (alexey-milovidov)
  • style check에서 XML 유효성을 검사합니다. #9550 (alexey-milovidov)
  • 테스트 00738_lock_for_inner_table의 경쟁 상태를 수정했습니다. 이 테스트는 sleep에 의존하고 있었습니다. #9555 (alexey-milovidov)
  • once 유형의 성능 테스트를 제거했습니다. 이는 모든 성능 테스트를 통계 비교 모드(더 신뢰할 수 있음)로 실행하는 데 필요합니다. #9557 (alexey-milovidov)
  • 산술 함수의 성능 테스트를 추가했습니다. #9326 (alexey-milovidov)
  • sumMapsumMapWithOverflow 집계 함수의 성능 테스트를 추가했습니다. #8933의 후속 작업입니다. #8947 (alexey-milovidov)
  • Style check를 통해 ErrorCodes의 스타일을 검사하도록 했습니다. #9370 (alexey-milovidov)
  • 테스트 이력용 스크립트를 추가했습니다. #8796 (alesapin)
  • override 키워드를 사용해야 하는 모든 위치를 찾아 수정할 수 있도록 GCC 경고 -Wsuggest-override를 추가했습니다. #8760 (kreuzerkrieg)
  • 반드시 정의되어 있어야 하므로 Mac OS X에서는 weak symbol을 무시합니다 #9538 (Deleted user)
  • 성능 테스트에서 일부 쿼리의 실행 시간을 표준화했습니다. 이는 모든 성능 테스트를 비교 모드로 실행하기 위한 준비 작업입니다. #9565 (alexey-milovidov)
  • pytest를 사용하는 쿼리 테스트를 지원하도록 일부 테스트 수정 #9062 (Ivan)
  • MSan을 사용하는 빌드에서 SSL을 활성화해 stateless tests 실행 시 server가 시작 시 실패하지 않도록 했습니다 #9531 (tavplubix)
  • 테스트 결과의 데이터베이스 치환 문제 수정 #9384 (Ilya Yatsishin)
  • 여러 플랫폼의 빌드 문제 수정 #9381 (proller) #8755 (proller) #8631 (proller)
  • stateless-with-coverage 테스트 Docker image에 disks 섹션을 추가 #9213 (Pavel Kovalenko)
  • GRPC로 빌드할 때 소스 트리 내 파일 제거 #9588 (Amos Bird)
  • Context에서 SessionCleaner를 제거해 빌드 시간을 약간 단축했습니다. SessionCleaner 코드를 더 단순하게 정리했습니다. #9232 (alexey-milovidov)
  • clickhouse-test 스크립트에서 응답이 없는 쿼리를 확인하는 로직을 업데이트했습니다 #8858 (Alexander Kazakov)
  • 리포지토리에서 불필요한 파일 일부를 제거했습니다. #8843 (alexey-milovidov)
  • math perftests의 타입을 once에서 loop로 변경했습니다. #8783 (Nikolai Kochetov)
  • 코드베이스의 대화형 코드 브라우저 HTML 보고서를 생성할 수 있는 Docker image를 추가했습니다. #8781 (alesapin) Woboq Code Browser를 참조하십시오.
  • MSan 환경에서 일부 테스트 실패를 억제합니다. #8780 (Alexander Kuzmenkov)
  • “삽입 중 예외” 테스트를 더 빠르게 했습니다. 이 테스트는 debug-with-coverage 빌드에서 자주 시간 초과됩니다. #8711 (alexey-milovidov)
  • libcxxlibcxxabi를 master로 업데이트했습니다. #9304 #9308를 대비한 변경입니다. (alexey-milovidov)
  • 간헐적으로 실패하는 테스트 00910_zookeeper_test_alter_compression_codecs를 수정했습니다. #9525 (alexey-milovidov)
  • 중복된 링커 플래그를 정리했습니다. 링커가 예기치 않은 심볼을 조회하지 않도록 했습니다. #9433 (Amos Bird)
  • 테스트 이미지에 clickhouse-odbc 드라이버를 추가했습니다. 이를 통해 자체 ODBC 드라이버를 사용해 ClickHouse와 ClickHouse 간 상호작용을 테스트할 수 있습니다. #9348 (filimonov)
  • 단위 테스트의 몇 가지 버그를 수정했습니다. #9047 (alesapin)
  • 존재하지 않는 include를 모두 제거하기 위해 -Wmissing-include-dirs GCC 경고를 활성화했습니다 - 대부분 CMake 스크립팅 오류로 인한 것입니다 #8704 (kreuzerkrieg)
  • 쿼리 프로파일러가 작동하지 않을 수 있는 이유를 설명합니다. 이는 #9049 #9144 관련입니다 (alexey-milovidov)
  • OpenSSL을 upstream master로 업데이트했습니다. OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal errorSSL Exception: error:2400006E:random number generator::error retrieving entropy 메시지와 함께 TLS 연결이 실패할 수 있는 문제를 수정했습니다. 이 문제는 버전 20.1에 있었습니다. #8956 (alexey-milovidov)
  • server용 Dockerfile 업데이트 #8893 (Ilya Mazaev)
  • build-gcc-from-sources 스크립트의 사소한 수정 #8774 (Michael Nacharov)
  • perftests에서 number 컬럼을 사용하지 않는 경우 numberszeros로 대체했습니다. 이렇게 하면 테스트 결과가 더 깔끔해집니다. #9600 (Nikolai Kochetov)
  • Column 생성자에서 initializer_list 사용 시 발생하는 스택 오버플로우 문제를 수정했습니다. #9367 (삭제된 사용자)
  • librdkafka를 v1.3.0으로 업그레이드했습니다. Mac OS X에서 번들로 포함된 rdkafkagsasl 라이브러리를 활성화했습니다. #9000 (Andrew Onyshchuk)
  • GCC 9.2.0에서 build 문제 수정 #9306 (vxider)

ClickHouse 릴리스 v20.1

ClickHouse 릴리스 v20.1.16.120-안정 2020-60-26

버그 수정

  • prewhere 조건에서 Nullable 컬럼을 사용할 때 드물게 발생하던 충돌을 수정했습니다. #11608의 후속 작업입니다. #11869 (Nikolai Kochetov).
  • 고차 함수 내부에서는 arrayJoin을 사용할 수 없도록 했습니다. 이 문제로 프로토콜 동기화가 깨질 수 있었습니다. 이 변경으로 #3933가 해결됩니다. #11846 (alexey-milovidov).
  • SELECT *, xyz.*와 같은 쿼리는 오류가 발생해야 하지만 성공하던 예기치 않은 동작을 수정했습니다. #11753 (hexiaoting).
  • Values 입력 형식에서 복잡한 리터럴의 타입 추론이 잘못되어 발생하던 LOGICAL_ERROR를 수정했습니다. #11732 (tavplubix).
  • 상수 컬럼에 대한 ORDER BY ... WITH FILL 문제를 수정했습니다. #11697 (Anton Popov).
  • XDBC bridge와 통신할 때 올바른 timeout이 전달되도록 했습니다. 최근에는 bridge의 상태를 확인하거나 메타 정보를 받을 때 timeout이 적용되지 않았습니다. #11690 (alexey-milovidov).
  • 대소문자를 구분하지 않는 플래그가 있는 정규식을 지원하도록 추가했습니다. 이 변경으로 #11101#11506이 수정됩니다. #11649 (alexey-milovidov).
  • String용 블룸 필터(data skipping indices)를 수정했습니다. #11638 (Azat Khuzhin).
  • prewhere 조건에서 Nullable 컬럼을 사용할 때 드물게 발생하던 충돌을 수정했습니다. (#11572와도 어느 정도 관련이 있는 것으로 보입니다). #11608 (Nikolai Kochetov).
  • exception.code() % 256 = 0일 때 clickhouse-client의 종료 코드가 잘못되던 문제를 수정했습니다. #11601 (filimonov).
  • server 시작 시 “Mark cache size was lowered” 로그 메시지에 있던 사소한 오류를 수정했습니다. 이 변경으로 #11399가 해결됩니다. #11589 (alexey-milovidov).
  • 이제 clickhouse-server docker container는 server 상태를 확인할 때 IPv6를 우선 사용합니다. #11550 (Ivan Starkov).
  • -State 함수로 집계하는 도중 예외가 발생할 때 생기던 메모리 누수를 수정했습니다. 이 변경으로 #8995가 수정됩니다. #11496 (alexey-milovidov).
  • ‘FINAL’ 수정자와 ‘ORDER BY’ 최적화에서 함수로 감싼 프라이머리 키를 사용할 때의 문제를 수정했습니다. #10715 (Anton Popov).

ClickHouse 릴리스 v20.1.15.109-안정 2020-06-19

버그 수정

  • alter 수행 중 structure에 걸리는 과도한 잠금을 수정했습니다. #11790 (alesapin).

ClickHouse 릴리스 v20.1.14.107-안정 2020-06-11

버그 수정

  • PREWHERE column in (subquery)ARRAY JOIN이 포함된 쿼리에서 발생하던 Size of offsets does not match size of column 오류를 수정했습니다. #11580 (Nikolai Kochetov).

ClickHouse 릴리스 v20.1.13.105-안정 2020-06-10

버그 수정

  • min_bytes_to_use_direct_io가 활성화된 상태에서 PREWHERE가 활성화되어 있고 SAMPLE을 사용하거나 스레드 수가 많은 경우 발생할 수 있는 Data compressed with different methods 오류를 수정했습니다. 이 수정은 #11539을 해결합니다. #11540 (alexey-milovidov).
  • 코덱의 압축된 크기가 반환되도록 수정했습니다. #11448 (Nikolai Kochetov).
  • 컬럼에 리터럴이 아닌 인수를 사용하는 압축 코덱이 있을 때 발생하던 server 충돌을 수정했습니다. #11365를 수정했습니다. #11431 (alesapin).
  • 점을 nan으로 사용할 때의 pointInPolygon 문제를 수정했습니다. #11375를 해결했습니다. #11421 (Alexey Ilyukhov).
  • 위도/경도 범위를 벗어나는 인수를 사용할 때 발생하던 geohashesInBox 문제를 수정했습니다. #11403 (Vasily Nemkov).
  • 외부 정렬 및 limit가 있는 쿼리에서 발생할 수 있는 Pipeline stuck 오류를 수정했습니다. #11359. #11366 (Nikolai Kochetov).
  • quantilesExactWeightedArray에서 발생하던 크래시를 수정했습니다. #11337 (Nikolai Kochetov).
  • 설정 parallel_view_processing = 1에서 MATERIALIZED VIEW에 대한 쓰기가 다시 병렬로 수행되도록 했습니다. #10241을 수정했습니다. #11330 (Nikolai Kochetov).
  • 추출된 JSON에 짝이 맞지 않는 { 또는 [가 들어 있는 문자열이 있을 때 발생하던 visitParamExtractRaw 문제를 수정했습니다. #11318 (Ewout).
  • ThreadPool에서 매우 드물게 발생하는 경쟁 상태를 수정했습니다. #11314 (alexey-milovidov).
  • 변환 과정에서 발생할 수 있는 초기화되지 않은 메모리 문제를 수정했습니다. 예시: SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov).
  • 테이블의 프라이머리 키에 배열 컬럼이 포함되어 있고, 쿼리에서 empty 또는 notEmpty 함수로 이 컬럼을 필터링할 때 인덱스 분석이 작동하지 않는 문제를 수정했습니다. 이로써 #11286가 해결되었습니다. #11303 (alexey-milovidov).
  • max_network_bandwidth, max_execution_speed 또는 priority 설정으로 인해 쿼리 속도가 제한되는 경우, 쿼리 속도 추정이 부정확해지고 min_execution_speed 제한이 적용되지 않거나 잘못 적용될 수 있던 버그를 수정했습니다. 또한 timeout_before_checking_execution_speed의 기본값을 0이 아닌 값으로 변경했습니다. 그렇지 않으면 min_execution_speedmax_execution_speed 설정이 아무런 효과가 없기 때문입니다. 이 수정은 #11297를 해결합니다. 이 수정은 #5732를 해결합니다. 이 수정은 #6228를 해결합니다. 사용성 개선: clickhouse-client에서 예외 메시지가 진행률 표시줄과 이어 붙여지지 않도록 했습니다. #11296 (alexey-milovidov).
  • Protobuf 형식의 잘못된 데이터를 읽을 때 발생하던 충돌을 수정했습니다. 이로써 #5957#11203이 해결됩니다. #11258 (Vitaly Baranov).
  • Array(Array(LowCardinality))를 캡처된 인수로 사용하는 고차 함수에서 발생할 수 있는 Cannot capture column 오류를 수정했습니다. #11185 (Nikolai Kochetov).
  • 데이터 스키핑 인덱스가 백그라운드 머지 중 변경되는 컬럼에 의존하는 경우(SummingMergeTree, AggregatingMergeTree, TTL GROUP BY) 잘못 계산되는 문제가 있었습니다. 이 문제는 인덱스 계산 시점을 머지 이후로 옮겨 머지된 데이터를 기준으로 인덱스를 계산하도록 수정해 해결했습니다. #11162 (Azat Khuzhin).
  • 아무것도 마무리되지 않은 경우 mutation 최종화 작업에서 로깅을 제거합니다. #11109 (alesapin).
  • parseDateTime64BestEffort의 인수 처리 버그를 수정했습니다. #10925. #11038 (Vasily Nemkov).
  • 메서드 getRawData()에서 원시 데이터 크기가 잘못 계산되던 문제를 수정했습니다. #10964 (Igr).
  • 분산 테이블의 튜플에 대한 이전 버전과의 호환성 문제를 수정했습니다. #10889 (Anton Popov).
  • StringHashTable에서 SIGSEGV를 수정했습니다(해당 키가 없을 경우). #10870 (Azat Khuzhin).
  • 비활성 상태가 된 레플리카를 기다리느라 OPTIMIZE 쿼리의 일부 ALTER가 멈출 수 있던 ReplicatedMergeTree 버그를 수정했습니다. #10849 (tavplubix).
  • Block::sortColumns() 이후 컬럼 순서를 수정하고, 실제 사용 사례인 Buffer 엔진에 영향을 준다는 점을 보여주는 테스트도 추가합니다. #10826 (Azat Khuzhin).
  • 식별자를 따옴표로 감싸지 않도록 요청한 경우 발생하던 ODBC bridge 문제를 수정했습니다. 이로써 #7984가 해결됩니다. #10821 (alexey-milovidov).
  • DateLUT에서 발생한 UBSan 및 MSan 리포트를 수정했습니다. #10798 (alexey-milovidov).
    • 키 조건에서 올바른 유형 변환을 위해 src_type을 사용하도록 수정했습니다. #6287을 수정했습니다. #10791 (Andrew Onyshchuk).
  • parallel_view_processing 동작을 수정했습니다. 이제 예외가 발생하더라도 MATERIALIZED VIEW에 대한 모든 삽입이 예외 없이 완료됩니다. #10241을 수정했습니다. #10757 (Nikolai Kochetov).
  • combinator -OrNull 및 -OrDefault를 -State와 함께 사용할 때 발생하던 문제를 수정했습니다. #10741 (hcz).
  • 합계가 사라지는 문제를 수정했습니다. 쿼리에 외부 WHERE 조건이 있는 join 또는 서브쿼리가 포함된 경우 합계가 필터링될 수 있었습니다. #10674를 해결했습니다. #10698 (Nikolai Kochetov).
  • 하나의 쿼리에서 같은 집합에 IN을 여러 번 사용하는 문제를 수정했습니다. #10686 (Anton Popov).
  • AggregateTransform 생성자의 매개변수 순서를 바로잡았습니다. #10667 (palasonic1).
  • distributed_aggregation_memory_efficient가 활성화된 경우 원격 쿼리가 병렬로 실행되지 않던 문제를 수정했습니다. #10655를 해결했습니다. #10664 (Nikolai Kochetov).
  • HAVING 절이 있는 쿼리(즉, initiator 서버에서 필터링이 필요한 경우)에 대해 분산 쿼리의 프레디케이트 최적화(enable_optimize_predicate_expression=1)를 수정해 표현식의 순서를 유지하도록 했으며, 이것만으로도 문제가 해결됩니다. 또한 집계기가 인덱스 대신 컬럼 이름을 사용하도록 강제했습니다. 수정: #10613, #11413. #10621 (Azat Khuzhin).
  • 오류 the BloomFilter false positive must be a double number between 0 and 1를 수정했습니다. #10551. #10569 (Winter Zhang).
  • 컬럼 유형과 다른 기본 표현식 유형을 갖는 컬럼 ALIAS에 대한 SELECT를 수정했습니다. #10563 (Azat Khuzhin).
    • DateTime과 마찬가지로 DateTime64와 String 값 간 비교를 구현했습니다. #10560 (Vasily Nemkov).

ClickHouse 릴리스 v20.1.12.86, 2020-05-26

버그 수정

  • 20.1과 그 이전 버전 간의 2단계 집계(two-level aggregation) 비호환성을 수정했습니다. 이 비호환성은 initiator 노드와 원격 노드에서 서로 다른 버전의 ClickHouse를 사용하고, GROUP BY 결과 크기가 크며, 단일 String 필드에 대해 집계가 수행될 때 발생합니다. 그 결과, 결과에 단일 키에 대한 머지되지 않은 여러 행이 생성됩니다. #10952 (alexey-milovidov).
  • 머지 후 발생할 수 있었던 SummingMergeTreeLowCardinality(FixedString) 키 컬럼 데이터 손상을 수정했습니다. #10489를 해결합니다. #10721 (Nikolai Kochetov).
  • readonly=2cancel_http_readonly_queries_on_client_close=1일 때 클라이언트 연결 종료 시 http 요청이 멈추는 버그를 수정했습니다. #7939, #7019, #7736, #7091를 해결합니다. #10684 (tavplubix).
  • SYSTEM DROP DNS CACHE 쿼리를 실행할 때, 일부 IP 주소에서 사용자 연결이 허용되는지 확인하는 데 사용되는 캐시까지 함께 삭제되던 버그를 수정했습니다. #10608 (tavplubix).
  • 종속 테이블이 포함된 경우 MATERIALIZED VIEW의 내부 쿼리에서 잘못된 스칼라 결과가 반환되던 문제를 수정했습니다. #10603 (Nikolai Kochetov).
  • mutation이 모든 파트 처리를 완료했지만 is_done=0 상태에 멈춰 있던 문제를 수정했습니다. #10526 (alesapin).
  • UTC 대비 분수 단위 오프셋을 사용하는 시간대에서 Unix epoch 시작 시 발생하던 오버플로우를 수정했습니다. 이로써 #9335가 해결되었습니다. #10513 (alexey-milovidov).
  • 분산 스토리지의 비정상 종료 문제를 수정했습니다. #10491 (Azat Khuzhin).
  • 큰 정수에서 simpleLinearRegression에 발생하던 숫자 오버플로우를 수정했습니다. #10474 (hcz).
  • ATTACH 데이터베이스 실패 시 메타데이터 디렉터리가 삭제되던 문제를 수정했습니다. #10442 (Winter Zhang).
  • BloomFilter 인덱스를 생성할 때 인수의 개수와 유형을 검사하는 기능을 추가했습니다 #9623. #10431 (Winter Zhang).
  • ARRAY JOIN, ORDER BY, LIMIT가 포함된 쿼리에서 불완전한 결과가 반환될 수 있던 문제를 수정했습니다. 이 변경으로 #10226이 해결되었습니다. #10427 (alexey-milovidov).
  • skip_unavailable_shards보다 fallback_to_stale_replicas를 선호합니다. #10422 (Azat Khuzhin).
  • Array(Tuple(...)) 데이터 타입의 잘못된 평탄화를 수정했습니다. 이로써 #10259가 해결되었습니다. #10390 (alexey-milovidov).
  • 버퍼에서 HashMap을 읽으려 할 때 컴파일 오류를 발생시키던 HashTable의 잘못된 동작을 수정했습니다. #10386 (palasonic1).
  • 원격 쿼리에서 발생할 수 있던 ConcatProcessorPipeline stuck 오류를 수정했습니다. #10381 (Nikolai Kochetov).
  • max_rows_to_group_bygroup_by_overflow_mode = 'break' 사용 시 발생하던 Pipeline stuck 오류를 수정했습니다. #10279 (Nikolai Kochetov).
  • 일부 데이터가 quorum으로 삽입된 뒤 어떤 방식으로든 삭제되면(DROP PARTITION, TTL) INSERT가 멈추거나 SELECT에서 false positive 예외가 발생하던 여러 버그를 수정했습니다. 이 수정으로 #9946가 해결됩니다. #10188 (Nikita Mikhaylov).
  • 원격 서버에서는 18.12.17 이전 버전을 사용하고 요청을 시작한 서버에서는 더 최신 버전을 사용하는 환경에서, GROUP BY가 고정 키와 비고정 키를 모두 포함하며 2단계 GROUP BY 방식이 활성화된 경우 발생하던 비호환성을 수정했습니다. #3254 (alexey-milovidov).

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

  • clickhouse-server Docker 이미지에 CA 인증서를 추가했습니다. #10476 (filimonov).

ClickHouse 릴리스 v20.1.10.70, 2020-04-17

버그 수정

  • 드물게 발생할 수 있는 Cannot drain connections: cancel first 예외를 수정했습니다. #10239 (Nikolai Kochetov).
  • ENGINE = Replicated*인 테이블에서 사용자가 ALTER UPDATE/DELETE를 실행하려고 할 때 ClickHouse가 'Unknown function lambda.' 오류를 발생시키던 버그를 수정했습니다. 이제 비결정적 함수 검사에서 lambda 표현식을 올바르게 처리합니다. #10237 (Alexander Kazakov).
  • 요일이 화요일이나 목요일인 RFC-2822 형식 문자열에 대한 parseDateTimeBestEffort 문제를 수정했습니다. 이로써 #10082가 해결됩니다. #10214 (alexey-milovidov).
  • JOIN 외부 상수 이름과 충돌할 수 있는 JOIN 내부 상수의 컬럼 이름 문제를 수정했습니다. #10207 (alexey-milovidov).
  • system.numbers 또는 system.zeros처럼 무한한 소스에서 읽을 때, 실제로는 LIMIT에서 중지되어야 하는 쿼리가 무한히 실행될 수 있는 문제를 수정했습니다. #10206 (Nikolai Kochetov).
  • arrayJoin 함수가 있는 경우(일부 사례) move-to-prewhere 최적화가 올바르게 동작하지 않던 문제를 수정했습니다. 이로써 #10092가 해결되었습니다. #10195 (alexey-milovidov).
  • allow_nondeterministic_mutations 설정으로 뮤테이션에서 비결정적 함수 사용 제한을 완화할 수 있는 기능이 추가되었습니다. #10186 (filimonov).
  • Distributed 엔진 테이블에 INSERT할 때 구조가 일치하지 않으면 블록을 변환합니다. #10135 (Azat Khuzhin).
  • Distributed 테이블의 구조가 하위 테이블과 다를 때 INSERT 시 발생하던 SIGSEGV를 수정했습니다. #10105 (Azat Khuzhin).
  • JOINUNION ALL이 포함된 쿼리에서 발생할 수 있는 행 손실 문제를 수정했습니다. #9826, #10113을 해결합니다. #10099 (Nikolai Kochetov).
  • MySQL 데이터베이스 엔진에 인수 검사 기능을 추가하고 식별자 인수를 지원합니다. #10077 (Winter Zhang).
  • localhost의 ClickHouse 서버를 딕셔너리 소스로 사용할 때 발생하는 버그를 수정했습니다. 이 버그는 딕셔너리와 소스의 타입이 호환되지 않으면 메모리 손상을 초래할 수 있습니다. #10071 (alesapin).
  • 오류 Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform를 수정했습니다. 이 오류는 distributed_aggregation_memory_efficient 설정이 활성화되어 있을 때, 분산 쿼리가 서로 다른 세그먼트에서 서로 다른 수준으로 집계된 데이터를 읽는 경우(단일 수준 집계와 2단계 집계가 혼재된 경우) 발생했습니다. #10063 (Nikolai Kochetov).
  • 문자열 키에 후행 0 바이트가 포함된 상태에서 GROUP BY를 수행할 때 발생할 수 있던 segmentation fault를 수정했습니다 (#8636, #8925). #10025 (Alexander Kuzmenkov).
  • 일부 데이터베이스의 쿼리를 처리하는 단계 중 하나에서 필요한 테이블을 가져오지 못하던 버그를 수정했습니다. 이로써 #9699가 수정되었습니다. #9949 (achulkov2).
  • JOINTOTALS와 함께 사용될 때 발생하는 'Not found column in block' 오류를 수정했습니다. #9839을 해결했습니다. #9939 (Artem Zuikov).
  • ON CLUSTER DDL 쿼리가 서버 시작 시 멈추는 버그를 수정했습니다. #9927 (Gagan Arneja).
  • Join 테이블 엔진의 TRUNCATE 문제 수정 (#9917). #9920 (Amos Bird).
  • ALTER 쿼리에서 발생하는 'scalar does not exist' 오류 수정 (#9878). #9904 (Amos Bird).
  • ReplicatedMergeTree에서 삭제와 optimize 간의 경쟁 상태 문제를 수정했습니다. #9901 (alesapin).
  • ATTACH PARTDeleteOnDestroy 로직을 수정해, ATTACH된 part가 자동으로 제거될 수 있던 문제를 해결하고 테스트 몇 건을 추가했습니다. #9410 (Vladimir Chebotarev).

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

  • 단위 테스트 collapsing_sorted_stream를 수정했습니다. #9367 (Deleted user).

ClickHouse 릴리스 v20.1.9.54, 2020-03-28

버그 수정

  • 쿼리에 PREWHEREWHERE가 분산 테이블에서 함께 사용되고 SET distributed_product_mode = 'local'일 때 발생하던 'Different expressions with the same alias' 오류를 수정했습니다. #9871 (Artem Zuikov).
  • 복합 프라이머리 키가 있는 테이블에서 뮤테이션의 과도한 메모리 사용량을 수정했습니다. 이 수정은 #9850을 해결합니다. #9860 (alesapin).
  • 이제 INSERT 쿼리에서는 세그먼트가 initiator로부터 받은 설정을 예외를 발생시키는 대신 해당 세그먼트의 제약 조건에 맞게 제한합니다. 이 수정으로 서로 다른 제약 조건을 가진 세그먼트에도 INSERT 쿼리를 보낼 수 있습니다. 이 변경은 #9447 수정 사항을 개선합니다. #9852 (Vitaly Baranov).
  • 클라이언트에서 발생할 수 있던 Got 0 in totals chunk, expected 1 예외를 수정했습니다. 이 문제는 오른쪽에 조인된 테이블의 행이 0개일 때 JOIN이 포함된 쿼리에서 발생했습니다. 예시: select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;. #9777을 해결합니다. #9823 (Nikolai Kochetov).
  • 타입을 변환할 수 없을 때 optimize_skip_unused_shards에서 발생하던 SIGSEGV를 수정했습니다. #9804 (Azat Khuzhin).
  • 함수 인수의 시간대가 올바르게 적용되지 않던 몇 가지 경우를 수정했습니다. #9574 (Vasily Nemkov).

개선 사항

  • 단일 스레드에서 정렬된 단일 part만 읽으므로 뮤테이션에서 ORDER BY 단계를 제거했습니다. 또한 뮤테이션의 행이 정렬 키 순서대로 정렬되어 있으며, 이 순서가 깨지지 않는지 확인하는 검사도 추가했습니다. #9886 (alesapin).

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

  • 중복된 링커 플래그를 정리했습니다. 링커가 예기치 않은 심볼을 찾지 않도록 했습니다. #9433 (Amos Bird).

ClickHouse 릴리스 v20.1.8.41, 2020-03-20

버그 수정

  • ParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread에서 처리되지 않은 예외로 인해 Cannot schedule a task 오류가 지속적으로 발생할 수 있는 문제를 수정했습니다. 이 수정은 #6833을 해결합니다. #9154 (Azat Khuzhin)
  • ALTER 쿼리(뮤테이션)에서 메모리를 과도하게 사용하는 문제를 수정했습니다. 이 수정은 #9533#9670을 해결합니다. #9754 (alesapin)
  • 외부 딕셔너리 DDL의 백쿼트 처리 버그를 수정했습니다. 이 수정은 #9619을 해결합니다. #9734 (alesapin)

ClickHouse 릴리스 v20.1.7.38, 2020-03-18

버그 수정

  • sumKahansumWithOverflow의 잘못된 내부 함수 이름을 수정했습니다. 이로 인해 원격 쿼리에서 이러한 함수를 사용할 때 예외가 발생했습니다. #9636 (Azat Khuzhin). 이 문제는 모든 ClickHouse 릴리스에 존재했습니다.
  • 내부 복제를 사용하는 Distributed 테이블에서 ALTER ON CLUSTER를 허용합니다. 이 변경으로 #3268이 수정되었습니다. #9617 (shinoi2). 이 문제는 모든 ClickHouse 릴리스에 존재했습니다.
  • MergeTreeRangeReader에서 발생할 수 있는 예외 Size of filter does not match size of columnInvalid number of rows in Chunk를 수정했습니다. 이러한 예외는 일부 상황에서 PREWHERE를 실행하는 동안 발생할 수 있었습니다. #9132를 수정합니다. #9612 (Anton Popov)
  • 다음 문제가 수정되었습니다. time + 1과 같은 단순한 산술 표현식을 작성할 경우(time + INTERVAL 1 SECOND와 같은 표현식과 달리) 시간대가 유지되지 않았습니다. 이 수정으로 #5743가 해결됩니다. #9323 (alexey-milovidov). 이 문제는 모든 ClickHouse 릴리스에 존재했습니다.
  • 이제 a DEFAULT b, b DEFAULT a와 같은 단순한 순환 별칭(alias)을 사용하는 컬럼은 생성하거나 추가할 수 없습니다. #9603 (alesapin)
  • base64로 인코딩된 값 끝의 패딩이 잘못될 수 있던 문제를 수정했습니다. base64 라이브러리를 업데이트했습니다. 이 변경으로 #9491을 수정하고, #9492#9500을 종료했습니다 (alexey-milovidov)
  • Poco::HTTPServer가 소멸될 때 발생하는 데이터 레이스를 수정했습니다. 이 문제는 서버가 시작된 직후 즉시 종료될 때 발생할 수 있었습니다. #9468 (Anton Popov)
  • LIMIT n WITH TIES에서 n번째 행과 같은 값을 가진 행이 매우 많을 때 발생할 수 있는 충돌 또는 행 수가 잘못 계산되는 문제를 수정했습니다. #9464 (tavplubix)
  • 컬럼 TTL로 인해 발생할 수 있는 체크섬 불일치를 수정했습니다. #9451 (Anton Popov)
  • 사용자가 이전 형식의 MergeTree 테이블 엔진 계열에 대해 ALTER MODIFY SETTING을 시도할 때 발생하는 충돌을 수정했습니다. #9435 (alesapin)
  • 이제 뮤테이션을 더 자주 최종 반영하도록 합니다. #9427 (alesapin)
  • #8598에서 도입된 복제 프로토콜 비호환성 문제를 수정했습니다. #9412 (alesapin)
  • 배열 타입에 대한 bloom_filter 인덱스의 not(has())를 수정했습니다. #9407 (achimbab)
  • haystack의 바이트 수가 0일 때 matchextract 함수의 동작을 수정했습니다. haystack이 상수인 경우 동작이 잘못되었습니다. 이 수정은 #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov)를 해결합니다.

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

ClickHouse 릴리스 v20.1.6.30, 2020-03-05

버그 수정

  • T64 코덱으로 압축할 때 발생하던 데이터 비호환성 문제를 수정했습니다. #9039 (abyss7)
  • 단일 스레드에서 MergeTree 테이블을 읽을 때 range의 순서를 수정했습니다. #8964를 해결했습니다. #9050 (CurtizJ)
  • PREWHERE 실행 중 MergeTreeRangeReader에서 발생할 수 있는 세그멘테이션 오류를 수정했습니다. #9064를 해결합니다. #9106 (CurtizJ)
  • reinterpretAsFixedStringString이 아니라 FixedString을 반환하도록 수정했습니다. #9052 (oandrew)
  • 널 허용 반환 타입 관련 joinGet 문제를 수정했습니다. #8919을 수정했습니다 #9014 (amosbird)
  • fuzz 테스트 및 bitTestAll/bitTestAny 함수의 잘못된 동작을 수정했습니다. #9143 (alexey-milovidov)
  • haystack의 바이트 수가 0일 때 match 및 extract 함수의 동작을 수정했습니다. haystack가 상수인 경우 동작이 잘못되었습니다. #9160 수정 #9163 (alexey-milovidov)
  • 엄격한 단조성이 없는 함수형 인덱스를 사용할 때 역전된 프레디케이트가 실행되는 문제를 수정했습니다. #9034 #9223 (Akazz)
  • WHERE 절에 [NOT] LIKE 연산자가 있으면 CROSSINNER JOIN으로 재작성할 수 있도록 합니다. #9191을 수정했습니다. #9229 (4ertus2)
  • Log 엔진을 사용하는 테이블에서 첫 번째 컬럼(또는 컬럼들)을 별칭으로 지정할 수 있도록 허용합니다. #9231 (abyss7)
  • IN() 내부에서 쉼표 join을 사용할 수 있도록 했습니다. #7314을 수정했습니다. #9251 (4ertus2)
  • ALTER MODIFY/ADD 쿼리 로직을 개선했습니다. 이제 타입 없이 컬럼을 ADD할 수 없으며, MODIFY로 기본 표현식을 변경해도 컬럼의 타입은 바뀌지 않고, MODIFY로 타입을 변경해도 기본 표현식 값은 유지됩니다. #8669을 수정했습니다. #9227 (alesapin)
  • 뮤테이션 완료 처리 문제를 수정하여, 이미 완료된 뮤테이션의 상태가 is_done=0으로 표시될 수 있던 문제를 해결했습니다. #9217 (alesapin)
  • system.numbers 및 system.numbers_mt에서 “Processors” pipeline을 지원합니다. 또한 max_execution_time이 적용되지 않던 버그도 수정했습니다. #7796 (KochetovNicolai)
  • DictCacheKeysRequestedFound 메트릭의 잘못된 카운팅을 수정했습니다. #9411 (nikitamikhaylov)
  • 그렇지 않으면 재시작 후 part 데이터에 접근할 수 없게 되어 ClickHouse가 시작되지 않을 수 있으므로, ATTACH PARTITION FROM, REPLACE PARTITION, MOVE TO TABLE에 storage policy 확인을 추가했습니다. #9383 (excitoon)
  • MergeTreeIndexSet의 UBSan 보고를 수정했습니다. 이로써 #9250 문제가 해결됩니다. #9365 (alexey-milovidov)
  • BlockIO에서 발생할 수 있는 데이터 레이스를 수정했습니다. #9356 (KochetovNicolai)
  • JSON 관련 함수에서 Int64 범위에 맞지 않는 UInt64 숫자를 지원합니다. SIMDJSON을 master로 업데이트했습니다. 이로써 #9209 문제가 수정되었습니다. #9344 (alexey-milovidov)
  • 데이터 디렉터리가 별도의 장치에 마운트된 경우 여유 공간이 올바르게 계산되지 않던 문제를 수정했습니다. 기본 디스크의 경우 데이터 하위 디렉터리의 여유 공간을 기준으로 계산합니다. 이 수정은 #7441 #9257 (millb)
  • OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error and SSL Exception: error:2400006E:random number generator::error retrieving entropy. 메시지와 함께 TLS 연결이 실패할 수 있던 문제를 수정했습니다. OpenSSL을 upstream master로 업데이트했습니다. #8956 (alexey-milovidov)
  • CREATE 쿼리를 실행할 때 스토리지 엔진 인수의 상수 표현식을 미리 계산합니다. 비어 있는 데이터베이스 이름을 현재 데이터베이스로 대체합니다. #6508, #3492를 수정했습니다. 또한 ClickHouseDictionarySource에서 로컬 주소를 확인하는 로직도 수정했습니다. #9262 (tabplubix)
  • StorageFile에서 읽을 때 발생할 수 있던 StorageMerge segfault를 수정했습니다. #9387 (tabplubix)
  • Kafka에서 suffix를 읽은 후 커밋하기 전에 예외가 발생하는 드문 경우 데이터가 손실되지 않도록 했습니다. #9378을 해결합니다. 관련: #7175 #9507 (filimonov)
  • 잘못된 매개변수로 생성된 Kafka 테이블을 사용하거나 삭제하려고 할 때 서버가 비정상 종료되는 버그를 수정했습니다. #9494를 해결합니다. #9507을 반영했습니다. #9513 (filimonov)

새 기능

  • materialized view가 있는 테이블에 대한 멱등 삽입의 동작을 제어하는 deduplicate_blocks_in_dependent_materialized_views 옵션을 추가했습니다. 이 새 기능은 Altinity의 특별 요청으로 버그 수정 릴리스에 추가되었습니다. #9070 (urykhy)

ClickHouse 릴리스 v20.1.2.4, 2020-01-22

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

  • 설정 merge_tree_uniform_read_distribution은 이제 더 이상 사용되지 않습니다. 서버는 여전히 이 설정을 인식하지만 효과는 없습니다. #8308 (alexey-milovidov)
  • 이제 계산 결과가 Float32이므로 함수 greatCircleDistance의 반환 유형도 Float32로 변경했습니다. #7993 (alexey-milovidov)
  • 이제 쿼리 매개변수는 “escaped” 포맷으로 표현해야 합니다. 예를 들어 문자열 a<tab>b를 전달하려면 a\tb 또는 a\<tab>b로 써야 하며, URL에서는 각각 a%5Ctb 또는 a%5C%09b로 전달해야 합니다. 이는 \N으로 NULL을 전달할 수 있게 하기 위해 필요합니다. 이 변경으로 #7488이 수정됩니다. #8517 (alexey-milovidov)
  • ReplicatedMergeTree에서는 이제 기본적으로 use_minimalistic_part_header_in_zookeeper 설정이 활성화됩니다. 이렇게 하면 ZooKeeper에 저장되는 데이터 양이 크게 줄어듭니다. 이 설정은 19.1 버전부터 지원되며, 이미 6개월 이상 여러 서비스의 프로덕션 환경에서 문제 없이 사용하고 있습니다. 19.1보다 오래된 버전으로 다운그레이드할 가능성이 있다면 이 설정을 비활성화하십시오. #6850 (alexey-milovidov)
  • 데이터 스킵 인덱스는 이제 프로덕션 환경에서 사용할 준비가 되었으며 기본적으로 활성화됩니다. 설정 allow_experimental_data_skipping_indices, allow_experimental_cross_to_join_conversion, allow_experimental_multiple_joins_emulation은 이제 더 이상 사용되지 않으며 아무 동작도 하지 않습니다. #7974 (alexey-milovidov)
  • JOIN 연산과 일관되게 동작하는 새로운 StorageJoinANY JOIN 로직을 추가했습니다. 동작 변경 없이 업그레이드하려면 Engine Join tables 메타데이터에 SETTINGS any_join_distinct_right_table_keys = 1을 추가하거나, 업그레이드 후 해당 테이블을 다시 생성해야 합니다. #8400 (Artem Zuikov)
  • 로깅 구성의 변경 사항을 적용하려면 서버를 다시 시작해야 합니다. 이는 서버가 삭제된 로그 파일에 계속 로그를 기록하는 버그를 피하기 위한 임시 우회책입니다(#8696 참조). #8707 (Alexander Kuzmenkov)

새 기능

  • system.merges에 part 경로 정보가 추가되었습니다. #8043 (Vladimir Chebotarev)
  • ON CLUSTER 모드에서 SYSTEM RELOAD DICTIONARY 쿼리를 실행할 수 있는 기능을 추가했습니다. #8288 (Guillaume Tassery)
  • ON CLUSTER 모드에서 CREATE DICTIONARY 쿼리를 실행할 수 있도록 지원이 추가되었습니다. #8163 (alesapin)
  • 이제 users.xml의 사용자 profile은 여러 profile을 상속받을 수 있습니다. #8343 (Mikhail f. Shiryaev)
  • 모든 서버 스레드의 스택 트레이스를 확인할 수 있는 system.stack_trace 테이블이 추가되었습니다. 이는 개발자가 서버 상태를 자세히 들여다보는 데 유용합니다. 이 변경으로 #7576이 해결되었습니다. #8344 (alexey-milovidov)
  • 설정 가능한 초 미만 정밀도를 지원하는 DateTime64 데이터 형식을 추가했습니다. #7170 (Vasily Nemkov)
  • 클러스터의 모든 노드에 쿼리할 수 있는 테이블 함수 clusterAllReplicas를 추가했습니다. #8493 (kiran sunkari)
  • 이산 특성의 정보값을 계산하는 집계 함수 categoricalInformationValue를 추가했습니다. #8117 (hcz)
  • 병렬 처리로 CSV, TSVJSONEachRow 포맷의 데이터 파일 파싱 속도를 높였습니다. #7780 (Alexander Kuzmenkov)
  • 은행가 반올림을 수행하는 bankerRound 함수를 추가했습니다. #8112 (hcz)
  • 지역 이름용 내장 딕셔너리에서 더 많은 언어를 지원합니다: ‘ru’, ‘en’, ‘ua’, ‘uk’, ‘by’, ‘kz’, ‘tr’, ‘de’, ‘uz’, ‘lv’, ‘lt’, ‘et’, ‘pt’, ‘he’, ‘vi’. #8189 (alexey-milovidov)
  • ANY JOIN 로직의 일관성이 향상되었습니다. 이제 t1 ANY LEFT JOIN t2t2 ANY RIGHT JOIN t1과 동일하게 동작합니다. #7665 (Artem Zuikov)
  • 기존 ANY INNER JOIN 동작을 활성화하는 설정 any_join_distinct_right_table_keys를 추가했습니다. #7665 (Artem Zuikov)
  • 새로운 SEMIANTI JOIN이 추가되었습니다. 기존 ANY INNER JOIN 동작은 이제 SEMI LEFT JOIN으로 사용할 수 있습니다. #7665 (Artem Zuikov)
  • File 엔진과 file 테이블 함수에 Distributed 포맷이 추가되어, Distributed 테이블에 비동기 삽입을 수행할 때 생성되는 .bin 파일을 읽을 수 있게 되었습니다. #8535 (Nikolai Kochetov)
  • runningAccumulate에 선택적 reset 컬럼 인수를 추가해, 새 키 값마다 집계 결과를 재설정할 수 있게 했습니다. #8326 (Sergey Kononenko)
  • ClickHouse를 Prometheus 엔드포인트로 사용할 수 있도록 기능 추가. #7900 (vdimir)
  • config.xml에 원격 테이블 엔진과 테이블 함수 URL, S3, HDFS에 허용되는 호스트를 제한하는 <remote_url_allow_hosts> 섹션을 추가했습니다. #7154 (Mikhail Korotov)
  • 구면에서의 거리를 도 단위로 계산하는 함수 greatCircleAngle이 추가되었습니다. #8105 (alexey-milovidov)
  • 지구 반경이 H3 라이브러리와 일치하도록 변경했습니다. #8105 (alexey-milovidov)
  • 입출력을 위한 JSONCompactEachRowJSONCompactEachRowWithNamesAndTypes 포맷이 추가되었습니다. #7841 (Mikhail Korotov)
  • 추가 엔진 매개변수 또는 파일 확장자에 따라 gzip 파일을 읽고 쓸 수 있는 기능이 파일 관련 테이블 엔진 및 테이블 함수(File, S3, URL, HDFS)에 추가되었습니다. #7840 (Andrey Bodrov)
  • 무작위 ASCII 출력 가능 문자들로 이루어진 문자열을 생성하는 randomASCII(length) 함수를 추가했습니다. #8401 (BayoNet)
  • JSON 문자열에서 파싱되지 않은 JSON 배열 요소의 배열을 반환하는 함수 JSONExtractArrayRaw가 추가되었습니다. #8081 (Oleg Matrokhin)
  • 동일한 길이의 여러 배열을 하나의 튜플 배열로 결합할 수 있게 해주는 arrayZip 함수를 추가했습니다. #8149 (Winter Zhang)
  • 구성된 TTL 표현식에 따라 *MergeTree 테이블 엔진 계열에서 디스크 간 데이터 이동 기능이 추가되었습니다. #8140 (Vladimir Chebotarev)
  • 가중 평균을 계산할 수 있는 새 집계 함수 avgWeighted를 추가했습니다. #7898 (Andrey Bodrov)
  • 이제 TSV, TSKV, CSV, JSONEachRow 포맷에서는 병렬 파싱이 기본적으로 활성화되어 있습니다. #7894 (Nikita Mikhaylov)
  • H3 라이브러리의 여러 지리공간 함수인 h3GetResolution, h3EdgeAngle, h3EdgeLength, h3IsValid, h3kRing를 추가했습니다. #8034 (Konstantin Malanchev)
  • 파일 관련 스토리지 및 테이블 함수에 brotli (br) 압축 지원이 추가되었습니다. 이로써 #8156가 수정되었습니다. #8526 (alexey-milovidov)
  • SimpleAggregationFunction 타입에 groupBit* 함수를 추가했습니다. #8485 (Guillaume Tassery)

버그 수정

  • Distributed 엔진을 사용하는 테이블의 이름 변경 문제를 수정했습니다. 이로써 이슈 #7868을 해결했습니다. #8306 (tavplubix)
  • 이제 Dictionaries는 ClickHouse가 아닌 SQL 방언에서 임의 문자열 속성에 EXPRESSION을 지원합니다. #8098 (alesapin)
  • 문제가 있던 INSERT SELECT FROM mysql(...) 쿼리를 수정했습니다. 이로써 #8070#7960 문제가 해결되었습니다. #8234 (tavplubix)
  • JSONEachRow에서 기본 Tuple을 삽입할 때 발생하던 오류 “Mismatch column sizes”를 수정했습니다. 이로써 #5653가 해결됩니다. #8606 (tavplubix)
  • 이제 LIMIT BY와 함께 WITH TIES를 사용하면 예외가 발생합니다. 또한 LIMIT BY와 함께 TOP도 사용할 수 있게 되었습니다. 이 변경으로 #7472가 수정되었습니다. #7637 (Nikita Mikhaylov)
  • clickhouse-odbc-bridge 실행 파일이 최신 glibc 버전에 의도치 않게 의존하던 문제를 수정했습니다. #8046 (Amos Bird)
  • *MergeTree 엔진 계열의 check 함수 버그를 수정했습니다. 이제 마지막 granule과 마지막 mark(최종 아님)의 행 수가 같아도 실패하지 않습니다. #8047 (alesapin)
  • ALTER 쿼리 후 기본 숫자 유형이 테이블에 지정된 유형과 같을 때 Enum* 컬럼에 삽입되지 않던 문제를 수정했습니다. 이로써 #7836 문제가 해결됩니다. #7908 (Anton Popov)
  • 함수 substring에서 상수가 아닌 음수 “size” 인수를 허용하도록 했습니다. 이전에는 실수로 이를 허용하지 않았습니다. 이로써 #4832가 수정되었습니다. #7703 (alexey-milovidov)
  • (O|J)DBC 테이블 엔진에 잘못된 수의 인수가 전달될 때 발생하는 구문 분석 버그를 수정했습니다. #7709 (alesapin)
  • syslog로 logs를 전송할 때 실행 중인 ClickHouse 프로세스의 명령 이름을 사용하도록 변경했습니다. 이전 버전에서는 명령 이름 대신 빈 문자열을 사용했습니다. #8460 (Michael Nacharov)
  • localhost에 대한 허용 호스트 확인을 수정했습니다. 이 PR은 #8241에서 제시된 해결 방법을 수정합니다. #8342 (Vitaly Baranov)
  • runningAccumulate 함수에서 결과를 사용할 때 긴 문자열 인수에 대해 argMinargMax 함수에서 드물게 발생하던 충돌을 수정했습니다. 이 변경으로 #8325 #8341이 해결되었습니다 (dinosaur)
  • Buffer 엔진을 사용하는 테이블의 메모리 오버커밋 문제를 수정했습니다. #8345 (Azat Khuzhin)
  • 인수 중 하나로 NULL을 받을 수 있고 NULL이 아닌 값을 반환하는 함수에서 발생할 수 있는 잠재적 버그를 수정했습니다. #8196 (alexey-milovidov)
  • MergeTree 테이블 엔진의 백그라운드 프로세스용 스레드 풀에서 메트릭 계산을 개선했습니다. #8194 (Vladimir Chebotarev)
  • 행 수준 테이블 필터가 있을 때 WHERE 문 내 IN 함수 문제 수정. #6687 #8357 (Ivan)
  • 이제 설정 값으로 사용되는 정수 값이 완전히 파싱되지 않으면 예외가 발생합니다. #7678 (Mikhail Korotov)
  • 로컬 세그먼트가 3개 이상인 분산 테이블에 대한 쿼리에서 집계 함수를 사용할 때 발생하던 예외를 수정했습니다. #8164 (小路)
  • 이제 블룸 필터는 길이가 0인 배열도 처리할 수 있으며, 중복 계산을 수행하지 않습니다. #8242 (achimbab)
  • users.xml에 지정된 host_regexp와 클라이언트 호스트를 대조해 해당 클라이언트 호스트의 허용 여부를 확인하는 로직을 수정했습니다. #8241 (Vitaly Baranov)
  • 여러 JOIN ON 절에서 오탐을 유발하던 모호한 컬럼 검사 완화. #8385 (Artem Zuikov)
  • String 데이터 타입 값이 포함된 JSON 또는 XML 포맷의 데이터를 서버가 전송하거나 기록하지 못할 때(UTF-8 검증이 필요한 경우), 또는 결과 데이터를 Brotli 알고리즘으로 압축할 때, 그 밖의 드문 일부 경우에 발생할 수 있던 서버 충돌(std::terminate) 문제를 수정했습니다. 이 수정으로 #7603 #8384가 해결되었습니다 (alexey-milovidov)
  • CI에서 발견된 StorageDistributedDirectoryMonitor의 경쟁 조건(race condition)을 수정했습니다. 이 수정으로 #8364가 해결됩니다. #8383 (Nikolai Kochetov)
  • 이제 *MergeTree 테이블 엔진 계열에서는 백그라운드 머지가 스토리지 정책의 볼륨 순서를 더 정확하게 유지합니다. #8549 (Vladimir Chebotarev)
  • 이제 테이블 엔진 KafkaNative 포맷에서 정상적으로 작동합니다. 이로써 #6731, #7337, #8003 문제가 수정되었습니다. #8016 (filimonov)
  • 테이블 엔진 Kafka에서 EOF 관련 예외를 발생시키던 헤더 포함 포맷(CSVWithNames 등)의 문제를 수정했습니다. #8016 (filimonov)
  • IN 절의 오른쪽 부분에서 서브쿼리로 Set을 생성할 때 발생하던 버그를 수정했습니다. 이 수정으로 #5767#2542가 해결됩니다. #7755 (Nikita Mikhaylov)
  • 스토리지 File에서 읽는 도중 발생할 수 있는 비정상 종료 문제를 수정했습니다. #7756 (Nikolai Kochetov)
  • list 유형 컬럼이 포함된 Parquet 포맷 파일을 읽는 문제를 수정했습니다. #8334 (maxulan)
  • max_parallel_replicas > 1일 때 샘플링 키에 종속된 PREWHERE 조건이 있는 분산 쿼리에서 발생하는 Not found column 오류를 수정했습니다. #7913 (Nikolai Kochetov)
  • 쿼리에서 테이블 별칭을 참조하는 PREWHERE를 사용하고 프라이머리 키(primary key) 조건으로 인해 결과 집합(result set)이 비어 있을 때 발생하던 Not found column 오류를 수정했습니다. #7911 (Nikolai Kochetov)
  • 널 허용 인수인 경우 randrandConstant 함수의 반환 유형을 수정했습니다. 이제 이 함수들은 항상 UInt32를 반환하며, Nullable(UInt32)는 반환하지 않습니다. #8204 (Nikolai Kochetov)
  • WITH FILL 표현식에서는 프레디케이트 푸시다운을 비활성화했습니다. 이로써 #7784가 수정되었습니다. #7789 (Winter Zhang)
  • FINAL 절 사용 시 SummingMergeTree에서 count() 결과가 잘못 계산되던 문제를 수정했습니다. #3280 #7786 (Nikita Mikhaylov)
  • 원격 서버에서의 상수 함수로 인해 잘못된 결과가 반환될 수 있는 문제를 수정했습니다. 이 문제는 서버별로 서로 다른 상수 값을 반환하는 version(), uptime() 등의 함수를 포함한 쿼리에서 발생했습니다. 이 수정으로 #7666 문제가 해결됩니다. #7689 (Nikolai Kochetov)
  • 잘못된 결과를 일으키던 푸시다운 프레디케이트 최적화의 복잡한 버그를 수정했습니다. 이로써 푸시다운 프레디케이트 최적화와 관련된 많은 문제가 해결됩니다. #8503 (Winter Zhang)
  • CREATE TABLE .. AS dictionary 쿼리에서 발생하던 크래시를 수정했습니다. #8508 (Azat Khuzhin)
  • .g4 파일의 ClickHouse 문법이 여러 가지 개선되었습니다. #8294 (taiyang-li)
  • engine Join을 사용하는 테이블과의 JOIN에서 충돌을 일으키던 버그를 수정했습니다. 이 수정으로 #7556 #8254 #7915 #8100이 해결됩니다. #8298 (Artem Zuikov)
  • CREATE DATABASE 시 불필요하게 딕셔너리를 다시 로드하던 문제를 수정했습니다. #7916 (Azat Khuzhin)
  • StorageFileStorageHDFS에서 읽을 때의 최대 스트림 수를 제한합니다. #7650을 수정했습니다. #7981 (alesapin)
  • 사용자가 기본 표현식과 코덱을 모두 지정했을 때 발생하던 ALTER ... MODIFY ... CODEC 쿼리의 버그를 수정했습니다. 8593을 해결했습니다. #8614 (alesapin)
  • SimpleAggregateFunction(LowCardinality) 유형 컬럼의 백그라운드 머지에서 발생하던 오류를 수정했습니다. #8613 (Nikolai Kochetov)
  • 함수 toDateTime64의 타입 검사를 수정했습니다. #8375 (Vasily Nemkov)
  • 이제 지원되지 않는 join_use_nulls 설정과 Join engine을 함께 사용할 때 LEFT 또는 FULL JOIN으로 인해 서버가 크래시되지 않습니다. #8479 (Artem Zuikov)
  • 이제 db가 존재하지 않더라도 DROP DICTIONARY IF EXISTS db.dict 쿼리는 예외를 발생시키지 않습니다. #8185 (Vitaly Baranov)
  • 제거된 IStorage 객체에 대한 참조 사용으로 인해 테이블 함수(file, mysql, remote)에서 발생할 수 있던 충돌 문제를 수정했습니다. 테이블 함수에 삽입할 때 지정된 컬럼을 잘못 파싱하던 문제를 수정했습니다. #7762 (tavplubix)
  • clickhouse-server를 시작하기 전에 네트워크가 준비되었는지 확인합니다. 이 문제는 #7507에서 수정되었습니다. #8570 (Zhichang Yu)
  • 보안 연결에서 timeout 처리를 수정하여 쿼리가 무기한 대기 상태에 빠지지 않도록 했습니다. 이 변경으로 #8126 문제가 해결되었습니다. #8128 (alexey-milovidov)
  • clickhouse-copier에서 동시 실행되는 worker 간의 불필요한 경합을 수정했습니다. #7816 (Ding Xiang Fei)
  • 이제 뮤테이션은 attached 상태인 파트의 뮤테이션 버전이 현재 뮤테이션 버전보다 크더라도 해당 파트를 건너뛰지 않습니다. #7812 (Zhichang Yu) #8250 (alesapin)
  • 다른 디스크로 이동한 후 서버를 재시작해도 중복된 *MergeTree 데이터 파트 복사본을 무시합니다. #7810 (Vladimir Chebotarev)
  • JOIN 키의 LowCardinality 사용 시 발생하는 FULL JOIN 크래시를 수정했습니다. #8252 (Artem Zuikov)
  • INSERT INTO tbl (x, y, x)와 같은 삽입 쿼리에서는 동일한 컬럼 이름을 두 번 이상 사용할 수 없도록 했습니다. 이 수정으로 #5465, #7681이 해결되었습니다. #7685 (alesapin)
  • 알 수 없는 CPU의 물리적 CPU 코어 수를 감지할 때, 논리적 CPU 코어 수를 사용하는 폴백을 추가했습니다. 이로써 #5239 문제가 수정되었습니다. #7726 (alexey-milovidov)
  • 구체화된 컬럼과 별칭 컬럼에서 발생하던 There's no column 오류를 수정했습니다. #8210 (Artem Zuikov)
  • TABLE 또는 DICTIONARY 한정자 없이 EXISTS 쿼리를 사용할 때 발생하던 심각한 충돌 문제를 수정했습니다. 예: EXISTS t. 이 수정으로 #8172가 해결되었습니다. 이 버그는 버전 19.17에서 처음 발생했습니다. #8213 (alexey-milovidov)
  • SimpleAggregateFunction 컬럼을 사용할 때 발생할 수 있는 "Sizes of columns does not match" 오류와 관련된 드문 버그를 수정했습니다. #7790 (Boris Granveaud)
  • allow_databases가 비어 있는 사용자에게 모든 데이터베이스에 대한 접근 권한이 부여되던 버그를 수정했습니다(allow_dictionaries도 동일). #7793 (DeifyTheGod)
  • server가 이미 client와의 연결을 종료한 경우 발생하던 client 충돌을 수정했습니다. #8071 (Azat Khuzhin)
  • 기본 키(primary key) 접두사와 기본 키가 아닌 접미사로 정렬할 때의 ORDER BY 동작을 수정했습니다. #7759 (Anton Popov)
  • 테이블에 한정자가 지정된 컬럼이 있는지 확인합니다. 이로써 #6836가 수정되었습니다. #7758 (Artem Zuikov)
  • ALTER MOVE가 머지 완료 직후 지정된 superpart에 대해 즉시 이동 작업을 실행하던 동작을 수정했습니다. #8103을 수정했습니다. #8104 (Vladimir Chebotarev)
  • 컬럼 수가 서로 다른 UNION을 사용할 때 발생할 수 있는 서버 충돌 문제를 수정했습니다. #7279 문제를 수정했습니다. #7929 (Nikolai Kochetov)
  • 음수 크기를 지정한 경우 함수 substr의 결과 부분 문자열 크기를 수정했습니다. #8589 (Nikolai Kochetov)
  • 이제 background pool에 여유 스레드가 충분하지 않으면 서버는 MergeTree에서 part mutation을 실행하지 않습니다. #8588 (tavplubix)
  • UNION ALL AST 포맷팅의 사소한 오타를 수정했습니다. #7999 (litao91)
  • 음수에서 발생하던 잘못된 블룸 필터 결과를 수정했습니다. 이 수정으로 #8317 문제가 해결되었습니다. #8566 (Winter Zhang)
  • decompress에서 발생할 수 있는 잠재적인 버퍼 오버플로우를 수정했습니다. 악의적인 사용자가 조작된 압축 데이터를 전달해 버퍼 경계를 벗어난 읽기를 유발할 수 있습니다. 이 문제는 Yandex 정보 보안 팀의 Eldar Zaitov가 발견했습니다. #8404 (alexey-milovidov)
  • 정수 오버플로우로 인해 arrayIntersect에서 잘못된 결과가 반환되던 문제를 수정했습니다. #7777 (Nikolai Kochetov)
  • 이제 OPTIMIZE TABLE 쿼리는 오프라인 레플리카의 작업 완료를 기다리지 않습니다. #8314 (javi santana)
  • Replicated*MergeTree 테이블의 ALTER TTL 파서를 수정했습니다. #8318 (Vladimir Chebotarev)
  • 서버와 클라이언트 간 통신을 수정해, 쿼리 실패 후에도 서버가 임시 테이블 정보를 읽을 수 있도록 했습니다. #8084 (Azat Khuzhin)
  • 집계된 비트맵과 스칼라 비트맵의 교집합을 수행할 때 발생하던 bitmapAnd 함수 오류를 수정했습니다. #8082 (Yue Huang)
  • ZooKeeper Programmer’s Guide에 따라 ZXid의 정의를 다듬어 clickhouse-cluster-copier의 버그를 수정했습니다. #8088 (Ding Xiang Fei)
  • odbc 테이블 함수가 이제 external_table_functions_use_nulls 설정을 따릅니다. #7506 (Vasily Nemkov)
  • 드물게 데이터 레이스를 일으키던 버그를 수정했습니다. #8143 (Alexander Kazakov)
  • 이제 SYSTEM RELOAD DICTIONARYupdate_field를 무시하고 딕셔너리를 전체적으로 다시 로드합니다. 이 변경으로 #7440 문제가 수정되었습니다. #8037 (Vitaly Baranov)
  • CREATE 쿼리에서 딕셔너리 존재 여부를 확인하는 기능을 추가했습니다. #8032 (alesapin)
  • Values 포맷의 Float* 파싱을 수정했습니다. 이로써 #7817 문제가 해결되었습니다. #7870 (tavplubix)
  • 일부 백그라운드 작업에서 공간을 예약할 수 없을 때 *MergeTree 테이블 엔진 계열에서 발생하는 충돌을 수정했습니다. #7873 (Vladimir Chebotarev)
  • SimpleAggregateFunction(LowCardinality) 컬럼이 포함된 테이블에서 머지 작업 수행 시 발생하던 크래시를 수정했습니다. 이 변경으로 #8515가 해결되었습니다. #8522 (Azat Khuzhin)
  • 모든 ICU 로캘 지원을 복원하고 상수 표현식에 콜레이션을 적용할 수 있는 기능을 추가했습니다. 또한 system.collations 테이블에 언어 이름을 추가했습니다. #8051 (alesapin)
  • 최소 lifetime 값이 0인 외부 딕셔너리(LIFETIME(MIN 0 MAX N), LIFETIME(N))가 백그라운드에서 업데이트되지 않는 버그를 수정했습니다. #7983 (alesapin)
  • ClickHouse를 소스로 사용하는 외부 딕셔너리의 쿼리에 서브쿼리가 있을 때 발생하던 충돌을 수정했습니다. #8351 (Nikolai Kochetov)
  • URL 엔진을 사용하는 테이블에서 파일 확장자를 잘못 파싱하는 문제를 수정했습니다. 이 수정으로 #8157 문제가 해결되었습니다. #8419 (Andrey Bodrov)
  • 키가 없는 *MergeTree 테이블의 CHECK TABLE 쿼리 문제를 수정했습니다. #7543를 수정했습니다. #7979 (alesapin)
  • Float64를 MySQL 타입으로 변환하는 문제를 수정했습니다. #8079 (Yuriy Baranov)
  • 이제 서버 충돌로 인해 테이블(table)이 완전히 삭제되지 않은 경우, 서버는 이를 복원해 로드하려고 시도합니다. #8176 (tavplubix)
  • 존재하지 않는 파일에 삽입할 때 테이블 함수 file에서 발생하던 충돌을 수정했습니다. 이제는 이 경우 파일을 먼저 생성한 후 삽입을 처리합니다. #8177 (Olga Khvostikova)
  • trace_log가 활성화된 상태일 때 발생할 수 있는 드문 교착 상태를 수정했습니다. #7838 (filimonov)
  • DDL 쿼리로 생성된 RangeHashed 외부 딕셔너리에서 Date뿐만 아니라 다른 타입도 사용할 수 있도록 했습니다. 7899를 수정했습니다. #8275 (alesapin)
  • 다른 함수의 결과를 인수로 now64()를 호출할 때 발생하던 크래시를 수정했습니다. #8270 (Vasily Nemkov)
  • MySQL wire protocol을 통한 연결에서 클라이언트 IP를 감지하는 버그를 수정했습니다. #7743 (Dmitry Muzyka)
  • arraySplit 함수의 빈 배열 처리 문제를 해결했습니다. 이로써 #7708 문제가 수정되었습니다. #7747 (hcz)
  • 실행 중인 다른 clickhouse-serverpid-file이 삭제될 수 있는 문제를 수정했습니다. #8487 (Weiqing Xu)
  • invalidate_query가 있는 딕셔너리의 재로드를 수정해, 이전 업데이트 시도에서 업데이트가 중단되고 일부 예외가 발생하던 문제를 해결했습니다. #8029 (alesapin)
  • arrayReduce 함수에서 발생하던, “double free”를 유발할 수 있는 오류와 집계 함수 조합자 Resample에서 발생하던, 메모리 누수를 유발할 수 있는 오류를 수정했습니다. 집계 함수 aggThrow를 추가했습니다. 이 함수는 테스트 목적으로 사용할 수 있습니다. #8446 (alexey-milovidov)

개선 사항

  • S3 테이블 엔진 사용 시 로깅이 개선되었습니다. #8251 (Grigory Pervakov)
  • clickhouse-local 호출 시 인수가 전달되지 않으면 도움말 메시지가 출력되도록 했습니다. 이로써 #5335가 수정되었습니다. #8230 (Andrey Nagorny)
  • 설정 mutations_sync를 추가하여 ALTER UPDATE/DELETE 쿼리가 동기적으로 완료될 때까지 기다릴 수 있도록 했습니다. #8237 (alesapin)
  • config.xml에서 상대 경로의 user_files_path를 설정할 수 있도록 했습니다 (format_schema_path와 유사한 방식). #7632 (hcz)
  • -OrZero 접미사가 있는 변환 함수에 유효하지 않은 타입에 대한 예외를 추가했습니다. #7880 (Andrey Konyaev)
  • 분산 쿼리에서 세그먼트로 전송하는 데이터 헤더의 포맷을 단순화했습니다. #8044 (Vitaly Baranov)
  • Live View 테이블 엔진 리팩터링. #8519 (vzakaznikov)
  • DDL 쿼리로 생성된 외부 딕셔너리에 대한 검사 항목을 추가했습니다. #8127 (alesapin)
  • FINALSAMPLE을 함께 사용할 때 발생하던 Column ... already exists 오류를 수정했습니다. 예: select count() from table final sample 1/2. #5186을 해결했습니다. #7907 (Nikolai Kochetov)
  • 이제 joinGet 함수의 첫 번째 인수로 테이블 식별자를 사용할 수 있습니다. #7707 (Amos Bird)
  • 서브쿼리가 있는 Kafka 테이블에서 MaterializedView를 사용할 수 있도록 했습니다. #8197 (filimonov)
  • 이제 디스크 간 백그라운드 이동 작업이 별도의 스레드 풀에서 실행됩니다. #7670 (Vladimir Chebotarev)
  • SYSTEM RELOAD DICTIONARY가 이제 동기 방식으로 실행됩니다. #8240 (Vitaly Baranov)
  • 이제 스택 트레이스에는 가상 메모리 주소(객체 파일이 로드된 위치) 대신 객체 파일 내 실제 주소(오프셋)가 표시됩니다. 따라서 실행 파일이 위치 독립적이고 ASLR이 활성화된 경우에도 addr2line을 사용할 수 있습니다. 이 변경으로 #8360이 해결되었습니다. #8387 (alexey-milovidov)
  • 행 수준 보안 필터를 위한 새 구문 <table name='table_name'>...</table>을 지원합니다. #5779를 수정했습니다. #8381 (Ivan)
  • 이제 cityHash 함수는 DecimalUUID 타입에서도 작동합니다. #5184를 해결했습니다. #7693 (Mikhail Korotov)
  • 적응형 세분화 수준이 구현된 이후에는 더 이상 의미가 없어 system 로그에서 고정 인덱스 세분화 수준(기존 값 1024)을 제거했습니다. #7698 (alexey-milovidov)
  • ClickHouse를 SSL 없이 컴파일한 경우 MySQL 호환 서버를 활성화했습니다. #7852 (Yuriy Baranov)
  • 이제 서버가 분산 배치의 체크섬을 검사하므로, 배치 데이터가 손상된 경우 더 자세한 오류 메시지를 제공합니다. #7914 (Azat Khuzhin)
  • MySQL 데이터베이스 엔진에서 DROP DATABASE, DETACH TABLE, DROP TABLE, ATTACH TABLE을 지원합니다. #8202 (Winter Zhang)
  • S3 테이블 함수와 테이블 엔진에 인증 기능을 추가했습니다. #7623 (Vladimir Chebotarev)
  • 정의되지 않은 디스크에서 데이터 파트가 누락되지 않도록, 서로 다른 디스크에 있는 MergeTree의 추가 파트를 확인하는 검사를 추가했습니다. #8118 (Vladimir Chebotarev)
  • Mac 클라이언트 및 서버의 SSL 지원을 활성화했습니다. #8297 (Ivan)
  • 이제 ClickHouse를 MySQL federated server로 사용할 수 있습니다(https://dev.mysql.com/doc/refman/5.7/en/federated-create-server.html 참조). #7717 (Maxim Fedotov)
  • clickhouse-client는 이제 multiquery가 켜져 있고 multiline이 꺼져 있을 때에만 bracketed-paste를 활성화합니다. 이로써 #7757 문제가 수정되었습니다. #7761 (Amos Bird)
  • if 함수에서 Array(Decimal)을 지원하도록 개선했습니다. #7721 (Artem Zuikov)
  • arrayDifference, arrayCumSumarrayCumSumNegative 함수에서 Decimal 형식을 지원합니다. #7724 (Artem Zuikov)
  • system.dictionaries 테이블에 lifetime 컬럼이 추가되었습니다. #6820 #7727 (kekekekule)
  • 서로 다른 디스크에 있는 기존 파트에 대해 *MergeTree 테이블 엔진의 확인 기능을 개선했습니다. #7660을 해결했습니다. #8440 (Vladimir Chebotarev)
  • AWS SDK와의 S3 통합으로 별도 설정 없이 모든 S3 기능을 즉시 사용할 수 있습니다. #8011 (Pavel Kovalenko)
  • Live View 테이블에서 서브쿼리 지원이 추가되었습니다. #7792 (vzakaznikov)
  • TTL 표현식에서 Date 또는 DateTime 컬럼 사용 여부를 확인하는 검사가 제거되었습니다. #7920 (Vladimir Chebotarev)
  • system.detached_parts 테이블에 디스크 정보가 추가되었습니다. #7833 (Vladimir Chebotarev)
  • 이제 설정 max_(table|partition)_size_to_drop은 재시작하지 않고도 변경할 수 있습니다. #7779 (Grigory Pervakov)
  • 오류 메시지의 사용성이 약간 더 개선되었습니다. 사용자에게 Stack trace: 아래의 줄을 제거하지 말라고 요청합니다. #7897 (alexey-milovidov)
  • #7935 이후 다양한 포맷의 Kafka 엔진 메시지를 더 잘 읽을 수 있게 개선되었습니다. #8035 (Ivan)
  • sha2_password 인증 플러그인을 지원하지 않는 MySQL 클라이언트와의 호환성이 개선되었습니다. #8036 (Yuriy Baranov)
  • MySQL 호환 서버에서 더 많은 컬럼 타입을 지원합니다. #7975 (Yuriy Baranov)
  • 기반 MergeTree 테이블을 사용하는 Merge, Buffer, Materilized View 스토리지에 ORDER BY 최적화를 구현했습니다. #8130 (Anton Popov)
  • 이제는 구형 커널(< 3.17)과의 호환성을 높이기 위해 getrandom에 대해 항상 POSIX 구현을 사용합니다. #7940 (Amos Bird)
  • move TTL 규칙의 대상 유효성을 더 잘 확인합니다. #8410 (Vladimir Chebotarev)
  • Distributed 테이블 엔진에서 손상된 삽입 배치에 대한 검사 개선. #7933 (Azat Khuzhin)
  • 향후 뮤테이션에서 처리해야 할 파트 이름의 배열이 담긴 컬럼을 system.mutations 테이블에 추가했습니다. #8179 (alesapin)
  • 프로세서를 위한 병렬 머지 정렬 최적화. #8552 (Nikolai Kochetov)
  • 설정 mark_cache_min_lifetime은 이제 더 이상 사용되지 않으며 아무 동작도 하지 않습니다. 이전 버전에서는 mark_cache_min_lifetime초 동안의 데이터를 수용하기 위해 마크 캐시가 메모리에서 mark_cache_size보다 더 커질 수 있었습니다. 이로 인해 혼란이 발생하고 예상보다 메모리 사용량이 높아졌으며, 특히 메모리가 제한된 시스템에서는 더욱 문제가 되었습니다. 이 릴리스를 설치한 후 성능이 저하되면 mark_cache_size를 늘려야 합니다. #8484 (alexey-milovidov)
  • tid를 모든 곳에서 사용할 수 있도록 준비했습니다. 이는 #7477에 필요합니다. #8276 (alexey-milovidov)

성능 개선

  • processors 파이프라인 성능 최적화. #7988 (Nikolai Kochetov)
  • 기존 값을 계속 읽을 수 있는 상태에서 cache 딕셔너리의 만료된 키를 비차단 방식으로 업데이트합니다. #8303 (Nikita Mikhaylov)
  • 레지스터를 하나 더 확보하기 위해 ClickHouse 전체를 -fno-omit-frame-pointer 없이 컴파일합니다. #8097 (Amos Bird)
  • greatCircleDistance 함수의 성능을 개선하고 이에 대한 성능 테스트를 추가했습니다. #7307 (Olga Khvostikova)
  • 함수 roundDown의 성능을 개선했습니다. #8465 (alexey-milovidov)
  • DateTime64 데이터 타입에서 max, min, argMin, argMax의 성능이 개선되었습니다. #8199 (Vasily Nemkov)
  • LIMIT이 없거나 LIMIT 값이 큰 경우의 정렬과 외부 정렬 성능을 개선했습니다. #8545 (alexey-milovidov)
  • 부동소수점 수를 포맷하는 성능을 최대 6배까지 개선했습니다. #8542 (alexey-milovidov)
  • modulo 함수 성능을 개선했습니다. #7750 (Amos Bird)
  • 단일 컬럼 키에 대한 ORDER BY 및 병합을 최적화했습니다. #8335 (alexey-milovidov)
  • arrayReduce, -Array, -State 컴비네이터 구현이 개선되었습니다. #7710 (Amos Bird)
  • 이제 PREWHERE는 최소한 WHERE만큼 효율적이도록 최적화되었습니다. #7769 (Amos Bird)
  • roundroundBankers의 음수 처리 방식을 개선했습니다. #8229 (hcz)
  • DoubleDeltaGorilla 코덱의 디코딩 성능이 약 30~40% 향상되었습니다. 이 변경으로 #7082가 해결되었습니다. #8019 (Vasily Nemkov)
  • base64 관련 함수 성능이 개선되었습니다. #8444 (alexey-milovidov)
  • 함수 geoDistance를 추가했습니다. 이 함수는 greatCircleDistance와 유사하지만 WGS-84 타원체 모델의 근사값을 사용합니다. 두 함수의 성능은 거의 동일합니다. #8086 (alexey-milovidov)
  • Decimal 데이터 타입용 minmax 집계 함수가 더 빨라졌습니다. #8144 (Artem Zuikov)
  • arrayReduce 처리를 벡터화했습니다. #7608 (Amos Bird)
  • if 체인은 이제 multiIf로 최적화되어 처리됩니다. #8355 (kamalov-ruslan)
  • 19.15에서 발생한 Kafka 테이블 엔진의 성능 회귀를 수정했습니다. 이로써 #7261이 해결됩니다. #7935 (filimonov)
  • Debian 패키지의 gcc가 간혹 기본적으로 적용하는 “pie” 코드 생성을 제거했습니다. #8483 (alexey-milovidov)
  • 데이터 포맷 병렬 파싱 #6553 (Nikita Mikhaylov)
  • 표현식이 포함된 Values에 대한 최적화된 파서를 기본적으로 활성화했습니다 (input_format_values_deduce_templates_of_expressions=1). #8231 (tavplubix)

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

  • ARM 및 최소 모드 빌드 수정. #8304 (proller)
  • clickhouse-server에서 std::atexit가 호출되지 않을 때 커버리지 파일 플러시를 추가했습니다. 또한 커버리지를 사용하는 상태 비저장 테스트의 로깅도 약간 개선했습니다. #8267 (alesapin)
  • contrib의 LLVM 라이브러리를 업데이트했습니다. OS 패키지의 LLVM을 사용하지 않도록 했습니다. #8258 (alexey-milovidov)
  • 번들된 curl build가 완전히 조용히 수행되도록 합니다. #8232 #8203 (Pavel Kovalenko)
  • 몇 가지 MemorySanitizer 경고를 수정했습니다. #8235 (Alexander Kuzmenkov)
  • CMakeLists.txt에서 add_warningno_warning 매크로를 사용하도록 했습니다. #8604 (Ivan)
  • 통합 테스트를 개선하기 위해 Minio S3 호환 객체 스토리지(https://min.io/) 지원을 추가했습니다. #7863 #7875 (Pavel Kovalenko)
  • libc 헤더를 contrib에 추가했습니다. 이를 통해 다양한 시스템에서 빌드를 더 일관되게 만들 수 있습니다(x86_64-linux-gnu에만 해당). #5773 (alexey-milovidov)
  • 일부 라이브러리에서 -fPIC을 제거했습니다. #8464 (alexey-milovidov)
  • curl용 CMakeLists.txt를 정리했습니다. https://github.com/ClickHouse/ClickHouse/pull/8011#issuecomment-569478910을(를) 참조하십시오. #8459 (alexey-milovidov)
  • CapNProto 라이브러리의 경고를 숨기도록 했습니다. #8220 (alexey-milovidov)
  • 짧은 문자열에 최적화된 해시 테이블용 성능 테스트를 추가했습니다. #7679 (Amos Bird)
  • 이제 MADV_FREE를 사용할 수 없어도 ClickHouse가 AArch64에서 빌드됩니다. 이 변경으로 #8027이 수정되었습니다. #8243 (Amos Bird)
  • 메모리 새니타이저 관련 문제를 해결하기 위해 zlib-ng를 업데이트했습니다. #7182 #8206 (Alexander Kuzmenkov)
  • OS 패키지 사용은 매우 불안정하고 대개 거의 전혀 작동하지 않으므로, Linux 이외의 시스템에서는 내부 MySQL 라이브러리를 활성화합니다. 이 변경으로 #5765가 해결됩니다. #8426 (alexey-milovidov)
  • 일부 시스템에서 libc++ 활성화 후 발생하던 빌드 문제가 수정되었습니다. 이는 #8374를 대체합니다. #8380 (alexey-milovidov)
  • 더 많은 오류를 발견할 수 있도록 Field 메서드의 타입 안정성을 높였습니다. #7386 #8209 (Alexander Kuzmenkov)
  • libc-headers submodule에 누락된 파일을 추가했습니다. #8507 (alexey-milovidov)
  • 성능 테스트 출력에서 JSON 따옴표 처리가 잘못되던 문제를 수정했습니다. #8497 (Nikolai Kochetov)
  • 이제 std::exceptionPoco::Exception에 대해서도 stack trace가 표시됩니다. 이전 버전에서는 DB::Exception에 대해서만 표시되었습니다. 이로써 진단 기능이 개선됩니다. #8501 (alexey-milovidov)
  • 최신 glibc 버전을 지원하도록 clock_gettimeclock_nanosleep을 이식했습니다. #8054 (Amos Bird)
  • 개발자용 예시 구성에서 part_log를 활성화했습니다. #8609 (alexey-milovidov)
  • 01036_no_superfluous_dict_reload_on_create_database*에서 reload의 비동기 동작을 수정했습니다. #8111 (Azat Khuzhin)
  • 코덱 성능 테스트를 수정했습니다. #8615 (Vasily Nemkov)
  • .tgz 빌드용 설치 스크립트와 관련 문서를 추가했습니다. #8612 #8591 (alesapin)
  • 오래된 ZSTD 테스트를 제거했습니다(이 테스트는 1.0 이전 버전의 ZSTD에 있던 버그를 재현하기 위해 2016년에 작성되었습니다). 이로써 #8618가 해결되었습니다. #8619 (alexey-milovidov)
  • Mac OS Catalina에서의 빌드 문제가 수정되었습니다. #8600 (meo)
  • 결과가 더 눈에 띄도록 코덱 성능 테스트의 행 수를 늘렸습니다. #8574 (Vasily Nemkov)
  • 디버그 빌드에서는 LOGICAL_ERROR 예외를 어설션 실패로 처리해 더 쉽게 발견할 수 있도록 했습니다. #8475 (Alexander Kuzmenkov)
  • 포맷 관련 성능 테스트의 재현성을 높입니다. #8477 (alexey-milovidov)
  • MemorySanitizer 오류를 해결하기 위해 lz4를 업데이트했습니다. #8181 (Alexander Kuzmenkov)
  • 예외 처리에서 알려진 MemorySanitizer 오탐(false positive)을 억제했습니다. #8182 (Alexander Kuzmenkov)
  • build/docker/build.sh에서 gccg++를 버전 9로 업데이트 #7766 (TLightSky)
  • PREWHEREWHERE보다 성능이 더 나쁨을 검증하는 성능 테스트 케이스를 추가했습니다. #7768 (Amos Bird)
  • 불안정한 테스트 하나를 수정하는 작업이 진전되었습니다. #8621 (alexey-milovidov)
  • libunwind에서 가져온 데이터로 인해 MemorySanitizer 보고가 발생하지 않도록 했습니다. #8539 (alexey-milovidov)
  • libc++를 최신 버전으로 업데이트했습니다. #8324 (alexey-milovidov)
  • ICU 라이브러리를 소스 코드에서 직접 빌드합니다. 이로써 #6460 문제가 해결됩니다. #8219 (alexey-milovidov)
  • libressl에서 openssl로 전환했습니다. 이 변경 후 ClickHouse는 TLS 1.3과 SNI를 지원합니다. 이로써 #8171이 해결됩니다. #8218 (alexey-milovidov)
  • SSL의 chacha20_poly1305를 사용할 때 발생하는 UBSan 경고를 수정했습니다(https://yandex.ru/에 연결할 때 발생). #8214 (alexey-milovidov)
  • .deb Linux 배포판의 기본 비밀번호 파일의 권한 모드를 수정했습니다. #8075 (proller)
  • clickhouse-test에서 clickhouse-server PID를 가져오는 표현식을 개선했습니다. #8063 (Alexander Kazakov)
  • contrib/googletest를 v1.10.0으로 업데이트했습니다. #8587 (Alexander Burmak)
  • base64 라이브러리의 ThreadSaninitizer 보고서 관련 문제를 수정했습니다. 또한 이 라이브러리를 최신 버전으로 업데이트했지만, 이는 중요하지 않습니다. 이로써 #8397 문제가 수정됩니다. #8403 (alexey-milovidov)
  • 00600_replace_running_query의 processors 관련 문제를 수정했습니다. #8272 (Nikolai Kochetov)
  • CMakeLists.txt를 간소화하기 위해 tcmalloc 지원을 제거했습니다. #8310 (alexey-milovidov)
  • 릴리스용 gcc 빌드에서는 이제 libstdc++ 대신 libc++를 사용합니다. 최근까지 libc++는 clang에서만 사용되었습니다. 이 변경으로 빌드 구성의 일관성과 이식성이 향상됩니다. #8311 (alexey-milovidov)
  • MemorySanitizer 빌드에서 ICU 라이브러리를 사용할 수 있도록 했습니다. #8222 (alexey-milovidov)
  • CapNProto 라이브러리 경고를 억제했습니다. #8224 (alexey-milovidov)
  • tcmalloc는 더 이상 지원되지 않으므로 관련 코드의 예외 처리를 제거했습니다. #8225 (alexey-milovidov)
  • CI 커버리지 작업에서 커버리지 보고서를 저장할 수 있도록 server를 정상적으로 종료합니다. 이렇게 하면 최근 발생하던 불완전한 커버리지 보고서 문제가 해결됩니다. #8142 (alesapin)
  • Float64UInt64 값에 대한 모든 코덱의 성능 테스트. #8349 (Vasily Nemkov)
  • termcap은 사실상 Deprecated 상태이며 여러 문제(예: “up” cap 누락, 여러 줄 대신 ^J가 에코되는 문제)를 일으켰습니다. terminfo 또는 함께 제공되는 ncurses를 사용하십시오. #7737 (Amos Bird)
  • test_storage_s3 통합 테스트를 수정했습니다. #7734 (Nikolai Kochetov)
  • 실제로 디스크에 쓰지 않고도 지정된 포맷 파일에 block을 삽입할 수 있도록 StorageFile(<format>, null) 을 지원합니다. 이는 성능 테스트에 필요합니다. #8455 (Amos Bird)
  • 테스트별 실행 시간을 출력하는 인수 --print-time을 기능 테스트에 추가했습니다. #8001 (Nikolai Kochetov)
  • RPN을 평가하는 동안 KeyCondition에 assert를 추가했습니다. 이로써 gcc-9에서 발생하던 경고가 해결됩니다. #8279 (alexey-milovidov)
  • CI 빌드에서 cmake 옵션을 출력하도록 했습니다. #8273 (Alexander Kuzmenkov)
  • 일부 용량이 큰 라이브러리의 디버그 정보를 생성하지 않도록 했습니다. #8271 (alexey-milovidov)
  • log_to_console.xml이 대화형인지 여부와 관계없이 항상 stderr로 로그를 기록하도록 변경했습니다. #8395 (Alexander Kuzmenkov)
  • clickhouse-performance-test 도구에서 미사용 기능 일부를 제거했습니다. #8555 (alexey-milovidov)
  • 이제 해당 clang-X 버전에 맞는 lld-X도 함께 검색하도록 했습니다. #8092 (alesapin)
  • Parquet 빌드 개선. #8421 (maxulan)
  • GCC 경고 추가 #8221 (kreuzerkrieg)
  • 이제 Arch Linux용 패키지로 클라이언트뿐만 아니라 ClickHouse 서버도 실행할 수 있습니다. #8534 (Vladimir Chebotarev)
  • processors 관련 테스트를 수정했습니다. 사소한 성능 개선을 적용했습니다. #7672 (Nikolai Kochetov)
  • contrib/protobuf를 업데이트했습니다. #8256 (Matwey V. Kornilov)
  • 새해를 기념해 c++20으로 전환할 준비를 했습니다. “C++의 포스가 ClickHouse와 함께하기를.” #8447 (Amos Bird)

실험적 기능

  • 실험적 설정 min_bytes_to_use_mmap_io를 추가했습니다. 이 설정을 사용하면 커널에서 사용자 공간으로 데이터를 복사하지 않고 큰 파일을 읽을 수 있습니다. 기본적으로는 비활성화되어 있습니다. mmap/munmap은 느리므로 권장 임계값은 약 64 MB입니다. #8520 (alexey-milovidov)
  • 액세스 제어 시스템의 일부로 쿼터를 개편했습니다. 새 테이블 system.quotas, 새 함수 currentQuota, currentQuotaKey, 새 SQL 구문 CREATE QUOTA, ALTER QUOTA, DROP QUOTA, SHOW QUOTA를 추가했습니다. #7257 (Vitaly Baranov)
  • 예외를 발생시키는 대신 경고를 표시하고 알 수 없는 설정은 건너뛸 수 있도록 했습니다. #7653 (Vitaly Baranov)
  • 액세스 제어 시스템의 일부로 행 정책을 개편했습니다. 새 테이블 system.row_policies, 새 함수 currentRowPolicies(), 새 SQL 구문 CREATE POLICY, ALTER POLICY, DROP POLICY, SHOW CREATE POLICY, SHOW POLICIES를 추가했습니다. #7808 (Vitaly Baranov)

보안 수정

  • File 테이블 엔진을 사용하는 테이블에서 디렉터리 구조를 읽을 수 있는 취약점을 수정했습니다. 이 수정으로 #8536 문제가 해결되었습니다. #8537 (alexey-milovidov)
마지막 수정일 2026년 6월 10일