2020 변경 로그
ClickHouse 20.12 릴리스
ClickHouse v20.12.5.14-stable 릴리스, 2020-12-28
버그 수정
- 병합 중 AIO를 사용한 쓰기를 비활성화했습니다. 병합 과정에서 프라이머리 키 컬럼의 데이터가 극히 드물게 손상될 수 있기 때문입니다. #18481 (alesapin).
Nullable(String)타입의 인자를 사용하여toType(...)함수들(toDate,toUInt32등)을 실행할 때 발생하던value is too short오류를 수정했습니다. 이제 이러한 함수들은 예외를 던지는 대신 파싱 오류 발생 시NULL을 반환합니다. #7673 이슈를 수정합니다. #18445 (tavplubix).- 와이드 파트에서 콤팩트 파트로의 병합을 제한했습니다. 수직 병합인 경우 결과 파트가 손상되는 문제가 있었습니다. #18381 (Anton Popov).
system.settings_profile_elements테이블이 채워지는 방식을 수정했습니다. 이 PR은 #18231 이슈를 수정합니다. #18379 (Vitaly Baranov).Distinct조합자를 사용하는 집계 함수에서 2단계 집계를 사용할 때 발생할 수 있는 크래시를 수정했습니다. #17682 이슈를 수정합니다. #18365 (Anton Popov).MODIFY COLUMN ... REMOVE TTL쿼리가 실제로 컬럼 TTL을 제거하지 않던 오류를 수정했습니다. #18130 (alesapin).
빌드/테스트/패키징 개선
ClickHouse 릴리스 v20.12.4.5-stable, 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). - MySQL에서 ClickHouse로 일부 테이블이 동기화되지 않던 문제를 수정했습니다. 이는
MaterializeMySQL에서 MySQL 프리픽스 인덱스 변환을 지원하지 않았던 것이 원인이었습니다. 이 수정으로 #15187 및 #17912가 해결됩니다. #17944 (Winter Zhang). ARRAY JOIN을 포함하는 쿼리에서, 쿼리 최적화로 인해 잘못된 결과가 생성되던 문제를 수정했습니다. #17887 (sundyli).topK집계 함수에서 발생할 수 있었던 세그멘테이션 폴트를 수정했습니다. 이 수정으로 #17404가 해결됩니다. #17845 (Maksim Kita).- 서버가 데몬 모드로 실행 중일 때
system.stack_trace테이블이 비어 있던 문제를 수정했습니다. #17630 (Amos Bird).
ClickHouse 릴리스 v20.12.3.3-stable, 2020-12-13
하위 호환성이 없는 변경 사항
- 기본값으로
use_compact_format_in_distributed_parts_names를 활성화합니다(자세한 내용은 문서를 참조하십시오). #16728 (Azat Khuzhin). File엔진을 사용하는 테이블을 생성할 때, 파일 포맷과 관련된 사용자 설정(예:format_csv_delimiter)을SETTINGS절에서 지정할 수 있으며, 이러한 설정이 모든INSERT및SELECT에 사용됩니다. 현재 사용자 세션에서 변경된 파일 포맷 설정이나, 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 입력/출력 포맷을 사용할 때, 이름이 지정된 튜플(named tuple)을 JSON 객체로 포맷할 수 있도록 했습니다. 이 기능은 기본적으로 비활성화되어 있으며
output_format_json_named_tuples_as_objects설정으로 제어됩니다. #17175 (Alexander Kuzmenkov). - 기본적으로 TSV 및 CSV 포맷에서 enum 값을 해당 ID로 입력할 수 있는 기능을 추가했습니다. #16834 (Kruglov Pavel).
- 널 허용(Nullable), LowCardinality, Array, Tuple 타입(내부 타입이 String인 경우)에 대해 COLLATE 지원을 추가했습니다. 또한 ColumnString.cpp에서 정렬(collation)과 관련된 코드를 리팩터링했습니다. #16273 (Kruglov Pavel).
- 새로운
tcpPort함수가 이 서버가 수신 대기 중인 TCP 포트를 반환합니다. #17134 (Ivan). - 다음 수학 함수를 새로 추가했습니다:
acosh,asinh,atan2,atanh,cosh,hypot,log1p,sinh. #16636 (Konstantin Malanchev). - 서로 다른 레플리카 간에 머지(merge) 작업을 분산할 수 있는 기능을 추가했습니다.
execute_merges_on_single_replica_time_thresholdMergeTree 설정을 도입했습니다. #16424 (filimonov). - SQL 표준 호환성을 위해
aggregate_functions_null_for_empty설정을 추가했습니다. 이 옵션은 쿼리 내 모든 집계 함수 이름을 -OrNull 접미사가 추가되도록 다시 작성합니다. 10273 이슈를 구현했습니다. #16123 (flynn). - 문자열 Date 리터럴 형식을 허용하도록 DateTime, DateTime64 파싱을 업데이트했습니다. #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_size가min_compress_block_size로 잘못 초기화되던 문제를 수정합니다. #17833 (flynn). - 삭제 가능한 테이블의 최대 크기와 관련된 예외 메시지가 잘못 표시되고 있었습니다. #17764 (alexey-milovidov).
Distributed테이블에 데이터를 삽입할 때 공간이 부족할 경우 발생할 수 있는 세그멘테이션 폴트를 수정했습니다. #17737 (tavplubix).- ClickHouse가 MySQL 서버에 대한 연결을 재수립하지 못하던 문제를 수정했습니다. #17681 (Alexander Kazakov).
pool_size> 1일 때 레이스 컨디션으로 인해ON CLUSTER쿼리를 실행할 때 클러스터가 순환(교차) 복제 구성인지 여부가 잘못 판별될 수 있었습니다. 이 문제가 수정되었습니다. #17640 (tavplubix).fmt::v7::format_error예외가 MergeTree 테이블에서 백그라운드로 로그에 기록될 수 있습니다. 이를 통해 #17613이(가) 수정되었습니다. #17615 (alexey-milovidov).- clickhouse-client를 대화형 모드에서 여러 줄 쿼리와 함께 사용할 때, 한 줄 주석이 잘못 처리되어 쿼리 끝까지 적용되었습니다. 이 변경으로 #13654 문제가 수정되었습니다. #17565 (alexey-milovidov).
- 해당 mutation이 다른 레플리카에서 kill된 경우 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).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_table이AS table_function()으로 생성된 경우CREATE TABLE ... AS some_table쿼리에서 발생하던 크래시를 수정했습니다. 이 변경으로 #16944가 해결되었습니다. #17072 (tavplubix).- 함수
fuzzBits의 미완성 구현으로 인한 버그, 관련 이슈: #16980. #17051 (hexiaoting). - CFA 레지스터가 RAX인 경우를 처리하기 위해 LLVM libunwind를 수정합니다. 이는 LLVM libunwind에 존재하는 버그입니다. 이 버그에 대해서는 이미 우회 코드가 포함되어 있습니다. #17046 (alexey-milovidov).
- 실행 중에 취소될 수 있는(예:
LIMIT이 있는 쿼리) 원격 쿼리에서 불필요한 네트워크 오류가 발생하지 않도록 했습니다. #17006 (Azat Khuzhin). - OFFSET만 사용하는 쿼리에 대해 기본적으로 비활성화된
optimize_distributed_group_by_sharding_key설정을 수정합니다. #16996 (Azat Khuzhin). - JOIN을 사용하는 분산 테이블 위에 구성된 Merge 테이블에 대한 수정. #16993 (Azat Khuzhin).
- double에서 big integer(128, 256비트) 정수형으로 형 변환할 때 잘못된 결과가 나오는 문제를 수정했습니다. big integer 지원은 실험적 기능입니다. #16986 (Mike).
ALTER TABLE ... MODIFY COLUMN ... NewType이후,SELECT문에서 변경 중인 컬럼을 대상으로 하는WHERE절을 사용하고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).- 쿼리 프로파일러가 켜져 있고, 일부 함수에 대해 비동기 언와인드 테이블이 (추정컨대) 깨져 있는 glibc 버전이 설치된 OS에 ClickHouse가 설치된 경우 발생하는 드문 silent crash를 수정합니다. 이 변경으로 #15301이 해결됩니다. 이 변경으로 #13098이 해결됩니다. #16846 (alexey-milovidov).
- 인수 없이
any를 사용할 때 발생하던 크래시 문제를 수정합니다. #16803을 위한 변경입니다. cc @azat. #16826 (Amos Bird). - 디스크에 테이블 메타데이터를 기록하는 동안 메모리를 할당하지 못하면 손상된 메타데이터 파일이 기록될 수 있습니다. #16772 (alexey-milovidov).
- 파티션 조건을 사용하는 단순 쿼리 최적화를 수정했습니다. #16767 (Azat Khuzhin).
transform_null_inSETTING이 활성화된 상태에서 여러 컬럼과 튜플에 대한IN연산자의 동작을 수정합니다. 이슈 #15310을(를) 해결합니다. #16722 (Anton Popov).- MySQL 프로토콜을 통해 실행되는
INSERT쿼리에 대해 영향받은 행(row) 수를 반환하도록 했습니다. 이전에는 ClickHouse가 항상 0을 반환했으며, 이 동작이 수정되었습니다. 이로써 #16605가 해결되었습니다. #16715 (Winter Zhang). if접미사를 사용하는 집계 함수를 사용할 때 발생하던 원격 쿼리 실패 문제를 수정합니다. #16574, #16231, #16610 이슈를 해결합니다 (Winter Zhang).select_sequential_consistency로 인해 최적화된 단순 count 쿼리와 system.tables에서 발생하던 일관되지 않은 동작을 수정했습니다. #16309 (Hao Chen).
개선 사항
- TTL, mutation 또는 collapsing merge 알고리즘으로 인해 내용이 모두 제거되어 비게 된 파트를 삭제합니다. #16895 (Anton Popov).
- 분산 테이블에서 비동기 전송 시 디렉터리 이름에 compact 형식을 사용하도록 활성화했습니다:
use_compact_format_in_distributed_parts_names의 기본값은 1입니다. #16788 (Azat Khuzhin). - S3에 어떤 데이터도 기록되지 않은 경우 multipart 업로드를 취소합니다. #16840 (Pavel Kovalenko).
- 오류 발생 시
format_avro_schema_registry_url의 IP 주소를 다시 조회하도록 했습니다. #16985 (filimonov). - system.distribution_queue의 data_path에 있는 비밀번호를 마스킹합니다. #16727 (Azat Khuzhin).
- 존재하지 않는 컬럼을 column transformer를 사용해 대체하려 할 경우 오류를 발생시키도록 했습니다. #16183 (hexiaoting).
- 모든 스레드가 동시에 동작하기에 충분한 메모리가 없을 때는 병렬 파싱을 비활성화합니다. 또한 사용자가 매우 거대한 행(> min_chunk_bytes_for_parallel_parsing)을 삽입하려 할 때 「Memory limit exceeded」와 같은 예외가 발생할 수 있습니다. 파싱할 각 조각은 하나 이상의 문자열로 이루어진 독립적인 문자열 집합이어야 하기 때문입니다. #16721 (Nikita Mikhaylov).
- 설치 스크립트는 항상 설정 폴더 내에 하위 디렉터리를 생성해야 합니다. 이는 사용자 정의 설정을 사용하는 Docker 빌드에만 해당합니다. #16936 (filimonov).
- JSONEachRow, JSONCompactEachRow, RegexpRow 입력 형식의 오류 메시지 문법을 교정했습니다. #17205 (nico piderman).
SOURCE(CLICKHOUSE(...))의 기본host및port매개변수를 현재 인스턴스를 사용하도록 설정하고, 기본user값을'default'로 설정합니다. #16997 (vdimir).ATTACH/DETACH TABLE <DICTIONARY>를 수행할 때 더 구체적인 오류 메시지를 출력합니다. 이 PR 이전에는detach table <dict>가 동작하지만, 인메모리 메타데이터가 비정상적인 형식이 되는 문제가 있었습니다. #16885 (Amos Bird).- cutToFirstSignificantSubdomainWithWWW() 함수를 추가했습니다. #16845 (Azat Khuzhin).
- 잘못된 설정이 주어져(
metric_log.collect_interval_milliseconds가 누락된 경우) 서버가 시작되지 않고 예외 메시지를 출력하도록 했습니다. #16815 (Ivan). - 분산 DDL 구성이 없는 경우를 위한 예외 메시지가 더 명확해졌습니다. #5075를 수정합니다. #16769 (Nikita Mikhaylov).
- 사용성 개선:
CREATE TABLE쿼리에서CODEC표현식이 잘못 배치되었을 때 구문 오류 메시지에서 보다 적절한 제안을 제공합니다. #12493을(를) 수정합니다. #16768 (alexey-milovidov). - Distributed 엔진 시작 시 비동기 INSERT용 빈 디렉터리를 제거합니다. #16729 (Azat Khuzhin).
- nginx 서버를 프록시로 사용하여 S3에 접근할 때를 위한 우회 방법입니다. 현재 nginx는
http://domain.com?delete와 같이 경로가 비어 있는 URL을 허용하지 않지만, 기본 aws-sdk-cpp는 이러한 형태의 URL을 생성합니다. 이 커밋에서는 패치된 aws-sdk-cpp 버전을 사용하여, 이러한 경우 경로로 "/"를 포함한http://domain.com/?delete와 같은 URL을 생성합니다. #16709 (ianton-ru). reinterpretAs*FUNCTION이 동일한 크기의 정수 및 부동 소수점 타입에서 동작하도록 허용합니다. 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()가 Bloom 필터를 사용하도록 변경했습니다. #14977 (achimbab).
성능 향상
- Floyd-Rivest 알고리즘을 사용합니다. ClickHouse의 부분 정렬 use case에 가장 적합한 알고리즘입니다. 벤치마크는 https://github.com/danlark1/miniselect 및 여기에서 확인할 수 있습니다. #16825 (Danila Kutenin).
- 이제
ReplicatedMergeTree테이블 엔진 계열은 복제 fetch 작업을 위해 별도의 스레드 풀을 사용합니다. 풀의 크기는 서버 재시작 시 조정할 수 있는background_fetches_pool_size설정으로 제한됩니다. 이 설정의 기본값은 3이며, 이는 동시에 실행될 수 있는 최대 병렬 fetch 개수가 3개라는 의미입니다(이를 통해 10G 네트워크를 충분히 활용할 수 있습니다). #520을 수정합니다. #16390 (alesapin). quantileTDigest상태가 통제되지 않고 커지는 문제를 수정했습니다. #16680 (hrissan).EXPLAIN에VIEW서브쿼리 설명을 추가했습니다.VIEW에 대한 limit 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). - 이제 완전 일치하는 경우 파티션을 안전하게 프루닝(pruning)할 수 있습니다. 유용한 사례: 테이블이
intHash64(x) % 100으로 파티셔닝되어 있고, 쿼리에 x가 아니라intHash64(x) % 100에 대한 조건이 그대로 포함되어 있는 경우에 사용할 수 있습니다. #16253 (Amos Bird).
실험적 기능
빌드/테스트/패키징 개선
- 이미지 빌드를 위한 테스트 커버리지를 개선했습니다. #17233 (alesapin).
- 내장 타임존 데이터를 버전 2020d로 업데이트했습니다 (또한 cctz도 최신 master로 업데이트했습니다). #17204 (filimonov).
- Poco에서 UBSan 리포트를 수정했습니다. #12719를 해결했습니다. #16765 (alexey-milovidov).
- 서드파티 라이브러리에 UBSan을 적용하지 않도록 했습니다. #16764 (alexey-milovidov).
- 캐시 딕셔너리에서 UBSan 리포트를 수정했습니다. #12641를 해결했습니다. #16763 (alexey-milovidov).
- 무한대 부동소수점 숫자를 정수로 변환하려 할 때 발생하는 UBSan 리포트를 수정했습니다. #14190를 해결했습니다. #16677 (alexey-milovidov).
ClickHouse 릴리스 20.11
ClickHouse 릴리스 v20.11.7.16-stable, 2021-03-02
Improvement
버그 수정 사항
- BloomFilter 인덱스의 크래시를 수정합니다. #19757를 해결합니다. #19884 (Maksim Kita).
- system.text_log이 활성화되어 있을 때 교착 상태가 발생할 수 있었습니다. 이 문제를 해결했습니다 #19874. #19875 (alexey-milovidov).
- 이전 버전에서는 함수 arrayEnumerateUniq에 특이한 인수 값을 전달할 경우 충돌이 발생하거나 무한 루프에 빠질 수 있었습니다. 이 수정으로 #19787이(가) 해결되었습니다. #19788 (alexey-milovidov).
- 산술 타입과 문자열 타입을 정확한 비교를 수행할 때 발생하던 스택 오버플로우 문제를 수정했습니다. #19773 (tavplubix).
bitmapAndnot함수에서 발생하던 세그멘테이션 폴트를 수정했습니다. #19668 이슈를 해결했습니다. #19713 (Maksim Kita).- 일부 big integer를 사용하는 함수에서 세그폴트가 발생할 수 있습니다. big integer는 실험적 기능입니다. 이 변경으로 #19667가 수정됩니다. #19672 (alexey-milovidov).
LowCardinality인수에서neighbor함수의 잘못된 결과를 수정합니다. 관련 이슈 #10333를 해결합니다. #19617 (Nikolai Kochetov).- 연결이 끊어진 후 Connection에서 CompressedWriteBuffer에 대한 use-after-free 버그를 수정합니다. #19599 (Azat Khuzhin).
DROP/DETACH TABLE table ON CLUSTER cluster SYNC쿼리가 응답 없이 멈출 수(hang) 있는 문제가 있었으며, 이를 수정했습니다. #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).- 동시에 실행되는
ALTER및DROP쿼리가 ReplicatedMergeTree 테이블을 처리하는 동안 멈춰 버릴 수 있던 버그를 수정했습니다. #19237 (alesapin). ORC포맷에서 파일을 무한히 읽던 문제를 수정했습니다(#10580에서 도입됨). #19095를 수정했습니다. #19134 (Nikolai Kochetov).- 시작 시 ClickHouse가
LowCardinality(Nullable(...))에서 압축 코덱을 읽지 못해Attempt to read after EOF예외를 던지던 버그를 수정합니다. #18340를 수정합니다. #19101 (alesapin). - HTTP 인터페이스를 통해
Template또는CustomSeparated포맷으로 데이터를 삽입할 때 발생하던There is no checkpoint오류를 수정했습니다. #19021를 수정했습니다. #19072 (tavplubix). - 이전 구문으로 생성된
MergeTree테이블에 대해MODIFY TTL쿼리를 제한합니다. 이전에는 쿼리가 성공했지만 실제로는 아무 효과도 없었습니다. #19064 (Anton Popov). - Enum 타입 인수에 대해
groupUniqArray가 올바른 타입을 반환하도록 수정했습니다. 이로써 #17875 이슈가 해결되었습니다. #19019 (alexey-milovidov). LowCardinality인수를 사용하는 함수ignore사용 시 발생할 수 있는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).
- 일부 이스케이프된 텍스트(예:
ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1'))를 포함한 mutation 쿼리가 잘못 직렬화되던 버그를 수정했습니다. #18878 이슈를 해결했습니다. #18944 (alesapin). - ATTACH 파티션 시 뮤테이션이 초기화되도록 수정했습니다. #18804. #18935 (fastio).
- clickhouse-local 종료 시 발생할 수 있는 중단(hang) 문제를 수정했습니다. #18891 이슈를 해결합니다. #18893 (alexey-milovidov).
- 단항 함수와 널 허용 데이터 타입에서 *If 조합자를 수정했습니다. #18806 (Azat Khuzhin).
- 비동기 분산
INSERT문은network_compression_method설정이 전역적으로 기본값이 아닌 값으로 설정된 경우 서버에 의해 거부될 수 있습니다. 이 수정으로 #18741이(가) 해결됩니다. #18776 (alexey-milovidov). Nullable(String)에서Nullable(Decimal(P, S))로CAST를 시도할 때 발생하던Attempt to read after eof오류를 수정했습니다. 이제CAST함수는 널 허용 문자열에서 10진수를 파싱할 수 없을 때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을 kill한 이후 관련
ALTER쿼리가 대기 상태로 멈춰 있을 수 있는 버그를 수정합니다. thread fuzzer로 발견된 이슈입니다. #18518 (alesapin). - 머지 과정에서 AIO를 사용한 쓰기를 비활성화합니다. 머지 도중 기본 키 컬럼 데이터가 극히 드물게 손상될 수 있기 때문입니다. #18481 (alesapin).
- 결과를 미리 계산할 수 없는 경우 분석 단계에서 서브쿼리에 대한 상수 폴딩을 비활성화합니다. #18446 (Azat Khuzhin).
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).- 상수 인자를 가진 이진 함수의 인덱스 분석을 수정하여 잘못된 쿼리 결과가 반환되던 문제를 해결합니다. 이를 통해 #18364 이슈가 수정됩니다. #18373 (Amos Bird).
- 2단계 집계 시
Distinct조합자를 사용하는 집계 함수에서 발생할 수 있는 크래시를 수정합니다. #17682를 해결합니다. #18365 (Anton Popov). SELECT count() FROM table은 이제table에서 임의의 컬럼 하나라도 선택할 수 있으면 실행할 수 있습니다. 이 PR은 #10639를 해결합니다. #18233 (Vitaly Baranov).- 이제
SELECT JOIN에는 조인된 각 테이블에 대한SELECT권한이 필요합니다. 이 PR은 #17654 이슈를 수정했습니다. #18232 (Vitaly Baranov). MergeTree*에서 읽기 백오프(read backoff)가 발생하는 경우(로그에 메시지<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이후, 또는 드물게는DETACH또는DROP PARTITION이후에 존재하지 않는 part를 기다리느라 Mutation이 대기 상태로 걸리는 현상이 발생할 수 있었습니다. 이 문제가 수정되었습니다. #15537 (tavplubix).
빌드/테스트/패키징 개선
ClickHouse 릴리스 v20.11.6.6-stable, 2020-12-24
버그 수정
IPv4/IPv6 stack이중 스택을 사용하는 머신에서 서버가clickhouse-odbc-bridge프로세스에 접근할 수 없던 문제를 수정하고, 잘못된 형식의 쿼리로 ODBC 딕셔너리 업데이트를 수행하거나 크래시를 유발하던 문제를 수정했습니다. 이 변경으로 #14489가 해결되었을 가능성이 있습니다. #18278 (Denis Glazachev).- Enum 타입과 Int 타입 간의 키 비교를 수정했습니다. 이를 통해 #17989가 해결되었습니다. #18214 (Amos Bird).
MaterializeMySQL데이터베이스 엔진에서 고유 키(unique key) 변환 시 발생하던 크래시를 수정했습니다. 이 수정으로 #18186, #16372, #18211이(가) 해결되었습니다 (Winter Zhang).- S3 URL 파싱에서 발생한
std::out_of_range: basic_string예외를 수정했습니다. #18059 (Vladimir Chebotarev). - MySQL 프리픽스 인덱스를 변환하는 기능이 MaterializeMySQL에서 지원되지 않아 일부 테이블이 MySQL에서 ClickHouse로 동기화되지 않던 문제를 수정했습니다. 이 변경으로 #15187, #17912, #17944 이슈가 해결되었습니다 (Winter Zhang).
ARRAY JOIN을 포함한 쿼리에서 쿼리 최적화로 인해 잘못된 결과가 나오던 문제를 수정했습니다. #17887 (sundyli).topK집계 FUNCTION에서 발생할 수 있는 세그멘테이션 폴트(segfault)를 수정했습니다. 이 변경으로 #17404 이슈가 해결되었습니다. #17845 (Maksim Kita).in_memory_parts_enable_wal이 비활성화된 경우 WAL에서 파트를 복원하지 않도록 했습니다. #17802 (detailyang).- MySQL 서버에 대한 연결을 ClickHouse가 다시 설정하지 못하던 문제를 수정했습니다. #17681 (Alexander Kazakov).
optimize_trivial_count_query설정이 파티션 프레디킷과 함께 사용될 때 발생하던 비일관적인 동작을 수정했습니다. #17644 (Azat Khuzhin).- 서버가 데몬 모드로 실행 중일 때
system.stack_trace테이블이 비어 있는 문제를 수정했습니다. #17630 (Amos Bird). - MergeTree 테이블에서 백그라운드로
fmt::v7::format_error예외가 로그로 남을 수 있던 동작을 수정했습니다. 이 변경으로 #17613이(가) 해결되었습니다. #17615 (alexey-milovidov). clickhouse-client를 대화형 모드에서 여러 줄 쿼리와 함께 사용할 때, 단일 줄 주석이 잘못 확장되어 쿼리 전체가 주석으로 처리되던 동작을 수정했습니다. 이로써 #13654가 수정되었습니다. #17565 (alexey-milovidov).- 매우 드문 경우에 서버가 연결을 수락하지 않게 되는 문제를 수정했습니다. #17542 (alexey-milovidov).
- 서로 다른 레플리카에서 해당 mutation이 kill된 경우
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함수에서 퍼저(fuzzer)가 발견한 버그를 수정했습니다. 이로써 #16980를 해결했습니다. #17051 (hexiaoting).LIMIT가 있는 쿼리처럼 실행 도중 취소될 수 있는 원격 쿼리에 대해 불필요한 네트워크 오류가 발생하지 않도록 했습니다. #17006 (Azat Khuzhin).- double 형에서 큰 정수형(128, 256비트)으로 캐스팅할 때 잘못된 결과가 나오는 문제를 수정했습니다. #16986 (Mike).
- 오류가 발생한 경우
format_avro_schema_registry_url의 IP를 다시 조회하도록 했습니다. #16985 (filimonov). ALTER TABLE ... MODIFY COLUMN ... NewType실행 후, 변경 중인 컬럼에 대해SELECT의WHERE표현식이 있고ALTER가 아직 완료되지 않은 경우 발생할 수 있던 서버 크래시를 수정했습니다. #16968 (Amos Bird).clickhouse-git-import에서 blame 정보가 올바르게 계산되지 않았습니다. #16959 (alexey-milovidov).- 단조(monotonic) 함수를 사용할 때 ORDER BY 최적화가 잘못 동작하던 문제를 수정했습니다. #16107에서 보고된 이슈를 해결했습니다. #16956 (Anton Popov).
optimize_aggregators_of_group_by_keys설정이 활성화된 group by와 조인에서의 최적화를 수정했습니다. 이로써 #12604가 해결되었습니다. #16951 (Anton Popov).- 설치 스크립트가 설정 폴더 내에 항상 하위 디렉터리를 생성하도록 했습니다. 이는 사용자 정의 설정을 사용하는 Docker 빌드에만 해당합니다. #16936 (filimonov).
ORDER BY가 포함된 쿼리에서 발생할 수 있던Illegal type of argument오류를 수정했습니다. 이로 인해 #16580 이슈가 해결되었습니다. #16928 (Nikolai Kochetov).- WriteBufferFromS3에 데이터가 전혀 기록되지 않은 경우 멀티파트 업로드를 중단합니다. #16840 (Pavel Kovalenko).
- 인수를 하나도 지정하지 않은 채
any를 사용했을 때 발생하던 크래시를 수정했습니다. 이로써 #16803 문제가 해결되었습니다. #16826 (Amos Bird). - MySQL 프로토콜을 통해 수행된
INSERT쿼리에서 영향을 받은 행의 개수 대신 항상 0을 반환하던 ClickHouse의 동작을 수정했습니다. 이로써 #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-stable, 2020-11-13
버그 수정
- 쿼리 프로파일러가 켜져 있고, 일부 함수에 대해 (문제가 있는 것으로 추정되는) 비동기 언와인드 테이블을 가진 glibc 버전의 OS에 ClickHouse가 설치된 경우 드물게 아무 오류 메시지 없이 크래시가 발생하던 문제를 수정합니다. 이 변경으로 #15301과 #13098이 수정됩니다. #16846 (alexey-milovidov).
ClickHouse 릴리스 v20.11.2.1, 2020-11-11
하위 호환성이 깨지는 변경 사항
distributed_ddl설정 섹션에 어떤profile이 지정된 경우, 서버 시작 시 이 프로파일이default프로파일의 설정을 덮어쓸 수 있었습니다. 이 문제가 수정되었으며, 이제 분산 DDL 쿼리의 설정은 전역 서버 설정에 영향을 주지 않습니다. #16635 (tavplubix).- 키(정렬 키, 기본 키, 파티션 키 등)에서 비교 불가능한 데이터 타입(예:
AggregateFunction) 사용이 제한되었습니다. #16601 (alesapin). ANALYZE및AST쿼리가 제거되었으며, 설정enable_debug_queries는 더 이상 사용되지 않습니다. 이제 이 기능은 완전한EXPLAIN쿼리의 일부가 되었기 때문입니다. #16536 (Ivan).- 집계 함수
boundingRatio,rankCorr,retention,timeSeriesGroupSum,timeSeriesGroupRateSum,windowFunnel이 잘못하여 대소문자를 구분하지 않도록(case-insensitive) 처리된 문제가 있었습니다. 이제 이 함수 이름은 설계된 대로 대소문자를 구분(case-sensitive)하도록 수정되었습니다. SQL 표준에 명시되어 있거나, 다른 DBMS와의 호환성을 위해 만들어졌거나, 그와 유사한 함수만 대소문자를 구분하지 않아야 합니다. #16407 (alexey-milovidov). rankCorr함수가 데이터가 충분하지 않은 경우NaN을 반환하도록 변경되었습니다. #16124. #16135 (hexiaoting).- 20.5 이전 버전에서 업그레이드할 때 롤링 업데이트를 수행하고, 클러스터에 20.5 이상 버전과 20.5 미만 버전이 혼재해 있는 경우, 구버전의 ClickHouse 노드를 재시작하면, 새 버전이 존재하는 상태에서 구버전이 시작되어
Part ... intersects previous part오류가 발생할 수 있습니다. 이 오류를 방지하려면, 먼저 클러스터의 모든 노드에 새로운 clickhouse-server 패키지를 설치한 뒤 재시작을 수행해야 합니다. 이렇게 하면 clickhouse-server를 재시작할 때 항상 새 버전으로 시작되도록 할 수 있습니다.
신규 기능
- 로컬에 존재하지 않는 사용자에 대해 LDAP를 사용자 디렉터리로 사용하는 기능이 추가되었습니다. #12736 (Denis Glazachev).
- 현재 실행 중인 백그라운드 페치 작업을 표시하는
system.replicated_fetches테이블을 추가합니다. #16428 (alesapin). date_time_output_format설정이 추가되었습니다. #15845 (Maksim Kita).- ClickHouse에 기본적인 웹 UI가 추가되었습니다. #16158 (alexey-milovidov).
- 단일 protobuf 메시지를 길이 구분자 없이 한 번에 읽고 쓸 수 있도록 지원합니다. #15199 (filimonov).
- 초기 OpenTelemetry 지원이 추가되었습니다. 이제 ClickHouse는 Native 및 HTTP 프로토콜을 통해 전달되는 OpenTelemetry
traceparent헤더를 수신하고, 일부 상황에서는 이를 다운스트림으로 전파합니다. 실행된 쿼리에 대한 trace span은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함수 - 오류 이름(변수명)을 반환합니다(쿼리_log 및 유사한 로그를 분석할 때 유용합니다).system.errors테이블 - 각 오류가 몇 번 발생했는지 보여줍니다(system_events_show_zero_values설정을 따릅니다). #16438 (Azat Khuzhin).- 이름이 있는 튜플을 확장하여 SELECT 목록에 새로운 컬럼을 도입할 수 있는 특수 함수
untuple이 추가되었습니다. #16242 (Nikolai Kochetov, Amos Bird). - 이제 쿼리 매개변수를 통해 식별자를 전달할 수 있으며, 이러한 매개변수는 테이블 객체나 컬럼으로 사용할 수 있습니다. #16594 (Amos Bird).
- MergeTree BloomFilter 인덱스에 big integers(UInt256, Int128, Int256) 및 UUID 데이터 타입 지원을 추가했습니다. big integers는 실험적 기능입니다. #16642 (Maksim Kita).
- 비암호화 문자열 해싱용
farmFingerprint64FUNCTION을 추가합니다. #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형 변환 FUNCTION을 추가했습니다. #16337 (Maksim Kita).max_concurrent_queries_for_all_users설정을 추가합니다. 사용 사례는 #6636를 참조하십시오. #16154 (nvartolomei).- clickhouse-client에 새로운 옵션
print_query_id를 추가합니다. 이 옵션은 클라이언트에서 생성된 현재 쿼리 ID를 사용해 임의의 문자열을 생성할 수 있게 합니다. 또한 기본적으로 clickhouse-client에서 쿼리 ID를 출력합니다. #15809 (Amos Bird). tid및logTraceFUNCTION을 추가했습니다. 이로써 #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).- 조회 대상 테이블에 샘플링이 정의되어 있지 않은 경우
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). - Distributed 엔진에서
INSERT와 경쟁 상태가 발생할 수 있던DROP TABLE동작을 수정합니다. #16409 (Azat Khuzhin). - 복제 큐에서 매우 큰 엔트리 처리 방식을 수정합니다. 이러한 매우 큰 엔트리는 테이블 구조가 극도로 큰 경우(1 MB에 가까운 경우)
ALTER쿼리에서 나타날 수 있습니다. #16307을(를) 수정합니다. #16332 (alexey-milovidov). - 필터링에 사용할 Set이 생성되지 않아 반환 데이터의 일부가 누락될 수 있었던 일관되지 않은 동작을 수정했습니다. #16308 (Nikita Mikhaylov).
- sharding_key에서 dictGet를 수정했습니다(함수 컨텍스트가 영구적으로 저장되는 경우 등 유사한 위치 포함). #16205 (Azat Khuzhin).
OPTIMIZE명령을 실행하려 할 때clickhouse-local에서 발생하던 예외를 수정했습니다. 이로써 #16076 이슈가 해결되었습니다. #16192 (filimonov).- #15780 리그레션(regression) 문제를 수정합니다. 예를 들어
indexOf([1, 2, 3], toLowCardinality(1))는 현재 허용되지 않지만, 허용되지 않아서는 안 됩니다. #16038 (Mike). - MySQL 데이터베이스 관련 버그를 수정했습니다. 데이터베이스 엔진으로 사용되는 MySQL 서버가 중단된 경우, 비활성화된 서버에서 테이블을 가져오려 시도하면서 실제로는 불필요한 상황에서도 일부 쿼리에서 예외(Exception)가 발생하는 문제가 있었습니다. 예를 들어, 쿼리
SELECT ... FROM system.parts는 MergeTree 테이블에 대해서만 동작해야 하며 MySQL 데이터베이스에는 전혀 접근하지 않아야 합니다. #16032 (Kruglov Pavel). - 이제
ALTER MODIFY COLUMN ... DEFAULT ...구문에서 기본값이 컬럼 타입과 호환되지 않는 경우 예외가 발생합니다. #15854를 해결했습니다. #15858 (alesapin). IPv4CIDRToRange/IPv6CIDRToRange함수를 상수 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). minMap과maxMap의 동작이 더 바람직하게 되도록 개선했습니다. 결과에서 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).- 현재 인스턴스에서 이미 커밋되었거나 오래된 파트를 detached 디렉터리로 가져올 수 있도록 허용합니다. 이는 다른 클러스터에서 테이블을 마이그레이션할 때 N 대 1 세그먼트 매핑이 있는 경우에 유용합니다. 또한 현재
fetchPartition구현과도 일관성을 유지합니다. #16538 (Amos Bird). RabbitMQ관련 여러 가지 개선 사항: #16263의 버그를 수정했습니다. 또한 이벤트 루프 라이프사이클을 단축했습니다. 보다 효율적인 큐 구성을 추가했습니다. #16426 (Kseniia Sumarokova).quantileDeterministicFUNCTION에서 디버그 어설션을 수정합니다. 이전 버전에서는 네트워크를 통해 최대 두 배 더 많은 데이터를 전송할 수도 있었습니다. 실제로 버그가 있었던 것은 아닙니다. 이 변경으로 #15683 이슈를 해결합니다. #16410 (alexey-milovidov).TablesToDropQueueSize메트릭을 추가합니다. 이 값은 백그라운드에서 데이터 삭제를 기다리고 있는 드롭된 테이블의 수와 같습니다. #16364 (tavplubix).- 클라이언트가 연결을 끊었을 때의 진단 정보가 개선되었습니다. 이전 버전에서는
Attempt to read after EOF및Broken pipe예외가 서버에서 로깅되었습니다. 새 버전에서는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)만 사용되던 문제입니다. HTTP 쿼리의 최상위(root) ThreadStatus에 대한query_id를 수정했습니다(query_id를 읽은 후 QueryScope를 초기화하는 방식으로). #16101 (Azat Khuzhin). - 이제 클러스터 설정의
<internal_replication>값과 관계없이ALTER ... ON CLUSTER쿼리 실행이 허용됩니다. #16075 (alesapin). - 제안을 로드하는 과정에서 종료 시
clickhouse-client가 비정상 종료될 수 있는 드문 문제를 수정합니다. 이를 통해 #16035가 해결되었습니다. #16047 (alexey-milovidov). - 복합 키를 사용하는
Redis딕셔너리에cache레이아웃 지원을 추가했습니다. #15985 (Anton Popov). - 잘못된 설정으로 인해 (
connections_with_failover_max_tries가 0으로 설정된 경우) 쿼리가 중단되지 않고 무한 루프에 빠지는 문제를 수정했습니다. #15876 (Azat Khuzhin). - 일부 로그 메시지의 레벨을 정보(Information)에서 디버그(Debug)로 변경하여 매 쿼리마다 정보 메시지가 표시되지 않도록 했습니다. 이 변경으로 #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 최적화가 다소 복잡해졌습니다. 정확히 일치하는 파티션 표현식을 포함하는 조건식도 최적화할 수 있습니다. 또한
max_parallel_replicas > 1일 때 잘못된 count를 반환하던 #11092도 수정합니다. #15074 (Amos Bird).
빌드/테스트/패키징 개선
- 상태 비저장(stateless) 테스트에 대한 flaky 검사를 추가합니다. 머지되기 전에 잠재적으로 불안정한(flaky) 기능 테스트를 미리 탐지합니다. #16238 (alesapin).
croaring에 대해 통합본(amalgamation) 대신 올바른 버전을 사용합니다. #16285 (sundyli).ya.make빌드 시스템(Arcadia)을 위한 빌드 파일 생성 방식을 개선합니다. #16700 (alexey-milovidov).MaterializeMySQL데이터베이스 엔진용 MySQL BinLog 파일 검사 도구를 추가합니다.MaterializeMySQL은 실험적인 기능입니다. #16223 (Winter Zhang).- 실행 불가능한 파일에 설정된 실행 비트(executable bit)를 검사합니다. 사용자가 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 바이너리만 빌드하므로, 이 문제가 다시 발생할 가능성이 매우 높습니다. 이 변경으로 #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-stable, 2020-12-24
버그 수정 사항
IPv4/IPv6이중 스택을 사용하는 머신에서 서버가clickhouse-odbc-bridge프로세스에 접속할 수 없던 문제를 수정하고, 잘못된 형식의 쿼리로 ODBC 딕셔너리 업데이트를 수행하거나 이로 인해 크래시가 발생하던 문제를 수정하였습니다. 이 변경으로 #14489가 해결되었을 것으로 보입니다. #18278 (Denis Glazachev).- Enum 타입과 Int 타입 간의 키 비교를 수정합니다. 이를 통해 #17989 이슈가 해결됩니다. #18214 (Amos Bird).
MaterializeMySQL데이터베이스 엔진에서 unique key 변환 시 발생하던 크래시를 수정했습니다. 이 변경으로 #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).
topK집계 FUNCTION에서 발생할 수 있는 세그멘테이션 폴트(segfault)를 수정했습니다. 이 변경으로 #17404 이슈가 해결되었습니다. #17845 (Maksim Kita).in_memory_parts_enable_wal이 비활성화된 경우WAL에서 파트를 복원하지 않습니다. #17802 (detailyang).- ClickHouse가 MySQL 서버에 대한 연결을 다시 수립하지 못하던 문제를 수정했습니다. #17681 (Alexander Kazakov).
- 서버가 데몬 모드로 실행 중일 때
system.stack_trace테이블이 비어 있는 문제를 수정했습니다. #17630 (Amos Bird). - 대화형 모드에서 여러 줄 쿼리와 함께
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).- 리더가 아닌
ReplicatedMergeTreeTables에서ON CLUSTER쿼리가 무한정 대기 상태에 빠질 수 있던 버그를 수정했습니다. #17089 (alesapin). - 함수
fuzzBits에서 fuzzer로 발견된 버그를 수정했습니다. 이로써 #16980이(가) 수정되었습니다. #17051 (hexiaoting). LIMIT가 있는 쿼리처럼 실행 중에 취소될 수 있는 원격 쿼리에서 불필요한 네트워크 오류가 발생하지 않도록 개선했습니다. #17006 (Azat Khuzhin).- double형에서 캐스팅할 때 대형 정수(128비트, 256비트)에서 잘못된 결과가 발생하던 문제를 수정했습니다. #16986 (Mike).
- 에러가 발생한 경우
format_avro_schema_registry_url의 IP를 다시 조회합니다. #16985 (filimonov). ALTER TABLE ... MODIFY COLUMN ... NewType실행 후, 변경 중인 컬럼이SELECT문의WHERE절에서 사용되고 있고ALTER작업이 아직 완료되지 않은 경우 발생할 수 있던 서버 크래시를 수정했습니다. #16968 (Amos Bird).clickhouse-git-import에서 blame 정보가 정확히 계산되지 않았습니다. #16959 (alexey-milovidov).- 단조 함수를 사용하는 ORDER BY 최적화를 수정했습니다. 이를 통해 #16107이 해결됩니다. #16956 (Anton Popov).
optimize_aggregators_of_group_by_keysSETTING이 활성화된 GROUP BY와 조인에서의 최적화 문제를 수정했습니다. 이를 통해 #12604 이슈가 해결되었습니다. #16951 (Anton Popov).- 설치 스크립트는 항상 설정 폴더에 하위 디렉터리를 생성해야 합니다. 이는 사용자 정의 설정으로 Docker 이미지를 빌드할 때에만 해당됩니다. #16936 (filimonov).
ORDER BY가 포함된 쿼리에서 발생할 수 있는Illegal type of argument오류를 수정했습니다. 이로써 #16580 이슈를 해결했습니다. #16928 (Nikolai Kochetov).WriteBufferFromS3에 데이터가 전혀 기록되지 않은 경우 멀티파트 업로드를 중단합니다. #16840 (Pavel Kovalenko).- 인자를 하나도 전달하지 않고
any를 사용할 때 발생하던 크래시를 수정했습니다. 이로써 #16803이(가) 해결되었습니다. #16826 (Amos Bird). - MySQL 프로토콜을 통한
INSERT쿼리에서 영향을 받은 행(row) 수가 아니라 항상 0을 반환하던 ClickHouse 동작을 수정했습니다. 이로써 #16605가 해결되었습니다. #16715 (Winter Zhang). TDigest의 무제한 증가 현상을 수정했습니다. #16680 (hrissan).- 집계 함수에서 접미사
if를 사용할 때 원격 쿼리 실패가 발생하던 문제를 수정했습니다. 이 수정으로 #16574, #16231, #16610이 해결되었습니다 (Winter Zhang).
ClickHouse 릴리스 v20.10.4.1-stable, 2020-11-13
Bug Fix
- 쿼리 프로파일러가 활성화된 상태에서, 일부 함수에 대해 비동기 언와인드 테이블이 (손상된 것으로 추정되는) 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 Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine 구성을 사용할 때, MySQL Slave에서
slave_parallel_worker가 활성화되어 있으면 메타데이터가 급격히 증가하던 문제를 GTID 세트를 적절히 축소하여 수정합니다. #15951를 수정합니다. #16504 (TCeason). - Distributed 테이블에 대한 DROP TABLE이 INSERT와의 경합(race condition)으로 인해 발생하던 문제를 수정합니다. #16409 (Azat Khuzhin).
- 복제 큐(replication queue)에서 매우 큰 항목(entry)을 처리하는 동작을 수정합니다. 매우 큰 항목은 테이블 구조가 매우 클 때(약 1 MB 수준) ALTER 쿼리에서 나타날 수 있습니다. #16307를 수정합니다. #16332 (alexey-milovidov).
- MySQL 데이터베이스 관련 버그를 수정합니다. 데이터베이스 엔진으로 사용되는 MySQL 서버가 중단된 경우, 일부 쿼리가 필요하지 않음에도 비활성화된 서버에서 테이블을 가져오려고 시도하여 예외(Exception)를 발생시키던 문제를 수정합니다. 예를 들어,
SELECT ... FROM system.parts쿼리는 MergeTree 테이블에 대해서만 동작해야 하며 MySQL 데이터베이스는 전혀 참조하지 않아야 합니다. #16032 (Kruglov Pavel).
개선
- nginx 서버를 프록시로 사용하여 S3를 사용할 때를 위한 워크어라운드를 추가했습니다. 현재 nginx는
http://domain.com?delete와 같이 경로가 비어 있는 URL을 허용하지 않지만, 기본 aws-sdk-cpp는 이러한 형태의 URL을 생성합니다. 이 커밋에서는 패치된 aws-sdk-cpp 버전을 사용하여, 해당 경우에http://domain.com/?delete와 같이 경로를 "/"로 갖는 URL을 생성하도록 합니다. #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). - 백그라운드 풀과 복제 큐에서 TTL이 있는 머지 횟수를 제어하기 위해 MergeTree 설정(
max_replicated_merges_with_ttl_in_queue및max_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보다 오래된 버전에서 업그레이드할 때, 롤링 업데이트를 수행하는 중이고 클러스터에 20.5 이상 버전과 20.5 미만 버전이 혼재해 있는 상태에서 구버전 ClickHouse 노드를 재시작하여, 신규 버전이 이미 존재하는 상태에서 구버전이 다시 시작되면
Part ... intersects previous part오류가 발생할 수 있습니다. 이 오류를 방지하려면, 먼저 모든 클러스터 노드에 새로운 clickhouse-server 패키지를 설치한 뒤 재시작을 수행하십시오(그렇게 하면 clickhouse-server를 재시작할 때 항상 새 버전으로 시작됩니다).
신기능
- 백그라운드에서 데이터 재압축. MergeTree 테이블 엔진 계열에 대해
TTL ... RECOMPRESS codec_name을(를) 지정할 수 있는 기능이 추가되었습니다. #14494 (alesapin). - 병렬 quorum insert를 추가했습니다. 이로써 #15601 이슈가 해결되었습니다. #15601 (Latysheva Alexandra).
- 데이터 내구성 보장을 추가로 강화하기 위한 설정입니다. 비복제(non-replicated) 구성에서 유용합니다. #11948 (Anton Popov).
- 로컬에는 존재하지 않는(다른 레플리카에서 아직 가져오지 않은) 중복 블록이 레플리카에 기록되는 경우, 이를 무시하지 않고 로컬에도 기록하여 정상적으로 복제되었을 때와 동일한 효과를 내도록 했습니다. #11684 (alexey-milovidov).
- 이제 쿼리 컨텍스트에서 이름이 지정된 서브쿼리를 정의하기 위해
WITH <identifier> AS (subquery) ...구문을 지원합니다. 이로써 #2416가 해결되었습니다. 또한 #4967도 해결되었습니다. #14771 (Amos Bird). enable_global_with_statement설정을 도입하여, 첫 번째 SELECT 문의WITHSQL 문을 동일한 수준의 다른 SELECT 쿼리로 전파하고,WITHSQL 문에서 정의된 별칭을 서브쿼리에서도 사용할 수 있도록 합니다. #15451 (Amos Bird).- 클러스터 간 쿼리를 보안 방식으로 실행합니다(initial_user를 현재 쿼리의 사용자로 사용합니다). #13156 (Azat Khuzhin). #15551 (Azat Khuzhin).
- 컬럼 속성과 테이블 TTL을 제거할 수 있는 기능을 추가했습니다.
ALTER TABLE MODIFY COLUMN col_name REMOVE what_to_remove및ALTER TABLE REMOVE TTL쿼리가 도입되었습니다. 두 연산 모두 오버헤드가 적으며 메타데이터 수준에서만 실행됩니다. #14742 (alesapin). RawBLOB포맷을 추가했습니다. 이 포맷은 이스케이프나 구분자 없이 단일 값을 입출력하는 데 사용됩니다. 이 변경으로 #15349가 해결됩니다. #15364 (alexey-milovidov).- 빅엔디언 바이트 문자열을 UUID로 변환할 수 있는
reinterpretAsUUIDFUNCTION을 추가합니다. #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). formatReadableQuantityFUNCTION이 추가되었습니다. 대형 수치를 사람이 읽기 쉽게 표시할 때 유용합니다. #14725 (Artem Hnilov).- 개행 문자로 구분된 여러 줄의 시퀀스를 입력으로 받아, 각 줄 전체를 하나의 String 필드로 파싱하는
LineAsString포맷을 추가합니다. #14703 (Nikita Mikhaylov), #13846 (hexiaoting). - 데이터를 문자열 배열 형식으로 출력하는
JSONStrings포맷을 추가했습니다. #14333 (hcz). Regexp포맷에 「Raw」 컬럼 포맷 지원을 추가했습니다. 이를 통해 이스케이프 규칙 없이 하위 패턴 전체를 간단히 추출할 수 있습니다. #15363 (alexey-milovidov).TSV출력 포맷에서NULL표현을 구성할 수 있도록 하였습니다. 이는output_format_tsv_null_representation설정으로 제어되며, 기본값은\N입니다. 이 변경으로 #9375가 해결되었습니다. 이 설정은 출력 포맷에만 영향을 미치며,TSV입력 포맷에서 지원되는NULL표현은\N하나뿐임에 유의하십시오. #14586 (Kruglov Pavel).MaterializeMySQL에서 Decimal 데이터 타입을 지원합니다.MaterializeMySQL은 실험적인 기능입니다. #14535 (Winter Zhang).- 다음 기능을 추가했습니다:
SHOW DATABASES LIKE 'xxx'. #14521 (hexiaoting). - 임의의 Git 리포지토리를 ClickHouse에 예제 데이터셋으로 가져오기 위한 스크립트를 추가했습니다. #14471 (alexey-milovidov).
- 이제 INSERT SQL 문에서는 컬럼 목록에서 컬럼 변환자와 함께 애스터리스크(*) (또는 그 변형)을 사용할 수 있습니다. #14453 (Amos Bird).
- 분산 쿼리에서 leaf 노드의 최대 행/바이트 읽기 수를 제한하기 위한 새로운 쿼리 복잡도 제한 설정
max_rows_to_read_leaf,max_bytes_to_read_leaf가 추가되었습니다. 이 제한은 root 노드에서의 최종 머지 단계는 제외하고, 로컬 읽기에만 적용됩니다. #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). mapPopulateSeriesFUNCTION이 추가되었습니다. #13166 (Ildus Kurbangaliev).- MySQL 타입 지원:
decimal은 ClickHouseDecimal로, 서브초 단위 정밀도를 가진datetime은DateTime64로 지원합니다. #11512 (Vasily Nemkov). system.text_log,system.trace_log,system.query_log,system.query_thread_log테이블에event_time_microseconds필드를 추가합니다. #14760 (Bharat Nallan).event_time_microseconds를system.asynchronous_metric_log및system.metric_log테이블에 추가합니다. #14514 (Bharat Nallan).system.query_log및system.query_thread_log테이블에query_start_time_microseconds필드를 추가했습니다. #14252 (Bharat Nallan).
버그 수정 사항
- 설정된 제한과 무관하게 메모리가 초과 할당될 수 있던 문제를 수정했습니다. #14560이(가) 해결되었습니다. #16206 (alexey-milovidov).
executable딕셔너리 소스가 멈추는 문제를 수정합니다. 이전 버전에서는 일부 포맷(예:JSONEachRow)을 사용할 때, 자식 프로세스에서 최소한의 출력이 발생하기 전까지 데이터가 자식 프로세스로 전달되지 않았습니다. 이 변경으로 #1697이(가) 해결됩니다. 또한 #2455이(가) 해결됩니다. #14525 (alexey-milovidov).- 예외 발생 시
dictGet함수에서 발생하던 double free 문제를 수정했습니다. 이 문제는 딕셔너리가 오류가 있는 상태로 로드된 경우 발생할 수 있었습니다. #16429 (Nikolai Kochetov). - GROUP BY와 totals/rollup/cube 수정자 조합에서 GROUP BY 키에 대한 min/max 함수 동작을 수정합니다. #16393을(를) 해결합니다. #16397 (Anton Popov).
- prefer_localhost_replica=0 및 internal_replication을 사용하는 비동기 Distributed INSERT를 수정했습니다. #16358 (Azat Khuzhin).
TwoLevelStringHashTable구현에서 메모리 누수를 초래할 수 있었던 심각하게 잘못된 코드를 수정했습니다. #16264 (Amos Bird).- lambda에서 잘못된 집계를 사용하여 발생하는 일부 경우의 segfault를 수정합니다. #16082 (Anton Popov).
ReplicatedVersionedCollapsingMergeTree에서ALTER MODIFY ... ORDER BY쿼리가 중단되는 문제를 수정합니다. 이를 통해 #15980이(가) 해결됩니다. #16011 (alesapin).MaterializeMySQL(실험적 기능): collation 이름 및 charset 이름용 파서를 수정하고 문자열 타입에 대해length = 0을 지원합니다. #16008 (Winter Zhang).- 복합 키 딕셔너리에서
direct레이아웃 사용을 허용합니다. #16007 (Anton Popov). - 일정 기간 동안 활동이 없다가 복제 오류가 발생해도 레플리카가 5~10분 동안 멈추지 않도록 했습니다. #15987 (filimonov).
- Atomic 데이터베이스 엔진에서 MaterializedView에 데이터를 삽입하거나 조회하는 동안 대상 테이블을 동시에 DROP할 때 드물게 발생하던 세그멘테이션 폴트를 수정했습니다. #15984 (tavplubix).
- settings profile 구문 파싱의 모호성을 수정했습니다. 이제
CREATE USER ... SETTINGS profile readonly는 readonly 제약이 걸린profile이라는 setting이 아니라,readonly라는 이름의 프로파일을 사용하는 것으로 간주됩니다. 이로써 #15628 이슈가 해결되었습니다. #15982 (Vitaly Baranov). MaterializeMySQL(실험적 기능): CREATE DATABASE 실패 시 발생하던 크래시를 수정합니다. #15954 (Winter Zhang).DROP TABLE IF EXISTS가 테이블 이름이 동시에 변경되고 있을 때(Atomic 데이터베이스 엔진)Table ... does not exist오류로 실패하던 문제를 수정했습니다. 여러 테이블에 대해 일부 DDL 쿼리(예:DROP DATABASE및RENAME TABLE)를 동시에 실행할 때 드물게 발생하던 교착 상태를 수정했습니다.DROP/DETACH TABLE을 동시에 실행할 때Table ... does not exist오류로 인해DROP/DETACH DATABASE가 실패하던 문제를 수정했습니다. #15934 (tavplubix).Distributed테이블에서WHERE,PREWHERE,GLOBAL IN이 포함된 쿼리에 대해 빈 결과가 반환되는 오류를 수정했습니다. #15792를 수정했습니다. #15933 (Nikolai Kochetov).- #12513 문제를 수정합니다: 쿼리를 다시 분석할 때 동일한 별칭을 사용하는 차이 표현식이 잘못 처리되던 문제입니다. #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 데이터베이스에서 inner 테이블을 사용하는 materialized view를 삭제할 때, MV의 inner 테이블에 대한 재귀적인
DROP TABLE로 인해 워커 스레드가 멈추고, 그 결과 이후에 실행되는 모든DROP TABLE명령이 멈춰 버리던 문제를 수정합니다. #15743 (Azat Khuzhin). - 첫 시도가 실패했을 때 파트를 다른 디스크/볼륨으로 이동할 수 있도록 했습니다. #15723 (Pavel Kovalenko).
MV용 쿼리에ARRAY JOIN이 포함된 경우MATERIALIZED VIEW에 데이터를 삽입할 때 발생할 수 있던Cannot find column오류를 수정합니다. #15717 (Nikolai Kochetov).max_replicated_logs_to_keep설정의 기본값이 지나치게 낮게 설정되어 레플리카가 너무 자주 손실될 수 있는 문제를 수정했습니다. 손실된 레플리카를 복구할 때 가장 최신 상태의 레플리카를 클론 대상으로 선택하도록 하여 복구 프로세스를 개선했습니다. 또한 손실된 레플리카에서 오래된 파트를 제거하지 않고, 대신 detach 하도록 했습니다. #15701 (tavplubix).- MySQL 기반 딕셔너리와 테이블에서 드물게 발생하던 경쟁 상태(race condition)를 수정합니다. #15686 (alesapin).
- AMQP-CPP의 (무해한) 레이스 컨디션을 수정했습니다. #15667 (alesapin).
- 대상 테이블과 구조가 다른
Buffer테이블에서 데이터를 읽는 동안, 대상 테이블이 쿼리에 대해 빈 결과를 반환할 때 발생하던Cannot add simple transform to empty Pipe오류를 수정했습니다. #15529를 수정했습니다. #15662 (Nikolai Kochetov). - S3를 사용하는 MergeTree에 insert할 때 오류를 적절히 처리합니다. S3 기반 MergeTree는 실험적 기능입니다. #15657 (Pavel Kovalenko).
- S3 테이블 함수에서 URL에 지정된 리전(region)이 S3 클라이언트 설정에 적용되지 않던 버그를 수정했습니다. #15646 (Vladimir Chebotarev).
ReadFromStorage쿼리 플랜 단계에서 리소스 해제 순서를 수정했습니다. 이로 인해 드물게 크래시가 발생할 수 있었습니다. #15610과(와) 연관되었을 가능성이 있습니다. #15645 (Nikolai Kochetov).- 읽기 전용 테이블을 detach할 때
ReadonlyReplica메트릭 값을 차감합니다. #15592 (sundyli). VALUES,LIMIT또는IN연산자의 오른쪽 피연산자에서JSON*FUNCTION 결과를 사용할 때 발생하던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).IN절과 분산 테이블이 포함된 쿼리에서, 쿼리를 시작한 서버에 데이터베이스가 없을 때 발생하는Database <db> does not exist.오류를 수정합니다. #15538 (Artem Zuikov).MOVE또는REPLACE PARTITION이후에, 그리고 드문 경우지만DETACH또는DROP PARTITION이후에 존재하지 않는 part를 기다리느라 Mutation이 대기 상태에 걸릴 수 있었습니다. 이 문제가 수정되었습니다. #15537 (tavplubix).- 대소문자를 구분하지 않아야 하는
ILIKE연산자가 동일한 패턴의LIKE가 먼저 실행된 이후에는 대소문자를 구분하게 되던 버그를 수정합니다. #15536 (alesapin). - 데이터에 존재하지 않지만, 마찬가지로 데이터에 존재하지 않는 다른 컬럼에 의존하는 컬럼을 선택할 때 발생하는
Missing columns오류를 수정합니다. 관련 이슈 #15530를 해결합니다. #15532 (alesapin). - ReplicatedMergeTree에 단일 파라미터가 전달된 경우 이를 무시하지 않고 오류를 발생하도록 했습니다. #15516 (nvartolomei).
DDLWorker의 이벤트 구독과 관련된 버그를 수정하여, 드물게ON CLUSTER에서 쿼리가 멈출 수 있던 문제를 해결했습니다. 이 버그는 #13450에서 도입되었습니다. #15477 (alesapin).boundingRatio집계 FUNCTION에서 두 번째 인수의 타입이 잘못된 경우 적절한 오류가 보고되도록 했습니다. #15407 (detailyang).- #15365 수정: MySQL 엔진을 사용하는 데이터베이스를 ATTACH 할 때 쿼리 컨텍스트가 없어 예외가 발생하던 문제를 수정합니다. #15384 (Winter Zhang).
- SELECT 쿼리에서 컬럼 변환기가 여러 번 사용되는 경우를 수정했습니다. #15378 (Amos Bird).
S3스토리지의 압축 동작을 수정했습니다. #15376 (Vladimir Chebotarev).SELECT toStartOfDay(today())와 같은 쿼리가 time_zone 인자가 비어 있다고 보고하며 실패하던 버그를 수정합니다. #15319 (Bharat Nallan).- MergeTree 테이블 이름 변경 및 백그라운드 정리 작업 중 발생할 수 있는 경쟁 상태를 수정했습니다. #15304 (alesapin).
- 시스템 로그가 활성화된 경우 서버 시작 시 드물게 발생할 수 있는 경합 조건(race condition)을 수정했습니다. #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).jemalloc를 업데이트하여 affinity mask 설정을 사용하는percpu_arena관련 문제를 수정했습니다. #15035 (Azat Khuzhin). #14957 (Azat Khuzhin).- 이미 String과 FixedString 간에는 패딩 비교를 사용하고 있습니다(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333). 이 PR은 동일한 로직을 필드 비교에도 적용하여 FixedString을 기본 키로 사용할 때의 동작을 수정합니다. 이를 통해 #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_mutation및number_of_free_entries_in_pool_to_lower_max_size_of_merge설정을background_pool_size와 동일하게 지정할 수 있습니다. #14975 (alesapin). - 서브쿼리에
finalizeAggregation함수가 포함된 경우에도 predicate push down이 작동하도록 수정했습니다. #14847 이슈를 해결했습니다. #14937 (filimonov). - 논리 코어별 CPU 주파수를
system.asynchronous_metrics에 노출하도록 했습니다. #14923를 수정했습니다. #14924 (Alexander Kuzmenkov). MaterializeMySQL(실험적 기능):.metadata.tmp File exists오류를 수정했습니다. #14898 (Winter Zhang).- 일부
extractAllGroups함수 호출 시 "Memory limit exceeded" 오류가 발생할 수 있는 문제를 수정합니다. 이는 #13383를 해결합니다. #14889 (alexey-milovidov). - 파일 디스크립터를 사용해 StorageFile에 INSERT를 시도할 때 발생하던 SIGSEGV를 수정합니다. #14887 (Azat Khuzhin).
cache딕셔너리에서 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #14837. #14879 (Nikita Mikhaylov).MaterializeMySQL(실험적 기능): MySQL binlog 이벤트 파싱 과정의 버그를 수정하여MaterializeMySQL데이터베이스 엔진에서 발생하던Attempt to read after eof및Packet payload is not fully read오류를 해결했습니다. #14852 (Winter Zhang).- 조회되는 컬럼에
DEFAULT표현식이 있고, 이 표현식이 또 다른 컬럼에 의존하는데 그 컬럼 역시DEFAULT를 가지지만SELECT쿼리에 포함되지 않고 디스크에도 존재하지 않을 때 발생하는 드문 오류를 수정합니다. #14531의 일부를 수정합니다. #14845 (alesapin). - 서버가 ZooKeeper와 통신하는 동안
from_zkinclude 옵션을 사용해 설정 파일을 ZK에서 가져와야 하는 경우, 시작 과정에서 서버가 멈출 수 있는 문제를 수정합니다. 이 변경으로 #14814가 해결됩니다. #14843 (Alexander Kuzmenkov). - 부호 있는 정수 타입에 대해 축소된
Int -> Int캐스트의 단조성(monotonicity)을 잘못 판별하던 문제를 수정합니다. 이로 인해 잘못된 쿼리 결과가 발생할 수 있었습니다. 이 버그는 #14513에서 발견되었습니다. #14783 (Amos Bird). Replace컬럼 변환기는 식별자를 클론된 AST로 대체해야 합니다. 이렇게 하여 #14695 가 수정됩니다. #14734 (Amos Bird).ALTER ... MODIFY QUERY를 실행할 때 materialized view의 메타데이터에서 기본 데이터베이스 이름이 누락되던 문제를 수정했습니다. #14664 (tavplubix).ALTER UPDATE뮤테이션에서Nullable컬럼에 상수 값(예:UPDATE x = 42)을 대입할 때 컬럼 값이 잘못되거나 세그멘테이션 폴트가 발생하던 버그를 수정합니다. #13634, #14045를 수정합니다. #14646 (alesapin).- 결과 컬럼의 소수 자릿수가 잘못 설정되어 발생하던 잘못된 Decimal 곱셈 결과 문제를 수정했습니다. #14603 (Artem Zuikov).
Nullable타입의LowCardinality에서 사용하는hasFUNCTION을 수정합니다. #14591 (Mike).- StorageReplicatedMergeTree 엔진에 대한 CreateQuery 실행 중 발생한 Zookeeper 예외 이후 데이터 디렉터리를 정리합니다. #14563 (Bharat Nallan).
- 매우 큰 파라미터로 인해 오버플로가 발생할 때, combinator
-Resample이 있는 함수에서 드물게 발생하던 세그멘테이션 폴트를 수정합니다. #14562 (Anton Popov). Nullable(String)을 Enum으로 변환할 때 발생하던 버그를 수정했습니다. #12745에서 도입된 버그이며, 이 수정으로 #14435를 해결했습니다. #14530 (Amos Bird).Nullable컬럼의 잘못된 정렬 순서를 수정했습니다. 이로써 #14344이(가) 해결되었습니다. #14495 (Nikita Mikhaylov).currentDatabase()FUNCTION을ON CLUSTERDDL 쿼리에서 사용할 수 없었던 문제를 수정했습니다. #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함수에서 다중 키 조회를 지원합니다. #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). nowFUNCTION에서 타임존(timezone) 인수를 허용합니다. 이로써 15264가 해결되었습니다. #15285 (flynn)./docker-entrypoint-initdb.d/의 모든 스크립트가 실행될 때까지 ClickHouse 서버에 연결을 허용하지 않도록 했습니다. #15244 (Aleksei Kozharin).EXPLAIN PLAN쿼리에optimize설정이 추가되었습니다. 활성화하면 쿼리 플랜 수준의 최적화가 적용됩니다. 기본적으로 활성화되어 있습니다. #15201 (Nikolai Kochetov).- CAST 함수에 잘못된 개수의 인수가 전달된 경우에 대한 적절한 예외 메시지를 추가했습니다. 이로써 #13992 이슈가 해결되었습니다. #15029 (alexey-milovidov).
- 데이터 파트 삽입 시 TTL move 작업을 비활성화할 수 있는 옵션을 추가했습니다. #15000 (Pavel Kovalenko).
- 뮤테이션 수행 시 키 제약조건을 무시하도록 했습니다. 이 Pull Request가 없으면
force_index_by_date = 1또는force_primary_key = 1인 경우 뮤테이션을 수행할 수 없습니다. #14973 (Amos Bird). - 이전에 수행한 드롭 시도가 ZooKeeper 세션 만료로 인해 실패했을 경우에도 복제된 테이블(Replicated Table)을 드롭할 수 있도록 했습니다. 이 변경으로 #11891 문제가 수정되었습니다. #14926 (alexey-milovidov).
- 분산 테이블에서 SETTINGS와 함께 SELECT를 실행할 때 설정 제약 위반이 과도하게 발생하던 문제를 수정했습니다. #14876 (Amos Bird).
- 첫 번째 레플리카가 무엇인지 명시적으로 지정할 수 있도록
load_balancing_first_offset쿼리 설정을 추가했습니다. 이 설정은 레플리카의 워크로드를 제어할 수 있게 해 주는FIRST_OR_RANDOM로드 밸런싱 전략과 함께 사용됩니다. #14867 (Amos Bird). - 이제
EXPLAIN결과에SET및JOIN의 서브쿼리가 표시됩니다. #14856 (Nikolai Kochetov). Distributed스토리지에서 다중 볼륨 스토리지 구성을 사용할 수 있게 했습니다. #14839 (Pavel Kovalenko).- 동일한 timespec을 기반으로
query_start_time과query_start_time_microseconds를 생성하도록 했습니다. #14831 (Bharat Nallan). StorageJoin및StorageSet에 대해 지속성을 비활성화하는 기능을 지원합니다. 이 기능은disable_set_and_join_persistency설정으로 제어됩니다. 이 PR은 이슈 #6318를 해결했습니다. #14776 (vxider).- 이제
COLUMNS를 사용하여 컬럼 목록을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는 표현식 그대로 저장됩니다. 때때로 사용자가
partition by i / 1000과 같이 테이블을 더 큰 단위 수준으로 파티션하는 경우가 있습니다. 그러나 이항 연산자는 단조(monotonic)성을 가지지 않으며, 이 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 형식의 인라인 데이터를 사용하는 INSERT에 대해, 줄 바꿈뿐만 아니라 세미콜론(;)도 데이터 종료 기호로 지원합니다. #12288를 해결합니다. #13192 (Alexander Kuzmenkov).- 컴팩트 파트에서 사용자 정의 코덱을 지원합니다. #12183 (Anton Popov).
성능 향상
- 작은 파트에 대해 compact 파트를 기본으로 활성화합니다. 이를 통해 빈번한 insert 작업을 4~100배 더 효율적으로 처리할 수 있습니다. #11913 (alexey-milovidov).
quantileTDigest성능을 개선합니다. 이는 #2668를 수정합니다. #15542 (Kruglov Pavel).- AggregatingInOrderTransform/optimize_aggregation_in_order에서 메모리 사용량을 크게 줄입니다. #15543 (Azat Khuzhin).
- 256비트 곱셈을 더 빠르게 합니다. #15418 (Artem Zuikov).
- wide integer에서 (u)int64_t를 기본 타입으로 사용하여 256비트 타입의 성능을 개선합니다. 기존 wide integer는 8비트 타입을 기본으로 사용했습니다. #14859 (Artem Zuikov).
- 수직 병합 임시 데이터를 저장하기 위해 임시 디스크를 명시적으로 사용합니다. #15639 (Grigory Pervakov).
- 루프에서 여러 번 DeleteObject를 호출하는 대신 하나의 S3 DeleteObjects 요청을 사용합니다. 기능 변경은 전혀 없으며, 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-10에서clang-tidy-11로 전환되었습니다. #14922 (alexey-milovidov).- 기본 설정으로 LLVM의 실험적인 패스 관리자(pass manager)를 사용합니다. #15608 (Danila Kutenin).
- 어느 C++ 번역 단위도 빌드에 10분 이상 걸리거나 메모리를 10 GB 초과하여 사용하지 않도록 합니다. 이는 #14925를 수정합니다. #15060 (alexey-milovidov).
- 테스트 실행과 프로파일링 실행을 분리하여 성능 테스트가 더 안정적이고 대표성 있는 결과를 내도록 했습니다. #15027 (alexey-milovidov).
- 성능 테스트의 신뢰성을 높였습니다. 이는 프로세스의 실행 메모리를 실행 중에
madvise를 사용해 다시 매핑하여 투명한 대용량 페이지를 사용하도록 함으로써 이루어집니다. 이렇게 하면 성능 테스트에서 불안정성의 주된 원인인 iTLB 미스 횟수를 줄일 수 있습니다. #14685 (alexey-milovidov). - python3로 전환합니다. 이로써 #14886 이슈가 종료됩니다. #15007 (Azat Khuzhin).
- 서버가 응답하지 않으면 기능 테스트를 조기에 실패 처리하도록 했습니다. 이를 통해 #15262 이슈를 해결했습니다. #15267 (alexey-milovidov).
- 설정 파일 없이 AArch64 버전의 clickhouse-server를 실행할 수 있도록 했습니다. 이를 통해 #15174가 해결되었습니다. #15266 (alexey-milovidov).
- CI Docker 이미지 개선: ZooKeeper를 제거하고 테스트 설정 설치를 위한 단일 스크립트를 도입했습니다. #15215 (alesapin).
- fast test 스크립트에서 CMake 옵션 전달을 수정하여 #14711의 오류를 해결했습니다. #15155 (alesapin).
- 단일 명령으로 하드웨어 벤치마크를 수행하는 스크립트를 추가했습니다. #15115 (alexey-milovidov).
- 대형 테스트
test_dictionaries_all_layouts_and_sources를 더 작은 여러 테스트로 나누었습니다. #15110 (Nikita Mikhaylov). - AVX-512가 있는 서버에서 발생하는 base64의 MSan 보고 문제를 수정했습니다. 이 변경으로 #14006이 해결되었습니다. #15030 (alexey-milovidov).
- 모든 통합 테스트 *.py 파일의 코드를 다시 포맷하고 정리했습니다. #14864 (Bharat Nallan).
- CI에서 발견된 MaterializeMySQL 빈 트랜잭션 불안정한 테스트 케이스를 수정합니다. #14854 (Winter Zhang).
- 빌드 속도를 약간 향상했습니다. #14808 (alexey-milovidov).
- 사용되지 않는 헤더를 제거하여 빌드 속도를 약간 높였습니다. #14714 (alexey-milovidov).
- OSX에서 발생하던 빌드 실패를 수정했습니다. #14761 (Winter Zhang).
- 운영 체제에서 ccache를 감지하면 CMake에서 기본값으로 ccache를 활성화합니다. #14575 (alesapin).
- CI 빌드 구성을 ClickHouse 저장소에서 관리하도록 했습니다. #14547 (alesapin).
- CMake 파일에서: - 일부 옵션 설명의 일부를 위쪽 주석으로 옮겼습니다. -
option의 기본값에서 0은OFF, 1은ON으로 변경했습니다. - 옵션에 대한 일부 설명과 문서 링크를 추가했습니다. - 동일한 기능을 활성화하는 또 다른 옵션ENABLE_FUZZING이 있으므로FUZZER옵션을 대체했습니다. -ENABLE_TESTS가 있으므로ENABLE_GTEST_LIBRARY옵션을 제거했습니다. 전체 설명은 PR을 참조하십시오: #14711 (Mike). - 바이너리 크기를 약간 더 줄였습니다 (디버그 버전에서 약 50Mb). #14555 (Artem Zuikov).
- 파일 경로를 조합할 때 ConfigProcessor에서
std::filesystem::path를 사용하도록 했습니다. #14558 (Bharat Nallan). bitShiftLeft()가 음수 큰 정수 인수로 호출될 때 발생하는 디버그 어서션을 수정합니다. #14697 (Artem Zuikov).
ClickHouse 20.9 버전 릴리스
ClickHouse 릴리스 v20.9.7.11-stable, 2020-12-07
성능 향상
- 매우 많은 수의
MergeTree테이블이 포함된Merge테이블에서 읽을 때의 성능을 개선했습니다. 이슈 #7748을 해결합니다. #16988 (Anton Popov).
버그 수정
in_memory_parts_enable_wal이 비활성화되어 있으면 WAL에서 파트를 복원하지 않습니다. #17802 (detailyang).Distributed테이블에 데이터를 삽입할 때 공간이 부족할 경우 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #17737 (tavplubix).- ClickHouse가 MySQL 서버에 대한 연결을 다시 수립하지 못하던 문제를 수정했습니다. #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이 kill된 경우
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_table이AS table_function()으로 생성된 경우CREATE TABLE ... AS some_table쿼리에서 발생하던 크래시를 수정했습니다. Fixes #16944. #17072 (tavplubix).fuzzBits함수 버그 수정. 관련 이슈: #16980. #17051 (hexiaoting).LIMIT이 있는 쿼리와 같이 실행 도중 취소될 수 있는 원격 쿼리에 대해 불필요한 네트워크 오류가 발생하지 않도록 개선했습니다. #17006 (Azat Khuzhin).- TODO. #16866 (tavplubix).
- MySQL 프로토콜을 통해 실행된
INSERT쿼리에서 영향을 받은 행 수를 반환하도록 변경했습니다. 이전에는 ClickHouse가 항상 0을 반환했으나, 이제 올바른 값을 반환합니다. #16605를 수정합니다. #16715 (Winter Zhang).
빌드/테스트/패키징 개선
ClickHouse 릴리스 v20.9.6.14-stable, 2020-11-20
개선
- SNI가 필요한
clickhouse-server보안 엔드포인트에 연결할 수 있도록 했습니다. 이는clickhouse-server가 TLS 프록시 뒤에서 호스팅되는 경우에 가능합니다. #16938 (filimonov). - 조건부 집계 함수(예:
avgIf,sumIf,maxIf)가 행이 없고 널 허용(Nullable) 인자를 사용하는 경우NULL을 반환하도록 했습니다. #13964 (Winter Zhang).
버그 수정
- 리더가 아닌 ReplicatedMergeTreeTables에서
ON CLUSTER쿼리가 무기한 대기 상태에 머무를 수 있는 버그를 수정합니다. #17089 (alesapin). - 오류 발생 시
format_avro_schema_registry_url의 IP 주소를 재해결합니다. #16985 (filimonov). ALTER TABLE ... MODIFY COLUMN ... NewType이후, 변경 중인 컬럼에WHERE식을 사용하는SELECT가 있고ALTER가 아직 완료되지 않았을 때 발생할 수 있는 서버 크래시를 수정합니다. #16968 (Amos Bird).- 설치 스크립트가 항상 설정 폴더 내에 하위 디렉터리를 생성하도록 합니다. 이는 사용자 정의 설정을 사용하는 Docker 빌드에만 해당됩니다. #16936 (filimonov).
ORDER BY가 있는 쿼리에서 발생할 수 있는Illegal type of argument오류를 수정합니다. #16580 을(를) 해결합니다. #16928 (Nikolai Kochetov).- WriteBufferFromS3에 어떤 데이터도 기록되지 않은 경우 multipart 업로드를 중단합니다. #16840 (Pavel Kovalenko).
- 인자를 하나도 지정하지 않고
any를 사용할 때 발생하는 크래시를 수정합니다. #16803 에 대한 수정입니다. cc @azat. #16826 (Amos Bird). - 여러 컬럼과 튜플에 대한
IN연산자 사용 시,transform_null_in설정이 활성화되어 있을 때의 동작을 수정합니다. #15310 을(를) 해결합니다. #16722 (Anton Popov). max_threads> 0 이고ORDER BY에 식이 있는 경우,optimize_read_in_order/optimize_aggregation_in_order가 올바르게 동작하도록 수정합니다. #16637 (Azat Khuzhin).- #16574 및 #16231 을(를) 수정하며,
if접미사가 있는 집계 함수를 사용할 때 발생하는 원격 쿼리 실패 문제를 해결합니다. #16610 (Winter Zhang). - 예외 발생 시 쿼리가 더 빠르게 종료되도록 합니다. 예외가 발생하면 원격 레플리카에서의 실행을 취소합니다. #15578 (Azat Khuzhin).
ClickHouse 릴리스 v20.9.5.5-stable, 2020-11-13
버그 수정
- 쿼리 프로파일러가 켜져 있고 일부 함수에서 비동기 언와인드 테이블이 (아마도) 손상된 glibc 버전이 설치된 OS에 ClickHouse를 설치한 경우 발생하던 드문 무응답(로그 없이 조용히 종료되는) 크래시를 수정합니다. #15301를 수정합니다. #13098를 수정합니다. #16846 (alexey-milovidov).
- 입력으로부터 AVRO를 파싱할 때 타입에서 LowCardinality가 제거되도록 수정합니다. #16188를 수정합니다. #16521 (Mike).
- MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine 구성을 사용하고, MySQL Slave에서
slave_parallel_worker가 활성화된 경우 메타데이터가 급격히 증가하던 문제를, GTID Set을 적절히 축소하도록 하여 수정합니다. #15951를 수정합니다. #16504 (TCeason). - Distributed에 대해 DROP TABLE을 수행할 때 INSERT와 경합(race condition)이 발생하던 문제를 수정합니다. #16409 (Azat Khuzhin).
- 복제 큐에서 매우 큰 엔트리를 처리하는 방식을 수정합니다. 매우 큰 엔트리는 테이블 구조가 매우 큰 경우(약 1 MB에 근접) ALTER 쿼리에서 나타날 수 있습니다. #16307를 수정합니다. #16332 (alexey-milovidov).
- 필터링을 위한 Set이 생성되지 않아 반환 데이터의 일부가 삭제될 수 있었던 일관되지 않은 동작을 수정합니다. #16308 (Nikita Mikhaylov).
- MySQL 데이터베이스 관련 버그를 수정합니다. 데이터베이스 엔진으로 사용되는 MySQL 서버가 다운된 경우, 불필요함에도 비활성화된 서버에서 테이블을 가져오려고 시도하여 일부 쿼리가 예외(Exception)를 발생시키던 문제를 수정합니다. 예를 들어,
SELECT ... FROM system.parts쿼리는 MergeTree 테이블에 대해서만 동작해야 하며, MySQL 데이터베이스는 전혀 건드리지 않아야 합니다. #16032 (Kruglov Pavel).
ClickHouse 릴리스 v20.9.4.76-stable (2020-10-29)
버그 수정
dictGet함수에서 예외가 발생하는 경우의 double free 문제를 수정합니다. 딕셔너리가 오류가 발생한 상태로 로드된 경우 발생할 수 있었습니다. #16429 (Nikolai Kochetov).- GROUP BY 키에 대한 totals/rollup/cube 한정자와 min/max 함수 사용 시 동작을 수정했습니다. #16393를 수정했습니다. #16397 (Anton Popov).
prefer_localhost_replica=0및internal_replication이 설정된 비동기 DistributedINSERT를 수정합니다. #16358 (Azat Khuzhin).- 메모리 누수를 일으킬 수 있었던
TwoLevelStringHashTable구현의 매우 잘못된 코드를 수정했습니다. 이 버그가 이렇게 오랫동안 숨어 있었던 것이 놀랍습니다... #16264 (Amos Bird). - 메모리가 제한과 무관하게 과도하게 할당되는 문제를 수정합니다. 이 변경으로 #14560이(가) 해결됩니다. #16206 (alexey-milovidov).
ReplicatedVersionedCollapsingMergeTree에서ALTER MODIFY ... ORDER BY쿼리가 멈추는 문제를 수정합니다. 이를 통해 #15980 이슈가 해결됩니다. #16011 (alesapin).- collate 이름 및 charset 이름 파서를 수정하고 문자열 타입에서
length = 0을 지원하도록 했습니다. #16008 (Winter Zhang). - 복잡한 키를 가진 딕셔너리에 direct layout을 사용할 수 있도록 했습니다. #16007 (Anton Popov).
- 일정 기간 비활성 상태였다가 복제 오류가 발생할 때 레플리카가 5~10분 동안 멈춰 버리는 현상을 방지합니다. #15987 (filimonov).
- Atomic 데이터베이스 엔진에서 대상 테이블을 DROP하는 작업과 동시에 구체화된 뷰(Materialized View)에 INSERT 또는 SELECT를 수행할 때 드물게 발생하던 세그멘테이션 폴트(segfault)를 수정합니다. #15984 (tavplubix).
- settings 프로필 파싱의 모호성을 수정했습니다. 이제
CREATE USER ... SETTINGS profile readonly구문은 readonly 제약 조건이 설정된profile이라는 이름의 setting을 사용하는 것으로 해석되지 않고,readonly라는 이름의 프로필을 사용하는 것으로 간주됩니다. 이로써 #15628이 수정되었습니다. #15982 (Vitaly Baranov). - 데이터베이스 생성에 실패할 때 발생하던 충돌을 수정했습니다. #15954 (Winter Zhang).
- Atomic 데이터베이스 엔진에서 테이블이 동시에 이름이 변경되는 경우
Table ... does not exist오류와 함께 발생하던DROP TABLE IF EXISTS실패를 수정했습니다. 여러 테이블에 대해 일부 DDL 쿼리(예:DROP DATABASE,RENAME TABLE)를 동시에 실행할 때 드물게 발생하던 교착 상태 문제를 수정했습니다.DROP/DETACH TABLE을 동시에 실행할 때Table ... does not exist오류와 함께 발생하던DROP/DETACH DATABASE실패를 수정했습니다. #15934 (tavplubix). Distributed테이블에서WHERE,PREWHERE,GLOBAL IN을 사용하는 쿼리에서 잘못 빈 결과가 반환되던 문제를 수정합니다. #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). - 가상 컬럼만 선택하는 일부 쿼리를 수정합니다. 이전에는
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 table function에서 glob 패턴 사용 시, URL에서 추출한 리전(region) 정보가 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-stable (2020-10-09)
버그 수정
MV용 쿼리에ARRAY JOIN이 포함된 경우MATERIALIZED VIEW에 데이터를 삽입할 때 발생할 수 있던Cannot find column오류를 수정했습니다. #15717 (Nikolai Kochetov).- AMQP-CPP의 레이스 컨디션을 수정했습니다. #15667 (alesapin).
- 쿼리 플랜의
ReadFromStorage단계에서 리소스의 해제 순서를 수정합니다. 드물게 비정상 종료를 유발할 수 있습니다. #15610과(와) 관련되었을 가능성이 있습니다. #15645 (Nikolai Kochetov). JSON*FUNCTION 결과를VALUES,LIMIT또는IN연산자의 오른쪽에서 사용할 때 발생하던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이후에, 존재하지 않는 파트를 기다리며 Mutation이 대기 상태로 멈춰 있을 수 있었습니다. 이 문제가 수정되었습니다. #15537 (tavplubix).- 동일한 패턴의
LIKE가 먼저 실행된 이후 대소문자를 구분하지 않아야 하는ILIKE연산자가 대소문자를 구분하게 되는 버그를 수정합니다. #15536 (alesapin). - 데이터에 존재하지 않지만 마찬가지로 데이터에 존재하지 않는 다른 컬럼에 의존하는 컬럼을 선택할 때 발생하는
Missing columns오류를 수정합니다. #15530를 수정합니다. #15532 (alesapin). - DDLWorker의 이벤트 구독 관련 버그를 수정하여, 드물게
ON CLUSTER에서 쿼리가 멈출 수 있던 문제를 해결했습니다. 이 버그는 #13450에서 도입되었습니다. #15477 (alesapin). boundingRatio집계 FUNCTION에서 두 번째 인수의 타입이 잘못된 경우 적절한 오류가 보고되도록 했습니다. #15407 (detailyang).SELECT toStartOfDay(today())와 같은 쿼리가 time_zone 인자가 비어 있다고 보고하며 실패하던 버그를 수정했습니다. #15319 (Bharat Nallan).- 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 컬럼 정의 패킷에서 소수 자릿수 필드의 크기를 조정했습니다. #15152 (maqroll).
- Mac OS에서 Docker 컨테이너로 clickhouse-server를 실행할 때 Atomic 데이터베이스에서 DDL 쿼리를 실행하면 발생하던
Cannot rename ... errno: 22, strerror: Invalid argument오류를 수정했습니다. #15024 (tavplubix). - 서브쿼리에
finalizeAggregation함수가 포함된 경우에도 프레디케이트 푸시다운이 동작하도록 수정합니다. #14847 관련 수정입니다. #14937 (filimonov). from_zkinclude 옵션을 사용하여 ZK에서 설정 파일을 가져와야 하는 경우, 서버가 시작 중 ZooKeeper와 통신하는 과정에서 멈출 수 있는 문제를 수정합니다. #14814를 수정합니다. #14843 (Alexander Kuzmenkov).
개선
ClickHouse 릴리스 v20.9.2.20, 2020-09-22
이전 버전과의 호환성이 없는 변경 사항
- 20.5 미만 버전에서 업그레이드하는 과정에서 롤링 업데이트를 수행할 때, 클러스터에 20.5 이상 버전과 20.5 미만 버전이 함께 존재하는 상태에서 이전 버전의 ClickHouse 노드를 재시작하면, 더 새로운 버전이 이미 동작 중인 상황에서 오래된 버전이 다시 시작되어
Part ... intersects previous part오류가 발생할 수 있습니다. 이 오류를 방지하려면 먼저 클러스터의 모든 노드에 새 버전의 clickhouse-server 패키지를 설치한 다음 재시작을 수행해야 합니다. 이렇게 하면 clickhouse-server를 재시작할 때 항상 새 버전으로 시작됩니다.
New Feature
- 컬럼 변환자
EXCEPT,REPLACE,APPLY를 추가했습니다. 이는 선택된 컬럼 목록(*또는COLUMNS(...)이후)에 적용할 수 있습니다. 예를 들어SELECT * EXCEPT(URL) REPLACE(number + 1 AS number)처럼 작성할 수 있습니다. 또 다른 예로, 모든 문자열 컬럼의 최대 길이를 알아내기 위해select * apply(length) apply(max) from wide_string_table를 사용할 수 있습니다. #14233 (Amos Bird). - 순위 상관계수(rank correlation coefficient)를 계산하는 집계 함수
rankCorr를 추가했습니다. #11769 (antikvist) #14411 (Nikita Mikhaylov). - 서브쿼리를 테이블 객체로 변환하는 테이블 함수
view를 추가했습니다. 이는 쿼리를 전달해 사용하는 데 도움이 됩니다. 예를 들어 remote/cluster 테이블 함수에서 사용할 수 있습니다. #12567 (Amos Bird).
버그 수정
ALTER UPDATE뮤테이션에서 상수 값(예:UPDATE x = 42)을 사용하는 대입 식에 널 허용 컬럼이 있을 때 컬럼에 잘못된 값이 기록되거나 세그멘테이션 폴트가 발생하던 버그를 수정합니다. #13634, #14045를 수정합니다. #14646 (alesapin).- 결과 컬럼의 잘못된 decimal 스케일로 인해 잘못된 Decimal 곱셈 결과가 나오던 문제를 수정했습니다. #14603 (Artem Zuikov).
Nullable컬럼의 잘못된 정렬 순서를 수정했습니다. 이로써 #14344가 해결되었습니다. #14495 (Nikita Mikhaylov).FixedString타입 기본 키를 더 짧은 길이의 문자열과 비교할 때 인덱스 분석에서 발생하던 일관되지 않은 비교 동작을 수정했습니다. 이를 통해 #14908 이슈가 해결되었습니다. #15033 (Amos Bird).- 테이블에 파트가 하나뿐인 파티션이 있는 경우 잘못된 머지 작업 할당이 발생하던 버그를 수정합니다. #14444 (alesapin).
- FUNCTION
bar가 특수하게 구성된 인수와 함께 호출된 경우 버퍼 오버플로가 발생할 수 있었습니다. 이 변경으로 #13926이(가) 해결되었습니다. #15028 (alexey-milovidov). system.asynchronous_metrics에 논리 코어별 CPU 주파수를 게시하도록 했습니다. 이로써 #14923을(를) 수정했습니다. #14924 (Alexander Kuzmenkov).MaterializeMySQL데이터베이스 엔진 사용 시 발생하던.metadata.tmp File exists오류를 수정했습니다. #14898 (Winter Zhang).extractAllGroups함수 호출 중 일부에서 "Memory limit exceeded" 오류가 발생할 수 있는 문제를 수정합니다. #13383를 해결합니다. #14889 (alexey-milovidov).- StorageFile(fd)에 INSERT를 시도하면 발생하던 SIGSEGV를 수정합니다. #14887 (Azat Khuzhin).
SELECT쿼리에서 조회되는 컬럼에 다른 컬럼에 의존하는DEFAULT식이 있고, 그 다른 컬럼 또한DEFAULT를 가지지만SELECT쿼리에 포함되지 않고 디스크에도 존재하지 않을 때 발생하는 드문 오류를 수정했습니다. #14531를 부분적으로 수정합니다. #14845 (alesapin).- 부호 있는 정수 타입에 대해 범위가 줄어드는
Int -> Int캐스트에서 잘못된 단조성(monotonicity) 감지를 수정합니다. 이로 인해 잘못된 쿼리 결과를 반환할 수 있습니다. 이 버그는 #14513에서 발견되었습니다. #14783 (Amos Bird). ALTER ... MODIFY QUERY를 실행할 때 materialized view의 메타데이터에서 누락되어 있던 기본 데이터베이스 이름을 수정했습니다. #14664 (tavplubix).- LowCardinality 및 널 허용 타입이 관련된 경우
has함수의 결과가 잘못될 수 있는 문제를 수정합니다. #14591 (Mike). - ReplicatedMergeTree Engine을 사용하는 테이블에 대한 CREATE 쿼리 실행 중 Zookeeper 예외가 발생한 후 데이터 디렉터리를 정리하도록 했습니다. #14563 (Bharat Nallan).
- 매우 큰 매개변수로 인한 오버플로 발생 시 드물게 나타날 수 있던, 조합자
-Resample이 있는 FUNCTION에서의 세그멘테이션 폴트를 수정합니다. #14562 (Anton Popov). topK집계 함수에서 배열 크기 오버플로우를 검사합니다. 이 검사가 없으면 사용자가 신중하게 조작한 파라미터로 쿼리를 보내 서버가 크래시되도록 만들 수 있습니다. 이 변경으로 #14452를 해결합니다. #14467 (alexey-milovidov).- SysVinit의 restart/start/stop/reload 명령을 systemd(사용하는 경우)로 프록시합니다. #14460 (Azat Khuzhin).
PipelineExecutor자체에서 예외가 발생하면 쿼리 실행을 중지합니다. 이렇게 하면 드물게 발생할 수 있는 쿼리가 멈춰(hang) 있는 상태를 방지할 수 있습니다. #14334 #14402 (Nikolai Kochetov).AS table_function으로 생성된 테이블에서ALTER쿼리를 실행할 때 발생하던 충돌을 수정했습니다. #14212을(를) 수정했습니다. #14326 (alesapin).- REFRESH 명령과 함께 ALTER LIVE VIEW 쿼리를 실행하는 동안 발생하던 예외를 수정합니다. LIVE VIEW는 실험적인 기능입니다. #14320 (Bharat Nallan).
- 중첩된 interpreter가 있는 쿼리에서 EXPLAIN PIPELINE graph=1에 사용되는 QueryPlan의 수명 주기를 수정했습니다. #14315 (Azat Khuzhin).
- SSD 캐시 복합 키 외부 딕셔너리에서 튜플 크기를 올바르게 검사하도록 수정했습니다. 이를 통해 #13981 문제가 수정되었습니다. #14313 (alexey-milovidov).
ALIAS컬럼 타입에서CODEC사용을 금지합니다. #13911을(를) 수정합니다. #14263 (Bharat Nallan).- 글로벌 레벨이 아닌 컨텍스트에서 실행될 때
GRANT ALL문이 올바르게 동작하도록 수정했습니다. #13987 (Vitaly Baranov). - lambda에서 arrayJoin() 캡처 문제를 수정했습니다(논리적 오류 메시지와 함께 예외가 발생했습니다). #13792 (Azat Khuzhin).
실험적 기능
- 지정한 SELECT 쿼리를 기반으로 임의의 데이터베이스를 생성하는
db-generator도구가 추가되었습니다. 이는 사용자로부터 불완전한 버그 보고만 있는 경우에도 이슈를 재현하는 데 도움이 됩니다. #14442 (Nikita Mikhaylov) #10973 (ZeDRoman).
Improvement
- Distributed 스토리지 엔진에서 다중 볼륨 스토리지 구성을 사용할 수 있도록 했습니다. #14839 (Pavel Kovalenko).
toStartOf*유형의 함수에서 빈time_zone인수 사용을 허용하지 않습니다. #14509 (Bharat Nallan).- MySQL 핸들러가
SET @@var = value같은 쿼리에 대해OK를 반환하도록 했습니다. 이러한 구문은 무시됩니다. 일부 MySQL 드라이버가 핸드셰이크 이후 설정을 위해SET @@쿼리를 전송하기 때문에 필요합니다. https://github.com/ClickHouse/ClickHouse/issues/9336#issuecomment-686222422. #14469 (BohuTANG). - 이전에 구체화되지 않은 경우에도 병합(merge) 중에 TTL이 적용되도록 했습니다. #14438 (alesapin).
- 이제
clickhouse-obfuscator가 #13163에서 제안된 대로 UUID 타입을 지원합니다. #14409 (dimarub2000). - #11384에서 제안된 새로운 설정
system_events_show_zero_values를 추가했습니다. #14404 (dimarub2000). MaterializeMySQL에서 기본 키를 암시적으로 NULL을 허용하지 않도록(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엔진을 개선했습니다. 연결 및 채널 장애 처리, 올바른 커밋, 삽입 실패 처리, 향상된 익스체인지 구성, 큐 내구성 및 큐 재개 기능, 새로운 큐 설정을 추가했습니다. 테스트도 수정했습니다. #12761 (Kseniia Sumarokova).- compact 파트에서 사용자 정의 코덱을 지원하도록 했습니다. #12183 (Anton Popov).
성능 개선
GROUP BY sharding_key가 있는 분산 쿼리에 대해LIMIT/LIMIT BY/ORDER BY가 포함된 쿼리를 최적화합니다 (optimize_skip_unused_shards및optimize_distributed_group_by_sharding_key설정 사용 시). #10373 (Azat Khuzhin).- 여러
JOIN및IN에 대한 Set을 병렬로 생성합니다. 서로 다른 여러IN subquery표현식을 포함하는 쿼리의 성능이 소폭 향상될 수 있습니다. #14412 (Nikolai Kochetov). - 각 consumer에 대해 독립적인 스레드를 제공하여 Kafka 엔진의 성능을 향상합니다. 스트리밍 엔진(Kafka 등)을 위한 별도의 스레드 풀을 제공합니다. #13939 (fastio).
빌드/테스트/패키징 개선
- 디버그 빌드에서
Functions의 디버그 정보를 제거하여 바이너리 크기를 줄였습니다. 이는 매우 오래된 링커를 사용하는 Yandex의 한 내부 프로젝트에만 필요합니다. #14549 (alexey-milovidov). - clang 11로 빌드할 수 있도록 준비했습니다. #14455 (alexey-milovidov).
- 백포트 스크립트의 로직을 수정했습니다. 이전 버전에서는 100% 빨간색인 모든 레이블에 대해 트리거되었습니다. 이는 다소 이상한 동작이었습니다. #14433 (alexey-milovidov).
- 통합 테스트에서 기본 설정을 사용하도록 했습니다. 예를 들어 모든 설정 변경은 main_configs, user_configs, dictionaries 파라미터를 통해 명시적으로 이루어지도록 했습니다. #13647 (Ilya Yatsishin).
ClickHouse 릴리스 20.8
ClickHouse 릴리스 v20.8.12.2-lts, 2021-01-16
버그 수정
- 단항 함수와 널 허용 타입이 있는 If 조합기를 수정했습니다. #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단계 집계를 사용할 때
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_size가min_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). - 리더 노드가 아닌 ReplicatedMergeTree 테이블에서
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 빌드에만 해당합니다. #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).max_threads> 0이고 ORDER BY에 표현식이 있는 경우optimize_read_in_order/optimize_aggregation_in_order의 일관성 없는 동작을 수정했습니다. #16637 (Azat Khuzhin).ARRAY JOIN이 포함된 쿼리에서 쿼리 최적화가 잘못된 결과를 내던 문제를 수정했습니다. #17887 (sundyli).- 예외 발생 시 쿼리가 더 빠르게 종료되도록 개선했습니다. 예외가 발생하면 원격 레플리카에서 실행을 취소합니다. #15578 (Azat Khuzhin).
ClickHouse 릴리스 v20.8.6.6-lts, 2020-11-13
버그 수정
- 쿼리 프로파일러가 켜져 있고, 일부 함수에 대해 비동기 언와인드 테이블이 (아마도) 손상된 glibc 버전의 OS에 ClickHouse를 설치한 경우 드물게 발생하던, 아무 메시지 없이 비정상 종료되던(silent crash) 문제를 수정했습니다. #15301을 수정합니다. #13098을 수정합니다. #16846 (alexey-milovidov).
- 입력으로부터 AVRO를 파싱할 때 타입에서
LowCardinality가 제거되도록 수정했습니다. #16188을 수정합니다. #16521 (Mike). - MySQL Master -> MySQL Slave -> ClickHouse
MaterializeMySQL엔진을 사용할 때, MySQL Slave에서slave_parallel_worker가 활성화된 경우GTID집합을 적절히 축소하도록 하여 메타데이터가 빠르게 증가하던 문제를 수정했습니다. #15951을 수정합니다. #16504 (TCeason). Distributed테이블에 대해INSERT와 경쟁 상태가 발생하던DROP TABLE동작을 수정했습니다. #16409 (Azat Khuzhin).- 복제 큐(replication queue)에서 매우 큰 엔트리를 처리하는 부분을 수정했습니다. 매우 큰 엔트리는 테이블 구조가 극도로 커서(약 1 MB 수준)
ALTER쿼리에서 나타날 수 있습니다. #16307을 수정합니다. #16332 (alexey-milovidov). - 필터링을 위한
Set이 생성되지 않아 반환 데이터의 일부가 누락될 수 있었던 일관성 없는 동작을 수정했습니다. #16308 (Nikita Mikhaylov). - MySQL 데이터베이스 관련 버그를 수정했습니다. 데이터베이스 엔진으로 사용되는 MySQL 서버가 다운된 경우, 실제로는 필요하지 않음에도 비활성화된 서버에서 테이블을 가져오려고 시도하여 일부 쿼리가 예외를 발생시키던 문제를 수정했습니다. 예를 들어,
SELECT ... FROM system.parts쿼리는MergeTree테이블에 대해서만 동작해야 하며 MySQL 데이터베이스에는 전혀 접근하지 않아야 합니다. #16032 (Kruglov Pavel).
ClickHouse 릴리스 v20.8.5.45-lts, 2020-10-29
버그 수정 사항
- 예외 발생 시 함수
dictGet에서 double free가 발생하던 문제를 수정했습니다. 이는 딕셔너리가 오류가 발생한 채로 로드된 경우에 발생할 수 있었습니다. #16429 (Nikolai Kochetov). - totals/rollup/cube 수정자와 GROUP BY 키에 대한 min/max 함수 사용 시의 동작을 수정합니다. #16393를 수정합니다. #16397 (Anton Popov).
- prefer_localhost_replica=0 및 internal_replication 설정을 사용하는 비동기 Distributed INSERT 동작을 수정했습니다. #16358 (Azat Khuzhin).
- 문자열 키를 사용하는
GROUP BY에서TwoLevelStringHashTable구현 오류로 인해 발생할 수 있었던 메모리 누수를 수정했습니다. #16264 (Amos Bird). - 메모리 제한과 상관없이 메모리가 과도하게 할당되던 문제를 수정합니다. 이로써 #14560 이슈가 해결됩니다. #16206 (alexey-milovidov).
ReplicatedVersionedCollapsingMergeTree에서ALTER MODIFY ... ORDER BY쿼리가 멈추는 문제를 수정합니다. 이로써 #15980 이슈를 해결합니다. #16011 (alesapin).- collate 이름 및 charset 이름 파서를 수정하고 문자열 타입에서
length = 0을 지원하도록 했습니다. #16008 (Winter Zhang). - 복합 키를 사용하는 dictionary에서 direct layout을 사용할 수 있도록 했습니다. #16007 (Anton Popov).
- 일정 시간 동안 활동이 없다가 복제 오류가 발생해도 레플리카가 5~10분 동안 멈춰 있는 현상을 방지합니다. #15987 (filimonov).
- 구체화된 뷰(Materialized View)에 데이터를 삽입하거나 선택하는 동안 Atomic 데이터베이스 엔진에서 대상 테이블을 동시에 드롭할 때 드물게 발생하던 세그멘테이션 폴트(segfault)를 수정합니다. #15984 (tavplubix).
SETTINGS PROFILE구문 파싱 시 발생하던 모호성을 수정했습니다. 이제CREATE USER ... SETTINGS profile readonly는profile이라는 이름의 설정에readonly제약 조건을 사용하는 것이 아니라,readonly라는 이름의 프로파일을 사용하는 것으로 간주됩니다. 이로써 #15628 이슈가 해결되었습니다. #15982 (Vitaly Baranov).- 데이터베이스 생성 실패 시 발생하는 크래시를 수정합니다. #15954 (Winter Zhang).
- Atomic 데이터베이스 엔진에서 테이블이 동시에 이름이 변경되는 경우
Table ... does not exist오류와 함께 발생하던DROP TABLE IF EXISTS실패 문제를 수정했습니다. 여러 테이블에 대해DROP DATABASE,RENAME TABLE과 같은 일부 DDL 쿼리를 동시에 실행할 때 드물게 발생하던 교착 상태를 수정했습니다.DROP/DETACH TABLE을 동시에 실행할 때 발생하던Table ... does not exist오류로 인한DROP/DETACH DATABASE실패를 수정했습니다. #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오류를 수정했습니다. 이 오류는 대상 테이블이 쿼리에 대해 빈 결과를 반환하는 경우에 발생할 수 있었습니다. #15529를 수정합니다. #15662 (Nikolai Kochetov). - S3 테이블 함수에서 glob 패턴 사용 시, URL에서 가져온 리전(region)이 S3 클라이언트 설정에 적용되지 않던 버그를 수정했습니다. #15646 (Vladimir Chebotarev).
- 읽기 전용 테이블을 분리(detach)할 때
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).JSON*함수 결과를VALUES,LIMIT또는IN연산자의 오른쪽에서 사용할 때 발생하던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의 이벤트 구독 버그를 수정했습니다. 이 버그는 #13450에서 도입되었습니다. #15477 (alesapin). boundingRatio집계 함수의 두 번째 인자의 타입이 잘못된 경우 적절한 오류가 보고되도록 했습니다. #15407 (detailyang).- MergeTree 테이블 이름 변경과 백그라운드 정리 작업 중 발생할 수 있는 경쟁 상태(race condition)를 수정합니다. #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).
- 이미 String과 FixedString 사이의 비교에는 패딩을 사용하는 비교 로직을 적용하고 있습니다(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333). 이 PR은 동일한 로직을 필드 비교에도 적용하여 FixedString을 기본 키로 사용할 때의 비교 동작을 올바르게 수정합니다. 이로써 #14908 문제가 해결됩니다. #15033 (Amos Bird).
barFUNCTION이 특정하게 구성된 인수와 함께 호출되었을 때 버퍼 오버플로가 발생할 수 있었습니다. 이 변경으로 #13926이(가) 해결되었습니다. #15028 (alexey-milovidov).- macOS에서 Docker로 clickhouse-server를 실행할 때 Atomic 데이터베이스에서 DDL 쿼리를 실행하면 발생하던
Cannot rename ... errno: 22, strerror: Invalid argument오류를 수정했습니다. #15024 (tavplubix). - 이제
number_of_free_entries_in_pool_to_execute_mutation및number_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_zkinclude 옵션 사용), 서버가 시작 과정에서 ZooKeeper와 통신하는 동안 멈춰버릴 수 있는 문제를 수정합니다. 이에 따라 #14814가 수정됩니다. #14843 (Alexander Kuzmenkov). - 부호 있는 타입에서
Int -> Int로 축소하는 캐스트의 잘못된 단조성 판별을 수정합니다. 이로 인해 잘못된 쿼리 결과가 발생할 수 있습니다. 이 버그는 #14513에서 드러났습니다. #14783 (Amos Bird). 널 허용컬럼의 잘못된 정렬 순서를 수정했습니다. 이를 통해 #14344가 해결되었습니다. #14495 (Nikita Mikhaylov).
개선
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를 가지며, SELECT 쿼리에 포함되지 않고 디스크에도 존재하지 않음)에 의존하는DEFAULT표현식이 있을 때,SELECT쿼리에서 드물게 발생하던 오류를 수정했습니다. #14531를 부분적으로 수정합니다. #14845 (alesapin). ALTER ... MODIFY QUERY를 실행할 때 materialized view 메타데이터에서 기본 데이터베이스 이름이 누락되던 문제를 수정했습니다. #14664 (tavplubix).ALTER UPDATEmutation에서 Nullable 컬럼에 대한 대입식이 상수 값(예:UPDATE x = 42)일 때 컬럼 값이 잘못되거나 segfault가 발생하던 버그를 수정했습니다. #13634, #14045 이슈를 수정합니다. #14646 (alesapin).- 결과 컬럼의 소수 스케일이 잘못 설정되어 잘못된 Decimal 곱셈 결과가 나오던 문제를 수정했습니다. #14603 (Artem Zuikov).
lc->isNullable()또는ls->getDictionaryPtr()->isNullable()호출만으로는 올바른 결과를 반환하지 않는 경우를 위해 추가적인 검사 로직을 추가했습니다. #14591 (myrrc).- StorageReplicatedMergeTree 엔진에 대한 CreateQuery 실행 중 Zookeeper 예외가 발생한 이후 데이터 디렉터리를 정리하도록 했습니다. #14563 (Bharat Nallan).
- 매우 큰 매개변수로 인한 오버플로우 결과로 나타날 수 있었던, combinator -Resample이 사용된 함수에서의 드문 segfault를 수정했습니다. #14562 (Anton Popov).
개선사항
- S3 요청이 진행 중인 경우 서버 종료 속도를 개선했습니다. #14858 (Pavel Kovalenko).
- Storage Distributed에서 다중 볼륨 스토리지 구성을 사용할 수 있도록 했습니다. #14839 (Pavel Kovalenko).
- S3 요청이 진행 중인 경우 서버 종료 속도를 개선했습니다. #14496 (Pavel Kovalenko).
- compact 파트에서 사용자 정의 코덱을 지원합니다. #12183 (Anton Popov).
ClickHouse 릴리스 v20.8.2.3-stable, 2020-09-08
Backward Incompatible Change
- 이제
OPTIMIZE FINAL쿼리는 TTL이 생성되기 전에 추가된 파트에 대해 TTL을 다시 계산하지 않습니다. 해당 파트에 대해 TTL을 한 번만 계산하려면ALTER TABLE ... MATERIALIZE TTL을 사용하고, 그 이후에는OPTIMIZE FINAL이 TTL을 올바르게 평가합니다. 이 동작은 복제된 테이블(Replicated Table)에서는 동작한 적이 없습니다. #14220 (alesapin). parallel_distributed_insert_select설정을 확장하여 로컬 테이블에INSERT를 실행하는 옵션을 추가했습니다. 이 설정의 형식이Bool에서UInt64로 변경되었으므로,false및true값은 더 이상 지원되지 않습니다. 서버 설정에 이러한 값이 포함되어 있으면 서버가 시작되지 않습니다. 각각0과1로 교체하십시오. #14060 (Azat Khuzhin).ODBCDriver입력/출력 포맷 지원이 제거되었습니다. 이는 과거에 ClickHouse ODBC 드라이버와의 통신에 사용되던 사용 중단(deprecated) 포맷으로, 현재는ODBCDriver2포맷으로 완전히 대체되었습니다. #13629를 해결합니다. #13847 (hexiaoting).- 20.5보다 이전 버전에서 업그레이드하는 경우, 롤링 업데이트를 수행하면서 클러스터에 20.5 이상 버전과 20.5 미만 버전이 혼재해 있고, 구버전 ClickHouse 노드를 재시작하여 신규 버전 노드가 존재하는 상태에서 구버전이 기동되면
Part ... intersects previous part오류가 발생할 수 있습니다. 이 오류를 방지하려면, 먼저 모든 클러스터 노드에 새로운 clickhouse-server 패키지를 설치한 후 재시작을 수행하십시오. 이렇게 하면 clickhouse-server를 재시작할 때 항상 새 버전으로 기동됩니다.
New Feature
config.xml에 지정된 설정에 해당하는 컬럼에 대해Default압축 코덱을 지정할 수 있는 기능을 추가했습니다. 구현: #9074. #14049 (alesapin).krb5및cyrus-sasl라이브러리를 사용하여 Kafka에서 Kerberos 인증을 지원합니다. #12771 (Ilya Golshtein).- 리터럴, 리터럴 시퀀스 및 복잡한 별칭을 플레이스홀더로 대체하는
normalizeQueryFUNCTION을 추가했습니다. 유사한 쿼리에 대해 동일한 64비트 해시 값을 반환하는normalizedQueryHashFUNCTION을 추가했습니다. 쿼리 로그를 분석하는 데 도움이 됩니다. 이로써 이슈 #11271을(를) 해결했습니다. #13816 (alexey-milovidov). time_zones테이블을 추가했습니다. #13880 (Bharat Nallan).- 주어진 타입에 대한 기본값을 반환하는
defaultValueOfTypeNameFUNCTION을 추가했습니다. #13877 (hcz). - 정수 또는 Decimal 컬럼에서 10진 숫자의 개수를 세는
countDigits(x)FUNCTION을 추가했습니다. Decimal 컬럼의 값이 해당(또는 지정된) 정밀도를 초과하는지 확인하는isDecimalOverflow(d, [p])FUNCTION을 추가했습니다. #14151 (Artem Zuikov). medianExactLow및medianExactHigh에 해당하는 별칭을 포함하여quantileExactLow및quantileExactHigh구현을 추가했습니다. #13818 (Bharat Nallan).- 날짜/시간 값을 지정된 날짜/시간 단위로 잘라내는
date_truncFUNCTION을 추가했습니다. #13888 (Vladimir Golovchenko). - 주요 설정 파일에 새로운 선택적 섹션
<user_directories>를 추가했습니다. #13425 (Vitaly Baranov). - 테이블의 sample 절을 변경할 수 있는
ALTER SAMPLE BY문을 추가했습니다. #13280 (Amos Bird). positionFUNCTION이 이제 선택적 인자start_pos를 지원합니다. #13237 (vdimir).
버그 수정
- 대화형 모드에서 클라이언트의 진행률 표시줄이 화면에 보이는 데이터를 가리는 문제를 수정합니다. 이 수정으로 #12562, #13369, #13584 및 #12964 이슈가 해결됩니다. #13691 (alexey-milovidov).
- 여러 컬럼으로 정렬할 때
LowCardinality컬럼의 정렬 순서가 잘못되던 문제를 수정했습니다. 이로써 #13958 이슈가 해결되었습니다. #14223 (Nikita Mikhaylov). topK집계 함수에서 배열 크기 오버플로를 검사합니다. 이 검사가 없으면 사용자가 서버 충돌을 유발하는 정교하게 조작된 매개변수로 쿼리를 보낼 수 있습니다. 이 변경으로 #14452가 해결되었습니다. #14467 (alexey-milovidov).- 테이블에 파트가 하나뿐인 파티션이 있는 경우 병합 작업이 잘못 할당될 수 있는 버그를 수정했습니다. #14444 (alesapin).
PipelineExecutor내부에서 예외가 발생한 경우 쿼리 실행을 중지합니다. 이를 통해 드물게 발생할 수 있는 쿼리 멈춤(hung) 현상을 방지할 수 있습니다. #14334의 후속 작업입니다. #14402 #14334 (Nikolai Kochetov).AS table_function으로 생성된 테이블에 대해ALTER쿼리를 실행하는 동안 발생하던 크래시를 수정합니다. #14212를 해결합니다. #14326 (alesapin).- REFRESH 명령과 함께 사용하는 ALTER LIVE VIEW 쿼리 실행 시 발생하던 예외를 수정했습니다. 라이브 view는 실험적인 기능입니다. #14320 (Bharat Nallan).
- 중첩 인터프리터를 사용하는 쿼리에서 EXPLAIN PIPELINE graph=1을 위한 QueryPlan 수명을 수정했습니다. #14315 (Azat Khuzhin).
- 일부 외부 소스에서 스키마를 가져올 때 발생하는
clickhouse-odbc-bridge의 세그멘테이션 폴트(segfault)를 수정합니다. 이 PR은 #13861 이슈를 해결합니다. #14267 (Vitaly Baranov). - #12277에서 도입된 마크 포함 검색(mark inclusion search)에서 발생하던 크래시를 수정했습니다. #14225 (Amos Bird).
- 이름이 지정된 튜플(named tuple)을 사용하는 테이블 생성 동작을 수정합니다. 이를 통해 #13027 이슈가 해결됩니다. #14143 (alexey-milovidov).
- 최소값 음수 10진수의 서식을 수정합니다. 이 변경으로 #14111 문제가 해결됩니다. #14119 (Alexander Kuzmenkov).
DistributedFilesToInsert메트릭이 0으로 설정되지 않아야 하는데 0으로 설정되던 문제를 수정했습니다. #14095 (Azat Khuzhin).pointInPolygon에서 const 2차원 배열을 폴리곤으로 사용할 때의 동작을 수정합니다. #14079 (Alexey Ilyukhov).Poco::Exception: no space left on device의 추가 정보에 표시되던 잘못된 마운트 지점을 수정했습니다. #14050 (tavplubix).- 전역 수준이 아닌 범위에서 실행될 때
GRANT ALL문이 올바르게 동작하도록 수정했습니다. #13987 (Vitaly Baranov). - 엔진을 함께 지정한 table function을 사용한 CREATE TABLE AS 구문을 거부하도록 parser를 수정했습니다. #13940 (hcz).
optimize_duplicate_order_by_and_distinct설정이 활성화된 경우,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).
- lambda에서
arrayJoin캡처 문제를 수정합니다 (LOGICAL_ERROR). #13792 (Azat Khuzhin). range함수에 step 오버플로 검사를 추가합니다. #13790 (Azat Khuzhin).DROP DATABASE와CREATE TABLE을 동시에 실행할 때 발생하던Directory not empty오류를 수정했습니다. #13756 (alexey-milovidov).h3KRingFUNCTION에 대한 범위 검사가 추가되었습니다. 이를 통해 #13633이 수정되었습니다. #13752 (alexey-milovidov).- DETACH와 백그라운드 머지 사이의 경쟁 상태(race condition)를 수정합니다. DETACH 이후 파트가 되살아날 수 있습니다. 이 변경은 문제를 해결하지는 못했지만, 해당 문제를 매우 드물게 재현하며 실패하기 시작한 테스트를 도입했던 #8602의 연속입니다. #13746 (alexey-milovidov).
- log_queries_min_type > QUERY_START인 경우 Settings.Names/Values의 로깅을 수정했습니다. #13737 (Azat Khuzhin).
- verbose=1인 경우
/replicas_status엔드포인트의 응답 상태 코드를 수정합니다. #13722 (javi santana). - user 및 group을 확인할 때
clickhouse-server.init에서 잘못된 메시지가 출력되던 버그를 수정합니다. #13711 (ylchou). optimize_move_functions_out_of_any설정에서 any(arrayJoin()) -> arrayJoin() 형태의 최적화를 수행하지 않도록 했습니다. #13681 (Azat Khuzhin).- StorageMerge에서
set enable_optimize_predicate_expression=1설정 시 JOIN에서 발생하던 크래시를 수정했습니다. #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-dictionary가 소스에 존재하는 값을 반환하지 않고 기본값을 반환하던 문제를 수정했습니다. #13624 (Nikita Mikhaylov).
- 컴팩트 파트에서 보조 인덱스가 손상되는 문제를 수정합니다. 컴팩트 파트는 실험적인 기능입니다. #13538 (Anton Popov).
- 단일 레플리카에서만 실행되어야 하는 쿼리에 대해
ON CLUSTER가 너무 이르게 타임아웃되는 문제를 수정합니다. #6704, #7228, #13361, #11884를 수정합니다. #13450 (alesapin). - FUNCTION
netloc의 잘못된 코드를 수정합니다. 이로써 #13335가 해결됩니다. #13446 (alexey-milovidov). StorageMemory에서 발생할 수 있는 레이스 컨디션을 수정합니다. #13416 (Nikolai Kochetov).- HTTP 프로토콜의
TSV/CSVWithNames형식에서 헤더가 누락되거나 불필요하게 추가되던 문제를 수정했습니다. 이 변경으로 #12504가 해결되었습니다. #13343 (Azat Khuzhin). - 데이터베이스나 테이블 이름에 마침표가 포함된 경우
users.xml에서 행(row) 정책을 올바르게 파싱하지 못하던 문제를 수정했습니다. 이로써 #5779, #12527 이슈가 해결되었습니다. #13199 (Vitaly Baranov). - 연결이 한 번 끊어진 후
redis딕셔너리에 다시 접근하지 못하던 문제를 수정합니다. 이 문제는cache및direct딕셔너리 레이아웃에서 발생할 수 있습니다. #13082 (Anton Popov). - ClickHouseDictionarySource를 사용해 원격 테이블에 쿼리를 실행할 때 수행되던 잘못된 권한 검사를 제거했습니다. #12756 (sundyli).
- 일부 경우 공통 부분식 제거를 위해 서브쿼리를 올바르게 구분하도록 수정했습니다. #8333. #8367 (Amos Bird).
개선
ALIAS컬럼 타입에서는CODEC을 사용할 수 없도록 했습니다. #13911를 수정합니다. #14263 (Bharat Nallan).- 딕셔너리 업데이트가 완료될 때까지 대기할 때는 하드코딩된 값 대신
query_wait_timeout_millisecondsSETTING에 지정된 타임아웃을 사용합니다. #14105 (Nikita Mikhaylov). index_granularity_bytesSETTING을 너무 낮게 설정한 테이블이 실수로 생성되는 것을 방지하기 위해min_index_granularity_bytesSETTING을 추가했습니다. #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)는 대상 행이 없고 Nullable 인자를 사용할 때NULL을 반환하도록 변경되었습니다. #13964 (Winter Zhang). - -Resample 조합자에서 limit 값을 100만으로 늘렸습니다. #13947 (Mikhail f. Shiryaev).
- 비정상적으로 짧고 형식이 잘못된 메시지를 수신하면 Kafka 테이블 엔진이 메시지 처리를 중지하던 AvroConfluent 포맷의 오류를 수정했습니다. #13941 (Gervasio Varela).
- 긴 쿼리에 대해 잘못된 오류를 반환하던 동작을 수정했습니다. 올바른 쿼리에 대해서도
Max query size exceeded가 아닌 구문 오류가 발생할 수 있었습니다. #13928 (Nikolai Kochetov). TabSeparated포맷에서 NULL 값 처리 시 오류 메시지를 개선했습니다. #13906 (jiang tao).arrayCompactFUNCTION은 배열 요소 타입이 Float32/Float64인 경우 NaN 값을 비트 단위로 비교합니다. 이전 버전에서는 배열 요소 타입이 Float32/Float64이면 NaN 값은 항상 서로 다른 것으로, Nullable(Float64)처럼 더 복잡한 타입인 경우에는 항상 서로 같은 것으로 간주되었습니다. 이는 #13857을 해결합니다. #13868 (alexey-milovidov).lgammaFUNCTION에서 데이터 레이스 문제를 수정합니다. 이 경쟁 상태는tsan에서만 감지되었으며, 실제로는 아무 부작용도 발생하지 않았습니다. #13842 (Nikolai Kochetov).- 배열을 필드로 조작할 때 너무 느린 쿼리가 실행되지 않도록, 대신 예외를 발생시키도록 했습니다. #13753 (alexey-milovidov).
- Redis 딕셔너리 소스를 위한 Redis
requirepass인증을 추가했습니다. #13688 (Ivan Torgashov). - MergeTree Write-Ahead-Log(WAL) 덤프 도구가 추가되었습니다. WAL은 실험적 기능입니다. #13640 (BohuTANG).
- 이전 버전에서는
lcm함수가 특별히 구성된 인수로 호출될 경우 디버그 빌드에서 assertion 실패가 발생할 수 있었습니다. 이 변경으로 #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에서 음수 지수가 지나치게 큰 경우 발생하던 디버그 어설션을 수정합니다. #13188 문제를 해결합니다. #13228 (alexey-milovidov).- DiskS3에 캐시 계층을 추가했습니다(로컬 디스크에 mark 및 인덱스 파일을 캐시).
DiskS3는 실험적 기능입니다. #13076 (Pavel Kovalenko). - readline이 이제 히스토리를 파일에 바로 덤프하도록 수정했습니다. #13600 (Amos Bird).
- 기본적으로
Atomic엔진을 사용하는system데이터베이스를 생성합니다(전역적으로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_size를min_insert_block_size_rows로 설정합니다. #5907과 관련이 있습니다. #12195 (flynn).
실험적 기능
- ClickHouse는 MySQL 레플리카로 동작할 수 있으며, 이는
MaterializeMySQL데이터베이스 엔진으로 구현되었습니다. #4006을 구현했습니다. #10851 (Winter Zhang). Int128,Int256,UInt256타입과 해당 타입에 대한 관련 함수가 추가되었습니다. Decimal 타입이 Decimal256(정밀도 최대 76자리)까지 확장되었습니다. 새로운 타입은allow_experimental_bigint_types설정을 통해 사용할 수 있습니다. 현재는 매우 느리고 품질이 좋지 않으며, 구현도 완전하지 않습니다. 이 기능은 사용하지 않기를 권장합니다. #13097 (Artem Zuikov).
빌드/테스트/패키징 개선
- 단일 바이너리만 있을 때 유용한
clickhouse install스크립트를 추가했습니다. #13528 (alexey-milovidov). - 설정 없이도
clickhouse바이너리를 실행할 수 있도록 했습니다. #13515 (alexey-milovidov). - 코드 오타 검사를 위해
codespell을 활성화했습니다. #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부모 이미지를 사용하도록 전환합니다. #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).
- 스타일 검사용 Docker 이미지를 추가했습니다. 모든 Docker 및 Docker Compose 파일이 docker 디렉터리에 위치하는지 확인하는 스타일 검사를 추가했습니다. #13724 (Ilya Yatsishin).
- Mac OS에서 Cassandra 빌드를 수정했습니다. #13708 (Ilya Yatsishin).
- 공유 빌드의 링크 오류를 수정했습니다. #13700 (Amos Bird).
- LDAP 사용자 인증 스위트를 RBAC과의 호환성을 확인하도록 업데이트합니다. #13656 (vzakaznikov).
contrib/aws에서-DENABLE_CURL_CLIENT를 제거했습니다. #13628 (Vladimir Chebotarev).- ClickHouse 노드의 헬스 체크 타임아웃을 늘리고, 비정상 컨테이너가 발견될 경우
docker-compose로그를 덤프할 수 있도록 지원합니다. #13612 (vzakaznikov). - 이슈 #10977이(가) 유효하지 않음을 확인했습니다. #13539 (Amos Bird).
- robot-clickhouse가 생성한 PR은 건너뜁니다. #13489 (Nikita Mikhaylov).
- 통합 테스트에서 사용하던 Dockerfile을
docker/test디렉터리로 이동했습니다. docker_compose 파일은runnerDocker 컨테이너 내에서 사용할 수 있습니다. Docker 이미지는 CI에서 빌드되며, 통합 테스트에서는 빌드하지 않습니다. #13448 (Ilya Yatsishin).
ClickHouse 20.7 릴리스
ClickHouse 릴리스 v20.7.2.30-stable, 2020-08-31
하위 호환되지 않는 변경
- 적어도 하나의 인수가 부동소수점 수인
modulo함수(연산자%)는 양쪽 인수를 정수로 변환하지 않고, 부동소수점 수에 대해 직접 나눗셈의 나머지를 계산합니다. 이로 인해 대부분의 DBMS와 동작이 동일해집니다. 이는 Date 및 DateTime 데이터 타입에도 적용됩니다. 별칭mod가 추가되었습니다. #7323를 해결합니다. #12585 (alexey-milovidov). 0000-00-00및0000-00-00 00:00:00으로 zero Date/DateTime 값을 특별하게 출력하던 동작을 사용 중단(deprecate)했습니다. #12442 (alexey-milovidov).groupArrayMoving*함수는 분산 쿼리(distributed queries)에 대해 작동하지 않았습니다. 결과가 (가장 큰 타입으로 승격하지 않고) 잘못된 데이터 타입으로 계산되었습니다.groupArrayMovingAvg함수는avg함수와 일관되지 않게 정수 값을 반환했습니다. 이는 #12568를 수정합니다. #12622 (alexey-milovidov).- MergeTree 설정에 대한 유효성 검사를 추가했습니다. 설정이 잘못된 경우 서버는 시작 또는 테이블 생성을 거부하고, 사용자에게 자세한 설명을 출력합니다. #13153 (alexey-milovidov).
- 사용자가
background_pool_size를number_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를 재시작할 때 새 버전으로 시작되도록 합니다).
New Feature
- 다각형 딕셔너리 타입을 추가하여 다수의 다각형(세계 지도)으로 이루어진 딕셔너리에서 좌표로부터 영역을 찾는 효율적인 「역 지오코딩(reverse geocoding)」 조회를 제공합니다. CPU 및 메모리 사용량을 낮게 유지하기 위해 재귀 그리드를 사용하는 정교하게 최적화된 알고리즘을 활용합니다. #9278 (achulkov2).
- 사전 구성된 사용자에 대한 LDAP 인증 지원을 추가했습니다(「Simple Bind」 방식). #11234 (Denis Glazachev).
- 일부
ALTER TABLE ... PARTITION ...쿼리(현재는ATTACH및FREEZE)에서 영향을 받은 파트에 대한 정보를 출력하는alter_partition_verbose_result설정을 도입했습니다. #8076를 종료합니다. #13017 (alesapin). - 베이즈 A/B 테스트를 위한
bayesAB함수를 추가했습니다. #12327 (achimbab). - 치명적인 오류에 대한 스택 트레이스를 수집하는
system.crash_log테이블을 추가했습니다. 이 테이블은 비어 있는 상태여야 합니다. #12316 (alexey-milovidov). - 기본 데이터베이스와 출력 형식을 설정할 때 사용할 수 있는 HTTP 헤더
X-ClickHouse-Database및X-ClickHouse-Format를 추가했습니다. #12981 (hcz). SimpleAggregateFunction에minMap및maxMap함수 지원을 추가했습니다. #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 테이블에서 키로 널 허용(Nullable) 타입을 사용할 수 있도록 허용했습니다. #5319를 종료합니다. #12433 (Amos Bird).- COS와의 통합을 추가했습니다. #12386 (fastio).
- 키에 매핑된 값의 덧셈/뺄셈을 위한
mapAdd및mapSubtract함수를 추가했습니다. #11735 (Ildus Kurbangaliev).
버그 수정 사항
- 단일 레플리카에서만 실행되어야 하는 쿼리에 대해
ON CLUSTER가 조기에 타임아웃되는 문제를 수정했습니다. #6704, #7228, #13361, #11884를 수정했습니다. #13450 (alesapin). - #12277에서 도입된 mark 포함 검색(mark inclusion search)에서 발생한 크래시를 수정했습니다. #14225 (Amos Bird).
- 캐시 레이아웃을 사용하는 외부 딕셔너리에서 서버 장애를 유발할 수 있는 경쟁 상태를 수정했습니다. #12566 (alesapin).
- 클라이언트의 대화형 모드에서 진행률 표시줄(progress bar)이 화면에 표시된 데이터를 가리는 문제를 수정합니다. 이로써 #12562, #13369, #13584, #12964 이슈가 해결됩니다. #13691 (alexey-milovidov).
LowCardinality컬럼에서 여러 컬럼을 대상으로 ORDER BY를 사용할 때 정렬 순서가 잘못되던 문제를 수정했습니다. 이를 통해 #13958 이슈가 해결되었습니다. #14223 (Nikita Mikhaylov).- 캐시 딕셔너리에서
query_wait_timeout_milliseconds설정을 잘못 덮어쓰던 하드코딩된 타임아웃을 제거했습니다. #14105 (Nikita Mikhaylov). Poco::Exception: no space left on device에 대한 추가 정보에서 잘못된 마운트 지점을 수정했습니다. #14050 (tavplubix).optimize_duplicate_order_by_and_distinct설정이 활성화된 상태에서 서브쿼리에도DISTINCT가 있는 경우,DISTINCT키워드를 사용하는 SELECT 쿼리의 잘못된 최적화를 수정합니다. #13925 (Artem Zuikov).Distributed테이블의 이름을 변경할 때 발생할 수 있었던 교착 상태를 수정했습니다. #13922 (tavplubix).FixedString컬럼에서 여러 컬럼을 사용하는 ORDER BY 절을 사용할 때 정렬이 잘못되던 문제를 수정합니다. #13182를 수정합니다. #13887 (Nikolai Kochetov).topK/topKWeighted집계에서 (기본값이 아닌 매개변수를 사용할 때) 정밀도가 불필요하게 낮게 나올 수 있던 문제를 수정합니다. #13817 (Azat Khuzhin).- NULL과 비교할 때 SET 타입의 INDEX가 있는 MergeTree 테이블에서 읽기 작업이 실패하던 문제를 수정합니다. 이로써 #13686 이슈가 해결됩니다. #13793 (Amos Bird).
- 함수
range()에서 step 오버플로 문제를 수정합니다. #13790 (Azat Khuzhin). - 동시에
DROP DATABASE와CREATE 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).clickhouse-server.init에서 사용자 및 그룹을 확인하는 동안 표시되던 잘못된 메시지를 수정했습니다. #13711 (ylchou).optimize_move_functions_out_of_any설정에서any(arrayJoin())를arrayJoin()으로 최적화하지 않습니다. #13681 (Azat Khuzhin).- 동시 실행 중인
ALTER ... REPLACE/MOVE PARTITION ...쿼리에서 발생할 수 있었던 교착 상태를 수정했습니다. #13626 (tavplubix). - 간헐적으로 cache-dictionary가 소스의 실제 값 대신 기본값을 반환하던 문제를 수정했습니다. #13624 (Nikita Mikhaylov).
- compact 파트(실험적 기능)에서 보조 인덱스 손상 문제를 수정했습니다. #13538 (Anton Popov).
netlocFUNCTION의 잘못된 코드를 수정했습니다. 이로써 #13335가 수정되었습니다. #13446 (alexey-milovidov).- 유닉스 타임스탬프가 인수로 전달되었을 때
parseDateTimeBestEffort함수에서 발생하던 오류를 수정합니다. 이 수정으로 #13362가 해결됩니다. #13441 (alexey-milovidov). NULL요소를 포함하는 튜플 비교에서 잘못된 반환 타입을 수정합니다. 이로써 #12461을(를) 수정합니다. #13420 (Nikolai Kochetov).SET optimize_move_functions_out_of_any = 1설정과any()내부의 별칭(alias) 사용 시aggregate function any(x) is found inside another aggregate function in query오류가 발생하던 잘못된 최적화를 수정합니다. #13419 (Artem Zuikov).StorageMemory에서 발생할 수 있는 경쟁 상태를 수정합니다. #13416 (Nikolai Kochetov).- 쿼리가 0개의 행을 반환하는 경우
Arrow및Parquet포맷에서 빈 출력이 생성되던 문제를 수정했습니다. 이 포맷에서는 빈 출력이 유효하지 않기 때문입니다. #13399 (hcz). ORDER BY절에 상수 컬럼과 기본 키 접두사가 있는 SELECT 쿼리의 동작을 수정합니다. #13396 (Anton Popov).- clickhouse-local에서
PrettyCompactMonoBlock동작을 수정합니다.PrettyCompactMonoBlock사용 시 extremes/totals 처리 방식을 수정합니다. #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이 비어 있는 상태를 역직렬화할 때 발생하는 세그멘테이션 폴트(segfault)를 수정합니다. #13339 이슈를 수정합니다. #13341 (alesapin). JOIN ON절에서arrayJoin()함수 사용 시 오류가 발생하도록 변경했습니다. #13330 (Artem Zuikov).join_use_nulls=1인 경우LEFT ASOF JOIN에서 발생하던 비정상 종료 문제를 수정했습니다. #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).- 기본 키에 단조(monotonic) 함수가 포함된 표현식이 있고 쿼리에 타입이 다른 상수와의 비교가 포함된 경우
KeyCondition에서 발생하는 assertion을 수정합니다. 이를 통해 #12465 이슈가 해결됩니다. #13251 (alexey-milovidov). - 함수
roundUpToPowerOfTwoOrZero()에서 최상위 비트(MSB)가 설정된 숫자에 대해서는 전달된 숫자를 그대로 반환합니다. 이는 배열 크기 오버플로로 인한 잠재적인 오류를 방지합니다. #13234 (Azat Khuzhin). - literal NULL이 아닌 널 허용 constexpr을 조건으로 사용하는
ifFUNCTION의 동작을 수정하여 #12463을(를) 해결했습니다. #13226 (alexey-milovidov). - 배열 요소가 널 허용이고 배열 인덱스도 널 허용인 경우
arrayElement함수에서 발생하는 assert를 수정합니다. 이로써 #12172가 해결됩니다. #13224 (alexey-milovidov). - 상수 인자를 사용하는 DateTime64 변환 함수를 수정했습니다. #13205 (Azat Khuzhin).
- 데이터베이스나 테이블 이름에 마침표(.)가 포함된 경우
users.xml에서 행 정책(row policies)을 파싱할 때 발생하던 문제를 수정합니다. 이로써 #5779, #12527가 수정됩니다. #13199 (Vitaly Baranov). - 한 번 연결이 끊어진 후
redis딕셔너리에 접근하지 못하던 문제를 수정했습니다. 이는cache및direct딕셔너리 레이아웃에서 발생할 수 있습니다. #13082 (Anton Popov). - 함수를 사용하는 인덱스 분석의 오류를 수정합니다. 이로 인해
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). ORDER BY튜플과 작은LIMIT값을 사용하는 쿼리에서 발생할 수 있던 충돌을 수정했습니다. #12623 문제를 수정했습니다. #13009 (Nikolai Kochetov).UNION및JOIN이 포함된 쿼리에서 발생하는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 DELETE와ALTER MODIFY COLUMN쿼리가 하나의 mutation으로 동시에 실행될 때 드물게 발생하는 버그를 수정합니다. 이 버그로 인해count.txt의 행 수가 잘못되어, 그 결과 해당 part의 데이터도 잘못된 상태가 될 수 있습니다. 또한ALTER RENAME COLUMN과ALTER 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).- #10572 상수 표현식을 사용하는 블룸 필터 인덱스의 문제를 수정했습니다. #12659 (Winter Zhang).
- 브로커를 사용할 수 없을 때(및 그 외의 경우에도) StorageKafka에서 SIGSEGV가 발생하던 문제를 수정했습니다. #12658 (Azat Khuzhin).
Array(UUID)인수를 사용하는if함수에 대한 지원을 추가했습니다. 이로써 #11066이(가) 수정되었습니다. #12648 (alexey-milovidov).CREATE USER IF NOT EXISTS는 사용자가 이미 존재하더라도 이제 예외를 발생시키지 않습니다. 이로써 #12507 이슈가 수정되었습니다. #12646 (Vitaly Baranov).- 예외
There is no supertype...가 예기치 않은 경우(예: UInt64 컬럼에서 빼기 연산을 수행할 때)ALTER ... UPDATE중에 발생할 수 있습니다. 이 변경으로 #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 시 분산 테이블에서 비동기 INSERT로 생성된 블록 데이터를 제거합니다. #12556 (Azat Khuzhin).
- 이제 파일
checksums.txt가 없을 경우 ClickHouse에서 파트의 체크섬을 다시 계산합니다. 이 동작은 #9827 이후로 깨져 있었습니다. #12545 (alesapin). enable_mixed_granularity_parts=1인 경우ALTER DELETE쿼리 실행 후 이전 파트가 손상되던 버그를 수정합니다. #12536. #12543 (alesapin).- 데이터 중복이 발생할 수 있었던 라이브 view 테이블의 경합 상태를 수정합니다. LIVE VIEW는 실험적 기능입니다. #12519 (vzakaznikov).
AggregateFunction(avg, ...)값의 이진 형식에서 하위 호환성 문제를 수정했습니다. 이로써 #12342가 해결되었습니다. #12486 (alexey-milovidov).- 딕셔너리 키 표현식을 기준으로
JOIN에서 딕셔너리를 사용할 때(t JOIN dict ON expr(dict.id) = t.id) 발생하던 크래시 문제를 수정합니다. 이때는 딕셔너리 조인 최적화를 비활성화합니다. #12458 (Artem Zuikov). - 매우 큰 LIMIT 또는 OFFSET을 지정했을 때 발생하는 오버플로 문제를 수정합니다. 이로써 #10470 및 #11372 이슈가 해결됩니다. #12427 (alexey-milovidov).
- Kafka: 배치 중간에 오류가 있는 메시지가 있을 때 발생하던 SIGSEGV를 수정합니다. #12302 (Azat Khuzhin).
개선
- ZooKeeper에 저장되는 로그 양을 줄였습니다. 많은 서버/테이블/INSERT가 있는 환경에서 레플리카가 오프라인일 때 ZooKeeper 노드 수가 과도하게 증가하는 것을 방지합니다. #13100 (alexey-milovidov).
- 이제
ALTER또는 mutation 수행 중 오류가 발생하면 예외가 클라이언트로 전달됩니다. 이로써 #11329 이슈가 종료되었습니다. #12666 (alesapin). QueryTimeMicroseconds,SelectQueryTimeMicroseconds,InsertQueryTimeMicroseconds를system.events에 추가하고, system.metrics, processes, query_log 등에도 함께 추가합니다. #13028 (ianton-ru).system.events뿐만 아니라 system.metrics, processes, query_log 등에도SelectedRows와SelectedBytes를 추가했습니다. #12638 (ianton-ru).system.query_log에current_database정보를 추가했습니다. #12652 (Amos Bird).- 입력 포맷으로
TabSeparatedRaw를 허용합니다. #12009 (hcz). - 이제
joinGet가 여러 키 조회를 지원합니다. #12418 (Amos Bird). *Map집계 함수가 NULL이 포함된 Array 배열에서도 작동할 수 있도록 했습니다. #13157를 수정했습니다. #13225 (alexey-milovidov).- 해당 시간대에서 음수 유닉스 타임스탬프가 되는
DateTime값을 파싱할 때 발생하는 오버플로를 방지합니다(예: 모스크바에서의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). lgammaFUNCTION에서 발생하는 데이터 레이스를 수정했습니다. 이 데이터 레이스는tsan에서만 감지되었으며, 실제 부작용은 발생하지 않았습니다. #13842 (Nikolai Kochetov).- ATTACH/ALTER/CREATE QUOTA SQL 문에서 'Week' 간격 포맷을 수정했습니다. #13417 (vladimir-golovchenko).
- 이제 compact 파트 처리 중에 손상된 파트를 발견하면 해당 파트도 보고됩니다. compact 파트는 실험적인 기능입니다. #13282 (Amos Bird).
geohashesInBox의 assert를 수정했습니다. 이로써 #12554가 해결되었습니다. #13229 (alexey-milovidov).parseDateTimeBestEffort에서 발생하던 assert 문제를 수정합니다. 이를 통해 #12649을(를) 해결합니다. #13227 (alexey-milovidov).- Processors/PipelineExecutor에서의 사소한 최적화: 타당한 경우 루프를 조기에 빠져나오도록 했습니다. #13058 (Mark Papadakis).
- TABLE 키워드 없이 TRUNCATE TABLE을 지원합니다. #12653 (Winter Zhang).
- 기본값으로 인해 EXPLAIN 쿼리의 format이 덮어써지던 문제를 수정했습니다. 이로써 #12541가 해결되었습니다. #12541 (BohuTANG).
SEMI LEFT JOIN대신LEFT SEMI JOIN과 같이 보다 표준적인 방식으로 JOIN 종류와 유형을 설정할 수 있게 되었습니다. 현재는 두 방식 모두 올바릅니다. #12520 (Artem Zuikov).multiple_joins_rewriter_version의 기본값을 2로 변경합니다. 이를 통해 컬럼 이름을 인식하는 새로운 multiple joins rewriter가 사용됩니다. #12469 (Artem Zuikov).- S3 스토리지에 대한 요청용 메트릭을 여러 개 추가했습니다. #12464 (ianton-ru).
--secure인자를 사용할 때 clickhouse-benchmark에서 올바른 기본 보안 포트를 사용하도록 수정했습니다. 이로써 #11044 이슈가 해결되었습니다. #12440 (alexey-milovidov).Log,TinyLog,StripeLog엔진에서 삽입 오류가 발생하면 롤백되도록 했습니다. 이전 버전에서는 삽입 오류가 발생하면 테이블 상태가 일관되지 않게 될 수 있었으며(문서에 명시된 동작으로, 이러한 테이블 엔진에서는 정상으로 간주되었습니다), 이번 변경으로 이를 수정합니다. 이 변경으로 #12402가 해결되었습니다. #12426 (alexey-milovidov).Atomic데이터베이스 엔진에 대해RENAME DATABASE및RENAME DICTIONARY를 구현했습니다. -ReplicatedMergeTree용 ZooKeeper 경로에서 사용할 수 있는 암시적{uuid}매크로를 추가했습니다.CREATE ... ON CLUSTER ...쿼리와 함께 동작합니다. 이를 사용하려면show_table_uuid_in_table_create_query_if_not_nil을true로 설정하십시오. -ReplicatedMergeTree엔진 인수를 선택 사항으로 만들었으며, 기본값으로/clickhouse/tables/{uuid}/{shard}/및{replica}가 사용됩니다. #12135를 해결합니다. - 사소한 수정 사항입니다. - 이 변경으로Atomic데이터베이스 엔진의 하위 호환성이 깨집니다. 이전에 생성된Atomic데이터베이스는 새 형식으로 수동 변환해야 합니다.Atomic데이터베이스는 실험적 기능입니다. #12343 (tavplubix).AWSAuthV4Signer를 별도의 로거로 분리하고, 로그 메시지에서 불필요하게 반복되던AWSClient: AWSClient를 제거했습니다. #12320 (Vladimir Chebotarev).- 디스크 액세스 스토리지에서의 예외 메시지를 개선했습니다. #12625 (alesapin).
- 잘못된 인수 개수로 호출된 FUNCTION
in에 대해 더 나은 예외를 생성하도록 개선했습니다. #12529 (Anton Popov). - adaptive granularity 관련 오류 메시지를 수정합니다. #12624 (alesapin).
- FORMAT 이후 SETTINGS 파싱을 수정합니다. #12480 (Azat Khuzhin).
- MergeTree 테이블에 ORDER BY나 PARTITION BY가 없는 경우, 모든 컬럼을 CLEAR하는 ALTER를 요청하면 ALTER가 멈출 수 있었습니다. 이 문제가 수정되었습니다 #7941. #12382 (alexey-milovidov).
- 각 쿼리 실행 후 히스토리 파일에서 자동 완성 정보를 다시 로드하지 않도록 했습니다(다른 클라이언트 세션과의 히스토리 중복을 방지하기 위해). #13086 (Azat Khuzhin).
성능 개선
- 일부 연산에서 메모리 사용량을 최대 2배까지 줄였습니다. #12424 (alexey-milovidov).
- 정확한 기본 키(PK) 범위와 일치하는 쿼리에 대해 PK 조회를 최적화했습니다. #12277 (Ivan Babrou).
LowCardinality를 사용하는 매우 짧은 쿼리의 성능을 소폭 최적화했습니다. #14129 (Anton Popov).- UInt8/UInt16 키에 대한 집계 성능을 소폭 개선했습니다. #13091 및 #13055 (alexey-milovidov).
- 쿼리 플랜(서브쿼리 내부)의
LIMIT단계를 아래로 밀어 넣는(push down) 최적화를 추가했습니다. #13016 (Nikolai Kochetov). - #11564에 설명된 대로, 파트에서 기본 키 조회와 스키핑 인덱스 단계를 병렬로 수행하도록 했습니다. #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에서 단조 함수(monotonic function)를 해당 인수로 대체합니다. #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). - 컴팩트 파트(compact parts)에서 읽기 성능을 개선했습니다. 컴팩트 파트는 실험적인 기능입니다. #12492 (Anton Popov).
DiskS3에서 스트리밍 최적화를 도입하려고 시도했습니다. DiskS3는 실험적인 기능입니다. #12434 (Vladimir Chebotarev).
빌드/테스트/패키징 개선 사항
sh테스트용 린트 도구로shellcheck를 사용합니다. #13200 #13207 (alexey-milovidov).- GitHub 훅에서 풀 리퀘스트에 레이블을 설정하도록 하는 스크립트를 추가했습니다. #13183 (alesapin).
- 일부 재귀적 서브모듈을 제거했습니다. #13378를 참조하십시오. #13379 (alexey-milovidov).
- 모든 서브모듈이 올바른 URL을 가리키도록 합니다. #13379의 후속 작업입니다. #13378 이슈를 수정합니다. #13397 (alexey-milovidov).
- 쿼리 내에서 접근할 수 있는 사용자 정의 설정에 대한 지원이 추가되었습니다. 이는 ClickHouse 엔진이 다른 시스템의 구성 요소로 사용될 때 필요합니다. #13013 (Vitaly Baranov).
- TestFlows에서 INSERT 권한에 대한 RBAC 기능 테스트를 추가했습니다. SELECT 테스트 대상 테이블을 확장했습니다. 새 테이블 엔진 테스트에 맞춰 요구 사항을 추가했습니다. #13340 (MyroTk).
- 스트레스 테스트에서 서버를 재시작할 때 발생하는 타임아웃 오류를 수정했습니다. #13321 (alesapin).
- 이제 fast test가 서버가 준비될 때까지 재시도하며 대기합니다. #13284 (alesapin).
materialize()함수(ClickHouse 테스트용 함수)는 NULL 값에서도 예상대로 동작하여 이를 비상수(non-constant) 컬럼으로 변환합니다. #13212 (alexey-milovidov).- AArch64에서 libunwind 빌드를 수정했습니다. #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). - fast test check에서 일부 테스트를 다시 실행했습니다. #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 이미지를 빌드하지 않도록 했습니다. CI에서 Docker 컨테이너를 빌드하고, 통합 테스트에서는 미리 빌드된 helper_container를 사용합니다. #12953 (Ilya Yatsishin).
- 기본 키 컬럼에 대한
ALTER TABLE CLEAR COLUMN쿼리 테스트를 추가했습니다. #12951 (alesapin). - testflows 테스트의 타임아웃을 늘렸습니다. #12949 (vzakaznikov).
- Mac OS X에서 테스트 빌드를 수정합니다. 이 변경으로 #12767이(가) 종료됩니다. #12772 (alexey-milovidov).
- Connector-ODBC가 mysql-connector-odbc-8.0.21로 업데이트되었습니다. #12739 (Ilya Yatsishin).
- TestFlows에 RBAC 구문 테스트를 추가. #12642 (vzakaznikov).
- TestKeeper의 성능을 개선합니다. 이를 통해 복제된 테이블(Replicated Table)을 많이 사용하는 테스트의 실행 속도가 빨라집니다. #12505 (alexey-milovidov).
- 이제 스트레스 테스트 실행 후에도 서버가 시작 가능한지 확인합니다. 이를 통해 #12473 이슈가 해결됩니다. #12496 (alesapin).
- fmtlib을 master(7.0.1) 버전으로 업데이트했습니다. #12446 (alexey-milovidov).
- 빠른 테스트를 위해 Docker 이미지를 추가했습니다. #12294 (alesapin).
- 통합 테스트용 구성 경로를 재구성했습니다. #12285 (Ilya Yatsishin).
- 스택 프레임의 크기를 제한하는 컴파일러 옵션을 추가합니다. 이는 스택 크기가 작은 fiber(파이버)에서 코드를 실행하는 데 도움이 됩니다. #11524 (alexey-milovidov).
- gitignore 파일을 업데이트합니다. #13447 (vladimir-golovchenko).
ClickHouse 20.6 릴리스
ClickHouse 릴리스 v20.6.3.28-stable
하위 호환성이 없는 변경
- 20.5보다 낮은 버전에서 업그레이드할 때 롤링 업데이트를 수행하고, 클러스터에 20.5 이상 버전과 20.5 미만 버전이 혼재해 있는 경우, 구버전 ClickHouse 노드를 재시작하여 최신 버전 노드가 존재하는 상태에서 구버전이 기동되면
Part ... intersects previous part오류가 발생할 수 있습니다. 이 오류를 방지하려면 먼저 클러스터의 모든 노드에 새로운clickhouse-server패키지를 설치한 다음 재시작하십시오. 이렇게 하면clickhouse-server가 재시작될 때 항상 새 버전으로 기동됩니다.
New Feature
EXPLAIN쿼리의 초기 구현을 추가했습니다. 구문:EXPLAIN SELECT .... #1118를 수정했습니다. #11873 (Nikolai Kochetov).RabbitMQ스토리지를 추가했습니다. #11069 (Kseniia Sumarokova).- #11710를 위해 PostgreSQL과 유사한
ILIKE연산자를 구현했습니다. #12125 (Mike). SET join_algorithm = 'partial_merge'와 함께 RIGHT JOIN 및 FULL JOIN을 지원합니다. ALL strictness만 허용되며 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()내부의 별칭(alias) 사용 시 발생하던aggregate function any(x) is found inside another aggregate function in query오류를 수정했습니다. #13419 (Artem Zuikov).- clickhouse-local에서
PrettyCompactMonoBlock을 수정했습니다.PrettyCompactMonoBlock의 extremes/totals 처리 동작을 바로잡았습니다. 이 수정으로 #7746이 해결되었습니다. #13394 (Azat Khuzhin). - 지연된 레플리카에서 쿼리를 실행하는 경우 발생할 수 있던
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). - 리터럴 NULL이 아닌 널 허용 constexpr을 cond로 사용하는 function if를 수정했습니다. Fixes #12463. #13226 (alexey-milovidov).
- 배열 요소가 널 허용(Nullable)이고 배열 인덱스도 널 허용인 경우
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 DELETE와ALTER MODIFY COLUMN쿼리가 하나의 mutation으로 동시에 실행될 때 발생하던 드문 버그를 수정했습니다. 이 버그로 인해count.txt의 행 개수가 잘못 계산되고, 그 결과 파트(part) 내 데이터가 잘못되는 문제가 있었습니다. 또한ALTER RENAME COLUMN과ALTER ADD COLUMN이 동시에 실행될 때 발생하던 사소한 버그도 함께 수정했습니다. #12760 (alesapin).CAST(Nullable(String), Enum())를 수정했습니다. #12745 (Azat Khuzhin).IN절에서 FUNCTION으로 해석되는 큰 튜플과 관련된 성능 문제를 수정했습니다. 사용자가 알 수 없는 어떤 이유에서인지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는 이제 해당 사용자가 이미 존재하더라도 예외를 발생시키지 않습니다. 이에 따라 #12507이(가) 수정되었습니다. #12646 (Vitaly Baranov).- 디스크 액세스 스토리지에서 예외 메시지를 개선했습니다. #12625 (alesapin).
- 함수
groupArrayMoving*가 분산 쿼리에서 동작하지 않았습니다. 그 결과가 올바르지 않은 데이터 타입(가장 큰 타입으로 승격하지 않음)으로 계산되었습니다. 함수groupArrayMovingAvg는avg함수와 일치하지 않는 정수 값을 반환했습니다. 이 변경으로 #12568 문제가 수정되었습니다. #12622 (alexey-milovidov). anyFUNCTION에서 별칭이 생성되지 않던 문제를 수정했습니다. #12593 (Anton Popov).- 캐시 레이아웃을 사용하는 외부 딕셔너리에서 서버 크래시로 이어질 수 있었던 경쟁 상태를 수정했습니다. #12566 (alesapin).
- DROP TABLE을 실행할 때 분산 테이블의 데이터(비동기 INSERT 작업에서 생성된 블록)를 제거합니다. #12556 (Azat Khuzhin).
enable_mixed_granularity_parts=1인 상태에서ALTER DELETE쿼리 수행 후 기존 파트가 손상되던 버그를 수정했습니다. #12536 이슈를 해결했습니다. #12543 (alesapin).- 잘못된 인수 개수로
inFUNCTION을 사용할 때 더 명확한 예외를 던지도록 개선했습니다. #12529 (Anton Popov). - 라이브 view 테이블에서 데이터 중복이 발생할 수 있던 경쟁 조건을 수정했습니다. #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). -State및 널 허용(Nullable) 인수를 사용하는 집계 함수에서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)이나 시스템 테이블의 인덱스 컬럼(예:system.tables에서 쿼리할 때 데이터베이스 이름으로 필터링)을 사용해 데이터를 필터링하는 표현식이 있고, 이 표현식이 널 허용(Nullable) 타입을 반환하는 경우에도 「bad cast」 예외가 발생하지 않도록 했습니다. 이 변경으로 #12166이 수정되었습니다. #12305 (alexey-milovidov). TTL표현식이 의존하는 컬럼의 이름을 변경한 이후에도TTL이 올바르게 동작하도록 수정했습니다. #12304 (Anton Popov).KafkaEngine에서 배치 중간에 오류가 있는 메시지가 있을 때 SIGSEGV가 발생하던 문제를 수정했습니다. #12302 (Azat Khuzhin).DNS캐시를 업데이트하는 동안 일부 스레드가 몇 초 동안 간헐적으로 멈출 수 있던 문제를 수정했습니다. #12296 (tavplubix).- 설정 이름의 오타를 수정했습니다. #12292 (alexey-milovidov).
TrieDictionary로드에 실패한 경우 오류를 표시합니다. #12290 (Vitaly Baranov).arrayFillFUNCTION이 빈 배열에 대해 잘못 동작하여 크래시가 발생할 수 있는 문제를 수정했습니다. 이 변경으로 #12263이 해결되었습니다. #12279 (alexey-milovidov).LowCardinality타입에 대해 공통 타입으로 변환을 구현합니다. 이를 통해 LowCardinality 컬럼과 다른 컬럼이 함께 있는 테이블들 사이에서 UNION ALL을 실행할 수 있습니다. 이 변경으로 #8212 이슈가 수정됩니다. 이 변경으로 #4342 이슈가 수정됩니다. #12275 (alexey-milovidov).S3스토리지에 대한 요청에서 리디렉션 제한에 도달했을 때의 동작을 수정했습니다. #12256 (ianton-ru).- 여러 번 연속으로 INSERT를 수행할 때
StorageFile에서 일부 특수 타입의 헤더가 한 번 이상 기록되던 동작을 수정했습니다. 이로 인해 #6155가 해결되었습니다. #12197 (Nikita Mikhaylov). - UInt8 값이 0 또는 1이 아닌 경우 논리 함수가 올바르게 동작하도록 수정했습니다. #12196 (Alexander Kazakov).
- max_memory_usage* 한도를 프로세스의 상주 메모리 크기로 제한합니다. #12182 (Azat Khuzhin).
GROUP BY에서 단사 함수 제거 시dictGet인수 검사 오류를 수정합니다. #12179 (Azat Khuzhin).SummingMergeTree엔진이 파티션 키의 컬럼을 합산할 때의 동작을 수정했습니다. 합산할 컬럼을 명시적으로 정의했을 때 해당 컬럼이 파티션 키 컬럼과 겹치는 경우 예외를 발생시키도록 했습니다. 이 변경으로 #7867이 해결되었습니다. #12173 (Nikita Mikhaylov).- ODBC 연결에서 스키마를 지원하지 않는 경우 딕셔너리 소스의 테이블 이름을 스키마와 테이블 이름으로 분리하지 않도록 했습니다. #12165 (Vitaly Baranov).
ALTER DELETE에서 조건이 NULL로 평가될 때 레코드가 삭제로 이어지던 잘못된 로직을 수정했습니다. 이로 인해 #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" 파일 처리를 표준화합니다. 이전 버전에서는 서버가 정상적으로 종료되지 않고 강제 종료되었고, 이전에 실행되던 서버와 동일한 pid를 가진 다른 프로세스가 있는 경우 서버가 시작되지 않을 수 있었습니다. 또한 다른 서버가 실행 중이더라도 서버 시작에 실패하면 pid 파일이 삭제될 수 있었습니다. 이 변경으로 #3501이(가) 수정됩니다. #12133 (alexey-milovidov).
- ReplicatedVersionedCollapsingMergeTree 테이블의 ZooKeeper 테이블 메타데이터가 잘못 저장되던 버그를 수정했습니다. #12093를 해결합니다. #12121 (alesapin).
- system logs(system.query_log, metric_log 등)이나 engine=Buffer 기저 테이블에 연결된 조인 또는 서브쿼리가 있는 materialized view에서 "There is no query" 예외가 발생하지 않도록 수정했습니다. #12120 (filimonov).
- ENGINE=Dictionary 를 사용하는 테이블과 딕셔너리 간의 의존 관계 처리 방식을 수정했습니다. 이를 통해 #10994와 #10397 문제가 해결되었습니다. #12116 (Vitaly Baranov).
Parquet포맷이 이제LowCardinality및LowCardinality(Nullable)타입에서도 정상적으로 동작합니다. #12086, #8406가 수정되었습니다. #12108 (Nikolai Kochetov).- 전체 스레드 수에 대한 잘못된 제한으로 인해 발생했던
UNION이 포함된 SELECT의 성능 문제를 수정했습니다. #12030을(를) 수정합니다. #12103 (Nikolai Kochetov). -StateResamplecombinator에서 발생하던 세그멘테이션 폴트를 수정했습니다. #12092 (Anton Popov).- SELECT 쿼리에서
system.quey_log의result_rows및result_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).CONSTRAINT가 상수 표현식일 때의 제약 조건 검사를 수정했습니다. 이로써 #11360이 해결되었습니다. #12042 (alexey-milovidov).- 서로 다른 크기의
FixedString타입 인수를 사용하여 함수if를 호출할 때 잘못된 결과가 나오거나 비정상 종료(크래시)가 발생할 수 있던 문제를 수정했습니다. 이로써 #11362가 해결되었습니다. #12021 (alexey-milovidov).
Improvement
JOIN종류와 타입을 보다 표준적인 방식으로 지정할 수 있도록 허용했습니다. 이제SEMI LEFT JOIN대신LEFT SEMI JOIN을 사용할 수 있습니다. 현재는 두 방식 모두 올바르게 동작합니다. #12520 (Artem Zuikov).- Buffer 엔진에 lifetime_rows/lifetime_bytes를 추가했습니다. #12421 (Azat Khuzhin).
- 'MySQL server has gone away' 대신 클라이언트에 상세 예외 메시지를 기록하도록 변경했습니다. #12383 (BohuTANG).
- 그리드 경계 출력에 사용되는 문자 집합(charset)을 변경할 수 있도록 했습니다. 사용 가능한 문자 집합은 다음과 같습니다: UTF-8, ASCII.
output_format_pretty_grid_charset설정을 통해 이 기능을 활성화할 수 있습니다. #12372 (Sabyanin Maxim). - MySQL
SELECT DATABASE()를 지원했습니다. #9336 또한 MySQL 대체 쿼리 통합 테스트를 추가했습니다. #12314 (BohuTANG). - MySQL 클라이언트/드라이버에서 긴 쿼리를 취소하기 위한
KILL QUERY [connection_id]를 추가했습니다. issue #12038. #12152 (BohuTANG). formatDateTimeFUNCTION에서%g(2자리 ISO 연도) 및%G(4자리 ISO 연도) 치환을 지원하도록 했습니다. #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*()내부의 injective 함수들을 제거했습니다. #12337 (Ruslan Kamalov).- 리터럴이 있는 IN 연산자에서 인덱스가 사용되지 않던 문제(v19.3 주변 버전에서 도입된 성능 회귀)를 수정했습니다. 이로써 #10574가 해결되었습니다. #12062 (nvartolomei).
- DiskS3에 대해 단일 파트 업로드를 구현했습니다(실험적 기능). #12026 (Vladimir Chebotarev).
실험적 기능
MergeTree계열 테이블에 데이터를 메모리에 저장하는 새로운 인메모리 파트 형식을 추가했습니다. 파트는 처음으로 머지될 때 디스크에 기록됩니다. 파트의 행 수 또는 바이트 크기가min_rows_for_compact_part및min_bytes_for_compact_part임계값보다 작으면 인메모리 형식으로 생성됩니다. 또한 Write-Ahead-Log에 대한 선택적 지원이 제공되며, 기본적으로 활성화되어 있고in_memory_parts_enable_wal설정으로 제어됩니다. #10697 (Anton Popov).
빌드/테스트/패키징 개선
clickhouse-client용 AST 기반 쿼리 퍼징(fuzzing) 모드를 구현했습니다. 퍼징으로 최근 발견한 이슈 목록은 이 레이블을 참고하십시오. 대부분은 이 도구로 발견했고, 일부는 SQLancer와00746_sql_fuzzy.pl로 발견했습니다. #12111 (Alexander Kuzmenkov).- Testflows 프레임워크 기반의 새로운 유형의 테스트를 추가했습니다. #12090 (vzakaznikov).
- S3 HTTPS 통합 테스트를 추가했습니다. #12412 (Pavel Kovalenko).
- 별도 스레드에서 sanitizer 트랩 메시지를 로그로 남기도록 했습니다. 이를 통해 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-serverDocker 이미지에서 시스템 패키지를 업그레이드하도록 했습니다. #12124 (Ivan Blinkov).system.build_options테이블에UNBUNDLED플래그를 추가했습니다.clickhouse-test용 스킵 리스트를 ClickHouse 저장소로 이동했습니다. #12107 (alesapin).- Anchore Container Analysis 보안 분석 도구를 사용해
clickhouse-serverDocker 이미지에서 CVE를 탐지하는 정기 검사를 추가했습니다. 또한Dockerfile이 빌드 가능함을 확인합니다.master브랜치와Dockerfile에 대한 pull request에서 매일 실행됩니다. #12102 (Ivan Blinkov). - GitHub CodeQL 보안 분석 도구를 사용해 CWE를 탐지하는 일별 검사를 추가했습니다. #12101 (Ivan Blinkov).
- Dockerfile에서 첫 번째
apt-get update이전에ca-certificates를 설치하도록 했습니다. #12095 (Ivan Blinkov).
ClickHouse 20.5 릴리스
ClickHouse 릴리스 v20.5.4.40-stable 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).- 상수 표현식을 사용하는 블룸 필터 인덱스를 수정했습니다. 이로써 #10572를 해결했습니다. #12659 (Winter Zhang).
- 브로커를 사용할 수 없는 경우 등에서
StorageKafka에서 발생하던SIGSEGV를 수정했습니다. #12658 (Azat Khuzhin). - 함수
if에서Array(UUID)인자를 지원하도록 했습니다. 이로써 #11066이(가) 수정되었습니다. #12648 (alexey-milovidov). anyFUNCTION에서 별칭(alias)을 사용할 수 없었던 문제를 수정했습니다. #12593 (Anton Popov).- 캐시 레이아웃을 사용하는 외부 딕셔너리에서 서버 충돌을 유발할 수 있던 경쟁 상태를 수정했습니다. #12566 (alesapin).
- DROP TABLE 시 분산 테이블의 데이터(비동기
INSERT에서 생성된 블록)를 제거합니다. #12556 (Azat Khuzhin). enable_mixed_granularity_parts=1일 때ALTER DELETE쿼리 실행 후 기존 파트가 손상되던 버그를 수정했습니다. 관련 이슈: #12536. #12543 (alesapin).in함수가 잘못된 인자 개수로 호출될 때 더 나은 예외를 발생시키도록 했습니다. #12529 (Anton Popov).- 라이브 view 테이블에서 데이터가 중복될 수 있었던 경쟁 상태를 수정했습니다. #12519 (vzakaznikov).
- compact 파트에서 데이터를 읽을 때의 성능 문제를 수정했습니다. #12492 (Anton Popov).
AggregateFunction(avg, ...)값의 바이너리 포맷에서 역호환성 문제가 수정되었습니다. 이로써 #12342가 해결되었습니다. #12486 (alexey-milovidov).text_log가 활성화된 경우 발생하던 교착 상태(deadlock)를 수정했습니다. #12452 (alexey-milovidov).- 매우 큰 LIMIT 또는 OFFSET이 지정되었을 때 발생하던 오버플로 문제를 수정했습니다. 이 수정으로 #10470 및 #11372 이(가) 해결되었습니다. #12427 (alexey-milovidov).
- StorageMerge 사용 시 발생할 수 있는 세그멘테이션 폴트(segfault)를 수정했습니다. #12054 이슈를 해결했습니다. #12401 (tavplubix).
- #12098를 해결하기 위해 #11079에서 도입된 변경 사항을 되돌렸습니다. #12397 (Mike).
- 인덱스가 있는 테이블에서 WHERE 조건에 음수 또는 부동 소수점 상수가 사용되더라도 예외가 발생하지 않도록 했습니다. #11905을(를) 수정합니다. #12384 (alexey-milovidov).
- 종속된 DEFAULT 표현식이 있더라도 컬럼을 CLEAR할 수 있도록 허용합니다. 이를 통해 #12333 이슈를 해결합니다. #12378 (alexey-milovidov).
-State및 널 허용(Nullable) 인수를 사용하는 집계 함수에 대한 TOTALS/ROLLUP/CUBE 동작을 수정했습니다. 이로써 #12163 문제가 해결되었습니다. #12376 (alexey-milovidov).KafkaEngine에서 배치의 중간에 오류가 있는 메시지가 포함되어 있을 때 발생하던 SIGSEGV를 수정했습니다. #12302 (Azat Khuzhin).SummingMergeTree엔진이 파티션 키에 포함된 컬럼을 합산할 때의 동작을 수정했습니다. 합산할 컬럼을 명시적으로 정의했을 때 해당 컬럼들이 파티션 키 컬럼과 겹치는 경우 예외를 발생시키도록 했습니다. 이를 통해 #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-stable 2020-07-02
하위 호환성 없는 변경
- COUNT(DISTINCT)와
uniq집계 함수 계열이 널 허용이 아닌(non-Nullable) 결과를 반환하도록 변경되었습니다. 전달된 값이 모두 NULL인 경우에는 0을 반환합니다. 이로 인해 SQL 호환성이 개선됩니다. #11661 (alexey-milovidov). - 사용자 수준 설정이 잘못된 위치에 지정된 경우를 위한 검사가 추가되었습니다. 사용자 수준 설정은 특정 사용자 프로필에 대해
users.xml의<profile>섹션 안에(또는 기본 설정의 경우<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보다 이전 버전에서 업그레이드할 때, 롤링 업데이트를 수행하며 클러스터에 20.5 이상 버전과 20.5 미만 버전이 혼재해 있고, 구버전 ClickHouse 노드를 재시작하여 신규 버전이 존재하는 상태에서 구버전이 기동되면
Part ... intersects previous part오류가 발생할 수 있습니다. 이러한 오류를 방지하려면, 먼저 클러스터의 모든 노드에 새로운 clickhouse-server 패키지를 설치한 다음 재시작을 수행해야 합니다(즉, clickhouse-server를 재시작할 때 항상 새 버전으로 기동되도록 해야 합니다).
새로운 기능
- 테이블에서 데이터 자동 집약 및 롤업을 위한
TTL DELETE WHERE및TTL GROUP BY. #10537 (expl0si0nn). - PostgreSQL wire 프로토콜을 구현했습니다. #10242 (Movses).
- users, roles, grants, settings profiles, quotas, row policies에 대한 시스템 테이블과 SHOW USER, SHOW [CURRENT|ENABLED] ROLES, SHOW SETTINGS PROFILES 명령어를 추가했습니다. #10387 (Vitaly Baranov).
- ODBC Table function에서 쓰기를 지원합니다 #10554 (ageraab). #10901 (tavplubix).
- Linux
perf_events기반의 쿼리 성능 메트릭을 추가했습니다(이 메트릭은 하드웨어 CPU 카운터와 OS 카운터로 계산됩니다). 이 기능은 선택 사항이며 사용하려면 ClickHouse 바이너리에CAP_SYS_ADMIN권한이 설정되어야 합니다. #9545 Andrey Skobtsov. #11226 (Alexander Kuzmenkov). - 이제
CREATE쿼리에서 데이터 타입에NULL및NOT NULL수정자를 사용할 수 있습니다. #11057 (Павел Потемкин). ArrowStream입력 및 출력 형식을 추가했습니다. #11088 (hcz).- 외부 딕셔너리의 소스로 Cassandra를 지원합니다. #4978 (favstovol).
- 각 쿼리마다 데이터를 저장하거나 캐시하지 않고 모든 데이터를 소스에서 직접 로드하는 새로운 레이아웃
direct가 추가되었습니다. #10622 (Artem Streltsov). - 딕셔너리에 쿼리 실행 중 로컬에 아무것도 저장하지 않는 새로운
complex_key_direct레이아웃을 추가했습니다. #10850 (Artem Streltsov). - MySQL 스타일의 전역 변수 구문(스텁 구현)에 대한 지원이 추가되었습니다. 이는 MySQL 프로토콜과의 호환성을 위해 필요합니다. #11832 (alexey-milovidov).
replxx를 사용하여clickhouse-client에 구문 하이라이트 기능을 추가했습니다. #11422 (Tagir Kuskarov).minMap및maxMap함수가 추가되었습니다. #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).
- Python의
urlparse(url)의netloc과 유사하게 네트워크 위치를 추출하는netloc함수를 추가했습니다. #11356 (Guillaume Tassery). - Kafka 엔진에서 메시지 헤더에 접근할 수 있도록 가상 컬럼 2개를 추가했습니다. #11283 (filimonov).
- Kafka 엔진에
_timestamp_ms가상 컬럼을 추가했습니다(형식은Nullable(DateTime64(3))). #11260 (filimonov). randomFixedStringFUNCTION을 추가했습니다. #10866 (Andrei Nekrashevich).- 지정된 확률로 문자열의 비트를 무작위로 뒤집는 함수
fuzzBits를 추가합니다. #11237 (Andrei Nekrashevich). - 비교 연산자와 IN 및 VALUES 절에서 숫자 값을 상수 문자열과 비교할 수 있도록 허용합니다. #11647 (alexey-milovidov).
round_robinload_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).
- URL에서 포트를 추출하는
portFUNCTION을 추가했습니다. #11120 (Azat Khuzhin). - 이제
dictGet*함수에서 테이블 이름을 사용할 수 있습니다. #11050 (Vitaly Baranov). - 이제
-n인자를 사용하면clickhouse-format도구로 여러 쿼리를 포맷할 수 있습니다. #10852 (Darío). - DiskS3용 proxy-resolver를 구성할 수 있는 기능이 추가되었습니다. #10744 (Pavel Kovalenko).
pointInPolygon함수가 상수 폴리곤뿐만 아니라 상수가 아닌 폴리곤에서도 동작하도록 개선되었습니다. 이제pointInPolygon은 두 번째 인자로 다각형과 그 내부 홀을 나타내는 Array(Array(Tuple(..., ...))) 형식의 배열을 받을 수 있습니다. #10623 (Alexey Ilyukhov) #11421 (Alexey Ilyukhov).system.parts시스템 테이블에move_ttl_info를 추가하여 move TTL 기능의 내부 동작을 확인할 수 있도록 했습니다. #10591 (Vladimir Chebotarev).- 프록시를 통해 S3를 사용할 수 있게 되었습니다. #10576 (Pavel Kovalenko).
- 데이터 타입용
NCHAR및NVARCHAR동의어를 추가했습니다. #11025 (alexey-milovidov). - #7224 이슈를 해결했습니다:
system.events테이블에FailedQuery,FailedSelectQuery,FailedInsertQuery메트릭을 추가했습니다. #11151 (Nikita Orlov). system.asynchronous_metrics에 더 많은jemalloc통계를 추가하고, 해당 값이 항상 최신 상태로 표시되도록 합니다. #11748 (Alexander Kuzmenkov).- 기본 S3 자격 증명과 사용자 지정 인증 헤더를 지정할 수 있게 했습니다. #11134 (Grigory Pervakov).
to-/fromUnixTimestamp64Milli/-Micro/-Nano함수가 추가되어 다양한 정밀도로 DateTime64를 Int64로 입출력할 수 있게 되었습니다. #10923 (Vasily Nemkov).- MongoDB 딕셔너리에
mongodb://URI를 지정할 수 있도록 했습니다. #10915 (Alexander Kuzmenkov). - OFFSET 키워드를 이제 LIMIT 절 없이도 단독으로 사용할 수 있습니다. #10802 (Guillaume Tassery).
system.licenses테이블을 추가했습니다. 이 테이블에는contrib디렉터리에 있는 서드파티 라이브러리의 라이선스가 포함되어 있습니다. 이로써 #2890이(가) 해결되었습니다. #10795 (alexey-milovidov).- 새로운 FUNCTION
toStartOfSecond(DateTime64) -> DateTime64는DateTime64값의 초 미만(소수점 이하) 부분을 0으로 만듭니다. #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 파싱에서 UBSan 경고를 수정했습니다. 이 변경으로 #7540 이슈가 해결됩니다. #10512 (alexey-milovidov).
- DateTime64를 파싱할 때 발생할 수 있는 부동소수점 예외를 수정했습니다. 이로써 #11374가 해결되었습니다. #11875 (alexey-milovidov).
- Prewhere 조건에서
Nullable컬럼을 사용할 때 드물게 발생하던 크래시를 수정했습니다. #11895 #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 ... FROM merge_tree_table ...에서WITH <scalar subquery> ...를 사용할 때 발생하던Scalar does not exist예외가 발생하던 문제를 수정했습니다. #11621. #11767 (Amos Bird).SELECT *, xyz.*와 같은 쿼리가 에러가 발생해야 함에도 불구하고 성공하던 예기치 않은 동작을 수정했습니다. #11753 (hexiaoting).- 이제 메타데이터 ALTER 중에는 replicated fetch가 취소됩니다. #11744 (alesapin).
- 동등성 비교를 수행하기 전에 ZooKeeper에 저장된 메타데이터를 파싱합니다. #11739 (Azat Khuzhin).
- Values 입력 포맷에서 복잡한 리터럴에 대한 잘못된 타입 추론으로 인해 발생하던 LOGICAL_ERROR를 수정했습니다. #11732 (tavplubix).
- 상수 컬럼에 대한
ORDER BY ... WITH FILL동작을 수정합니다. #11697 (Anton Popov). SYSTEM SYNC REPLICA에서 발생할 수 있는 매우 드문 경쟁 상태(race condition)를 수정합니다. 복제된 테이블(Replicated Table)이 생성되는 동시에, 별도의 연결을 통해 다른 클라이언트가 해당 테이블에 대해SYSTEM SYNC REPLICA명령을 실행하는 경우(다른 클라이언트가 테이블이 생성 중임을 알고 있어야 하므로 가능성은 낮습니다),nullptr역참조가 일어날 수 있습니다. #11691 (alexey-milovidov).- XDBC 브리지와 통신할 때 적절한 타임아웃이 전달되도록 수정했습니다. 이전에는 브리지의 liveness를 확인하고 메타 정보를 수신하는 과정에서 타임아웃이 올바르게 적용되지 않았습니다. #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).
- 행 수준 보안(row-level security)이 설정된 경우 단순 count 쿼리 최적화를 제거합니다. 이전 버전에서는 필터링된 값이 아니라 테이블의 전체 레코드 개수가 반환되었습니다. 이 변경으로 #11352를 해결합니다. #11644 (alexey-milovidov).
- String 타입용 블룸 필터(data skipping 인덱스)를 수정했습니다. #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).
- 서버 시작 시 표시되는 "Mark cache size was lowered" 로그 메시지의 사소한 오류를 수정합니다. 이 변경으로 #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 세션에서 모든 쿼리가 동일한
query_id를 사용하는 문제가 있었습니다. 수정되었습니다. #11578 (tavplubix). - 이제 clickhouse-server Docker 컨테이너가 서버 생존 여부를 확인할 때 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이고 내부 복제 없이Distributed테이블에 비동기INSERT를 수행할 때의 동작을 수정합니다. #11527 (Azat Khuzhin).-State함수를 사용하는 집계 도중 예외가 발생할 때 발생하던 메모리 누수를 수정합니다. #8995 이슈를 해결합니다. #11496 (alexey-milovidov).SELECT(max_threads>1)에 여러 개의 스트림이 있지만INSERT에는 하나만 있는 경우(max_insert_threads==0) 발생하는INSERT SELECT FINAL의Pipeline stuck예외를 수정합니다. #11455 (Azat Khuzhin).select count() from t, u와 같은 쿼리에서 잘못된 결과가 반환되던 문제를 수정했습니다. #11454 (Artem Zuikov).- 코덱의 압축 크기 반환 값을 수정했습니다. #11448 (Nikolai Kochetov).
- 컬럼에 리터럴이 아닌 인수를 사용하는 압축 코덱이 있을 때 발생하던 서버 비정상 종료 문제를 수정합니다. #11365를 수정합니다. #11431 (alesapin).
- 테이블이 성공적으로 CREATE되지 않은 경우 MergeTree 종료 시 발생할 수 있는 잠재적인 미초기화 메모리 읽기 문제를 수정합니다. #11420 (alexey-milovidov).
LowCarinality(T)및Nullable(T)에 대한 JOIN 연산 수행 시 발생하던 비정상 종료 문제를 수정합니다. #11380. #11414 (Artem Zuikov).- 잘못된
USING키에 대해 반환되던 오류 코드를 수정했습니다. #11373. #11404 (Artem Zuikov). - 위도/경도 범위를 벗어나는 인자를 전달했을 때의
geohashesInBox동작을 수정했습니다. #11403 (Vasily Nemkov). joinGet()FUNCTION의 오류 메시지를 개선했습니다. #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 없이) 직접 SELECT를 수행할 때 발생하는 크래시와 잘못된 NULL 가능성(nullability)을 수정했습니다. #11340 (Artem Zuikov).quantilesExactWeightedArray에서 발생하던 크래시를 수정합니다. #11337 (Nikolai Kochetov).- 이제
ALTER쿼리에서 메타데이터를 변경하기 전에 머지(merge) 작업이 중지됩니다. #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). - 테이블의 기본 키에 Array 컬럼이 있고, 쿼리가 이 컬럼을
empty또는notEmpty함수로 필터링할 때 인덱스 분석이 작동하지 않는 문제를 수정합니다. 이로써 #11286 이슈가 해결됩니다. #11303 (alexey-milovidov). - 쿼리가
max_network_bandwidth,max_execution_speed또는priority설정에 의해 제한(throttled)되는 경우 쿼리 속도 추정이 부정확해지고min_execution_speed한도가 동작하지 않거나 올바르게 동작하지 않을 수 있는 버그를 수정했습니다.timeout_before_checking_execution_speed의 기본값을 0이 아닌 값으로 변경하여, 그렇지 않으면min_execution_speed및max_execution_speed설정이 효과를 발휘하지 못하는 문제를 해결했습니다. 이 변경으로 #11297을(를) 수정합니다. 이 변경으로 #5732를 수정합니다. 이 변경으로 #6228을(를) 수정합니다. 사용성 개선:clickhouse-client에서 예외 메시지가 진행률 표시줄과 함께 이어서(concatenation) 표시되는 문제를 방지하도록 개선했습니다. #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).- 일부 백엔드에서 키가 1,000개를 초과하는 경우 실패할 수 있던
S3글로빙 처리를 수정했습니다. #11179 (Vladimir Chebotarev). - SummingMergeTree, AggregatingMergeTree 및 TTL GROUP BY와 같이 백그라운드 머지 동안 수정되는 컬럼에 의존하는 데이터 스키핑 인덱스는 잘못 계산되고 있었습니다. 이 문제는 인덱스 계산을 머지 이후로 이동하여 머지된 데이터에 대해 인덱스를 계산하도록 함으로써 해결되었습니다. #11162 (Azat Khuzhin).
- 테이블 engine=Kafka의 DROP 작업 중(또는 서버를 재시작하는 동안) 간헐적으로 발생하던 중단(hang) 현상을 수정했습니다. #11145 (filimonov).
- 간단한 쿼리에 대해 과도하게 스레드를 예약하던 문제를 수정했습니다(파이프라인 변경 이후 부분적으로 동작하지 않게 되었던, 스레드 수를 줄이기 위한 최적화). #11114 (Azat Khuzhin).
- 아무것도 완료되지 않은 경우 뮤테이션 최종화 작업의 로그 출력을 제거했습니다. #11109 (alesapin).
- 시스템 로그 테이블 구조 변경이 포함된 업데이트 이후 서버 시작 시 발생하던 교착 상태를 해결했습니다. #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/DROP및RENAME을 함께 수행할 수 있습니다.MODIFY와RENAME을 동시에 사용하는 경우의 예외 메시지가 더 명확해졌습니다. #10669를 부분적으로 해결합니다. #11037 (alesapin). - S3 URL 파싱을 수정했습니다. #11036 (Vladimir Chebotarev).
LIMIT가 있을 때 two-levelGROUP BY의 메모리 추적 동작을 수정했습니다. #11022 (Azat Khuzhin).- 테이블이 성공적으로 생성되지 않았을 때 MergeTree에서 매우 드물게 발생할 수 있는 잠재적인 use-after-free 오류를 수정했습니다. #10986 (alexey-milovidov).
- Atomic 데이터베이스에서 메타데이터(이름 변경 시 사용하는 상대 경로)와 데이터(심볼릭 링크에 사용하는 상대 경로) 처리 방식을 수정했습니다. #10980 (Azat Khuzhin).
Atomic데이터베이스 엔진에서ALTER및DROP DATABASE쿼리가 동시에 실행될 때 서버가 크래시되는 문제를 수정했습니다. #10968 (tavplubix).- getRawData() 메서드에서 잘못 계산되던 원시 데이터 크기를 수정합니다. #10964 (Igr).
- 20.1 버전과 그 이전 버전 사이에서 발생하는 two-level aggregation(2단계 집계) 비호환성을 수정합니다. 이 비호환성은 initiator 노드와 remote 노드에서 서로 다른 버전의 ClickHouse를 사용하고,
GROUP BY결과 집합의 크기가 크며, 하나의String필드를 기준으로 집계를 수행할 때 발생합니다. 그 결과 단일 키에 대해 병합되지 않은 행이 여러 개 결과에 나타날 수 있습니다. #10952 (alexey-milovidov). - DistributedBlockOutputStream이 부분적으로 작성된 파일을 전송하지 않도록 했습니다. #10940 (Azat Khuzhin).
SELECT count(notNullIn(NULL, []))를 실행할 때 발생하던 비정상 종료 문제를 수정합니다. #10920 (Nikolai Kochetov).engine=Kafka테이블에서DROP을 수행할 때(또는 서버를 재시작하는 동안) 가끔 발생하던 멈춤(hang) 현상을 수정했습니다. #10910 (filimonov).- 이제
a TO b, c TO a와 같이 여러 개의ALTER RENAME문을 실행할 수 있습니다. #10895 (alesapin). - 동일한 컬럼에 대해 여러 스레드에서 집계 함수 상태의 결과를 가져올 때 발생할 수 있는 레이스 컨디션을 수정합니다. 현재까지 파악된 바로는, 이것이 발생할 수 있는 유일한 경우는
AggregateFunction상태를quanite*함수용으로 저장하는Memory엔진 테이블에서 읽는 동안finalizeAggregation함수를 사용할 때입니다. #10890 (Nikolai Kochetov). - 분산 테이블에서 튜플 사용 시 하위 호환성 문제를 수정했습니다. #10889 (Anton Popov).
- StringHashTable에서 해당 키가 존재하지 않을 때 SIGSEGV가 발생하던 문제를 수정했습니다. #10870 (Azat Khuzhin).
Atomic엔진을 사용하는 데이터베이스에서LiveView테이블이 삭제된 이후WATCH명령이 멈추는 문제를 수정했습니다. #10859 (tavplubix).- 비활성 상태가 된 레플리카를 계속 기다리느라
OPTIMIZE쿼리에서 수행되는 일부ALTER가 대기 상태로 멈춰 있을 수 있던ReplicatedMergeTree의 버그를 수정했습니다. #10849 (tavplubix). - 이제
CONSTRAINT표현식에 포함된 컬럼의 이름이 변경된 경우에도 해당 제약 조건이 업데이트됩니다. #10844 문제를 수정했습니다. #10847 (alesapin). - 캐시 딕셔너리에서 초기화되지 않은 메모리를 읽게 될 수 있는 잠재적인 문제를 수정합니다. #10834 (alexey-milovidov).
- Block::sortColumns() 이후 컬럼 순서를 수정합니다(실제 사용 사례인 Buffer 엔진에 영향을 미친다는 것을 보여주는 테스트도 추가합니다). #10826 (Azat Khuzhin).
- 식별자에 대해 quoting을 요청하지 않은 경우 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빌드에서-fno-omit-frame-pointer를 비활성화할 수 있으며, 평균적으로 최소 1% 정도 성능이 향상됩니다. #10761 (Amos Bird). - 여러 세ग먼트에서 부동소수점 가중치를 사용할 때
avgWeighted의 동작을 수정했습니다. #10758 (Baudouin Giard). parallel_view_processing동작을 수정했습니다. 이제 예외가 발생하더라도MATERIALIZED VIEW로의 모든 삽입이 끝까지 수행되도록 했습니다. #10241를 수정합니다. #10757 (Nikolai Kochetov).- -State와 함께 사용할 때 -OrNull 및 -OrDefault 조합을 수정했습니다. #10741 (hcz).
- 중첩 타입에서
generateRandom사용 시 발생하는 크래시를 수정합니다. #10583 이슈를 해결합니다. #10734 (Nikolai Kochetov). - 머지 후에 발생할 수 있었던
SummingMergeTree의LowCardinality(FixedString)키 컬럼 데이터 손상 문제를 수정했습니다. 이슈 #10489를 해결합니다. #10721 (Nikolai Kochetov). - 함수로 감싸진 기본 키를
FINAL수정자 및ORDER BY최적화와 함께 사용하는 경우의 동작을 수정합니다. #10715 (Anton Popov). h3EdgeAngle함수에서 발생할 수 있는 버퍼 오버플로우를 수정합니다. #10711 (alexey-milovidov).- totals가 사라지는 문제를 수정합니다. 쿼리에 JOIN 또는 외부 WHERE 조건이 있는 서브쿼리가 포함된 경우 totals가 필터링될 수 있었습니다. #10674를 수정합니다. #10698 (Nikolai Kochetov).
- HTTP insert의 원자성 문제를 수정했습니다. 이로써 #9666이(가) 해결되었습니다. #10687 (Andrew Onyshchuk).
- 하나의 쿼리에서 동일한 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). - 테이블이 시작되기 전에 서버가 종료된 경우
StorageBuffer에서 발생하는nullptr역참조를 수정합니다. #10641 (alexey-milovidov). HAVING섹션이 있는 쿼리(즉, 쿼리를 시작한 서버에서 필터링이 필요한 경우)에 대해, 표현식의 순서를 유지하는 방식으로(enable_optimize_predicate_expression=1인 경우, 이것만으로도 수정에 충분함) 분산 쿼리의 프레디케이트 최적화를 수정하고, 집계기가 인덱스 대신 컬럼 이름을 사용하도록 강제합니다. 수정: #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).- 동기식 뮤테이션에 대한 조건 변수(condition variable) 처리 방식을 수정했습니다. 일부 상황에서 해당 조건 변수로 보내는 신호가 손실될 수 있었습니다. #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 파트들을 다른 compact 파트로 merge한 이후 일부 상황에서 발생할 수 있는 인덱스 손상을 수정합니다. #10531 (Anton Popov).
- 기본적으로 GROUP BY sharding_key 최적화를 비활성화하고(세그먼트 키 분석이 까다롭기 때문에
optimize_distributed_group_by_sharding_key를 도입하고 기본값을 비활성으로 두었으며, sharding key에if가 포함되는 경우가 그 단순한 예입니다), WITH ROLLUP/CUBE/TOTALS에 대해서는 이를 수정했습니다. #10516 (Azat Khuzhin). - 수정: #10263 (해당 PR 이후 INSERT를 통한 dist send가 각 INSERT마다 지연되던 문제입니다) 수정: #8756 (해당 PR은 다음 조건이 모두 충족될 때 분산 전송이 실패하는 문제를 일으켰습니다(현재로서는 가능성이 낮은 구성으로 보입니다):
internal_replication == false, 여러 개의 로컬 세그먼트(하드링크 코드 활성화), 그리고distributed_storage_policy(이로 인해link(2)가EXDEV오류로 실패함)). #10486 (Azat Khuzhin). - "max_rows_to_sort" 제한값에서 발생하던 오류를 수정했습니다. #10268 (alexey-milovidov).
- 외부 딕셔너리를 읽는 FUNCTION의 각 호출 시 딕셔너리 조회와 액세스 권한 검사를 한 번만 수행하도록 했습니다. #10928 (Vitaly Baranov).
개선 사항
ALTER MODIFY TTL쿼리 실행 후 오래된 데이터에TTL을 적용합니다. 이 동작은 기본적으로 활성화된materialize_ttl_after_modify설정으로 제어됩니다. #11042 (Anton Popov).- 문자열 리터럴, VALUES 절과 다양한 텍스트 포맷에서 C 스타일 역슬래시 이스케이프를 파싱할 때(이는 SQL 표준에 대한 확장이며 ClickHouse와 MySQL에 고유한 방식입니다), 알 수 없는 이스케이프 시퀀스(예:
\%또는\w)가 발견되면 역슬래시를 제거하지 않고 그대로 둡니다. 이렇게 하면LIKE및match정규 표현식을 더 편리하게 사용할 수 있고(예: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).
- (리눅스 전용) OS 관련 성능 메트릭(CPU 및 I/O)은
CAP_NET_ADMINcapability 없이도 동작합니다. #10544 (Alexander Kazakov). - FUNCTION
hostName의 별칭(alias)으로hostname을 추가했습니다. 이 기능은 Yandex.Metrica의 Victor Tarnavskiy가 제안했습니다. #11821 (alexey-milovidov). - 교차 복제 클러스터에서
DDL분산 실행(update/delete/drop 파티션)을 지원하도록 기능이 추가되었습니다. #11703 (Nikita Mikhaylov). - 서버 시작 시 일부 리스닝 주소(예: Docker 내부에서 IPv6를 사용할 수 없는 경우) 중 하나를 리스닝할 수 없으면 오류 대신 경고를 서버 로그에 출력합니다. 단, 서버가 나열된 모든 주소를 리스닝하는 데 실패하면 이전과 마찬가지로 시작을 거부합니다. 이 변경으로 #4406이 수정됩니다. #11687 (alexey-milovidov).
- Docker 이미지 시작 시 기본 USER 및 데이터베이스가 생성되도록 함. #10637 (Paramtamtam).
- 여러 줄 쿼리가 서버 로그에 출력될 때 줄들이 하나로 합쳐집니다. 여러 줄 문자열 리터럴, 식별자 및 한 줄 주석이 포함된 경우에도 올바르게 동작하도록 수정했습니다. 이로써 #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-client및clickhouse-benchmark의 명령줄에서 비밀번호를 삭제합니다. 이는ps등의 도구를 통해 비밀번호가 노출되는 것을 방지합니다. #11665 (alexey-milovidov). - 실행 중인 바이너리와 일치하지 않는 ELF 파일의 디버그 정보는 사용하지 않습니다. 이는 스택 트레이스에서 잘못된 함수 이름과 소스 코드 위치가 출력되는 것을 피하기 위해 필요합니다. #7514를 수정합니다. #11657 (alexey-milovidov).
parseDateTimeBestEffortOrNull/parseDateTimeBestEffortOrZero함수에서 값이 완전히 파싱되지 않은 경우 NULL/0을 반환하도록 했습니다. 이로써 #7876 이슈가 수정되었습니다. #11653 (alexey-milovidov).- 이제 요청 URL에서 비어 있는 파라미터를 건너뜁니다. 이러한 파라미터는
http://localhost:8123/?&a=b또는http://localhost:8123/?a=b&&c=d처럼 URL을 작성할 때 생길 수 있습니다. 이 변경으로 #10749 이슈가 해결되었습니다. #11651 (alexey-milovidov). groupArrayArray및groupUniqArrayArray를SimpleAggregateFunction으로 사용할 수 있게 되었습니다. #11650 (Volodymyr Kuznetsov).- 다른 타입의 인덱스 조건을 분석할 때 암시적 변환을 통해 상수 문자열과의 비교를 허용합니다. 이로 인해 #11630가 해결될 수 있습니다. #11648 (alexey-milovidov).
- https://github.com/ClickHouse/ClickHouse/pull/7572#issuecomment-642815377 구성에서 기본 HTTPHandlers를 지원합니다. #11628 (Winter Zhang).
- Kafka 엔진에서 사용할 수 있는 입력 포맷을 추가로 지원합니다. 조기 플러시가 발생하던 문제를 수정합니다.
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은 머지를 강제로 수행합니다. #11309과 #11322를 해결합니다. #11346 (alexey-milovidov). - clickhouse-client에서 취소된 쿼리의 출력은 더 이상 표시되지 않습니다. 이전 버전에서는 Ctrl+C를 눌러 쿼리를 취소한 후에도 결과가 터미널에 계속 출력될 수 있었습니다. 이로써 #9473 이슈가 해결되었습니다. #11342 (alexey-milovidov).
- 이제 히스토리 파일이 각 쿼리가 실행될 때마다 업데이트되며, 여러 클라이언트가 하나의 히스토리 파일을 사용할 때도 경쟁 조건(race condition)이 발생하지 않습니다. 이를 통해 #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).
Memory데이터베이스 엔진에서 명시적으로DROP DATABASE를 실행하면 데이터를 제거합니다. #10557를 수정합니다. #11021 (tavplubix).- rdkafka 라이브러리의 내부 스레드에 스레드 이름을 설정합니다. rdkafka의 로그가 서버 로그에도 기록되도록 합니다. #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_rows및min_insert_block_size_bytes와 유사하지만,MATERIALIZED VIEW에 삽입되는 블록에만 적용됩니다. 이를 통해 MV로 데이터를 푸시할 때 블록 병합을 제어하고, 과도한 메모리 사용을 피할 수 있습니다. #10858 (Azat Khuzhin).- 서버 종료 시 replicated queue에서 발생하던 예외를 제거했습니다. #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).
optimize_aggregation_in_order설정을 통해 테이블 정렬 키를 활용한 GROUP BY가 최적화됩니다. #9113 (dimarub2000).FINAL을 사용하는 SELECT 쿼리는 병렬로 실행됩니다. 사용되는 스레드 수를 제한하기 위한max_final_threads설정이 추가되었습니다. #10463 (Nikolai Kochetov).- 작은 블록이 생성되는 경우(병렬 파싱 시 일반적인 경우)
INSERT SELECT또는 clickhouse-client를 사용한 INSERT 쿼리의 성능을 개선합니다. 이 변경으로 #11275가 수정됩니다. DEFAULT 필드에서 CONSTRAINT가 동작하지 않던 문제를 수정합니다. 이 변경으로 #11273가 수정됩니다. TEMPORARY 테이블에서 CONSTRAINTS가 무시되던 문제를 수정합니다. 이 변경으로 #11274가 수정됩니다. #11276 (alexey-milovidov). optimize_aggregators_of_group_by_keysSETTING으로 활성화되는, SELECT 절에서 GROUP BY 키의 min/max/any 집계 함수를 제거하는 최적화입니다. #11667 (xPoSx). #11806 (Azat Khuzhin).optimize_move_functions_out_of_any로 활성화되는, 모든 연산을anyFUNCTION 밖으로 이동하는 새로운 최적화가 도입되었습니다. #11529 (Ruslan).- Pretty 포맷을 사용할 때 대화형 모드에서
clickhouse-client의 성능이 개선되었습니다. 이전 버전에서는 UTF-8 문자열의 표시 너비를 계산하는 데 상당한 시간이 소요될 수 있었습니다. 이 변경사항으로 #11323가 해결되었습니다. #11323 (alexey-milovidov). ORDER BY가 있고LIMIT값이max_block_size보다 작은 쿼리의 성능을 개선했습니다. #11171 (Albert Kidrachev).- 런타임에 CPU를 감지하여 가장 적합한 함수 구현을 선택하고 디스패치하도록 했습니다. 여러 타깃에 대한 코드 생성(code generation) 지원을 추가했습니다. 이를 통해 #1017가 해결되었습니다. #10058 (DimasKovas).
- 기본 설정으로 ClickHouse 바이너리에
mlock을 활성화합니다. 이렇게 하면 높은 I/O 부하 시 ClickHouse 실행 파일이 페이지 아웃되는 것을 방지합니다. #11139 (alexey-milovidov). - GROUP BY 키 없이 집계 FUNCTION
sum을 사용하는 쿼리는 여러 배 더 빠르게 실행됩니다. #10992 (alexey-milovidov). ORDER BY에서 단순 키에 사용되는 radix sort에서 일부 중복된 데이터 이동을 제거하여 성능을 개선했습니다. #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). - 이 기능은 GROUP BY 섹션에서 다른 키에 대한 FUNCTION을 제거하며,
optimize_group_by_function_keys로 활성화됩니다. #10051 (xPoSx). - 집계 함수에서 산술 연산을 분리하여 수행하는 새로운 최적화 기능이 도입되었으며,
optimize_arithmetic_operations_in_aggregate_functions설정으로 활성화됩니다 #10047 (Ruslan). - curl 대신 Poco 기반 HTTP 클라이언트를 사용하여 S3에 접근하도록 변경합니다. 이를 통해 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_sort에bitonic_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).
- 크래시 메시지에 컴파일러 빌드 ID를 출력하도록 했습니다. 이를 통해 어떤 바이너리가 크래시했는지 조금 더 확실히 알 수 있습니다. 새로운 함수
buildId를 추가했습니다. #11824 (alexey-milovidov). - FREEZE 쿼리 이후에도 뮤테이션이 계속 작동하는지 확인하는 테스트를 추가했습니다. #11820 (alexey-milovidov).
- 테스트 이름에 "fail"이라는 부분 문자열이 포함된 테스트를 허용하지 않습니다. 브라우저에서 테스트 결과를 볼 때 Ctrl+F로 "fail"을 검색하여 찾기 불편해지기 때문입니다. #11817 (alexey-milovidov).
- HTTPHandlerFactory에서 미사용 import를 제거합니다. #11660 (Bharat Nallan).
- copier가 실행되는 인스턴스 중 일부에 대해 무작위 샘플링을 추가했습니다. 이는
Too many simultaneous queries오류를 방지하는 데 필요합니다. 또한 타임아웃을 늘리고 장애 발생 확률을 줄였습니다. #11573 (Nikita Mikhaylov). - 누락된 include를 수정했습니다. #11525 (Matwey V. Kornilov).
- 오래된 예제 프로그램을 제거하여 빌드 속도를 향상했습니다. 또한 참조되지 않는 기능 테스트도 일부 발견했습니다. #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).
- 서버가 디버그 빌드이거나 sanitizer를 사용해 빌드된 경우 경고를 출력합니다. #11304 (alexey-milovidov).
- 이제 테스트를 실행하기 전에 clickhouse-test가 서버가 정상적으로 동작하는지 확인합니다. #11285 (alesapin).
00731_long_merge_tree_select_opened_files.sh테스트의 잠재적으로 불안정한 동작을 수정합니다. 이 테스트는 자주 실패하지는 않지만, ThreadFuzzer로 실험하는 동안 이 테스트에서 잠재적인 경쟁 상태(race condition)를 발견했습니다: #9814 예시는 link를 참고하십시오. #11270 (alexey-milovidov).- CI에서
curl호출에 타임아웃이 발생한 경우 테스트를 다시 실행합니다. 이는 CI 인프라에서 흔히 발생하는, 시스템이 10초 이상 멈추는 현상 때문에 발생할 수 있습니다. 이 변경으로 #11267가 수정되었습니다. #11268 (alexey-milovidov). - @donmikel에 의해 Join 테이블 엔진용 테스트가 추가되었습니다. 이로써 #9158 이슈가 종료되었습니다. #11265 (alexey-milovidov).
- 단위 테스트의 사소한 오류 몇 가지를 수정했습니다. #11262 (alesapin).
- 이제
cctz라이브러리에 대한 링커 명령 일부가 다른 라이브러리들과 뒤섞이지 않습니다. #11213 (alesapin). - /programs/server를 실제 실행 프로그램과 라이브러리로 분리했습니다. #11186 (Ivan).
- protobuf 및 gRPC용 빌드 스크립트를 개선했습니다. #11172 (Vitaly Baranov).
- 동작하지 않던 성능 테스트를 다시 활성화했습니다. #11158 (alexey-milovidov).
- 모든 CH 인스턴스가 시작되기 전에 테스트용 루트 S3 버킷을 생성하도록 했습니다. #11142 (Pavel Kovalenko).
- 상수가 아닌 다각형에 대한 성능 테스트를 추가했습니다. #11141 (alexey-milovidov).
00979_live_view_watch_continuous_aggregates테스트를 수정했습니다. #11024 (vzakaznikov).- 통합 테스트에서 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).
- sanitizer와의 연동이 개선되었습니다. sanitizer 실패 메시지에
query_id정보를 출력합니다. #10832 (alexey-milovidov). - "Split build smoke test" 검사에서 명백한 경쟁 상태를 수정했습니다. #10820 (alexey-milovidov).
- MergeTreeIndexFullText에서 잘못된(false positive) MSan 리포트 문제를 수정했습니다. 이 문제는 처음에 #9968에서 나타났습니다. #10801 (alexey-milovidov).
- MariaDB Client 라이브러리에 대한 MSan suppression을 추가했습니다. #10800 (alexey-milovidov).
- gRPC용 Makefile에서 protobuf 파일을 찾지 못하는 문제가 있어, 올바른 경로를 추가하도록 Makefile을 수정했습니다. #10794 (mnkonkova).
- base, utils, programs에 대해 추가 경고(
-Weverything)를 활성화합니다. 이 설정은 이미 코드의 대부분에 적용되어 있다는 점에 유의하십시오. #10779 (alexey-milovidov). - 라이브러리에서 발생하는 경고 억제 설정이 #10396에서 실수로 public으로 선언되어 있었습니다. #10776 (alexey-milovidov).
- #10396에서 실수로 삭제된 패치를 복원합니다. #10774 (alexey-milovidov).
- 성능 테스트 오류 수정, 두 번째. #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::UnalignedFlatArrayMessageReader에 대한capnproto버전 검사를 수정했습니다. #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).
- 퍼저(fuzzer)를 추가하고 OSS-Fuzz 통합을 준비했습니다. #10546 (kyprizel).
- FreeBSD 빌드를 수정했습니다. #10150 (Ivan).
pytest프레임워크를 사용한 쿼리 테스트용 새 빌드를 추가했습니다. #10039 (Ivan).
ClickHouse 릴리스 v20.4
ClickHouse 릴리스 v20.4.8.99-stable 2020-08-10
버그 수정
parseDateTimeBestEffort함수에서 Unix 타임스탬프가 인수로 전달되었을 때 발생하던 오류를 수정했습니다. 이로써 #13362 이슈가 해결되었습니다. #13441 (alexey-milovidov).- NaN 값을 포함한 Float 타입에 대해 호출되는
uniqExact,topK,sumDistinct및 유사한 집계 함수의 잠재적인 성능 저하와 약간 잘못된 결과를 수정했습니다. 또한 디버그 빌드에서 assert를 유발하던 문제를 해결했습니다. 이 변경으로 #12491가 수정되었습니다. #13254 (alexey-milovidov). - 리터럴 NULL이 아닌 널 허용 constexpr를 조건으로 사용하는
if함수를 수정했습니다. 이로써 #12463이(가) 해결되었습니다. #13226 (alexey-milovidov). - 배열 요소와 배열 인덱스가 모두 널 허용인 경우
arrayElement함수에서 발생하던 어설션 오류를 수정했습니다. 이를 통해 #12172 이슈가 해결되었습니다. #13224 (alexey-milovidov). - FUNCTION을 사용할 때 인덱스가 잘못 분석되던 문제를 수정했습니다. 이로 인해
MergeTree테이블에서 데이터를 읽을 때 프루닝(pruning) 대상이 아닌 파트가 잘못 프루닝되는 문제가 발생할 수 있었습니다. #13060을 수정했습니다. #12406을 수정했습니다. #13081 (Anton Popov). - 로컬 레플리카에서 수행되는 SELECT 쿼리의 스레드 수에 대한 불필요한 제한을 제거했습니다. #12840 (Nikolai Kochetov).
WITH TOTALS쿼리에서 데이터에 추가로 나타날 수 있던 오버플로우 행을 수정했습니다. #12747 (Nikolai Kochetov).IN절에서 FUNCTION으로 해석되는 큰 튜플 사용 시 발생하던 성능 문제를 수정했습니다. 사용자가 어떤 이유에서인지 알 수 없지만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).
- #10572 상수 표현식을 사용하는 블룸 필터 인덱스 관련 문제를 수정했습니다. #12659 (Winter Zhang).
- 브로커를 사용할 수 없는 경우(및 기타 경우)
StorageKafka에서 발생하던SIGSEGV를 수정했습니다. #12658 (Azat Khuzhin). Array(UUID)인수를 사용하는if함수에 대한 지원을 추가했습니다. 이를 통해 #11066을(를) 수정했습니다. #12648 (alexey-milovidov).- 캐시 레이아웃을 사용하는 외부 딕셔너리에서 서버가 크래시될 수 있는 경쟁 상태를 수정했습니다. #12566 (alesapin).
- DROP TABLE 시 분산 테이블(비동기
INSERT에서 생성된 블록)의 데이터를 제거하도록 수정했습니다. #12556 (Azat Khuzhin). enable_mixed_granularity_parts=1일 때ALTER DELETE쿼리 이후 기존 파트가 손상되던 버그를 수정했습니다. #12536을 해결했습니다. #12543 (alesapin).- 함수
in에 잘못된 인수 개수가 전달될 때 더 적절한 예외를 발생시키도록 개선했습니다. #12529 (Anton Popov). - compact 파트에서 데이터를 읽을 때 발생하던 성능 문제를 수정했습니다. #12492 (Anton Popov).
- 딕셔너리 키를 사용하는 표현식을 기준으로 조인할 때(
t JOIN dict ON expr(dict.id) = t.id) JOIN과 딕셔너리를 함께 사용할 경우 발생하던 크래시를 수정했습니다. 이 경우 딕셔너리 JOIN 최적화를 비활성화했습니다. #12458 (Artem Zuikov). - StorageMerge 사용 시 발생할 수 있는 세그멘테이션 폴트(segfault) 문제를 수정했습니다. #12054를 종료했습니다. #12401 (tavplubix).
WITH FILL수정자에서 컬럼 순서를 고정했습니다. 이전에는ORDER BY절에 지정한 컬럼 순서가 반영되지 않았습니다. #12306 (Anton Popov).- 가상 컬럼(예:
Merge테이블의_table)이나 시스템 테이블의 인덱스 컬럼(예:system.tables에서 데이터베이스 이름으로 필터링하여 쿼리하는 경우)으로 데이터를 필터링하는 표현식이 있고, 이 표현식이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에서 여러 번 연속으로 INSERT를 수행할 때, 특정 데이터 타입에 대해 헤더가 여러 번 기록되던 동작을 수정했습니다. 이로써 #6155가 수정되었습니다. #12197 (Nikita Mikhaylov).- 0 또는 1이 아닌 UInt8 값에 대한 논리 함수를 수정했습니다. #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" 파일 처리를 정규화했습니다. 이전 버전에서는 서버가 정상적인 종료 없이 강제 종료된 뒤, 이전에 실행되던 서버와 동일한 pid를 가진 다른 프로세스가 있는 경우 서버가 시작을 거부할 수 있었습니다. 또한 다른 서버가 실행 중인 상태에서도 서버 시작에 실패하면 pid 파일이 삭제될 수 있었습니다. 이번 수정으로 #3501 이 해결되었습니다. #12133 (alexey-milovidov).
- ENGINE=Dictionary 를 사용하는 테이블의 딕셔너리 종속성 처리를 수정했습니다. #10994 문제를 해결했습니다. #10397 문제를 해결했습니다. #12116 (Vitaly Baranov).
- 총 스레드 수에 대한 잘못된 제한으로 인해 발생한
UNION이 포함된 SELECT 쿼리의 성능 문제를 수정했습니다. #12030 이슈를 수정했습니다. #12103 (Nikolai Kochetov). -StateResample결합자에서 발생하던 세그멘테이션 폴트를 수정했습니다. #12092 (Anton Popov).system.quey_log에서 SELECT 쿼리에 대해 비어 있던result_rows및result_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).
topK집계 FUNCTION이 Enum 타입에 대해 Enum 값을 반환하도록 변경했습니다. 이를 통해 #3740 문제가 수정되었습니다. #12043 (alexey-milovidov).CONSTRAINT가 상수 표현식인지 확인하는 검사 로직을 수정했습니다. 이로써 #11360 문제가 해결되었습니다. #12042 (alexey-milovidov).Nullable컬럼을 포함한 튜플 비교에서 발생하던 오류를 수정했습니다. #11985 이슈를 해결했습니다. #12039 (Nikolai Kochetov).- allow_introspection_functions=0일 때의 접근 권한 계산을 수정했습니다. #12031 (Vitaly Baranov).
- 서로 다른 크기의
FixedString타입 인자를 사용하여 함수if를 호출할 때 잘못된 결과가 나오거나 크래시가 발생할 수 있는 문제를 수정했습니다. 이 수정으로 #11362가 해결됩니다. #12021 (alexey-milovidov). - 반환되는 유일한 표현식이 함수
neighbor인 쿼리는 오프셋-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를 파싱할 때 발생할 수 있었던 부동소수점 예외를 수정했습니다. 이로써 #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-stable 릴리스 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).- 이제 메타데이터 ALTER 중에는 레플리카 fetch 작업이 취소됩니다. #11744 (alesapin).
- Values 입력 포맷에서 복합 리터럴의 잘못된 타입 추론으로 인해 발생하던 LOGICAL_ERROR를 수정했습니다. #11732 (tavplubix).
- 상수 컬럼에서
ORDER BY ... WITH FILL의 동작을 수정했습니다. #11697 (Anton Popov). - XDBC 브리지와 통신할 때 적절한 타임아웃을 전달하도록 했습니다. 이전에는 브리지 liveness(생존 여부) 확인 및 메타 정보 수신 시 타임아웃이 제대로 적용되지 않았습니다. #11690 (alexey-milovidov).
ORDER BY절에 별칭이 포함된 경우LIMIT n WITH TIES사용 시 발생하던 문제를 수정합니다. #11689 (Anton Popov).system.mutations가 잘못된 상태가 되는 오류를 수정했습니다. 전체 뮤테이션이 이미 완료된 것으로 표시되지만, 서버의 복제 큐에는 여전히MUTATE_PART작업이 남아 있어 이를 계속 실행하려고 시도할 수 있었습니다. 이 변경으로 #11611이 수정되었습니다. #11681 (alesapin).- 대소문자 구분을 하지 않는 플래그를 사용하는 정규식 지원을 추가합니다. 이로써 #11101과 #11506이 수정됩니다. #11649 (alexey-milovidov).
- 행 수준 보안(row-level security)이 설정된 경우, 단순 count 쿼리 최적화를 제거합니다. 이전 버전에서는 필터링된 결과가 아니라 테이블 전체의 총 레코드 수를 반환했습니다. 이는 #11352를 수정합니다. #11644 (alexey-milovidov).
- String 형식에 대한 블룸 필터(데이터 스키핑 인덱스)를 수정했습니다. #11638 (Azat Khuzhin).
- prewhere 조건에서
Nullable컬럼을 사용할 때 간헐적으로 발생하던 크래시를 수정했습니다. (아마도 #11572와 관련이 있는 것으로 보입니다.) #11608 (Nikolai Kochetov). - 샘플링을 사용해
Buffer테이블에서 데이터를 읽는 쿼리에서 발생하는Block structure mismatch오류를 수정합니다. #11602 (Nikolai Kochetov). - exception.code() % 256 == 0인 경우 clickhouse-client의 종료 코드가 잘못되던 문제를 수정했습니다. #11601 (filimonov).
- 서버 시작 시 표시되는 「Mark cache size was lowered」 로그 메시지의 사소한 오류를 수정했습니다. 이로써 #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 세션 내 모든 쿼리가 동일한 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).- 테이블 삭제 중 예외가 발생할 수 있는 경쟁 상태(race condition)를 수정했습니다. 조금 까다로운 문제이지만 전혀 위험하지 않습니다. 설명이 필요하면 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빌드에서-fno-omit-frame-pointer를 비활성화할 수 있게 되어, 평균적으로 최소 1% 정도의 성능 향상이 있습니다. #10761 (Amos Bird). - FUNCTION으로 감싼 기본 키를 사용하는 경우 'FINAL' 수정자 및 'ORDER BY' 최적화와의 상호 작용을 수정했습니다. #10715 (Anton Popov).
빌드/테스트/패키징 개선
- 유닛 테스트에서 몇 가지 중요하지 않은 오류를 수정했습니다. #11262 (alesapin).
- MergeTreeIndexFullText에서 잘못된 MSan 보고를 수정했습니다. 이 문제는 처음 #9968에서 나타났습니다. #10801 (alexey-milovidov).
ClickHouse 릴리스 v20.4.5.36-stable 2020-06-10
버그 수정
min_bytes_to_use_direct_io가 활성화되어 있고 PREWHERE가 활성 상태이며 SAMPLE을 사용하거나 많은 수의 스레드를 사용할 때 발생할 수 있는Data compressed with different methods오류를 수정합니다. 이 수정으로 #11539가 해결됩니다. #11540 (alexey-milovidov).- 코덱의 압축 크기 반환이 잘못되던 문제를 수정했습니다. #11448 (Nikolai Kochetov).
- 컬럼에 리터럴이 아닌 인자를 사용하는 압축 코덱이 있을 때 서버가 비정상 종료되는 문제를 수정합니다. #11365를 수정합니다. #11431 (alesapin).
- 점이 NaN인 경우
pointInPolygon의 동작을 수정합니다. 이로써 #11375가 수정됩니다. #11421 (Alexey Ilyukhov). - 테이블이 성공적으로 CREATE되지 않았을 때 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에서 매우 드물게 발생하던 경쟁 상태(race condition)를 수정했습니다. #11314 (alexey-milovidov).
- clickhouse-copier에서 경미한 데이터 레이스를 수정했습니다. 통합 테스트에서 발견되었습니다. #11313 (alexey-milovidov).
- 형변환 시 발생할 수 있는 미초기화 메모리 사용 문제를 수정합니다. 예:
SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov). - 기본 키에 Array 타입 컬럼이 있는 테이블에서 쿼리가 이 컬럼을
empty또는notEmpty함수로 필터링할 때 인덱스 분석이 동작하지 않던 문제를 수정합니다. 이 수정으로 #11286이 해결되었습니다. #11303 (alexey-milovidov). - 쿼리 실행 속도 추정이 잘못될 수 있고, 쿼리가
max_network_bandwidth,max_execution_speed또는priority설정에 의해 속도 제한되는 경우min_execution_speed제한이 동작하지 않거나 올바르게 동작하지 않을 수 있는 버그를 수정합니다.timeout_before_checking_execution_speed의 기본값을 0이 아닌 값으로 변경합니다. 그렇지 않으면min_execution_speed및max_execution_speed설정이 효과가 없기 때문입니다. 이 변경으로 #11297를 수정합니다. 이 변경으로 #5732를 수정합니다. 이 변경으로 #6228를 수정합니다. 사용성 개선:clickhouse-client에서 예외 메시지가 진행률 표시줄과 연결되어 출력되지 않도록 합니다. #11296 (alexey-milovidov). - 잘못된 인수로
SET DEFAULT ROLE이 호출될 때 발생하던 충돌을 수정했습니다. 이로써 #10586을 해결했습니다. #11278 (Vitaly Baranov). - Protobuf 형식의 잘못된(malformed) 데이터를 읽는 동안 발생하던 크래시를 수정합니다. 이로써 #5957, #11203 문제가 해결됩니다. #11258 (Vitaly Baranov).
cache-dictionary에서 (만료된 키만 존재할 때) 올바른 값 대신 기본값을 반환하던 버그를 수정했습니다. 이는 문자열 필드에만 영향을 줍니다. #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을 수행하는 동안(또는 서버 재시작 중에) 간헐적으로 발생하던 hang 문제를 수정했습니다. #11145 (filimonov).
- 간단한 쿼리에 대해 과도하게 스레드를 예약하던 문제를 수정했습니다(파이프라인 변경 이후 일부 동작하지 않게 되었던, 스레드 수를 줄이기 위한 최적화). #11114 (Azat Khuzhin).
HAVING섹션이 있는 쿼리(즉, 서버 이니시에이터 측에서의 필터링이 필요한 경우)에 대해, 분산 쿼리(enable_optimize_predicate_expression=1)의 프레디케이트 최적화를 표현식의 순서를 보존하도록 수정하고(이것만으로도 문제가 해결되며), 집계기(aggregator)가 인덱스보다 컬럼 이름을 우선 사용하도록 강제합니다. 수정: #10613, #11413. #10621 (Azat Khuzhin).
빌드/테스트/패키징 개선
ClickHouse release v20.4.4.18-stable 2020-05-26
v20.4.3.16-stable 버전과 비교했을 때 변경 사항이 없습니다.
ClickHouse 릴리스 v20.4.3.16-stable 2020-05-23
버그 수정
- 아무 것도 최종화되지 않은 경우 mutation 최종화 작업에서 로깅을 제거했습니다. #11109 (alesapin).
- registerDiskS3에서 메모리 누수 문제를 수정했습니다. #11074 (Pavel Kovalenko).
- Kafka 엔진 테이블 종료 시 데이터가 누락될 수 있던 문제를 수정했습니다. #11048 (filimonov).
parseDateTime64BestEffort인수 해석 버그를 수정했습니다. #11038 (Vasily Nemkov).- 테이블이 성공적으로 생성되지 못한 경우
MergeTree에서 매우 드물게 발생할 수 있는 use-after-free 오류를 수정했습니다. #10986, #10970 (alexey-milovidov). - Atomic 데이터베이스에서 메타데이터(이름 바꾸기 시 사용되는 상대 경로)와 데이터(심볼릭 링크에 사용되는 상대 경로) 처리 방식을 수정했습니다. #10980 (Azat Khuzhin).
Atomic데이터베이스 엔진에서ALTER및DROP DATABASE쿼리가 동시에 실행될 때 서버가 크래시되는 문제를 수정했습니다. #10968 (tavplubix).getRawData()메서드에서 잘못 계산되던 원시 데이터 크기를 수정했습니다. #10964 (Igr).- 20.1 버전과 그 이전 버전 사이에서 발생하던 2단계 집계의 비호환성을 수정했습니다. 이 비호환성은 이니시에이터 노드와 원격 노드에서 서로 다른 버전의 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).- 동일한 컬럼에 대해 여러 스레드에서 집계 함수 상태(aggregate function state)로부터 결과를 가져올 때 발생할 수 있는 잠재적인 경쟁 조건(race condition)을 수정했습니다. 이는
quantile*함수용AggregateFunctionstate를 저장하는Memory엔진 기반 테이블에서 데이터를 읽으면서finalizeAggregation함수를 사용하는 경우에만 발생할 수 있습니다. #10890 (Nikolai Kochetov). - 분산 테이블에서 튜플의 하위 호환성을 복원했습니다. #10889 (Anton Popov).
- 해당 키가 존재하지 않을 때
StringHashTable에서 발생하던SIGSEGV오류를 수정했습니다. #10870 (Azat Khuzhin). Atomic엔진을 사용하는 데이터베이스에서LiveView테이블이 삭제된 후 발생하던WATCH멈춤(hang) 문제를 수정했습니다. #10859 (tavplubix).- 비활성화된 후에도 레플리카를 기다리느라
OPTIMIZE쿼리에서 일부ALTER작업이 멈출 수 있던ReplicatedMergeTree의 버그를 수정했습니다. #10849 (tavplubix). - 이제
CONSTRAINT식에 사용되는 컬럼의 이름을 변경하면 해당 제약 조건도 함께 업데이트됩니다. #10844를 수정했습니다. #10847 (alesapin). - 캐시 딕셔너리에서 초기화되지 않은 메모리를 읽을 수 있는 잠재적 문제를 수정했습니다. #10834 (alexey-milovidov).
Block::sortColumns()이후 컬럼 순서가 잘못되던 문제를 수정했습니다. #10826 (Azat Khuzhin).- 식별자에 따옴표를 사용하지 않도록 설정했을 때
ODBC브리지에서 발생하던 문제를 수정했습니다. #7984 이슈를 해결했습니다. #10821 (alexey-milovidov). DateLUT에서UBSan및MSan리포트를 수정했습니다. #10798 (alexey-milovidov).- 키 조건에서 잘못된 형 변환을 수정했습니다. #6287 이슈를 해결합니다. #10791 (Andrew Onyshchuk).
parallel_view_processing동작을 수정했습니다. 이제 예외가 발생하더라도 모든MATERIALIZED VIEW로의 삽입이 빠짐없이 완료됩니다. #10241를 수정했습니다. #10757 (Nikolai Kochetov).-State와 함께 사용할 때-OrNull및-OrDefault조합자가 올바르게 동작하도록 수정했습니다. #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 BYsharding_key 최적화를 비활성화하도록 하고(sharding_key 분석이 까다롭기 때문에optimize_distributed_group_by_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) - 사전에 사용자 지정 settings 섹션 지원을 추가했습니다. 또한 이슈 #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) least및greatest함수에 대한 제네릭 버전을 추가했습니다. 이제 인수의 개수와 타입에 관계없이 동작합니다. 다음 이슈를 수정했습니다: #4767 #10318 (alexey-milovidov)- 이제 ClickHouse 측에서 딕셔너리 소스의 타임아웃을 제어합니다. 캐시 딕셔너리 설정에 두 개의 새로운 설정이 추가되었습니다. 기본값이
max_lifetime인strict_max_lifetime_seconds와, 기본값이 1분인query_wait_timeout_milliseconds입니다. 첫 번째 설정은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연산자에서NULL값을 서로 동일한 값으로 취급합니다. #10085 (achimbab) - MergeTree 테이블 엔진 계열에
ALTER TABLE ... RENAME COLUMN을(를) 추가했습니다. #9948 (alesapin) - 병렬 분산 INSERT SELECT를 지원합니다. #9759 (vxider)
distributed_group_by_no_merge없이 Distributed 테이블 위에 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)
DATE및TIMESTAMPSQL 연산자를 지원합니다. 예를 들어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=2및cancel_http_readonly_queries_on_client_close=1인 경우 클라이언트가 연결을 종료하면 HTTP 요청이 멈춰 버리던 버그를 수정했습니다. #10684 (tavplubix)- 서버 시작 시 예외가 발생할 때
StorageBuffer에서 발생하던 세그멘테이션 폴트(segfault)를 수정하여 #10550 #10609를 해결했습니다. (tavplubix) - 이제 쿼리
SYSTEM DROP DNS CACHE가 특정 IP 주소에서 사용자의 접속 허용 여부를 확인하는 데 사용되는 캐시도 함께 삭제합니다 #10608 (tavplubix) - 하나의 쿼리에서 동일한 Set에 대해 여러
IN연산자를 사용할 때 발생하던 동작을 수정했습니다. #10539 #10686에서 보고된 문제 수정 (Anton Popov) - 중첩 타입에서
generateRandom사용 시 발생하던 크래시를 수정했습니다. #10583 이슈를 해결했습니다. #10734 (Nikolai Kochetov) - 머지 이후에 발생할 수 있던
SummingMergeTree의LowCardinality(FixedString)키 컬럼 데이터 손상 문제를 수정합니다. #10489 이슈를 해결합니다. #10721 (Nikolai Kochetov) - aggregation_memory_efficient_merge_threads 설정 관련 로직을 수정했습니다. #10667 (palasonic1)
- 사라지던 totals 결과를 수정했습니다. 쿼리에
JOIN또는 외부WHERE조건이 있는 서브쿼리가 포함된 경우 totals 결과가 필터링될 수 있었습니다. #10674 #10698에서 보고된 문제를 수정했습니다. (Nikolai Kochetov) distributed_aggregation_memory_efficient가 활성화된 상태에서 원격 쿼리가 병렬로 실행되지 않던 문제를 수정합니다. #10655 #10664 (Nikolai Kochetov)LIMIT가 있는 쿼리에서 행 수가 잘못 계산되는 경우가 있는 문제를 수정했습니다. #10566, #10709, #10660 이슈가 함께 수정되었습니다. (Nikolai Kochetov)- 압축 파트를 다른 압축 파트로 병합한 후 일부 상황에서 발생할 수 있는 인덱스 손상 문제를 수정합니다. #10531 (Anton Popov)
- 모든 파트를 처리했지만
is_done=0상태에서 멈춰 버리던 mutation을 수정합니다. #10526 (alesapin) - UTC로부터 소수점 단위 오프셋이 있는 시간대에서 Unix epoch 시작 시점에 발생하는 오버플로를 수정합니다. 이슈 #9335를 수정합니다. #10513 (alexey-milovidov)
- 입력 포맷 진단 기능을 개선했습니다. #10204 #10418 이슈를 수정했습니다. (tavplubix)
- 큰 정수에 대해
simpleLinearRegression()에서 발생하는 수치 오버플로 수정 #10474 (hcz) - Distributed 셧다운 시 발생하는 use-after-free 버그를 수정하고, 모든 배치가 전송될 때까지 기다리지 않도록 했습니다 #10491 (Azat Khuzhin)
- clickhouse-server Docker 이미지에 CA 인증서를 추가함 #10476 (filimonov)
addressToLine함수 또는 AggregateFunctionState 컬럼을 사용할 때 드물게 발생하던 무한 루프를 수정했습니다. #10466 (Alexander Kuzmenkov)- 분산 쿼리 중 발생하는 ZooKeeper의 "no node error" 처리 #10050 (Daniel Chen)
- 컬럼의 기본값을 변경한 후 서버가 테이블을 attach할 수 없던 버그를 수정했습니다. #10441 (alesapin)
- ALIAS 컬럼에 대해 기본 표현식의 타입을 컬럼 타입으로 암시적으로 캐스팅하도록 했습니다 #10563 (Azat Khuzhin)
ATTACH DATABASE가 실패할 때 메타데이터 디렉터리를 삭제하지 않도록 함 #10442 (Winter Zhang)- 시스템 tzdata에 의존하지 않도록 했습니다. CentOS 8에서
Africa/Casablanca시간대를 불러오는 문제를 수정합니다. #10211 #10425를 수정합니다. (alexey-milovidov) - 쿼럼을 사용한
INSERT이후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)
- 원격 쿼리 수행 중 발생할 수 있는
ConcatProcessor의Pipeline stuck오류를 수정합니다. #10381 (Nikolai Kochetov) - 집계 시 디스크 예약을 수행하지 않도록 수정했습니다. #9241 #10375 (Azat Khuzhin)
- UTC로부터의 시차(offset)가 양수와 음수로 변경된 적이 있는 시간대(예: Pacific/Kiritimati)에 대해 datetime 함수가 잘못 동작하던 문제를 수정합니다. 다음 이슈를 해결합니다: #7202 #10369 (alexey-milovidov)
dictIsInFUNCTION에서 발생할 수 있는 무한 루프를 방지합니다. #515를 수정합니다. #10365 (alexey-milovidov)- GROUP BY sharding_key 최적화를 기본값으로 비활성화하고 WITH ROLLUP/CUBE/TOTALS에 대해서는 동작을 수정했습니다 #10516 (Azat Khuzhin)
- 파트를 검사할 때 오류 코드를 확인하고, 오류가 「not enough memory」와 같은 경우에는 해당 파트를 손상된 것으로 표시하지 않습니다. #6269 #10364 문제를 해결합니다. (alexey-milovidov)
- 시스템 테이블에서 로드되지 않은 딕셔너리에 대한 정보를 표시합니다. #10234 (Vitaly Baranov)
- 테이블이 시작되기 전에 서버가 종료된 경우
StorageBuffer에서 발생하던 nullptr 역참조 문제를 수정했습니다. #10641 (alexey-milovidov) ReplicatedMergeTree에서DROP과OPTIMIZE사이의 경쟁 상태(race condition)를 수정했습니다. 동시에OPTIMIZE쿼리가 실행되는 경우DROP이 ZooKeeper의 레플리카 경로에 일부 불필요한 데이터(garbage)를 남길 수 있었습니다. #10312 (tavplubix)- 쉼표와 NAMES 조인이 혼합된 쿼리에서 발생하는 'Logical error: CROSS JOIN has expressions' 오류를 수정합니다. #9910 #10311 해결 (Artem Zuikov)
max_bytes_before_external_group_by설정을 사용하는 쿼리를 수정합니다. #10302 (Artem Zuikov)- 일부 경우 파서에서 최대 재귀 깊이를 제한하던 문제를 수정합니다. 이 수정으로 #10283가 해결됩니다. 이 수정으로 인해 약간의 비호환성이 발생할 수 있습니다. 길고 중첩이 깊은 쿼리를
clickhouse-client로 실행할 때 실행이 거부될 수 있으며, 이에 맞게max_query_size와max_parser_depth설정을 조정해야 합니다. #10295 (alexey-milovidov) - 여러 조인을 사용하는 경우에도
count(*)를 사용할 수 있도록 했습니다. #9853 #10291에서 보고된 문제를 수정했습니다. (Artem Zuikov) max_rows_to_group_by및group_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.」 오류 메시지를 발생시키던 버그를 수정했습니다. 이제 비결정적 함수 검사가 lambda 표현식을 올바르게 처리합니다. #10237 (Alexander Kazakov)
- Lazy 엔진을 사용하는 데이터베이스에서
SELECT ... FROM system.tables를 실행할 때 StorageSystemTables에서 비교적 드물게 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #10209 (Alexander Kazakov) system.numbers나system.zeros처럼 무한 소스에서 읽을 때, 실제로는LIMIT에서 중단되어야 하는 쿼리가 무한히 실행될 수 있었던 문제를 수정합니다. #10206 (Nikolai Kochetov)- Date 타입에 대한 "generateRandom" 함수를 수정했습니다. 이를 통해 #9973을(를) 해결했습니다. 연도가 2106인 날짜를 구(old) 스타일 파티셔닝을 사용하는 MergeTree 테이블에 삽입하지만 파티션 이름은 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) - native mysql-connector-java (JDBC)용 SCRAMBLE에서 구분자가 나타나는 문제를 수정함 #10140 (BohuTANG)
- 데이터베이스가 지정되지 않은 경우 접근 권한 검사 시 현재 데이터베이스를 사용하도록 수정했습니다. #10192 (Vitaly Baranov)
- compact 파트를 사용하는 테이블에서 ALTER 문의 동작을 수정했습니다. #10130 (Anton Popov)
allow_nondeterministic_mutationsSETTING을 통해 뮤테이션에서 비결정적 함수를 사용하는 제한을 완화할 수 있도록 했습니다. #10186 (filimonov)- 딕셔너리에 대해 잘못 호출되던
DROP TABLE동작 수정 #10165 (Azat Khuzhin) - Distributed 분산 테이블에
INSERT를 수행할 때 구조가 일치하지 않으면 블록을 변환하도록 변경 #10135 (Azat Khuzhin) - 삽입된 블록이 파티션 키에 따라 파트로 분할될 때, 행 수가 (모든 파트의 합으로) 잘못 기록되었습니다. #10138 (alexey-milovidov)
- 일부 인수 검사를 추가하고 MySQL Database Engine에서 식별자 인수를 지원했습니다 #10077 (Winter Zhang)
- 새 레플리카를 생성할 때 잘못된
index_granularity_bytes검사를 수정했습니다. 이슈 #10098를 해결했습니다. #10121 (alesapin) - skip 인덱스가 포함된 테이블에서
CHECK TABLE쿼리에 발생하던 버그를 수정했습니다. #10068 (alesapin) - 중첩 테이블에서 세그먼트가 하나만 있는 경우 Distributed-over-Distributed 동작을 수정합니다 #9997 (Azat Khuzhin)
JOIN및UNION ALL이 포함된 쿼리에서 발생할 수 있던 행 손실 문제를 수정합니다. #9826, #10113를 수정합니다. ... #10099 (Nikolai Kochetov)- 로컬 ClickHouse 서버를 소스로 사용하는 경우 딕셔너리에서 발생하는 버그를 수정했습니다. 딕셔너리와 소스의 타입이 호환되지 않으면 메모리가 손상될 수 있었습니다. #10071 (alesapin)
/table/replicas/replica_name/metadata노드가 존재하지 않는 예전 ClickHouse 버전에서 업데이트할 때 복제된 테이블(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를 수행할 때 발생할 수 있는 세그멘테이션 폴트(segmentation fault)를 수정합니다(#8636, #8925). ... #10025 (Alexander Kuzmenkov) - 별칭이 테이블명까지 포함한 컬럼 이름을 덮어쓸 수 있을 때 발생하던 분산 쿼리의 잘못된 결과를 수정합니다. #9672 #9714 #9972 이슈를 수정합니다. (Artem Zuikov)
SYSTEM RESTART REPLICAS에서 발생할 수 있는 데드락을 수정함 #9955 (tavplubix)- 원격 쿼리 실행에 사용되는 스레드 수를 수정했습니다(20.3부터 발생한 성능 회귀). 이는
Distributed테이블에 대한 쿼리가 로컬 세그먼트와 원격 세그먼트에서 동시에 실행될 때 발생했습니다. #9965 및 #9971을(를) 수정했습니다 (Nikolai Kochetov) ATTACH PART에서 첨부된 파트가 자동으로 제거될 수 있었던DeleteOnDestroy로직을 수정하고, 몇 가지 테스트를 추가했습니다 #9410 (Vladimir Chebotarev)- 서버 시작 시
ON CLUSTERDDL 쿼리가 멈추는 버그를 수정했습니다. #9927 (Gagan Arneja) - 일부 데이터베이스에 대한 쿼리를 처리하는 단계 중 하나에서 필요한 테이블을 가져오지 못하던 버그를 수정합니다. #9699을(를) 해결합니다. #9949 (achulkov2)
JOIN이TOTALS와 함께 사용될 때 발생하는 'Not found column in block' 오류를 수정합니다. #9839 #9939 (Artem Zuikov)- CREATE USER 명령에서 여러 호스트가 Set으로 지정되었을 때의 파싱 문제를 수정합니다 #9924 (Vitaly Baranov)
- Join 테이블 엔진에서
TRUNCATE동작을 수정했습니다(#9917). #9920 (Amos Bird) ReplicatedMergeTree에서 drop 및 optimize 작업 간의 경쟁 조건을 수정합니다. #9901 (alesapin)optimize_skip_unused_shards가 설정되어 있을 때 Distributed 엔진에서DISTINCT동작을 수정합니다. #9808 (Azat Khuzhin)- ALTER에서 발생하던 「scalar does not exist」 오류를 수정했습니다. (#9878). ... #9904 (Amos Bird)
distributed_product_mode=\'local\'에서 qualified name(한정 이름) 처리 시 발생하던 오류를 수정했습니다. 관련 이슈 #4756 및 PR #9891을(를) 해결했습니다. (Artem Zuikov)- INSERT 쿼리의 경우 이제 세그먼트는 예외를 발생시키는 대신, 시작 노드에서 전달된 설정을 자체 제약 조건 범위 안으로 조정합니다. 이 수정으로 서로 다른 제약 조건을 가진 세그먼트로도 INSERT 쿼리를 보낼 수 있습니다. 이 변경으로 #9447에 대한 수정이 보완되었습니다. #9852 (Vitaly Baranov)
offsets.commit.timeout.ms동안__consumer_offsets토픽에 사용 가능한 레플리카가 충분하지 않으면 Kafka 브로커가 커밋을 거부할 수 있으므로, 오프셋을 Kafka 브로커에 커밋할 때 재시도를 수행하도록 했습니다 #9884 (filimonov)- 기본 테이블의 가상 컬럼이
WHERE절에서 사용될 때 Distributed 엔진의 동작을 수정합니다. #9847 (Azat Khuzhin) - 함수 인자에 지정된 시간대가 올바르게 사용되지 않던 일부 경우를 수정했습니다. #9574 (Vasily Nemkov)
- 쿼리에 PREWHERE와 WHERE 절이 모두 포함되어 있고 분산 테이블에 대해
SET distributed_product_mode = 'local'이 설정된 경우 발생하는 'Different expressions with the same alias' 오류를 수정합니다. #9871 (Artem Zuikov) - 복합 기본 키를 사용하는 테이블에서 뮤테이션 시 과도한 메모리가 사용되던 문제를 수정합니다. 이는 #9850를 수정합니다. #9860 (alesapin)
allow_introspection_functions설정에 따른 인트로스펙션 함수 권한 계산을 수정합니다. #9840 (Vitaly Baranov)- max_distributed_connections 수정(Processors 사용/미사용 시) #9673 (Azat Khuzhin)
- 클라이언트에서 발생할 수 있던 예외
Got 0 in totals chunk, expected 1를 수정합니다. 이 예외는JOIN이 포함된 쿼리에서 우측 조인 테이블에 행이 하나도 없을 때 발생했습니다. 예: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를 수정했습니다. 이를 통해 #9730 #9757을(를) 해결합니다. (Nikolai Kochetov) ALTER쿼리(뮤테이션)에서 발생하는 과도한 메모리 사용을 수정합니다. 이로써 #9533 및 #9670가 해결됩니다. #9754 (alesapin)- 영구적으로 지속될 수 있는 「Cannot schedule a task」 오류를 수정합니다. #9154 (Azat Khuzhin)
- 외부 딕셔너리 DDL에서 백틱(backquote) 처리 버그를 수정합니다. #9619를 수정합니다. #9734 (alesapin)
text_log에서 발생하던 데이터 경합(data race)을 수정했습니다. 실제 버그는 아닙니다. #9726 (alexey-milovidov)- 이전 버전에서 사용자가 뮤테이션을 실행한 경우 복제 기능이 동작하지 않던 버그를 수정합니다. 이로써 #9645가 해결됩니다. #9652 (alesapin)
sumKahan및sumWithOverflow에 대해 잘못 지정되어 있던 내부 FUNCTION 이름을 수정했습니다. 이로 인해 원격 쿼리에서 이러한 FUNCTION을 사용할 때 예외가 발생했습니다. #9636 (Azat Khuzhin)Distributed테이블에 대한INSERT쿼리에서 파일을 더 간결한 형식으로 기록할 수 있도록 하는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 column및Invalid number of rows in Chunk예외가 발생할 수 있었던 문제를 수정했습니다. 이러한 예외는 일부 경우PREWHERE를 실행하는 동안 발생할 수 있었습니다. #9612 (Anton Popov)- 내부 복제를 사용하는 분산 테이블에 대해
ALTER ON CLUSTER를 허용합니다. #3268 및 #9617 이슈를 해결합니다. (shinoi2) time + INTERVAL 1 SECOND같은 표현과 달리time + 1같은 단순 산술 표현을 사용할 때 타임존이 유지되지 않던 문제를 수정합니다. 이 변경으로 #5743 #9323이 해결되었습니다. (alexey-milovidov)
개선 사항
DateTime을 문자열 리터럴과 비교할 때 시간대를 사용하도록 했습니다. 이를 통해 #5206 문제가 수정되었습니다. #10515 (alexey-milovidov)- 텍스트 입력 형식에서 Decimal 값을 파싱하지 못하는 경우 자세한 진단 정보를 출력하도록 했습니다. #10205 (alexey-milovidov)
- 분산/버퍼 스케줄링 풀에 대한 작업/메모리 메트릭 추가 #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 중첩 필드에 대한 INSERT 지원 추가 #10354 (Andrew Onyshchuk)
- 동일한 타입을 지정한 경우, 데이터를 수정하지 않는 모드에서도 컬럼을 변경할 수 있게 되었습니다. #10382 (Vladimir Chebotarev)
optimize_skip_unused_shards가 설정된 경우 GROUP BY 세그먼트 키에서distributed_group_by_no_merge자동 활성화 #10341 (Azat Khuzhin)- LIMIT/LIMIT BY/ORDER BY를 사용하는 GROUP BY 세그먼트 키 기반 분산 쿼리 최적화 #10373 (Azat Khuzhin)
- 서버의 총 메모리 사용량을 제한하기 위한 설정
max_server_memory_usage가 추가되었습니다. 이제 메트릭MemoryTracking은 오차 없이 계산됩니다. 설정max_memory_usage_for_all_queries는 더 이상 사용되지 않으며 아무 동작도 하지 않습니다. 이 변경으로 #10293이(가) 해결되었습니다. #10362 (alexey-milovidov) system_tables_lazy_load설정 옵션을 추가했습니다. 이 값을 false로 설정하면, 로그를 포함하는 system 테이블이 서버 시작 시 로드됩니다. Alexander Burmak, Svyatoslav Tkhon Il Pak, #9642 #10359 (alexey-milovidov)- 분산 전송을 위해 백그라운드 스레드 풀(background_schedule_pool_size)을 사용합니다 #10263 (Azat Khuzhin)
- 백그라운드에서 수행되는 버퍼 플러시 작업에 백그라운드 스레드 풀을 사용합니다. #10315 (Azat Khuzhin)
- 불완전하게 기록된 파트를 제거하는 특수한 한 가지 경우를 지원합니다. 이로써 #9940를 수정합니다. #10221 (alexey-milovidov)
- GROUP BY 최적화를 위해 이러한 FUNCTION들을 수동으로 나열하는 대신 isInjective()를 사용합니다. #10342 (Azat Khuzhin)
- 클라이언트가 연결 직후 RST 패킷을 전송하는 경우 로그에 오류 메시지를 출력하지 않도록 했습니다. 이는 keepalived와 VRRP를 사용하는 IPVS 로드 밸런서의 전형적인 동작입니다. #1851 #10274를 수정합니다. (alexey-milovidov)
- 부동 소수점 타입에 대해
+inf를 파싱할 수 있도록 허용합니다. 다음 이슈를 해결합니다: #1839 #10272 (alexey-milovidov) - Nested 타입을 위한
generateRandom테이블 함수를 구현했습니다. 이 변경으로 #9903 #10219이(가) 해결되었습니다. (alexey-milovidov) - MySQL 호환 인터페이스에서
max_allowed_packed설정을 제공하여 일부 클라이언트가 MySQL 프로토콜을 통해 ClickHouse와 통신할 수 있도록 합니다. #10199 (BohuTANG) - GLOBAL IN 연산자에서 리터럴 값을 허용합니다(예:
SELECT * FROM remote('localhost', system.one) WHERE dummy global in (0)) #10196 (Azat Khuzhin) - clickhouse-client의 대화형 모드에서 발생하던 여러 가지 작은 문제를 수정했습니다. #10194 (alexey-milovidov)
- 불필요한 dictionary 로드를 방지하도록 개선 (system.tables, DROP/SHOW CREATE TABLE) #10164 (Azat Khuzhin)
- RWLock 업데이트:
getLock()에 timeout 매개변수 추가 + 구현을 phase fair 방식으로 재구현 #10073 (Alexander Kazakov) - 네이티브 mysql-connector-java(JDBC)와의 호환성을 개선했습니다 #10021 (BohuTANG)
toString함수는 단조(monotonic) 함수로 간주되며, String 또는 LowCardinality(String) 인자를 갖는 항등식(tautological)인 경우에도 인덱스 분석에 사용할 수 있습니다. #10110 (Amos Bird){CREATE|DROP} USER/ROLE/ROW POLICY/SETTINGS PROFILE/QUOTA,GRANT명령에서ON CLUSTER절을 지원하도록 했습니다. #9811 (Vitaly Baranov)- S3 URI용 가상 호스팅 스타일 지원 #9998 (Pavel Kovalenko)
- 이제 인수가 없는 딕셔너리의 경우 딕셔너리 DDL 쿼리에서 레이아웃 타입을 괄호 없이 지정할 수 있습니다. #10057 문제를 수정합니다. #10064 (alesapin)
- 파일 경로에서 앞에 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)
- 서버 시작 시 가능한 한 빠른 시점에 사용 가능한 CPU 명령어를 확인합니다. #9888 (alexey-milovidov)
- 단일 스레드에서 하나의 정렬된 파트만 읽기 때문에 뮤테이션에서
ORDER BY단계를 제거합니다. 또한 뮤테이션의 행이 정렬 키 기준으로 정렬되어 있으며 이 순서가 위반되지 않았는지 확인하는 검사를 추가합니다. #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_log에timestamp_ns컬럼을 추가했습니다. 이 컬럼에는 트레이스 이벤트의 고정밀 타임스탬프가 포함되어 스레드 프로파일의 타임라인(「flame charts」)을 구성할 수 있습니다. #9696 (Alexander Kuzmenkov)send_logs_level설정이 활성화된 경우, 로그 메시지와 쿼리 진행 출력이 서로 뒤섞이지 않도록 합니다. #9634 (Azat Khuzhin)MATERIALIZE TTL IN PARTITION기능을 지원하도록 했습니다. #9581 (Vladimir Chebotarev)- Avro 중첩 필드에서 복합 타입을 지원합니다 #10502 (Andrew Onyshchuk)
성능 개선
- Partial MergeJoin에서 오른쪽 테이블에 대한 insert 로직을 개선했습니다. #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의 병렬 insert를 활성화했습니다. #10052 (vxider)
- 단조 함수(monotonic functions)를 사용한 인덱스 분석의 성능을 개선했습니다. #9607#10026 (Anton Popov)
- 블룸 필터에서 토큰화 속도를 높이기 위해 SSE2 또는 SSE4.2 SIMD intrinsic을 사용했습니다. #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 변환 단계에서 여러 스트림에 대해 단일 행 카운터를 사용합니다. 이를 통해
order by없이limit만 있는 쿼리(예:select f(x) from (select x from t limit 1000000000))에서 파이프라인 스트림을 하나로 합치는 것을 피하고, 이후 처리에 여러 스레드를 사용할 수 있습니다. #9602 (Nikolai Kochetov)
빌드/테스트/패키징 개선
- ClickHouse-Extras에서 포크한 버전의 AWS SDK 라이브러리를 사용합니다 #10527 (Pavel Kovalenko)
- 새로운 ALTER RENAME COLUMN 쿼리에 대한 통합 테스트를 추가합니다. #10654 (vzakaznikov)
- 잘못된 인수를 사용한
now64함수 호출에서 발생할 수 있는 부호 있는 정수 오버플로를 수정합니다. 이로써 #8973 #10511 이(가) 해결됩니다. (alexey-milovidov) - 빌드 설정이 OSS-Fuzz와 호환되도록 fuzzer 및 sanitizer 설정을 분리했습니다. #10494 (kyprizel)
- clang-10에서 clang-tidy 관련 문제를 수정했습니다. #10420 (alexey-milovidov)
- 오류 메시지에 절대 경로를 표시합니다. 그렇지 않으면 KDevelop에서 올바른 파일로 이동하지 못하고 대신 새 파일을 엽니다. #10434 (alexey-milovidov)
- AddressSanitizer를 사용하는 CI 스트레스 테스트에서 발생하는 오류를 조사하기 위해
ASAN_OPTIONS환경 변수를 추가했습니다. #10440 (Nikita Mikhaylov) - clang 빌드에서 ThinLTO를 활성화합니다(실험적). #10435 (alexey-milovidov)
- 시스템에 Z3 솔버가 설치되어 있는 경우 생길 수 있는 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 error및SSL 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)
- 플레이키(flaky) 테스트
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)
- Distributed 테이블에서 동작하는 라이브 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용 크로스 컴파일 빌드를 추가했습니다. 이를 통해 #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) - 각 함수를 별도 파일로 분리, part 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 이미지를 업데이트합니다. 이 이미지는 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함수 주변에서 다양한 이상 동작(glitch)을 주입할 수 있도록 했습니다. #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 동작을 수정했습니다(함수 컨텍스트가 영구적으로 저장되는 경우 등 유사한 위치 포함). #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함수가 포함된 경우에도 predicate push down이 동작하도록 수정했습니다. #14847 문제를 해결합니다. #14937 (filimonov). - 동시에 실행된
ALTER ... REPLACE/MOVE PARTITION ...쿼리가 교착 상태를 유발할 수 있는 문제를 수정했습니다. #13626 (tavplubix).
ClickHouse 릴리스 v20.3.19.4-lts, 2020-09-18
버그 수정
- 쿼리된 컬럼이 다른 컬럼에 의존하는
DEFAULT표현식을 갖고, 그 다른 컬럼도DEFAULT를 가지지만SELECT쿼리에 포함되지 않고 디스크에도 존재하지 않을 때 드물게 발생하는SELECT쿼리 오류를 수정합니다. #14531의 일부를 수정합니다. #14845 (alesapin). ALTER UPDATE뮤테이션(mutation)에서 할당 표현식에 Nullable 컬럼(널 허용 컬럼)과 상수 값(예:UPDATE x = 42)이 포함될 때 컬럼 값이 잘못되거나 세그멘테이션 폴트(segfault)가 발생하던 버그를 수정합니다. #13634, #14045를 수정합니다. #14646 (alesapin).- 결과 컬럼의 잘못된 Decimal 스케일로 인해 Decimal 곱셈 결과가 잘못되던 문제를 수정합니다. #14603 (Artem Zuikov).
개선 사항
- 컴팩트 파트에서 사용자 정의 코덱을 지원합니다. #12183 (Anton Popov).
ClickHouse v20.3.18.10-lts 릴리스, 2020-09-08
버그 수정
PipelineExecutor자체에서 예외가 발생한 경우 쿼리 실행을 중지합니다. 이를 통해 드물게 발생할 수 있는 쿼리 걸림(hung) 현상을 방지합니다. #14334의 후속 작업입니다. #14402 (Nikolai Kochetov).- cache-dictionary가 원본에 실제 값이 존재함에도 때때로 기본값을 반환하던 동작을 수정했습니다. #13624 (Nikita Mikhaylov).
- 데이터베이스 또는 테이블 이름에 마침표(.)가 포함된 경우 users.xml에서 row policy를 파싱하는 동작을 수정했습니다. 이 수정으로 #5779, #12527가 해결됩니다. #13199 (Vitaly Baranov).
- CAST(Nullable(String), Enum())를 수정했습니다. #12745 (Azat Khuzhin).
text_log에서 데이터 레이스를 수정했습니다. 이는 실제 버그에 해당하지는 않습니다. #9726 (alexey-milovidov).
개선 사항
- 긴 쿼리에 대해 잘못된 오류가 발생하던 문제를 수정합니다. 올바른 쿼리에 대해서도
Max query size exceeded이외의 구문 오류(syntax error)가 발생할 수 있었습니다. #13928 (Nikolai Kochetov). - parseDateTimeBestEffortOrNull/Zero 함수에서 값이 완전히 파싱되지 않은 경우 NULL 또는 0을 반환하도록 합니다. 이로써 #7876 이슈가 수정됩니다. #11653 (alexey-milovidov).
성능 개선
- LowCardinality를 사용하는 매우 짧은 쿼리의 성능을 소폭 개선했습니다. #14129 (Anton Popov).
빌드/테스트/패키징 개선
- clang-10으로 마이그레이션한 이후 HashTable에서 보고된 UBSan 리포트(null 포인터에 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
버그 수정
parseDateTimeBestEffortFUNCTION에서 unix 타임스탬프가 인수로 전달되었을 때 발생하던 오류를 수정했습니다. 이로써 #13362가 해결되었습니다. #13441 (alexey-milovidov).NaN값을 가진 Float 타입에 대해uniqExact,topK,sumDistinct및 유사한 집계 함수가 호출될 때 발생할 수 있는 성능 저하와 약간 부정확한 결과를 수정했습니다. 또한 디버그 빌드에서 assert가 트리거되는 문제를 수정했습니다. #12491를 수정합니다. #13254 (alexey-milovidov).- 널 허용 constexpr이지만 리터럴 NULL은 아닌 값을 cond 인수로 사용하는 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).
- 상수 표현식을 사용하는 블룸 필터 인덱스 관련 문제를 수정했습니다. #10572. #12659 (Winter Zhang).
- 브로커를 사용할 수 없는 경우(및 그 외 일부 경우)
StorageKafka에서 발생하던 SIGSEGV 문제를 수정했습니다. #12658 (Azat Khuzhin). - 캐시 레이아웃을 사용하는 외부 딕셔너리에서 서버가 크래시될 수 있었던 경쟁 상태를 수정했습니다. #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에서 발생할 수 있는 세그멘테이션 폴트를 수정했습니다. #12054를 종료합니다. #12401 (tavplubix).
-State및 널 허용(Nullable) 인수를 사용하는 집계 함수에서TOTALS/ROLLUP/CUBE동작을 수정했습니다. #12163을(를) 해결합니다. #12376 (alexey-milovidov).WITH FILL수정자에서 컬럼 순서를 고정하도록 수정했습니다. 이전에는ORDER BY구문의 컬럼 순서가 반영되지 않았습니다. #12306 (Anton Popov).- 가상 컬럼(예:
Merge테이블의_table)이나 시스템 테이블의 인덱스 컬럼(예:system.tables에서 데이터베이스 이름으로 필터링하는 경우)로 데이터를 필터링하는 표현식이 있고, 이 표현식이Nullable타입을 반환하는 경우에도 "bad cast" 예외가 발생하지 않도록 수정했습니다. #12166을(를) 수정합니다. #12305 (alexey-milovidov). TrieDictionary로드에 실패한 경우 오류를 표시하도록 했습니다. #12290 (Vitaly Baranov).- 빈 배열에서 잘못 동작하여 크래시가 발생할 수 있었던
arrayFillFUNCTION의 동작을 수정했습니다. 이 변경으로 #12263이(가) 수정되었습니다. #12279 (alexey-milovidov). LowCardinality타입에 대해 공통 타입으로의 변환을 구현합니다. 이를 통해LowCardinality컬럼과 다른 컬럼을 가진 테이블 사이에서 UNION ALL을 실행할 수 있습니다. #8212를 수정합니다. #4342를 수정합니다. #12275 (alexey-milovidov).StorageFile에서 여러 차례 연속 INSERT를 수행하는 동안 일부 특수 타입의 헤더가 두 번 이상 기록되던 동작을 수정했습니다. 이로써 #6155가 해결되었습니다. #12197 (Nikita Mikhaylov).- 0 또는 1이 아닌
UInt8값에 대한 논리 함수의 동작을 수정했습니다. #12196 (Alexander Kazakov). GROUP BY에서 단사 함수 제거 과정에서dictGet인자 검사를 수정했습니다. #12179 (Azat Khuzhin).ALTER DELETE에서 조건이 NULL로 평가될 경우에도 레코드가 삭제되던 잘못된 로직을 수정했습니다. 이 변경으로 #9088 이슈가 해결됩니다. 또한 #12106 이슈가 종료됩니다. #12153 (alexey-milovidov).- 별칭이 있는 경우 외부 DBMS(예: MySQL, ODBC)로 전송되는 쿼리 변환을 수정했습니다. 이로써 #12032 문제가 해결됩니다. #12151 (alexey-milovidov).
- 정수 나눗셈에서 발생할 수 있는 오버플로우 가능성을 수정했습니다. 이에 따라 #12119가 해결되었습니다. #12140 (alexey-milovidov).
greatCircleDistance,geoDistance에서 발생할 수 있는 잠재적인 무한 루프를 수정했습니다. 이로써 #12117 이슈가 해결되었습니다. #12137 (alexey-milovidov).- materialized view에서 조인이나 서브쿼리를 사용하고, system logs(system.query_log, metric_log 등)이나 engine=Buffer를 사용하는 기본 테이블에 연결된 경우
There is no query예외가 발생하지 않도록 수정했습니다. #12120 (filimonov). - 전체 스레드 수에 대한 잘못된 제한으로 인해 발생하던
UNION이 포함된 SELECT 쿼리의 성능 문제를 수정했습니다. #12030 문제를 수정합니다. #12103 (Nikolai Kochetov). -StateResample조합자에서 발생하던 세그폴트를 수정했습니다. #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).CONSTRAINT검사에서 제약 조건이 상수 표현식인지 확인하도록 수정했습니다. 이를 통해 #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).
- 서버 시작 시 로그 메시지에 잘못된 설정 이름이 표시되던 문제를 수정했습니다. #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). - 캐시 딕셔너리에서 초기화되지 않은 메모리가 읽힐 수 있는 잠재적 문제를 수정합니다. #10834 (alexey-milovidov).
성능 향상
- 리터럴과 함께 IN 연산자를 사용할 때 인덱스가 사용되지 않아 v19.3 무렵 도입된 성능 회귀 문제를 수정합니다. 이 변경 사항은 #10574를 해결합니다. #12062 (nvartolomei).
ClickHouse 릴리스 v20.3.12.112-lts 2020-06-25
버그 수정
- prewhere 조건에서
Nullable컬럼을 사용할 때 드물게 발생하던 크래시를 수정합니다. #11608의 후속 작업입니다. #11869 (Nikolai Kochetov). - 고차 함수(higher order functions) 내부에서는 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).
- row-level security가 설정된 경우 단순 count 쿼리 최적화를 제거합니다. 이전 버전에서는 사용자가 필터링된 결과가 아닌 테이블의 전체 레코드 개수를 얻을 수 있었습니다. 이 변경으로 #11352를 수정합니다. #11644 (alexey-milovidov).
- String 타입용 블룸 필터(데이터 스키핑 인덱스)를 수정했습니다. #11638 (Azat Khuzhin).
- prewhere 조건에서
Nullable컬럼을 사용하여 발생하던 드문 크래시를 수정합니다. (아마도 #11572와 관련이 있는 것으로 보입니다). #11608 (Nikolai Kochetov). Buffer테이블에서 샘플링 읽기를 수행하는 쿼리에서 발생하던Block structure mismatch오류를 수정합니다. #11602 (Nikolai Kochetov).- exception.code() % 256 = 0인 경우 clickhouse-client에서 잘못된 종료 코드가 반환되던 문제를 수정합니다. #11601 (filimonov).
- 서버가 시작될 때 「Mark cache size was lowered」와 관련된 로그 메시지의 사소한 오류를 수정합니다. #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
New Feature
- 이제 ClickHouse가 딕셔너리 소스의 타임아웃을 자체적으로 제어합니다. 캐시 딕셔너리 설정에 두 개의 새로운 설정이 추가되었습니다: 기본값이
max_lifetime인strict_max_lifetime_seconds와 기본값이 1분인query_wait_timeout_milliseconds입니다. 첫 번째 설정은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).
- 컬럼이 리터럴이 아닌 인수를 사용하는 압축 코덱을 가질 때 발생하던 서버 크래시 문제를 수정합니다. #11365를 수정합니다. #11431 (alesapin).
nan값을 점으로 사용할 때의pointInPolygon동작을 수정합니다. #11375를 해결합니다. #11421 (Alexey Ilyukhov).- 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). - StorageJoin에서 JOIN 없이 직접 SELECT를 수행할 때 발생하던 충돌과 잘못된 NULL 가능 여부(nullability) 처리를 수정합니다. #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). - 테이블의 기본 키에 Array 컬럼이 있고, 쿼리가 이 컬럼을
empty또는notEmpty함수로 필터링하는 경우 인덱스 분석이 수행되지 않던 문제를 수정합니다. 이 수정은 #11286을 해결합니다. #11303 (alexey-milovidov). - 쿼리 속도 추정이 부정확해질 수 있고,
max_network_bandwidth,max_execution_speed또는priority설정에 의해 쿼리가 제한(throttled)되는 경우min_execution_speed의 한계가 동작하지 않거나 잘못 동작할 수 있는 버그를 수정합니다. 또한timeout_before_checking_execution_speed의 기본값을 0이 아닌 값으로 변경합니다. 그렇지 않으면min_execution_speed및max_execution_speed설정이 효과를 갖지 못하기 때문입니다. 이 변경으로 #11297, #5732, #6228이(가) 수정됩니다. 사용성 개선:clickhouse-client에서 예외 메시지와 진행률 표시줄이 서로 이어져 보이는 현상을 방지합니다. #11296 (alexey-milovidov). - Protobuf 형식의 잘못된 데이터를 읽는 동안 발생하던 충돌을 수정합니다. 이 수정으로 #5957과 #11203가 해결됩니다. #11258 (Vitaly Baranov).
cache-dictionary딕셔너리에서 (키가 모두 만료되어 있는 경우) 정상적인 값 대신 기본값을 반환할 수 있던 버그를 수정했습니다. 이는 문자열 필드에만 영향을 미칩니다. #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).- 일부 백엔드에서 키가 1,000개를 초과할 때 실패할 수 있던 S3 글로빙(globbing) 문제를 수정했습니다. #11179 (Vladimir Chebotarev).
- 데이터 스키핑 인덱스가 백그라운드 머지 중에 수정될 컬럼(SummingMergeTree, AggregatingMergeTree 및 TTL GROUP BY의 경우 포함)에 의존하는 경우, 인덱스가 올바르게 계산되지 않았습니다. 이 문제는 인덱스 계산을 머지 이후로 이동하여, 병합된 데이터에 대해 인덱스를 계산하도록 함으로써 수정되었습니다. #11162 (Azat Khuzhin).
- 간단한 쿼리에 대해 스레드를 과도하게 예약하던 문제를 수정했습니다(파이프라인 변경 이후 일부 동작하지 않던, 스레드 수를 줄이기 위한 최적화). #11114 (Azat Khuzhin).
HAVING섹션이 있는 쿼리(즉, 서버 이니시에이터에서 필터링이 필요한 경우)에 대해 분산 쿼리의 프리디케이트 최적화(enable_optimize_predicate_expression=1)를 개선하여, 표현식의 순서를 유지하도록 하고(이것만으로도 문제가 해결되며), 또한 aggregator가 인덱스 대신 컬럼 이름을 사용하도록 강제합니다. 수정: #10613, #11413. #10621 (Azat Khuzhin).- 오프셋 커밋이 실패하는 드문 경우에 Kafka에서 중복 레코드를 받게 될 가능성을 줄이기 위해 커밋 재시도 로직을 도입했습니다. #9884 (filimonov).
성능 향상
- 외부 딕셔너리를 읽는 FUNCTION의 각 호출마다 딕셔너리를 가져오고 접근 권한을 확인하는 작업을 한 번만 수행하도록 개선했습니다. #10928 (Vitaly Baranov).
빌드/테스트/패키징 개선
ClickHouse 릴리스 v20.3.10.75-lts 2020-05-23
버그 수정
- 아무것도 완료되지 않은 경우 mutation 완료 작업에서의 로깅을 제거했습니다. #11109 (alesapin).
parseDateTime64BestEffort인수 해석 버그를 수정했습니다. #11038 (Vasily Nemkov).getRawData()메서드에서 잘못된 원시 데이터 크기 값을 수정했습니다. #10964 (Igr).- 20.1 버전과 그 이전 버전 사이의 2단계 집계 방식 간 호환성 문제를 수정했습니다. 이 호환성 문제는 이니시에이터 노드와 원격 노드에서 서로 다른 버전의 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).- 식별자에 대한 quoting이 요청되지 않았을 때
ODBC브리지에서 발생하던 문제를 수정했습니다. #7984를 수정합니다. #10821 (alexey-milovidov). DateLUT에서 발생한UBSan및MSan보고를 수정했습니다. #10798 (alexey-milovidov).- 키 조건에서 잘못된 타입 변환을 수정했습니다. #6287 문제를 해결했습니다. #10791 (Andrew Onyshchuk)
parallel_view_processing동작을 수정했습니다. 이제 예외가 발생하더라도 모든MATERIALIZED VIEW에 대한 삽입이 예외 없이 완료되도록 했습니다. #10241를 수정했습니다. #10757 (Nikolai Kochetov).-State와 함께 사용할 때 올바르게 동작하도록-OrNull및-OrDefault조합자를 수정했습니다. #10741 (hcz).- 중첩 타입을 사용할 때
generateRandom에서 발생하던 크래시를 수정했습니다. #10583을(를) 해결합니다. #10734 (Nikolai Kochetov). - 머지 후에 발생할 수 있었던
SummingMergeTree의LowCardinality(FixedString)키 컬럼 데이터 손상 문제를 수정했습니다. #10489를 해결합니다. #10721 (Nikolai Kochetov). h3EdgeAngle함수에서 발생할 수 있었던 버퍼 오버플로우를 수정했습니다. #10711 (alexey-milovidov).- 사라지는 totals 문제를 수정했습니다. 쿼리에 JOIN 또는 외부 WHERE 조건이 있는 서브쿼리가 포함된 경우 totals가 필터링될 수 있었습니다. #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로부터 소수 오프셋을 가진 시간대에서 유닉스 에폭 시작 시점에 발생하던 오버플로 문제를 수정했습니다. 이로써 #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 이미지에 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(...))데이터 타입의 잘못된 평탄화(flattening)를 수정합니다. 이를 통해 #10259 #10390가 해결됩니다. (alexey-milovidov)- Aggregator에서 디스크 예약을 해제했습니다. 디스크 공간 예약 시 발생하던 버그를 수정하여, 실제로는 성공적으로 완료될 수 있는 대규모 외부 집계가 실패할 수 있던 문제를 해결했습니다 #10375 (Azat Khuzhin)
ReplicatedMergeTree에서DROP와OPTIMIZE간의 경쟁 상태(race)를 수정했습니다. 동시에OPTIMIZE쿼리가 실행되는 경우DROP가 ZooKeeper의 레플리카(replica) 경로에 일부 불필요한 데이터를 남길 수 있었습니다. #10312 (tavplubix)- 컬럼 기본값이 변경된 후 서버에서 테이블을 attach할 수 없던 버그를 수정했습니다. #10441 (alesapin)
- 테이블을 로드하기 전에
ATTACH DATABASE가 실패하더라도 metadata 디렉터리를 제거하지 않도록 수정했습니다. #10442 (Winter Zhang) - 일부 데이터가 quorum으로 INSERT된 후 DROP PARTITION 또는 TTL 등에 의해 삭제되었을 때 INSERT가 멈추거나 SELECT에서 false positive 예외가 발생하던 여러 버그를 수정했습니다. 이 변경으로 #9946 #10188이(가) 수정되었습니다. (Nikita Mikhaylov)
- 원격 쿼리 실행 시 발생할 수 있었던
ConcatProcessor의Pipeline 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연산자의 오른쪽에 명시적으로 정의된 Set이 있고 왼쪽에 튜플이 있는 쿼리의 성능을 개선했습니다. 이를 통해 20.3 버전에서 발생한 성능 회귀가 수정되었습니다. #9740, #10385 (Anton Popov)
ClickHouse v20.3.7.46 릴리스, 2020-04-17
버그 수정
- 쉼표 조인(comma join)과 이름 기반 조인(name join)이 혼합된 쿼리에서 발생하던
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_by및group_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.」 오류 메시지를 발생시키던 버그를 수정했습니다. 이제 비결정적 함수 검사에서 lambda 표현식을 올바르게 처리합니다. #10237 (Alexander Kazakov).
- Date 타입에 대한
generateRandom함수를 수정했습니다. 이를 통해 #9973을(를) 해결했습니다. 오래된 방식의 파티셔닝을 사용하는 MergeTree 테이블에 2106년의 날짜가 삽입되지만 파티션 이름은 1970년으로 지정되는 경계 사례(edge case)를 수정했습니다. #10218 (alexey-milovidov). - View의 테이블 정의가 SELECT 쿼리와 일치하지 않는 경우 타입을 변환합니다. 이로써 #10180 및 #10022를 수정합니다. #10217 (alexey-milovidov).
- RFC-2822 형식의 문자열에서 요일이 Tuesday 또는 Thursday인 경우를 올바르게 처리하도록
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).
- 프로세서 파이프라인에서
extremes결과가 잘못 계산될 수 있는 문제를 수정합니다. #10131 (Nikolai Kochetov). - compact 파트에서 일부 유형의 ALTER 작업을 수정했습니다. #10130 (Anton Popov).
- 새 레플리카 생성 시 잘못된
index_granularity_bytes검사 문제를 수정합니다. #10098를 해결합니다. #10121 (alesapin). - 분산 테이블의 구조가 하위 테이블과 다를 때 해당 분산 테이블로 INSERT를 수행하면 발생하던 SIGSEGV를 수정했습니다. #10105 (Azat Khuzhin).
JOIN및UNION ALL이 있는 쿼리에서 행이 손실될 수 있는 문제를 수정합니다. #9826, #10113를 수정합니다. #10099 (Nikolai Kochetov)./table/replicas/replica_name/metadata노드가 존재하지 않는 이전 ClickHouse 버전에서 이 버전으로 업데이트할 때 복제된 테이블(Replicated Table)이 시작되지 않던 문제가 수정되었습니다. #10037을(를) 해결합니다. #10095 (alesapin).- MySQL Database Engine에 일부 인수 검사를 추가하고 식별자 인수도 지원하도록 했습니다. #10077 (Winter Zhang).
- localhost ClickHouse 서버를 소스로 사용하는 ClickHouse 딕셔너리의 버그를 수정합니다. 이 버그는 딕셔너리와 소스의 타입이 호환되지 않는 경우 메모리 손상을 일으킬 수 있습니다. #10071 (alesapin).
- 테이블에 skip index가 포함된 경우
CHECK TABLE쿼리에서 발생하던 버그를 수정했습니다. #10068 (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 연산에서 발생할 수 있는 세그멘테이션 폴트를 수정합니다 (#8636, #8925). #10025 (Alexander Kuzmenkov).
- 원격 쿼리 실행에 사용되는 스레드 수가 올바르게 설정되도록 수정했습니다(20.3 이후 성능 회귀). 이는
Distributed테이블에 대한 쿼리가 로컬과 원격 세그먼트에서 동시에 실행될 때 발생했습니다. #9965를 해결합니다. #9971 (Nikolai Kochetov). - 일부 데이터베이스에 대한 쿼리 처리 단계 중 하나에서 필요한 테이블을 가져오지 못하던 버그를 수정합니다. #9699을(를) 수정합니다. #9949 (achulkov2).
JOIN과TOTALS를 함께 사용할 때 발생하는 「Not found column in block」 오류를 수정합니다. #9839 이슈를 해결합니다. #9939 (Artem Zuikov).- 서버 시작 시
ON CLUSTERDDL 쿼리가 멈춰 버리던 버그를 수정했습니다. #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 문에서 "scalar does not exist" 오류를 수정했습니다(#9878). #9904 (Amos Bird).
ReplicatedMergeTree에서 DROP과 OPTIMIZE 간의 경쟁 상태를 수정했습니다. #9901 (alesapin).distributed_product_mode='local'에서 정규화된 이름 처리 시 발생하던 오류를 수정합니다. #4756 이슈를 해결합니다. #9891 (Artem Zuikov).- 설정 'allow_introspection_functions'에서 인트로스펙션 함수(introspection function)에 대한 권한 부여 계산을 수정합니다. #9840 (Vitaly Baranov).
빌드/테스트/패키징 개선
- 통합 테스트
test_settings_constraints를 수정했습니다. #9962 (Vitaly Baranov). clock_getres에 대한 종속성을 제거했습니다. #9833 (alexey-milovidov).
ClickHouse 릴리스 v20.3.5.21, 2020-03-27
버그 수정
- 쿼리에 PREWHERE와 WHERE가 분산 테이블에 대해 함께 존재하고
SET distributed_product_mode = 'local'로 설정된 경우 발생하던 「Different expressions with the same alias」 오류를 수정합니다. #9871 (Artem Zuikov). - 복합 기본 키를 사용하는 테이블에서 뮤테이션의 과도한 메모리 사용을 수정합니다. 이 수정으로 #9850 이슈가 해결됩니다. #9860 (alesapin).
- INSERT 쿼리에 대해, 이제 세그먼트는 예외를 던지는 대신 이니시에이터로부터 전달된 설정을 세그먼트의 제약 조건에 맞게 제한(clamp)합니다. 이 수정으로 서로 다른 제약 조건을 가진 세그먼트로 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).
Improvement
- 하나의 스레드에서 하나의 정렬된 파트만 읽기 때문에 뮤테이션에서 ORDER BY 단계를 제거합니다. 또한 뮤테이션에서의 행 순서가 정렬 키 순서에 따라 정렬되어 있고 이 순서가 깨지지 않았는지 확인하는 검사를 추가합니다. #9886 (alesapin).
ClickHouse v20.3.4.10 릴리스, 2020-03-20
버그 수정
- 이 릴리스에는 20.1.8.41의 모든 버그 수정도 포함됩니다.
- HTTP를 통해 실행되는 쿼리(프로세서 파이프라인 사용)에서 누락되어 있던
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이 다시 하위 버전과 호환되도록 했습니다.
INSERT쿼리에 대해Distributed테이블의 파트 이름을 더 compact한 형식으로 파일에 쓸 수 있도록 하는 설정use_compact_format_in_distributed_parts_names를 추가했습니다. 이 수정은 #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) 새 버전으로 업그레이드한 후에는 수동으로 조치하지 않는 한 다운그레이드할 수 없습니다. 이는 이전 서버 버전이 새로운 디렉터리 형식을 인식하지 못하기 때문입니다. 다운그레이드하려면 해당 디렉터리 이름을 이전 형식으로 수동으로 변경해야 합니다. 이 변경 사항은 비동기INSERT를Distributed테이블에 사용한 경우에만 적용됩니다. 20.3.3 버전에서는 새 형식을 점진적으로 활성화할 수 있는 설정을 도입할 예정입니다.- 뮤테이션 명령의 복제 로그 항목 형식이 변경되었습니다. 새 버전을 설치하기 전에 기존 뮤테이션이 모두 처리될 때까지 기다려야 합니다.
- 단순 메모리 프로파일러를 구현하여 소프트 할당 한도를 초과하는 메모리에 대해 N바이트마다 스택 트레이스를
system.trace_log에 덤프합니다 #8765 (Ivan) #9472 (alexey-milovidov).system.trace_log의 컬럼 이름이timer_type에서trace_type으로 변경되었습니다. 이로 인해 타사 성능 분석 도구 및 flamegraph 처리 도구에 변경이 필요합니다. - 내부 스레드 번호 대신 OS 스레드 ID를 전역적으로 사용합니다. 이를 통해 #7477 문제가 해결됩니다. 이전 버전의
clickhouse-client는send_logs_levelSETTING이 활성화된 경우 서버에서 전송되는 로그를 받을 수 없었는데, 이는 구조화된 로그 메시지의 이름과 유형이 변경되었기 때문입니다. 한편, 서로 다른 서버 버전은 서로 다른 유형의 로그를 주고받을 수 있습니다.send_logs_levelSETTING을 사용하지 않는다면, 이 문제에 대해 신경 쓸 필요가 없습니다. #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)
새로운 기능
Avro및AvroConfluent입력/출력 형식 추가 #8571 (Andrew Onyshchuk) #8957 (Andrew Onyshchuk) #8717 (alexey-milovidov)cache딕셔너리에서 만료된 키를 멀티 스레드 및 non-blocking 방식으로 업데이트하도록 개선했습니다(선택적으로 이전 값을 계속 읽을 수 있도록 허용). #8303 (Nikita Mikhaylov)ALTER ... MATERIALIZE TTL쿼리가 추가되었습니다. 이 쿼리는 TTL에 의해 만료된 데이터를 강제로 제거하는 mutation 작업을 실행하고, 모든 파트에서 TTL 메타정보를 다시 계산합니다. #8775 (Anton Popov)- 필요한 경우 HashJoin을 MergeJoin(디스크 기반)으로 전환합니다 #9082 (Artem Zuikov)
ALTER TABLE에MOVE PARTITION명령어를 추가했습니다 #4729 #6168 (Guillaume Tassery)- 구성 파일에서 스토리지 구성을 동적으로 다시 로드할 수 있도록 했습니다. #8594 (Vladimir Chebotarev)
storage_policy를 더 낮은 수준으로는 변경할 수 없고, 동등하거나 더 상위 수준의 정책으로만 변경할 수 있도록 허용합니다. #8107 (Vladimir Chebotarev)- S3 스토리지와 테이블 함수에서 glob/와일드카드 패턴을 지원하도록 했습니다. #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)groupArray와 유사하며 reservoir 샘플링 알고리즘을 사용하는groupArraySampleFUNCTION을 추가했습니다. #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-CodeHTTP 헤더를 추가했습니다. 이로써 #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.zeros및system.zeros_mt시스템 테이블과 테이블 함수zeros()및zeros_mt()를 추가했습니다. 테이블(및 테이블 함수)은zero라는 이름과UInt8타입을 가진 단일 컬럼을 포함합니다. 이 컬럼에는 0만 포함됩니다. 이는 테스트 목적으로 많은 행을 생성하는 가장 빠른 방법입니다. 이로써 #6604 #9593 이슈가 해결됩니다. (Nikolai Kochetov)
실험적 기능
- 모든 컬럼이 하나의 파일에 저장되는
MergeTree계열 테이블용 새로운 compact 형식을 추가했습니다. 작은 단위로 빈번하게 수행되는 insert의 성능을 향상하는 데 도움이 됩니다. 기존 형식(컬럼당 하나의 파일)은 이제 wide 형식이라고 부릅니다. 데이터 저장 형식은min_bytes_for_wide_part및min_rows_for_wide_part설정으로 제어됩니다. #8290 (Anton Popov) Log,TinyLog,StripeLog테이블에 대한 S3 스토리지 지원을 추가했습니다. #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가 활성화된 상태에서GROUP BY시 발생할 수 있는 잘못된 결과를 수정합니다. 이는 #9134를 수정합니다. #9289 (Nikolai Kochetov) - 캐시 딕셔너리 메트릭에서, 발견된 키가 누락된 것으로 집계되었습니다. #9411 (Nikita Mikhaylov)
- #8598에서 도입된 복제(replication) 프로토콜 비호환성 문제를 수정합니다. #9412 (alesapin)
ReplicatedMergeTree테이블 시작 시queue_task_handle에서 발생하던 경쟁 상태를 수정했습니다. #9552 (alexey-milovidov)- 토큰
NOT이SHOW TABLES NOT LIKE쿼리에서 동작하지 않던 문제를 수정했습니다. #8727 #8940 (alexey-milovidov) - 함수
h3EdgeLengthM에 범위 검사를 추가했습니다. 이 검사가 없으면 버퍼 오버플로가 발생할 수 있습니다. #8945 (alexey-milovidov) - 10개를 초과하는 여러 인자에 대한 삼항 논리 연산자의 배치 계산 시 발생하던 버그를 수정했습니다. #8718 (Alexander Kazakov)
- segfault가 발생하거나
Inconsistent number of columns got from MergeTreeRangeReader예외가 발생할 수 있었던 PREWHERE 최적화 오류를 수정했습니다. #9024 (Anton Popov) - 보안 연결에서 실제 타임아웃이 초과되기 전에, 그리고 쿼리 프로파일러가 활성화된 상태에서 간헐적으로 발생하던
Timeout exceeded while reading from socket예외를 수정했습니다. 또한connect_timeout_with_failover_secure_ms설정(기본값 100ms)을 추가했습니다. 이 설정은connect_timeout_with_failover_ms와 유사하지만, SSL 핸드셰이크가 일반 TCP 연결보다 느리기 때문에 보안 연결에 사용됩니다 #9026 (tavplubix) - 뮤테이션 종료 과정에서
parts_to_do=0및is_done=0상태로 멈춰 버릴 수 있는 버그를 수정했습니다. #9022 (alesapin) partial_merge_join설정과 함께 새로운 ANY JOIN 로직을 사용할 수 있습니다. 이제partial_merge_join=1로ANY|ALL|SEMI LEFT및ALL INNER조인을 수행할 수 있습니다. #8932 (Artem Zuikov)- 이제 세그먼트는 예외를 발생시키는 대신, 이니시에이터에서 전달된 설정을 세그먼트의 제약 조건 범위로 제한합니다. 이 수정으로 서로 다른 제약 조건을 가진 세그먼트에도 쿼리를 전송할 수 있습니다. #9447 (Vitaly Baranov)
MergeTreeReadPool에서 메모리 관리 문제를 해결했습니다. #8791 (Vladimir Chebotarev)- 문자열
e를 인수로 호출할 때toDecimal*OrNull()함수 패밀리의 동작을 수정합니다. #8312 #8764를 해결합니다. (Artem Zuikov) FORMAT Null이 클라이언트로 어떤 데이터도 보내지 않도록 했습니다. #8767 (Alexander Kuzmenkov)LiveViewBlockInputStream에서 타임스탬프가 업데이트되지 않던 버그를 수정합니다.LIVE VIEW는 실험적 기능입니다. #8644 (vxider) #8625 (vxider)ALTER MODIFY TTL이 이전 TTL 표현식을 삭제할 수 없게 만들던 문제를 수정했습니다. #8422 (Vladimir Chebotarev)- MergeTreeIndexSet에서 발생한 UBSan 리포트를 수정했습니다. 이 변경으로 #9250, #9365가 해결됩니다. (alexey-milovidov)
- haystack이 길이 0(빈 문자열)일 때
match및extract함수의 동작을 수정했습니다. 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테이블의 세그멘테이션 폴트(segfault)를 수정했습니다 #9387 (tavplubix)ATTACH PARTITION FROM,REPLACE PARTITION,MOVE TO TABLE에서 스토리지 정책에 대한 검사를 추가했습니다. 그렇지 않으면 재시작 후 데이터 파트에 접근할 수 없게 되어 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엔진을 사용하는 테이블에서 첫 번째 컬럼(들)을 별칭으로 둘 수 있도록 허용 #9231 (Ivan)- 단일 스레드에서
MergeTree테이블을 읽을 때 사용되는 범위의 순서를 수정했습니다. 이는MergeTreeRangeReader에서 예외가 발생하거나 잘못된 쿼리 결과가 반환되는 문제로 이어질 수 있었습니다. #9050 (Anton Popov) reinterpretAsFixedString가String대신FixedString을 반환하도록 수정했습니다. #9052 (Andrew Onyshchuk)- 사용자에게 자세한 오류 설명 대신
Success가 표시되는 극히 드문 상황을 방지합니다. #9457 (alexey-milovidov) - 비어 있는 행 템플릿이 있는
Template포맷을 사용할 때 비정상 종료가 발생하지 않도록 함. #8785 (Alexander Kuzmenkov) - system 테이블의 메타데이터 파일이 잘못된 위치에 생성될 수 있던 문제를 수정했습니다 #8653 (tavplubix) #8581을(를) 수정합니다.
- 캐시 딕셔너리에서
exception_ptr관련 데이터 레이스 문제를 수정했습니다 #8303. #9379 (Nikita Mikhaylov) ATTACH TABLE IF NOT EXISTS쿼리에 대해 예외를 발생시키지 않습니다. 이전에는IF NOT EXISTS절이 있음에도 테이블이 이미 존재하면 예외가 발생했습니다. #8967 (Anton Popov)- 예외 메시지에서 누락되어 있던 닫는 괄호를 수정했습니다. #8811 (alexey-milovidov)
- 대화형 모드로 clickhouse-client를 시작할 때
Possible deadlock avoided메시지가 출력되지 않도록 했습니다. #9455 (alexey-milovidov) - base64 인코딩된 값 끝의 패딩이 잘못 생성될 수 있던 문제를 수정했습니다. base64 라이브러리를 업데이트했습니다. 이로써 #9491 문제가 해결되며, #9492 #9500이(가) 닫혔습니다. (alexey-milovidov)
- 드물게
Kafka에서 suffix를 읽은 이후 커밋 전에 예외가 발생하는 경우에도 데이터가 유실되지 않도록 합니다. #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쿼리에서 발생할 수 있는 극히 드문 경쟁 상태(race condition)도 수정했습니다. #9048 (alesapin)compile_expressionsSETTING이 활성화되어 있을 때Nullable타입을 사용할 경우LLVMExecutableFunction에서unexpected column이 발생할 수 있습니다 #8910 (Guillaume Tassery)Kafkaengine에 대한 여러 가지 수정 사항: 1) consumer group 리밸런스 동안 발생하던 중복 레코드를 수정했습니다. 2) 하나의 poll에서 여러 파티션(partition)으로부터 데이터를 가져온 뒤 일부만 커밋했을 때 드물게 나타나던 '구멍(holes)' 현상을 수정했습니다(이제는 항상 poll된 전체 메시지 블록을 처리/커밋합니다). 3) 블록 크기에 따른 flush를 수정했습니다(이전에는 타임아웃에 의한 flush만 제대로 동작했습니다). 4) 더 나은 구독 절차(assignment 피드백 포함)를 도입했습니다. 5) 기본 interval 및 timeout을 사용해 테스트가 더 빠르게 실행되도록 했습니다. 데이터가 이전에는 문서에 따라야 하는 블록 크기 기준으로 flush되지 않았기 때문에, 이 PR은 기본 설정에서 일부 성능 저하를 유발할 수 있습니다(더 자주, 더 작은 단위로 flush가 발생해 최적성이 떨어지기 때문입니다). 이 변경 이후 성능 문제가 발생하는 경우, 테이블의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) - 원본 파트를 손상시킬 수 있는 이중 이동(double move) 관련 버그를 수정했습니다. 이는
ALTER TABLE MOVE를 사용하는 경우에 해당합니다. #8680 (Vladimir Chebotarev) - 백틱 없이도
interval식별자를 올바르게 파싱하도록 했습니다.interval식별자가 백틱이나 큰따옴표로 둘러싸여 있어도 쿼리를 실행할 수 없던 문제를 수정했습니다. 이를 통해 #9124를 해결했습니다. #9142 (alexey-milovidov) - fuzz 테스트와
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)ORDER BY와LIMIT절이 함께 사용될 때SELECT절에 상수가 포함된 드문 경우에 발생하던Parameters are out of bound예외를 수정했습니다. #8892 (Guillaume Tassery)- 이미 완료된 뮤테이션의 상태가
is_done=0으로 남을 수 있던 뮤테이션 최종화 문제를 수정합니다. #9217 (alesapin) - 예전 구문을 사용하는 MergeTree 테이블에서는 작동하지 않으므로
ALTER ADD INDEX가 실행되지 않도록 했습니다. #8822 (Mikhail Korotov) - 서버 시작 시 서버가 정상적으로 시작될 수 있도록
LIVE VIEW가 의존하는 테이블에 접근하지 않도록 했습니다. 또한LIVE VIEW를 detach할 때 해당LIVE VIEW의 의존성을 제거하도록 했습니다.LIVE VIEW는 실험적인 기능입니다. #8824 (tavplubix) PREWHERE실행 중MergeTreeRangeReader에서 발생할 수 있던 세그멘테이션 폴트를 수정합니다. #9106 (Anton Popov)- 컬럼 TTL 사용 시 발생할 수 있는 체크섬 불일치 문제를 수정합니다. #9451 (Anton Popov)
- 볼륨이 하나만 있는 경우 TTL 규칙에 의해 백그라운드에서 파트가 이동되지 않는 문제를 수정했습니다. #8672 (Vladimir Chebotarev)
- 데이터 타입 Set에서
Method createColumn() is not implemented for data type Set오류가 발생하던 문제를 수정했습니다. 이에 따라 #7799 이슈가 해결되었습니다. #8674 (alexey-milovidov) - 이제 뮤테이션이 더 자주 완료되도록 했습니다. #9427 (alesapin)
intDiv를 상수 1을 빼는 방식으로 수정 #9351 (hcz)BlockIO에서 발생할 수 있는 경쟁 상태를 수정합니다. #9356 (Nikolai Kochetov)- 잘못된 매개변수로 생성된
Kafka테이블을 사용하거나 DROP 하려고 하면 서버가 종료되던 버그를 수정했습니다. #9513 (filimonov) - OS가
timer_create함수에 대해 잘못된 결과를 반환하는 경우에 대한 워크어라운드를 추가했습니다. #8837 (alexey-milovidov) min_marks_for_seek파라미터 사용 중 발생하던 오류를 수정했습니다. 샤딩 키가 없는 분산 테이블(Distributed table)에서 사용되지 않는 세그먼트를 건너뛰려고 할 때 표시되던 오류 메시지를 수정했습니다. #8908 (Azat Khuzhin)
개선 사항
ReplicatedMergeTree*엔진 계열에서 뮤테이션을 기반으로ALTER MODIFY/DROP쿼리를 구현했습니다. 이제ALTER는 메타데이터 업데이트 단계에서만 차단되며, 그 이후에는 차단되지 않습니다. #8701 (alesapin)WHERE절에 한정자 없는 이름이 포함된 경우 CROSS 조인을 INNER 조인으로 재작성할 수 있는 기능을 추가했습니다. #9512 (Artem Zuikov)SHOW TABLES및SHOW DATABASES쿼리에서WHERE식과FROM/IN절을 지원하도록 함 #9076 (sundyli)deduplicate_blocks_in_dependent_materialized_views설정이 추가되었습니다. #9070 (urykhy)- 최근 변경으로 인해 MySQL 클라이언트가 바이너리 문자열을 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가 활성화되도록 했습니다. 이 테이블에는 ProfileEvents와 CurrentMetrics 값이 "collect_interval_milliseconds" 간격(기본값 1초)으로 수집된 행이 저장됩니다. 이 테이블의 크기는 매우 작으며(보통 수 메가바이트 수준) 이러한 데이터를 기본 설정으로 수집하도록 하는 것이 타당합니다. #9225 (alexey-milovidov) - 그룹 내 모든 스레드에 대해 쿼리 프로파일러를 초기화하여, 예를 들어 INSERT 쿼리를 완전히 프로파일링할 수 있도록 합니다. #6964 #8874를 수정합니다. (Ivan)
- 이제 임시
LIVE VIEW는CREATE 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 규칙에 따라 다운로드한 파트를 디스크/볼륨에 배치할 수 있도록 지원함 #8598 (Vladimir Chebotarev)
- 외부 MySQL 딕셔너리의 경우 MySQL 연결 풀을 공용으로 구성하여 여러 딕셔너리가 이를 공유해 사용할 수 있도록 허용합니다. 이 옵션을 사용하면 MySQL 서버에 대한 연결 수를 크게 줄일 수 있습니다. #9409 (Clément Rodriguez)
clickhouse-benchmark출력에서 보간된 값 대신, 분위수에 대해 가장 가까운 쿼리 실행 시간을 표시합니다. 특정 쿼리의 실행 시간에 실제로 대응하는 값을 보여 주는 것이 더 좋습니다. #8712 (alexey-milovidov)- Kafka에 데이터를 삽입할 때 메시지에 key와 timestamp를 추가할 수 있도록 했습니다. #7198 및 #8969 이슈를 해결했습니다. (filimonov)
- 서버를 터미널에서 실행하는 경우, 스레드 번호, 쿼리 ID 및 로그 우선순위를 색상으로 강조 표시합니다. 이는 개발자가 연관된 로그 메시지를 더 쉽게 읽을 수 있도록 가독성을 향상하기 위한 기능입니다. #8961 (alexey-milovidov)
Ordinary데이터베이스에서 테이블을 로드할 때 표시되는 예외 메시지를 개선했습니다. #9527 (alexey-milovidov)- 집계 함수 상태를 가진 배열에 대해
arraySlice를 구현했습니다. 이로써 #9388 #9391 이슈가 수정되었습니다. (alexey-milovidov) - 상수 FUNCTION과 상수 배열을
IN연산자의 오른쪽 피연산자로 사용할 수 있도록 허용합니다. #8813 (Anton Popov) - system.replicas에 대한 데이터를 가져오는 동안 ZooKeeper 예외가 발생한 경우, 이를 별도의 컬럼에 표시합니다. 이는 #9137 #9138을 구현한 것입니다 (alexey-milovidov)
- 소멸될 때 MergeTree 데이터 파트를 원자적으로 제거합니다. #8402 (Vladimir Chebotarev)
- 분산 테이블에서 행 수준 보안을 지원합니다. #8926 (Ivan)
- 이제 설정 값에서 접미사(KB, KiB 등)를 인식합니다. #8072 (Mikhail Korotov)
- 대규모 JOIN 결과를 구성하는 과정에서 메모리 부족(out of memory)이 발생하지 않도록 했습니다. #8637 (Artem Zuikov)
clickhouse-client의 대화형 모드에서 자동 완성 제안에 클러스터 이름을 추가했습니다. #8709 (alexey-milovidov)- 그룹 내 모든 스레드에 대해 쿼리 프로파일러를 초기화하여, 예를 들어 INSERT 쿼리를 완전히 프로파일링할 수 있도록 합니다. #8820 (Ivan)
system.query_log테이블에exception_code컬럼이 추가되었습니다. #8770 (Mikhail Korotov)- 기본 서버 구성 파일에서 포트
9004에서 동작하는 MySQL 호환 서버를 활성화했습니다. 구성 예제의 비밀번호 생성 명령을 수정했습니다. #8771 (Yuriy Baranov) - 파일 시스템이 읽기 전용인 경우 종료 시 비정상 종료(abort)가 발생하지 않도록 했습니다. 이로써 #9094 #9100을(를) 수정했습니다. (alexey-milovidov)
- HTTP POST 쿼리에서 길이가 필요할 때 보다 명확한 예외 메시지를 제공하도록 개선했습니다. #9453 (alexey-milovidov)
HDFS및File엔진,hdfs및file테이블 함수에_path와_file가상 컬럼을 추가합니다 #8489 (Olga Khvostikova)- 뷰의 내부 테이블에 새로운 컬럼이 추가된 경우
MATERIALIZED VIEW에 데이터를 삽입할 때 발생하던Cannot find column오류를 수정했습니다. #8766 #8788 (vzakaznikov) #8788 #8806 (Nikolai Kochetov) #8803 (Nikolai Kochetov) - 네이티브 클라이언트-서버 프로토콜에서 진행률 전송 방식을 수정하여, 최종 업데이트 후(로그와 마찬가지로) 진행률을 전송하도록 했습니다. 이는 네이티브 프로토콜을 사용하는 일부 타사 도구에만 영향을 줄 수 있습니다. #9495 (Azat Khuzhin)
- MySQL 프로토콜을 사용하는 클라이언트 연결 수를 추적하는 시스템 메트릭을 추가하였습니다 (#9013). #9015 (Eugene Klimov)
- 이제부터 HTTP 응답의
X-ClickHouse-Timezone헤더는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)
- ColumnConst::convertToFullColumn()이 이를 통해 구현되는
ColumnVector::replicate()에 대해 약 3배 더 빠른 구현을 추가했습니다. 상수를 materialize할 때 테스트에도 유용합니다. #9293 (Alexander Kazakov) ColumnVector::replicate()에 대한 또 다른 소규모 성능 개선을 수행했습니다(이는materialize함수와 고차 함수의 속도를 높입니다). #9293에 대한 추가 개선입니다. #9442 (Alexander Kazakov)stochasticLinearRegression집계 함수의 성능을 개선했습니다. 이 패치는 Intel이 기여했습니다. #8652 (alexey-milovidov)reinterpretAsFixedString함수의 성능을 개선했습니다. #9342 (alexey-milovidov)- 프로세서 파이프라인에서
Null포맷에 대해서는 클라이언트로 블록을 전송하지 않도록 했습니다. #8797 (Nikolai Kochetov) #8767 (Alexander Kuzmenkov)
빌드/테스트/패키징 관련 개선 사항
- Windows Subsystem for Linux에서 예외 처리가 이제 정상적으로 동작합니다. 자세한 내용은 https://github.com/ClickHouse-Extras/libunwind/pull/3을(를) 참조하십시오. 이 변경으로 #6480 및 #9564를 수정합니다. (sobolevsv)
- 대화형 입력 편집을 위해
clickhouse-client에서readline을replxx로 교체 #8416 (Ivan) - FunctionsComparison에서 빌드 시간이 개선되고 Template 인스턴스화 횟수가 감소했습니다. #9324 (alexey-milovidov)
- CI에
clang-tidy통합을 추가했습니다. #6044 #9566도 참고하십시오. (alexey-milovidov) - 이제 CI 빌드에서
gcc에 대해서도lld를 사용하여 ClickHouse를 링크합니다. #9049 (alesapin) THREAD_FUZZER_*환경 변수가 설정된 경우 스레드 스케줄링을 무작위화하고 글리치(glitch)를 삽입할 수 있도록 했습니다. 이 기능은 테스트에 도움이 됩니다. #9459 (alexey-milovidov)- 무상태 테스트에서 보안 소켓을 활성화 #9288 (tavplubix)
- SPLIT_SHARED_LIBRARIES=OFF를 보다 견고하게 개선 #9156 (Azat Khuzhin)
- CI 환경에서 발생할 수 있는 서버의 무작위 멈춤 상황에도 "performance_introspection_and_logging" 테스트가 신뢰할 수 있게 동작하도록 개선했습니다. 참고: #9515 #9528 (alexey-milovidov)
- 스타일 검사에서 XML을 검증하도록 했습니다. #9550 (alexey-milovidov)
- 테스트
00738_lock_for_inner_table의 경쟁 상태를 수정했습니다. 이 테스트는 sleep 호출에 의존했습니다. #9555 (alexey-milovidov) - 성능 테스트 중
once유형을 제거합니다. 이는 모든 성능 테스트를 통계적 비교 모드(더 신뢰할 수 있도록)로 실행하기 위해 필요합니다. #9557 (alexey-milovidov) - 산술 함수용 성능 테스트를 추가했습니다. #9326 (alexey-milovidov)
sumMap및sumMapWithOverflow집계 함수에 대한 성능 테스트를 추가했습니다. #8933 #8947의 후속 작업입니다. (alexey-milovidov)- 스타일 검사를 통해 ErrorCodes의 스타일을 일관되게 유지합니다. #9370 (alexey-milovidov)
- 테스트 이력을 위한 스크립트를 추가했습니다. #8796 (alesapin)
override키워드를 사용해야 하는 모든 지점을 찾고 수정하기 위해 GCC 경고 플래그-Wsuggest-override를 추가했습니다. #8760 (kreuzerkrieg)- 정의되어 있어야 하므로 Mac OS X에서는 weak 심볼을 무시합니다 #9538 (Deleted user)
- 성능 테스트에서 일부 쿼리의 실행 시간을 정규화했습니다. 이는 모든 성능 테스트를 비교 모드에서 실행하기 위한 사전 준비 작업입니다. #9565 (alexey-milovidov)
- 쿼리 테스트에서 pytest를 지원하도록 일부 테스트를 수정 #9062 (Ivan)
- MSan 빌드에서 SSL을 활성화하여 stateless 테스트를 실행할 때 서버가 시작 시 실패하지 않도록 했습니다 #9531 (tavplubix)
- 테스트 결과에서의 데이터베이스 대체를 수정 #9384 (Ilya Yatsishin)
- 여러 플랫폼용 빌드 관련 수정 #9381 (proller) #8755 (proller) #8631 (proller)
- stateless-with-coverage 테스트용 Docker 이미지에 disks 섹션을 추가했습니다 #9213 (Pavel Kovalenko)
- GRPC로 빌드할 때 소스 트리에 생성되는 파일 제거 #9588 (Amos Bird)
- Context에서 SessionCleaner를 제거하여 빌드 시간이 소폭 단축되도록 했습니다. SessionCleaner 코드를 더 단순화했습니다. #9232 (alexey-milovidov)
- clickhouse-test 스크립트에서 중단된 쿼리 검사 방식을 업데이트함 #8858 (Alexander Kazakov)
- 저장소에서 일부 불필요한 파일을 제거했습니다. #8843 (alexey-milovidov)
- math 성능 테스트의 유형을
once에서loop로 변경했습니다. #8783 (Nikolai Kochetov) - 코드베이스용 대화형 코드 브라우저 HTML 보고서를 생성할 수 있는 Docker 이미지를 추가합니다. #8781 (alesapin) Woboq Code Browser를 참고하십시오.
- MSan 환경에서 발생하는 일부 테스트 실패를 억제하도록 했습니다. #8780 (Alexander Kuzmenkov)
- "exception while insert" 테스트의 실행 속도를 높였습니다. 이 테스트는 debug-with-coverage 빌드에서 자주 시간 초과가 발생합니다. #8711 (alexey-milovidov)
libcxx및libcxxabi를 master 브랜치로 업데이트했습니다. #9304 #9308을(를) 준비하기 위한 변경입니다. (alexey-milovidov)- 불안정한 테스트
00910_zookeeper_test_alter_compression_codecs를 수정합니다. #9525 (alexey-milovidov) - 중복된 링커 플래그를 정리합니다. 링커가 예기치 않은 심볼을 조회하지 않도록 합니다. #9433 (Amos Bird)
- 테스트 이미지에
clickhouse-odbc드라이버를 추가합니다. 이를 통해 ClickHouse가 자체 ODBC 드라이버를 사용해 ClickHouse 간 상호 작용을 테스트할 수 있습니다. #9348 (filimonov) - 단위 테스트의 여러 버그를 수정했습니다. #9047 (alesapin)
-Wmissing-include-dirsGCC 경고를 활성화하여 존재하지 않는 include를 모두 제거했습니다. 이 문제는 대부분 CMake 스크립트 오류로 인해 발생합니다. #8704 (kreuzerkrieg)- 쿼리 프로파일러가 동작하지 않을 수 있는 이유를 설명합니다. #9049 #9144 (alexey-milovidov)을 위한 변경입니다.
- OpenSSL을 upstream master 버전으로 업데이트했습니다. TLS 연결이
OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error및SSL Exception: error:2400006E:random number generator::error retrieving entropy메시지와 함께 실패할 수 있던 문제를 수정했습니다. 이 문제는 버전 20.1에서 발생했습니다. #8956 (alexey-milovidov) - 서버용 Dockerfile을 업데이트 #8893 (Ilya Mazaev)
- build-gcc-from-sources 스크립트의 사소한 수정 #8774 (Michael Nacharov)
number컬럼이 사용되지 않는 perftest에서는numbers를zeros로 교체합니다. 이렇게 하면 테스트 결과가 더 깔끔해집니다. #9600 (Nikolai Kochetov)- Column 생성자에서
initializer_list를 사용할 때 발생하던 스택 오버플로우 문제를 수정했습니다. #9367 (Deleted user) - librdkafka를 v1.3.0으로 업그레이드합니다. Mac OS X에서 번들된
rdkafka및gsasl라이브러리를 활성화합니다. #9000 (Andrew Onyshchuk) - GCC 9.2.0에서의 빌드 오류 수정 #9306 (vxider)
ClickHouse v20.1 릴리스
ClickHouse 릴리스 v20.1.16.120-stable 2020-60-26
버그 수정
- prewhere 조건에서
Nullable컬럼을 사용해 발생하던 드문 크래시를 수정합니다. #11608의 후속 수정입니다. #11869 (Nikolai Kochetov). - 고차 함수(higher-order function) 안에서 arrayJoin 사용을 허용하지 않도록 합니다. 프로토콜 동기화가 깨지는 문제가 있었습니다. 이 변경으로 #3933이 해결됩니다. #11846 (alexey-milovidov).
SELECT *, xyz.*와 같이, 오류가 발생해야 함에도 성공하던 쿼리의 예기치 않은 동작을 수정합니다. #11753 (hexiaoting).- Values 입력 포맷에서 복잡한 리터럴의 타입을 잘못 추론하여 발생하던 LOGICAL_ERROR를 수정합니다. #11732 (tavplubix).
- 상수 컬럼에 대한
ORDER BY ... WITH FILL동작을 수정합니다. #11697 (Anton Popov). - XDBC bridge와 통신할 때 올바른 타임아웃을 전달하도록 수정합니다. 최근에는 bridge의 생존 여부 확인과 메타 정보 수신 시 타임아웃이 적용되지 않았습니다. #11690 (alexey-milovidov).
- 대소문자 구분 플래그를 사용하는 정규식을 지원하도록 추가합니다. 이 변경으로 #11101과 #11506이 해결됩니다. #11649 (alexey-milovidov).
- String 타입에 대한 블룸 필터(데이터 스키핑 인덱스)를 수정합니다. #11638 (Azat Khuzhin).
- prewhere 조건에서
Nullable컬럼을 사용해 발생하던 드문 크래시를 수정합니다. (아마도 #11572와 연관이 있습니다.) #11608 (Nikolai Kochetov). - exception.code() % 256 = 0인 경우 clickhouse-client의 종료 코드가 잘못되던 문제를 수정합니다. #11601 (filimonov).
- 서버 시작 시 "Mark cache size was lowered" 로그 메시지에 있던 사소한 오류를 수정합니다. 이 변경으로 #11399이 해결됩니다. #11589 (alexey-milovidov).
- 이제 clickhouse-server Docker 컨테이너에서 서버 생존 여부를 확인할 때 IPv6를 우선적으로 사용합니다. #11550 (Ivan Starkov).
- -State 함수와 함께 집계를 수행하는 도중 예외가 던져질 때 발생하던 메모리 누수를 수정합니다. 이 변경으로 #8995가 해결됩니다. #11496 (alexey-milovidov).
- 'FINAL' 수정자와 'ORDER BY' 최적화가 적용된 함수로 기본 키를 감싸서 사용할 때의 동작을 수정합니다. #10715 (Anton Popov).
ClickHouse 릴리스 v20.1.15.109-stable 2020-06-19
버그 수정
ClickHouse 릴리스 v20.1.14.107-stable 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-stable 2020-06-10
버그 수정 사항
min_bytes_to_use_direct_io가 활성화되어 있고 PREWHERE가 활성 상태이며 SAMPLE을 사용하거나 스레드 수가 많은 경우 발생할 수 있는Data compressed with different methods오류를 수정합니다. 이 수정은 #11539를 해결합니다. #11540 (alexey-milovidov).- 코덱의 압축 크기 반환을 수정했습니다. #11448 (Nikolai Kochetov).
- 컬럼에서 리터럴이 아닌 인수를 사용하는 압축 코덱을 사용할 때 발생하던 서버 크래시를 수정했습니다. 관련 이슈: #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).visitParamExtractRaw에서 추출된 JSON 문자열에 짝이 맞지 않는 { 또는 [ 문자가 있을 때의 동작을 수정했습니다. #11318 (Ewout).- ThreadPool에서 매우 드물게 발생하는 경쟁 상태(race condition)를 수정했습니다. #11314 (alexey-milovidov).
- 형변환 과정에서 초기화되지 않은 메모리가 사용될 수 있는 잠재적인 문제를 수정합니다. 예:
SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov). - 기본 키에 Array 컬럼이 있는 테이블에서 해당 컬럼을
empty또는notEmpty함수로 필터링하는 쿼리를 사용할 때 인덱스 분석이 동작하지 않던 문제를 수정합니다. 이 수정으로 #11286이 해결됩니다. #11303 (alexey-milovidov). - 쿼리가
max_network_bandwidth,max_execution_speed또는priority설정에 의해 스로틀링(throttling)되는 경우 쿼리 속도 추정이 올바르지 않을 수 있고,min_execution_speed제한값이 동작하지 않거나 잘못 동작할 수 있는 버그를 수정합니다.timeout_before_checking_execution_speed의 기본값을 0이 아닌 값으로 변경합니다. 기본값이 0이면min_execution_speed및max_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).
ReplicatedMergeTree에서 레플리카가 비활성 상태가 된 후에도 계속 기다리느라OPTIMIZE쿼리의 일부ALTER가 대기 상태로 멈춰 있을 수 있던 버그를 수정했습니다. #10849 (tavplubix).- Block::sortColumns() 호출 후 컬럼 순서를 수정합니다(또한 실제 사용 사례인 Buffer engine에 영향을 미치는지를 보여주는 테스트를 추가합니다). #10826 (Azat Khuzhin).
- 식별자에 대한 인용(quoting)을 사용하지 않도록 요청된 경우 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).- -State와 함께 사용할 때 -OrNull 및 -OrDefault 조합자가 올바르게 동작하도록 수정했습니다. #10741 (hcz).
- 사라지는 Totals 문제를 수정합니다. 쿼리에 조인 또는 서브쿼리가 있고 외부 WHERE 조건이 있는 경우 Totals가 필터링될 수 있었습니다. #10674를 수정합니다. #10698 (Nikolai Kochetov).
- 하나의 쿼리에서 동일한 Set을 사용하는
IN연산자를 여러 번 사용할 때 발생하던 문제를 수정합니다. #10686 (Anton Popov). - AggregateTransform 생성자의 매개변수 순서를 수정합니다. #10667 (palasonic1).
distributed_aggregation_memory_efficient가 활성화된 경우 원격 쿼리가 병렬로 실행되지 않던 문제를 수정합니다. #10655를 해결합니다. #10664 (Nikolai Kochetov).HAVING절이 있는 쿼리(즉, 쿼리를 시작한 서버에서 필터링이 필요한 경우)에 대해, 옵션enable_optimize_predicate_expression=1이 활성화된 분산 쿼리의 프레디케이트(predicate) 최적화를 수정하였습니다. 이를 위해 표현식의 순서를 보존하도록 하였고(이것만으로도 문제가 해결됩니다), 또한 집계기가 인덱스보다 컬럼 이름을 우선 사용하도록 강제하였습니다. 수정: #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 노드와 remote 노드에서 서로 다른 버전의 ClickHouse를 사용하고,
GROUP BY결과 크기가 크며 단일String필드로 집계를 수행하는 경우에 발생합니다. 그 결과 하나의 키에 대해 병합되지 않은 행이 여러 개 결과에 나타날 수 있었습니다. #10952 (alexey-milovidov). - 머지 후에 발생할 수 있었던
SummingMergeTree의LowCardinality(FixedString)키 컬럼 데이터 손상 문제를 수정했습니다. #10489를 해결했습니다. #10721 (Nikolai Kochetov). readonly=2이고cancel_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). - 뮤테이션이 모든 파트를 완료했지만
is_done=0상태에서 멈춰 있던 문제를 수정했습니다. #10526 (alesapin). - UTC로부터 소수 단위 오프셋을 가지는 시간대에서 유닉스 에포크 시작 시점에 발생하던 오버플로를 수정했습니다. 이로써 #9335 이슈가 해결되었습니다. #10513 (alexey-milovidov).
- Distributed 스토리지의 비정상 종료를 수정했습니다. #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). - 원격 쿼리 수행 시
ConcatProcessor에서 발생할 수 있었던Pipeline stuck오류를 수정했습니다. #10381 (Nikolai Kochetov). max_rows_to_group_by와group_by_overflow_mode = 'break'사용 시 발생하던Pipeline stuck오류를 수정했습니다. #10279 (Nikolai Kochetov).- 일부 데이터를 quorum을 사용해 INSERT한 뒤 (DROP PARTITION, TTL 등으로) 삭제하면 INSERT가 멈추거나 SELECT에서 잘못된 예외가 발생하던 여러 버그를 수정했습니다. 이 변경으로 #9946 이슈가 해결되었습니다. #10188 (Nikita Mikhaylov).
- 원격 서버에서 18.12.17 이전 버전을 사용하고 초기 서버에서 더 최신 버전을 사용하며,
GROUP BY에 고정 키와 비고정 키를 함께 사용하고, 2단계 그룹화(two-level group by) 메서드를 활성화했을 때 발생하던 호환성 문제를 수정했습니다. #3254 (alexey-milovidov).
빌드/테스트/패키징 개선
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.'오류 메시지를 출력하던 버그를 수정했습니다. 이제 비결정적 함수(nondeterministic functions)를 검사하는 로직이 람다(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). JOIN및UNION ALL이 포함된 쿼리에서 발생할 수 있는 행 손실 문제를 수정합니다. #9826, #10113를 수정합니다. #10099 (Nikolai Kochetov).- MySQL Database Engine에 대한 인수 검사를 추가하고 식별자 인수를 지원하도록 했습니다. #10077 (Winter Zhang).
- localhost ClickHouse 서버의 딕셔너리 소스에서 발생하는 버그를 수정합니다. 딕셔너리와 소스의 타입이 호환되지 않는 경우 이 버그로 인해 메모리 손상이 발생할 수 있습니다. #10071 (alesapin).
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform오류를 수정했습니다. 이 오류는distributed_aggregation_memory_efficientSETTING이 활성화되어 있고, 분산 쿼리가 서로 다른 세그먼트에서 서로 다른 단계의 집계 데이터(단일 및 2단계 집계가 혼합된)를 읽을 때 발생했습니다. #10063 (Nikolai Kochetov).- 끝에 널 바이트가 포함된 문자열 키에 대해
GROUP BY를 수행할 때 발생할 수 있었던 세그멘테이션 폴트를 수정합니다 (#8636, #8925). #10025 (Alexander Kuzmenkov). - 일부 데이터베이스에 대한 쿼리를 처리하는 단계 중 하나에서 필요한 테이블을 가져오지 못하던 버그를 수정했습니다. #9699를 수정합니다. #9949 (achulkov2).
JOIN이TOTALS와 함께 사용될 때 발생하는'Not found column in block'오류를 수정합니다. #9839를 해결합니다. #9939 (Artem Zuikov).- 서버가 시작될 때
ON CLUSTERDDL 쿼리가 멈춰버리던 버그를 수정했습니다. #9927 (Gagan Arneja). - Join 테이블 엔진의
TRUNCATE동작을 수정했습니다(#9917). #9920 (Amos Bird). - ALTER 쿼리에서 발생하던
'scalar does not exist'오류를 수정했습니다 (#9878). #9904 (Amos Bird). ReplicatedMergeTree에서 drop과 optimize 작업 간의 경쟁 상태(race condition)를 수정했습니다. #9901 (alesapin).ATTACH PART에서DeleteOnDestroy로직을 수정해 ATTACH된 파트가 자동으로 삭제될 수 있던 문제를 해결하고, 몇 가지 테스트를 추가했습니다. #9410 (Vladimir Chebotarev).
빌드/테스트/패키징 개선
- 단위 테스트
collapsing_sorted_stream를 수정했습니다. #9367 (Deleted user).
ClickHouse 릴리스 v20.1.9.54, 2020-03-28
버그 수정
- 분산 테이블에서
SET distributed_product_mode = 'local'이 설정되어 있고PREWHERE및WHERE가 함께 사용되는 경우 발생하던'Different expressions with the same alias'오류를 수정합니다. #9871 (Artem Zuikov). - 복합 기본 키를 가진 테이블에서 뮤테이션이 과도하게 메모리를 소비하던 문제를 수정합니다. 이로써 #9850를 해결합니다. #9860 (alesapin).
INSERT쿼리에 대해, 이제 세그먼트는 예외를 발생시키는 대신 이니시에이터에서 전달된 설정을 세그먼트의 제약 조건에 맞도록 제한합니다. 이 수정으로, 다른 제약 조건을 가진 세그먼트로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). - 함수 인자의 시간대(timezone)가 올바르게 사용되지 않던 몇 가지 경우를 수정합니다. #9574 (Vasily Nemkov).
Improvement
- 단일 스레드에서 단일 정렬된 파트만 읽기 때문에 뮤테이션에서
ORDER BY단계를 제거했습니다. 또한 뮤테이션에서 행의 순서가 정렬 키 순서를 따르며 이 순서가 위반되지 않았는지 확인하는 검사를 추가했습니다. #9886 (alesapin).
빌드/테스트/패키징 개선
ClickHouse 릴리스 v20.1.8.41, 2020년 3월 20일
버그 수정
- 처리되지 않은 예외(
ParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread에서 발생)를 원인으로 지속적으로 발생할 수 있는Cannot schedule a task오류를 수정합니다. 이 수정은 #6833을 해결합니다. #9154 (Azat Khuzhin) ALTER쿼리(뮤테이션)에서 과도한 메모리 사용을 수정합니다. 이 수정은 #9533 및 #9670을 해결합니다. #9754 (alesapin)- 외부 딕셔너리 DDL에서 백쿼트 사용(backquoting)과 관련된 버그를 수정합니다. 이 수정은 #9619을 해결합니다. #9734 (alesapin)
ClickHouse 버전 v20.1.7.38, 2020-03-18
버그 수정
sumKahan및sumWithOverflow에 대한 잘못된 내부 FUNCTION 이름을 수정했습니다. 이 FUNCTION들을 원격 쿼리에서 사용할 때 예외가 발생할 수 있었습니다. #9636 (Azat Khuzhin). 이 문제는 모든 ClickHouse 릴리스에 영향을 주었습니다.- 내부 복제를 사용하는
Distributed테이블에 대해ALTER ON CLUSTER를 허용합니다. 이로써 #3268가 수정되었습니다. #9617 (shinoi2). 이 이슈는 모든 ClickHouse 릴리스에 영향을 주었습니다. MergeTreeRangeReader에서Size of filter does not match size of column및Invalid 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와 같은 단순 순환 별칭을 사용하여 컬럼을 생성하거나 추가할 수 없습니다. #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으로 인해 발생한 복제(replication) 프로토콜의 호환성 문제를 수정합니다. #9412 (alesapin)
- 배열 타입용 bloom_filter 인덱스에서 not(has())가 제대로 동작하지 않던 문제를 수정했습니다. #9407 (achimbab)
match및extract함수에서 haystack의 길이가 0일 때의 동작을 수정했습니다. haystack이 상수인 경우 잘못 동작하고 있었습니다. 이 수정으로 #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov) 을(를) 해결했습니다.
빌드/테스트/패키징 개선
- Windows Subsystem for Linux에서 예외 처리가 이제 올바르게 동작합니다. 자세한 내용은 https://github.com/ClickHouse-Extras/libunwind/pull/3 를 참조하십시오. 이 변경으로 #6480 #9564가 수정되었습니다. (sobolevsv)
ClickHouse 릴리스 v20.1.6.30, 2020-03-05
버그 수정
T64코덱으로 압축된 데이터의 호환성 문제를 수정합니다. #9039 (abyss7)- 단일 스레드에서 MergeTree 테이블을 읽을 때 범위를 처리하는 순서를 수정했습니다. #8964 이슈를 해결합니다. #9050 (CurtizJ)
PREWHERE실행 중MergeTreeRangeReader에서 발생할 수 있던 세그멘테이션 폴트(segfault)를 수정했습니다. 이로써 #9064가 해결되었습니다. #9106 (CurtizJ)reinterpretAsFixedString가String이 아니라FixedString을 반환하도록 수정합니다. #9052 (oandrew)- 널 허용 반환 타입을 사용하는
joinGet을(를) 수정하여 #8919 문제를 해결합니다. #9014 (amosbird) - bitTestAll/bitTestAny 함수의 fuzz 테스트 및 잘못된 동작을 수정합니다. #9143 (alexey-milovidov)
haystack이 0바이트일 때match및extract함수의 동작을 수정합니다.haystack이 상수일 때 동작이 잘못되었습니다. #9160 문제를 수정합니다. #9163 (alexey-milovidov)- 비엄격 단조 함수 인덱스를 사용할 때 역 술어 실행이 잘못되던 문제를 수정했습니다. #9034 수정 #9223 (Akazz)
WHERE절에[NOT] LIKE연산자가 있는 경우CROSS를INNER JOIN으로 다시 작성할 수 있도록 허용합니다. #9191 버그를 수정합니다. #9229 (4ertus2)- Log 엔진을 사용하는 테이블에서 첫 번째 컬럼들을 별칭(alias)으로 사용할 수 있도록 허용합니다. #9231 (abyss7)
IN()절 내부에서 콤마 조인(comma join)을 허용합니다. #7314를 수정합니다. #9251 (4ertus2)ALTER MODIFY/ADD쿼리 동작 방식을 개선합니다. 이제 타입 없이 컬럼을ADD할 수 없으며, 기본값 표현식을MODIFY해도 컬럼 타입은 변경되지 않고, 타입을MODIFY하더라도 기본값 표현식 값은 소실되지 않습니다. #8669을(를) 수정합니다. #9227 (alesapin)- 뮤테이션 완료 처리(finalization)를 수정하여, 이미 완료된 뮤테이션의 상태가 is_done=0으로 남는 문제를 해결했습니다. #9217 (alesapin)
- system.numbers 및 system.numbers_mt에 대해 "Processors" 파이프라인을 지원합니다. 또한
max_execution_time설정이 적용되지 않던 버그를 수정합니다. #7796 (KochetovNicolai) DictCacheKeysRequestedFound메트릭의 잘못된 집계를 수정합니다. #9411 (nikitamikhaylov)ATTACH PARTITION FROM,REPLACE PARTITION,MOVE TO TABLE에서 storage policy(스토리지 정책) 검사를 추가했습니다. 이 검사가 없으면 재시작 후 일부 데이터 파트에 접근할 수 없게 되어 ClickHouse가 시작되지 않을 수 있습니다. #9383 (excitoon)MergeTreeIndexSet에서 UBSan 리포트를 수정했습니다. 이로써 #9250이(가) 해결되었습니다. #9365 (alexey-milovidov)- BlockIO에서 발생할 수 있는 데이터 레이스를 수정했습니다. #9356 (KochetovNicolai)
- JSON 관련 함수에서 Int64에 담을 수 없는
UInt64숫자에 대한 지원을 추가했습니다.SIMDJSON을 master로 업데이트했습니다. 이로써 #9209를 수정했습니다. #9344 (alexey-milovidov) - 데이터 디렉터리가 별도의 디바이스에 마운트된 경우 사용 가능한 공간의 양이 올바르게 계산되지 않는 문제를 수정합니다. 기본 디스크에서는 data 하위 디렉터리의 사용 가능한 공간을 기준으로 계산합니다. 이로써 #7441 문제가 해결됩니다. #9257 (millb)
- TLS 연결이
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.라는 메시지와 함께 실패할 수 있던 문제를 수정합니다. OpenSSL을 업스트림 master 브랜치로 업데이트합니다. #8956 (alexey-milovidov) CREATE쿼리를 실행할 때 스토리지 엔진 인수에 있는 상수 표현식을 접어 처리합니다. 비어 있는 데이터베이스 이름은 현재 데이터베이스 이름으로 대체합니다. #6508, #3492를 수정합니다. 또한 ClickHouseDictionarySource에서 로컬 주소 여부를 검사하는 로직을 수정합니다. #9262 (tabplubix)StorageFile에서 읽는 동안 발생할 수 있던StorageMerge의 segfault를 수정했습니다. #9387 (tabplubix)- suffix를 읽은 이후 커밋하기 전에 예외가 발생하는 드문 상황에서
Kafka데이터가 손실되는 것을 방지합니다. #9378를 수정합니다. 관련 이슈: #7175 #9507 (filimonov) - 잘못된 매개변수로 생성된
Kafka테이블을 사용하거나DROP하려고 할 때 서버가 종료되던 버그를 수정합니다. #9494를 수정합니다. #9507를 포함합니다. #9513 (filimonov)
새로운 기능
- materialized view가 있는 테이블에 대한 idempotent insert의 동작을 제어하기 위한 옵션
deduplicate_blocks_in_dependent_materialized_views를 추가했습니다. 이 새로운 기능은 Altinity의 특별 요청에 따라 버그 수정 릴리스에 포함되었습니다. #9070 (urykhy)
ClickHouse 릴리스 v20.1.2.4, 2020년 1월 22일
하위 호환되지 않는 변경 사항
- 설정
merge_tree_uniform_read_distribution을 더 이상 사용하지 않도록 했습니다. 서버는 여전히 이 설정을 인식하지만 아무 효과도 없습니다. #8308 (alexey-milovidov) - 함수
greatCircleDistance의 반환 타입을Float32로 변경했습니다. 이제 계산 결과가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연산과 일관되도록StorageJoin에 대해 새로운ANY JOIN로직을 추가했습니다. 동작 변경 없이 업그레이드하려면 Engine Join 테이블의 메타데이터에SETTINGS any_join_distinct_right_table_keys = 1을 추가하거나, 업그레이드 후 해당 테이블을 다시 생성해야 합니다. #8400 (Artem Zuikov)- 로깅 설정 변경 사항을 적용하려면 서버 재시작이 필요합니다. 이는 서버가 삭제된 로그 파일에 계속 로깅하는 버그를 피하기 위한 임시 해결책입니다(#8696 참조). #8707 (Alexander Kuzmenkov)
신규 기능
system.merges에 파트 경로 정보가 추가되었습니다. #8043 (Vladimir Chebotarev)ON CLUSTER모드에서SYSTEM RELOAD DICTIONARY쿼리를 실행할 수 있는 기능을 추가했습니다. #8288 (Guillaume Tassery)ON CLUSTER모드에서CREATE DICTIONARY쿼리를 실행할 수 있도록 기능을 추가했습니다. #8163 (alesapin)- 이제
users.xml의 사용자 프로필이 여러 개의 프로필을 상속할 수 있습니다. #8343 (Mikhail f. Shiryaev) system.stack_trace테이블이 추가되어 모든 서버 스레드의 스택 트레이스를 조회할 수 있습니다. 이는 개발자가 서버 상태를 분석하는 데 유용합니다. #7576를 수정합니다. #8344 (alexey-milovidov)- 초 소수점 단위 정밀도를 설정할 수 있는
DateTime64데이터 타입을 추가합니다. #7170 (Vasily Nemkov) - 클러스터의 모든 노드에 대해 쿼리를 실행할 수 있는 테이블 함수
clusterAllReplicas가 추가되었습니다. #8493 (kiran sunkari) - 이산 특성의 정보 값을 계산하는 집계 함수
categoricalInformationValue를 추가했습니다. #8117 (hcz) CSV,TSV,JSONEachRow형식의 데이터 파일을 병렬로 파싱하여 파싱 속도를 높였습니다. #7780 (Alexander Kuzmenkov)- 은행가 반올림(banker's rounding)을 수행하는 FUNCTION
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 t2는t2 ANY RIGHT JOIN t1와 동일하게 동작합니다. #7665 (Artem Zuikov)ANY INNER JOIN에 대해 이전 동작을 활성화할 수 있는 설정any_join_distinct_right_table_keys를 추가합니다. #7665 (Artem Zuikov)- 새로운
SEMI및ANTI JOIN을 추가했습니다. 이전의ANY INNER JOIN동작은 이제SEMI LEFT JOIN으로 사용할 수 있습니다. #7665 (Artem Zuikov) File엔진과file테이블 FUNCTION에Distributed포맷을 추가하여,Distributed테이블에 대한 비동기 insert 작업으로 생성된.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)
- 입출력을 위한
JSONCompactEachRow및JSONCompactEachRowWithNamesAndTypes형식이 추가되었습니다. #7841 (Mikhail Korotov) - 파일 관련 테이블 엔진 및 테이블 함수(
File,S3,URL,HDFS)에서 추가 엔진 매개변수나 파일 확장자에 따라gzip파일을 읽고 쓸 수 있는 기능이 추가되었습니다. #7840 (Andrey Bodrov) randomASCII(length)함수를 추가했습니다. 이 함수는 무작위 ASCII 인쇄 가능 문자로 구성된 문자열을 생성합니다. #8401 (BayoNet)JSON문자열에서 파싱되지 않은 JSON 배열 요소들을 배열로 반환하는JSONExtractArrayRawFUNCTION이 추가되었습니다. #8081 (Oleg Matrokhin)- 같은 길이의 여러 배열을 하나의 튜플의 배열로 결합할 수 있도록 하는
arrayZip함수를 추가했습니다. #8149 (Winter Zhang) - 설정된
TTL표현식에 따라 디스크 간 데이터 이동이 가능하도록 하는 기능을*MergeTree테이블 엔진 계열에 추가합니다. #8140 (Vladimir Chebotarev) - 가중 평균을 계산하는 새 집계 함수
avgWeighted를 추가했습니다. #7898 (Andrey Bodrov) - 이제
TSV,TSKV,CSV,JSONEachRow형식에서 병렬 파싱이 기본으로 활성화되었습니다. #7894 (Nikita Mikhaylov) H3라이브러리의 지오(geo) 함수h3GetResolution,h3EdgeAngle,h3EdgeLength,h3IsValid,h3kRing을 여러 개 추가했습니다. #8034 (Konstantin Malanchev)- 파일 기반 스토리지와 테이블 함수에서 brotli (
br) 압축을 지원하도록 했습니다. 이를 통해 #8156가 해결되었습니다. #8526 (alexey-milovidov) SimpleAggregationFunction타입에groupBit*함수를 추가합니다. #8485 (Guillaume Tassery)
버그 수정
Distributed엔진을 사용하는 테이블 이름 변경 기능을 수정했습니다. 이슈 #7868를 해결했습니다. #8306 (tavplubix)- 이제 dictionary(사전)가 ClickHouse 이외의 SQL 방언에서도 임의의 문자열 속성에 대해
EXPRESSION을 지원합니다. #8098 (alesapin) - 손상되어 있던
INSERT SELECT FROM mysql(...)쿼리를 수정했습니다. 이로써 #8070 및 #7960가 해결되었습니다. #8234 (tavplubix) JSONEachRow에서 기본값Tuple을 삽입할 때 발생하는 「Mismatch column sizes」 오류를 수정했습니다. 이를 통해 #5653 이슈가 해결되었습니다. #8606 (tavplubix)- 이제
WITH TIES를LIMIT BY와 함께 사용할 경우 예외를 발생시키도록 변경했습니다. 또한LIMIT BY와 함께TOP을 사용할 수 있도록 기능을 추가했습니다. 이를 통해 #7472가 해결되었습니다. #7637 (Nikita Mikhaylov) clickhouse-odbc-bridge바이너리에서 최신 glibc 버전에 대한 의도치 않은 의존성을 제거했습니다. #8046 (Amos Bird)*MergeTree엔진 패밀리의 check 함수에서 버그를 수정했습니다. 이제 마지막 granule과 마지막 mark(non-final)에 있는 행 수가 동일하더라도 오류가 발생하지 않습니다. #8047 (alesapin)- 내부 숫자 타입이 테이블에 지정된 타입과 동일한 경우,
ALTER쿼리 이후Enum*컬럼으로의 INSERT를 수정합니다. 이 문제는 #7836을 해결합니다. #7908 (Anton Popov) - 함수
substring에 대해 상수가 아닌 음수 「size」 인수를 허용하도록 수정했습니다. 이는 실수로 허용되지 않았던 동작입니다. 이로써 #4832를 수정했습니다. #7703 (alexey-milovidov) - 잘못된 개수의 인수가
(O|J)DBC테이블 엔진에 전달될 때 발생하던 파싱 버그를 수정했습니다. #7709 (alesapin) - syslog으로 로그를 전송할 때 실행 중인 ClickHouse 프로세스의 명령 이름을 사용하도록 했습니다. 이전 버전에서는 명령 이름 대신 빈 문자열을 사용했습니다. #8460 (Michael Nacharov)
localhost에 대한 허용 호스트 검사 로직을 수정합니다. 이 PR은 #8241에서 제시된 해결책을 바로잡습니다. #8342 (Vitaly Baranov)- 긴 문자열 인수를 사용하는
argMin및argMax함수의 결과를runningAccumulate함수에서 사용할 때 드물게 발생하던 크래시를 수정했습니다. 이로 인해 보고된 #8325 #8341 이(가) 해결되었습니다. (dinosaur) Buffer엔진을 사용하는 테이블에서 발생하는 메모리 오버커밋을 수정합니다. #8345 (Azat Khuzhin)- 인수 중 하나로
NULL을 받을 수 있으면서NULL이 아닌 값을 반환하는 함수들에서 발생할 수 있었던 잠재적인 버그를 수정했습니다. #8196 (alexey-milovidov) - 백그라운드 프로세스를 위한 스레드 풀에서
MergeTree테이블 엔진에 대한 메트릭 계산을 개선했습니다. #8194 (Vladimir Chebotarev) - 행 수준 테이블 필터가 있을 때
WHERE절에서 함수IN의 동작을 수정했습니다. #6687 및 #8357 이슈를 해결했습니다. (Ivan) - 이제 settings 값에 대한 정수 값이 끝까지 완전히 파싱되지 않으면 예외가 발생합니다. #7678 (Mikhail Korotov)
- 두 개보다 많은 로컬 세그먼트를 가진 분산 테이블에 대한 쿼리에서 집계 함수가 사용될 때 발생하던 예외가 발생하던 문제를 수정했습니다. #8164 (小路)
- 이제 블룸 필터가 길이 0의 배열도 처리할 수 있으며, 중복 계산을 수행하지 않습니다. #8242 (achimbab)
- 클라이언트 호스트 허용 여부를 확인할 때
users.xml에 지정된host_regexp와 클라이언트 호스트를 매칭해 검사하도록 수정했습니다. #8241 (Vitaly Baranov) - 여러
JOIN ON절에서 오탐을 발생시키던 모호한 컬럼 검사를 완화했습니다. #8385 (Artem Zuikov) - 서버가
UTF-8유효성 검사가 필요한String데이터 타입의 값을JSON또는XML형식으로 전송하거나 기록하지 못하는 경우, 또는 결과 데이터를 Brotli 알고리즘으로 압축하는 경우, 그 밖의 몇 가지 드문 상황에서 발생할 수 있는 서버 크래시(std::terminate) 문제를 수정했습니다. 이 수정 사항은 #7603 #8384를 해결합니다. (alexey-milovidov) - CI에서 발견된
StorageDistributedDirectoryMonitor의 경쟁 상태(race condition)를 수정했습니다. 이로써 #8364가 해결되었습니다. #8383 (Nikolai Kochetov) - 이제
*MergeTree테이블 엔진 패밀리에서의 백그라운드 머지는 스토리지 정책에서 정의된 볼륨 순서를 보다 정확하게 유지합니다. #8549 (Vladimir Chebotarev) - 이제 테이블 엔진
Kafka가Native포맷에서 올바르게 동작합니다. 이를 통해 #6731 #7337 #8003 이슈가 해결되었습니다. #8016 (filimonov) - 헤더가 있는 포맷(예:
CSVWithNames)에서 테이블 엔진Kafka사용 시 EOF 예외를 발생시키던 문제를 수정했습니다. #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절을 사용하는 쿼리에서 기본 키 조건으로 인해 결과 집합이 비어 있을 때 발생하던Not found column오류를 수정했습니다. #7911 (Nikolai Kochetov) Nullable인자를 사용하는 경우rand및randConstant함수의 반환 타입을 수정했습니다. 이제 이 함수들은 항상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) - push-down predicate 최적화에서 잘못된 결과를 초래하던 복잡한 버그를 수정합니다. 이 수정으로 해당 최적화와 관련된 여러 문제가 해결됩니다. #8503 (Winter Zhang)
CREATE TABLE .. AS dictionary쿼리에서 발생하는 크래시 문제를 수정했습니다. #8508 (Azat Khuzhin).g4파일의 ClickHouse 문법을 여러 가지로 개선했습니다. #8294 (taiyang-li)Join엔진을 사용하는 테이블과JOIN을 수행할 때 비정상 종료가 발생하던 버그를 수정합니다. 다음 이슈들을 수정합니다: #7556 #8254 #7915 #8100. #8298 (Artem Zuikov)CREATE DATABASE시 불필요한 딕셔너리 재로딩 문제를 수정합니다. #7916 (Azat Khuzhin)StorageFile및StorageHDFS에서 읽기 작업 시 사용하는 스트림의 최대 개수를 제한합니다. #7650를 수정합니다. #7981 (alesapin)- 사용자가 기본 표현식과 코덱을 모두 지정한 경우
ALTER ... MODIFY ... CODEC쿼리에서 발생하던 버그를 수정합니다. 8593을(를) 해결합니다. #8614 (alesapin) SimpleAggregateFunction(LowCardinality)타입 컬럼의 백그라운드 머지 작업에서 발생하는 오류를 수정합니다. #8613 (Nikolai Kochetov)toDateTime64함수의 타입 체크를 수정했습니다. #8375 (Vasily Nemkov)- 이제 Join 엔진을 사용하는
LEFT또는FULL JOIN에서 지원되지 않는join_use_nulls설정을 사용하더라도 서버가 충돌하지 않습니다. #8479 (Artem Zuikov) - 이제
DROP DICTIONARY IF EXISTS db.dict쿼리를 실행했을 때db가 존재하지 않더라도 예외가 발생하지 않습니다. #8185 (Vitaly Baranov) - 제거된
IStorage객체에 대한 참조 사용으로 인해 발생할 수 있는 테이블 함수(file,mysql,remote)의 크래시를 수정합니다. 테이블 함수에 데이터 삽입 시 지정된 컬럼의 잘못된 파싱 문제를 수정합니다. #7762 (tavplubix) clickhouse-server를 시작하기 전에 네트워크가 먼저 활성화되도록 보장합니다. 이를 통해 #7507 문제가 해결됩니다. #8570 (Zhichang Yu)- 보안 연결에서 타임아웃이 올바르게 처리되도록 수정하여 쿼리가 무기한 대기 상태에 빠지지 않도록 했습니다. 이 변경으로 #8126이(가) 해결됩니다. #8128 (alexey-milovidov)
- 동시에 실행되는 워커들 사이에서 발생하는
clickhouse-copier의 불필요한 경합 문제를 수정합니다. #7816 (Ding Xiang Fei) - 이제 뮤테이션은 해당 파트의 뮤테이션 버전이 현재 뮤테이션 버전보다 크더라도 첨부된 파트를 건너뛰지 않습니다. #7812 (Zhichang Yu) #8250 (alesapin)
- 다른 디스크로 데이터를 이동한 뒤 서버를 다시 시작해도
*MergeTree데이터 파트의 중복된 복사본을 무시하도록 수정했습니다. #7810 (Vladimir Chebotarev) JOIN키에LowCardinality를 사용할 때 발생하던FULL JOIN크래시를 수정했습니다. #8252 (Artem Zuikov)INSERT INTO tbl (x, y, x)와 같은 INSERT 쿼리에서 컬럼 이름을 하나의 쿼리에 두 번 이상 지정하는 것이 금지됩니다. #5465, #7681를 수정합니다. #7685 (alesapin)- 알 수 없는 CPU에서 물리적 CPU 코어 수를 감지할 수 없는 경우, 논리적 CPU 코어 수를 사용하는 폴백(fallback)을 추가했습니다. 이로써 #5239가 수정되었습니다. #7726 (alexey-milovidov)
- 구체화된 컬럼(materialized column)과 별칭 컬럼(alias column)에서 발생하던
There's no column오류를 수정했습니다. #8210 (Artem Zuikov) EXISTS쿼리를TABLE또는DICTIONARY한정자 없이(예:EXISTS t) 사용했을 때 서버가 비정상 종료되는 문제를 수정했습니다. 이 수정은 #8172를 해결합니다. 이 버그는 버전 19.17에서 도입되었습니다. #8213 (alexey-milovidov)SimpleAggregateFunction컬럼을 사용할 때 드물게 발생할 수 있는"Sizes of columns does not match"오류를 유발하던 버그를 수정합니다. #7790 (Boris Granveaud)allow_databases가 비어 있는 경우 사용자가 모든 데이터베이스에 접근할 수 있었던 버그를 수정했습니다(allow_dictionaries도 동일하게 적용). #7793 (DeifyTheGod)- 서버가 이미 클라이언트와의 연결을 끊은 경우 클라이언트가 비정상 종료되는 문제를 수정합니다. #8071 (Azat Khuzhin)
- 기본 키 접두사와 기본 키가 아닌 접미사로 정렬할 때의
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) - 이제 백그라운드 풀에 사용 가능한 스레드가 충분하지 않으면 서버는
MergeTree에서 파트 뮤테이션 작업을 실행하지 않습니다. #8588 (tavplubix) UNION ALLAST 포맷팅과 관련된 사소한 오타를 수정합니다. #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 DICTIONARY는update_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(MIN 0 MAX N),LIFETIME(N)과 같이 최소 수명(lifetime)이 0인 외부 딕셔너리가 백그라운드에서 갱신되지 않던 버그를 수정했습니다. #7983 (alesapin)- ClickHouse 소스를 사용하는 외부 딕셔너리에서 쿼리에 서브쿼리가 포함된 경우 발생하던 충돌을 수정했습니다. #8351 (Nikolai Kochetov)
- 엔진
URL을 사용하는 테이블에서 파일 확장자가 잘못 파싱되던 문제를 수정합니다. 이를 통해 #8157이 해결됩니다. #8419 (Andrey Bodrov) - 키가 없는
*MergeTree테이블에서도CHECK TABLE쿼리가 올바르게 동작하도록 수정합니다. #7543 문제를 해결합니다. #7979 (alesapin) Float64를 MySQL 타입으로 변환하는 기능을 수정했습니다. #8079 (Yuriy Baranov)- 서버 크래시로 인해 테이블이 완전히 드롭되지 않은 경우, 서버가 이를 복구하여 다시 로드하려고 시도합니다. #8176 (tavplubix)
- 존재하지 않는 파일에 INSERT할 때 테이블 함수
file에서 발생하던 충돌을 수정했습니다. 이제 이러한 경우 해당 파일이 먼저 생성된 후 INSERT가 처리됩니다. #8177 (Olga Khvostikova) trace_log가 활성화된 경우 발생할 수 있는 드문 교착 상태를 수정합니다. #7838 (filimonov)- DDL 쿼리로 생성한
RangeHashed외부 딕셔너리에서Date이외의 타입도 사용할 수 있도록 기능을 추가합니다. 7899를 수정합니다. #8275 (alesapin) now64()가 다른 FUNCTION의 결과를 인자로 받아 호출될 때 발생하던 충돌 문제를 수정합니다. #8270 (Vasily Nemkov)- MySQL wire protocol을 통한 연결에서 클라이언트 IP를 올바르게 감지하지 못하던 버그를 수정했습니다. #7743 (Dmitry Muzyka)
arraySplitFUNCTION에서 빈 배열 처리 방식을 수정합니다. 이로써 #7708 문제가 해결됩니다. #7747 (hcz)- 실행 중인 다른
clickhouse-server의pid-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)ALTER UPDATE/DELETE쿼리를 동기적으로 대기할 수 있도록 하는 설정mutations_sync를 추가했습니다. #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)
FINAL과SAMPLE을 함께 사용할 때(예:select count() from table final sample 1/2) 발생하던Column ... already exists오류를 수정합니다. 관련 이슈: #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함수는Decimal및UUID타입에서도 동작합니다. #5184를 수정했습니다. #7693 (Mikhail Korotov) - 적응형 그레뉼러리티(adaptive granularity)가 도입된 이후 더 이상 필요하지 않게 되어, 시스템 로그에서 고정 인덱스 그레뉼러리티(값은 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 table function 및 table engine에 인증을 추가했습니다. #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,arrayCumSum,arrayCumSumNegative함수에서 Decimal을 지원하도록 했습니다. #7724 (Artem Zuikov)system.dictionaries테이블에lifetime컬럼을 추가했습니다. #6820 #7727 (kekekekule)*MergeTree테이블 엔진에서 서로 다른 디스크에 이미 존재하는 파트에 대한 검사를 개선하였습니다. #7660을(를) 해결합니다. #8440 (Vladimir Chebotarev)S3와의 상호 작용을 위해AWS SDK와 통합하여 모든 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) Kafka엔진에서 다양한 형식의 메시지를 보다 잘 읽을 수 있도록 개선되었습니다 #7935. #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테이블 엔진에서 잘못된 INSERT 배치를 검사하는 기능을 개선했습니다. #7933 (Azat Khuzhin)- 뮤테이션이 앞으로 처리해야 할 파트 이름들의 배열을 저장하는 컬럼을
system.mutations테이블에 추가합니다. #8179 (alesapin) - 프로세서용 병렬 병합 정렬 최적화. #8552 (Nikolai Kochetov)
mark_cache_min_lifetime설정은 이제 더 이상 사용되지 않으며 아무 효과도 없습니다. 이전 버전에서는 mark cache가mark_cache_min_lifetime초 동안의 데이터를 수용하기 위해 메모리에서mark_cache_size보다 크게 증가할 수 있었습니다. 이는 혼란을 초래하고 예상보다 높은 메모리 사용량으로 이어졌으며, 특히 메모리가 제한된 시스템에서 좋지 않았습니다. 이 릴리스를 설치한 이후 성능 저하가 발생한다면mark_cache_size값을 늘리십시오. #8484 (alexey-milovidov)tid를 전역적으로 사용하기 위한 준비 작업입니다. 이는 #7477에 필요합니다. #8276 (alexey-milovidov)
성능 향상
- 프로세서 파이프라인 성능 최적화. #7988 (Nikolai Kochetov)
- 캐시 딕셔너리에서 만료된 키를 비차단 방식으로 갱신하되 이전 값을 계속 읽을 수 있도록 허용합니다. #8303 (Nikita Mikhaylov)
- 전역적으로
-fno-omit-frame-pointer옵션을 사용하지 않고 ClickHouse를 컴파일하여 레지스터를 하나 더 확보합니다. #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) - 음수에 대한
round및roundBankers함수의 처리 방식을 개선합니다. #8229 (hcz) DoubleDelta와Gorilla코덱의 디코딩 성능을 약 30~40% 향상했습니다. 이 변경으로 #7082 이슈가 해결되었습니다. #8019 (Vasily Nemkov)base64관련 함수들의 성능을 개선했습니다. #8444 (alexey-milovidov)geoDistanceFUNCTION을 추가했습니다. 이 FUNCTION은greatCircleDistance와 유사하지만 WGS-84 타원체 모델을 근사한 값을 사용합니다. 두 FUNCTION의 성능은 거의 동일합니다. #8086 (alexey-milovidov)Decimal데이터 타입에서min및max집계 FUNCTION의 성능 향상. #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)std::atexit이 호출되지 않는 경우clickhouse-server에 대한 커버리지 파일 플러시를 추가했습니다. 또한 커버리지 수집이 활성화된 stateless 테스트에서 로깅을 약간 개선했습니다. #8267 (alesapin)- contrib 디렉터리에서 LLVM 라이브러리를 업데이트합니다. OS 패키지에서 제공되는 LLVM은 사용하지 않습니다. #8258 (alexey-milovidov)
- 번들된
curl빌드의 출력이 완전히 억제되도록 했습니다. #8232 #8203 (Pavel Kovalenko) - 일부
MemorySanitizer경고를 수정합니다. #8235 (Alexander Kuzmenkov) CMakeLists.txt에서add_warning및no_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를 사용할 수 없는 경우에도AArch64에서 ClickHouse를 빌드할 수 있습니다. 이 변경으로 #8027 이슈가 해결되었습니다. #8243 (Amos Bird) - MemorySanitizer 관련 문제를 해결하기 위해
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서브모듈에 누락되어 있던 파일들을 추가했습니다. #8507 (alexey-milovidov)- 성능 테스트 출력에서 잘못된
JSON따옴표 처리를 수정합니다. #8497 (Nikolai Kochetov) - 이제
std::exception및Poco::Exception에 대해서도 스택 트레이스가 표시됩니다. 이전 버전에서는DB::Exception에 대해서만 확인할 수 있었습니다. 이를 통해 진단이 개선됩니다. #8501 (alexey-milovidov) - 최신 glibc 버전용
clock_gettime및clock_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테스트를 제거했습니다(2016년에 ZSTD 1.0 이전 버전에서 발생한 버그를 재현하기 위해 생성된 테스트였습니다). 이를 통해 #8618 문제가 수정되었습니다. #8619 (alexey-milovidov) - Mac OS Catalina에서 빌드가 실패하던 문제를 수정했습니다. #8600 (meo)
- 코덱 성능 테스트에서 사용되는 행 수를 늘려 결과 차이가 더 잘 드러나도록 했습니다. #8574 (Vasily Nemkov)
- 디버그 빌드에서
LOGICAL_ERROR예외를 assertion 실패로 간주하여 더 쉽게 발견할 수 있도록 했습니다. #8475 (Alexander Kuzmenkov) - 포맷 관련 성능 테스트가 더 결정론적으로 수행되도록 개선했습니다. #8477 (alexey-milovidov)
- MemorySanitizer 실패를 해결하기 위해
lz4를 업데이트합니다. #8181 (Alexander Kuzmenkov) - 예외 처리에서 발생하는 것으로 알려진 MemorySanitizer의 오탐(false positive)을 억제했습니다. #8182 (Alexander Kuzmenkov)
build/docker/build.sh에서gcc와g++를 버전 9로 업데이트함 #7766 (TLightSky)PREWHERE가WHERE보다 성능이 떨어지는지를 검증하는 성능 테스트 케이스를 추가합니다. #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) .debLinux 배포판에서 기본 비밀번호 파일의 권한을 수정했습니다. #8075 (proller)clickhouse-test에서clickhouse-server의 PID를 가져오는 표현식을 개선했습니다. #8063 (Alexander Kazakov)- contrib/googletest를 v1.10.0으로 업데이트했습니다. #8587 (Alexander Burmak)
base64라이브러리에서 ThreadSanitizer 보고를 수정했습니다. 또한 이 라이브러리를 최신 버전으로 업데이트했지만, 이는 중요하지 않습니다. 이 변경으로 #8397이(가) 해결되었습니다. #8403 (alexey-milovidov)- 프로세서용
00600_replace_running_query를 수정했습니다. #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 coverage 작업에서 coverage 보고서를 저장할 수 있도록 서버를 정상적으로 종료하도록 변경했습니다. 이를 통해 최근 발생하던 불완전한 coverage 보고서 생성 문제가 해결되었습니다. #8142 (alesapin)
- 모든 코덱을 대상으로
Float64및UInt64값에 대한 성능 테스트를 수행했습니다. #8349 (Vasily Nemkov) termcap은 현재 사실상 사용이 중단(deprecated)된 상태이며, 여러 가지 문제(예: "up" cap 누락 및 여러 줄 대신^J를 에코하는 동작)를 일으킵니다.terminfo또는 번들로 제공되는ncurses사용을 권장합니다. #7737 (Amos Bird)test_storage_s3통합 테스트를 수정했습니다. #7734 (Nikolai Kochetov)- 디스크에 실제로 쓰지 않고도 지정된 형식의 파일에 블록을 삽입할 수 있도록
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)
- 프로세서를 사용하는 테스트를 수정합니다. 사소한 성능 개선입니다. #7672 (Nikolai Kochetov)
- contrib/protobuf를 업데이트했습니다. #8256 (Matwey V. Kornilov)
- 새해를 맞아 C++20으로 전환할 준비를 했습니다. 「C++의 힘이 ClickHouse와 함께하길.」 #8447 (Amos Bird)
실험적 기능
- 실험적 설정
min_bytes_to_use_mmap_io를 추가했습니다. 이 설정을 사용하면 커널에서 사용자 공간으로 데이터를 복사하지 않고 대용량 파일을 읽을 수 있습니다. 기본적으로 이 설정은 비활성화되어 있습니다.mmap/munmap이 느리기 때문에 권장 임계값은 약 64MB입니다. #8520 (alexey-milovidov) - 접근 제어 시스템의 일부로 QUOTA를 재설계했습니다. 새 테이블
system.quotas, 새 함수currentQuota,currentQuotaKey, 새 SQL 구문CREATE QUOTA,ALTER QUOTA,DROP QUOTA,SHOW QUOTA를 추가했습니다. #7257 (Vitaly Baranov) - 예외를 발생시키는 대신 경고를 출력하고 알 수 없는 설정을 건너뛸 수 있도록 했습니다. #7653 (Vitaly Baranov)
- 접근 제어 시스템의 일부로 행 정책(row policy)을 재설계했습니다. 새 테이블
system.row_policies, 새 함수currentRowPolicies(), 새 SQL 구문CREATE POLICY,ALTER POLICY,DROP POLICY,SHOW CREATE POLICY,SHOW POLICIES를 추가했습니다. #7808 (Vitaly Baranov)
보안 수정
File테이블 엔진을 사용하는 테이블에서 디렉터리 구조를 읽을 수 있던 문제를 수정했습니다. 이로써 #8536이(가) 해결되었습니다. #8537 (alexey-milovidov)