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

2018년 변경 로그

ClickHouse 18.16 릴리스

ClickHouse 18.16.1 릴리스, 2018-12-21

버그 수정:

  • ODBC 소스를 사용하는 딕셔너리 업데이트 시 문제를 일으키던 오류를 수정했습니다. #3825, #3829
  • 집계 함수의 JIT 컴파일이 이제 LowCardinality 컬럼에서도 동작합니다. #3838

개선사항:

  • low_cardinality_allow_in_native_format 설정이 추가되었습니다(기본적으로 활성화됨). 비활성화된 경우, LowCardinality 컬럼은 SELECT 쿼리에서 일반 컬럼으로 변환되며, INSERT 쿼리에서는 일반 컬럼이 사용되어야 합니다. #3879

빌드 개선 사항:

  • macOS 및 ARM 빌드 관련 문제를 수정했습니다.

ClickHouse 릴리스 18.16.0, 2018-12-14

새로운 기능:

  • 반정형 입력 포맷(JSONEachRow, TSKV)으로 데이터를 로드할 때 누락된 필드에 대해 DEFAULT 표현식이 평가됩니다. 이 기능은 insert_sample_with_metadata 설정으로 활성화할 수 있습니다. #3555
  • 이제 ALTER TABLE 쿼리에 테이블 컬럼을 추가하거나 제거할 때 정렬 키를 변경하기 위한 MODIFY ORDER BY 동작이 추가되었습니다. 이는 병합 시 이 정렬 키를 기반으로 추가 작업을 수행하는 MergeTree 계열 테이블(예: SummingMergeTree, AggregatingMergeTree 등)에 유용합니다. #3581 #3755
  • MergeTree 계열 테이블의 경우, 이제 정렬 키(ORDER BY)와 인덱스(PRIMARY KEY)를 서로 다르게 지정할 수 있습니다. 정렬 키는 인덱스보다 더 길게 지정할 수 있습니다. #3581
  • HDFS로 데이터를 가져오고 내보내기 위한 hdfs 테이블 함수와 HDFS 테이블 엔진이 추가되었습니다. chenxing-xc
  • base64 처리를 위한 함수 base64Encode, base64Decode, tryBase64Decode가 추가되었습니다. Alexander Krasheninnikov
  • 이제 매개변수를 사용해 uniqCombined 집계 함수의 정밀도(HyperLogLog 셀 개수 선택)를 설정할 수 있습니다. #3406
  • ClickHouse에 커밋을 한 모든 사람의 이름을 포함하는 system.contributors 테이블이 추가되었습니다. #3452
  • ALTER TABLE ... FREEZE 쿼리에서 파티션을 생략하여 한 번에 모든 파티션을 백업할 수 있는 기능이 추가되었습니다. #3514
  • 반환 값의 타입을 지정할 필요가 없는 dictGetdictGetOrDefault 함수가 추가되었습니다. 타입은 딕셔너리 정의로부터 자동으로 결정됩니다. Amos Bird
  • 이제 테이블 정의에서 컬럼에 대한 주석을 지정하고, ALTER를 사용해 이를 변경할 수 있습니다. #3377
  • 단순 키를 가진 Join 타입 테이블에 대해 읽기가 지원됩니다. Amos Bird
  • 이제 Join 타입 테이블을 생성할 때 join_use_nulls, max_rows_in_join, max_bytes_in_join, join_overflow_mode 옵션을 지정할 수 있습니다. Amos Bird
  • Join 타입 테이블을 딕셔너리처럼 사용할 수 있게 해 주는 joinGet 함수가 추가되었습니다. Amos Bird
  • 테이블 키 정보를 제공하기 위해 system.tables 테이블에 partition_key, sorting_key, primary_key, sampling_key 컬럼이 추가되었습니다. #3609
  • system.columns 테이블에 is_in_partition_key, is_in_sorting_key, is_in_primary_key, is_in_sampling_key 컬럼이 추가되었습니다. #3609
  • system.parts 테이블에 min_timemax_time 컬럼이 추가되었습니다. 이 컬럼들은 파티셔닝 키가 DateTime 컬럼으로 구성된 표현식일 때 채워집니다. Emmanuel Donin de Rosière

버그 수정 사항:

  • LowCardinality 데이터 타입에 대한 수정 및 성능 개선. LowCardinality(Nullable(...))를 사용하는 GROUP BY. extremes 값 조회. 고차 함수(high-order functions) 처리. LEFT ARRAY JOIN. 분산 GROUP BY. Array를 반환하는 함수들. ORDER BY 실행. Distributed 테이블로의 데이터 쓰기(nicelulu). Native 프로토콜을 구현한 이전 클라이언트에서 오는 INSERT 쿼리에 대한 하위 호환성. JOIN에서의 LowCardinality 지원. 단일 스트림으로 동작할 때의 성능 개선. #3823 #3803 #3799 #3769 #3744 #3681 #3651 #3649 #3641 #3632 #3568 #3523 #3518
  • select_sequential_consistency 옵션의 동작 방식을 수정했습니다. 이전에는 이 설정을 활성화하면, 새로운 파티션에 대한 쓰기를 시작한 이후에 불완전한 결과가 반환되는 경우가 있었습니다. #2863
  • DDL ON CLUSTER 쿼리 및 ALTER UPDATE/DELETE를 실행할 때 데이터베이스가 올바르게 지정되도록 수정되었습니다. #3772 #3460
  • VIEW 내부의 서브쿼리에 대해 데이터베이스가 올바르게 지정되도록 수정했습니다. #3521
  • VersionedCollapsingMergeTree에서 FINAL과 함께 사용하는 PREWHERE의 버그를 수정했습니다. 7167bfd7
  • 이제 테이블 잠금을 기다리느라 아직 시작되지 않은 쿼리를 KILL QUERY로 취소할 수 있습니다. #3517
  • 자정에 시계를 뒤로 돌렸을 때의 날짜와 시간 계산을 수정했습니다(이러한 시계 변경은 이란에서 발생하며, 1981년부터 1983년까지는 모스크바에서도 발생했습니다). 이전에는 이로 인해 시간이 필요 이상으로 하루 이전으로 재설정되었고, 텍스트 형식으로 날짜와 시간을 포맷할 때도 잘못된 결과가 나오는 문제가 있었습니다. #3819
  • VIEW의 일부 경우와 데이터베이스를 생략한 서브쿼리에서 발생하던 버그를 수정했습니다. Winter Zhang
  • 내부 MATERIALIZED VIEW를 잠그지 않아 MATERIALIZED VIEW에서 읽기와 삭제를 동시에 수행할 때 발생할 수 있던 레이스 컨디션을 수정했습니다. #3404 #3694
  • Lock handler cannot be nullptr. 오류를 수정했습니다. #3689
  • compile_expressions 옵션이 활성화된 경우(기본값) 쿼리 처리 방식을 수정했습니다. now 함수와 같은 비결정적 상수 표현식은 더 이상 전개되지 않습니다. #3457
  • toDecimal32/64/128 함수에서 상수가 아닌 scale 인자를 지정했을 때 발생하던 크래시를 수정했습니다.
  • input_format_values_interpret_expressions = 1인 경우, Nullable이 아닌 Array 타입 컬럼에 Values 포맷으로 NULL 요소를 포함한 배열을 삽입하려고 할 때 발생하던 오류를 수정했습니다. #3487 #3503
  • ZooKeeper를 사용할 수 없을 때 DDLWorker에서 발생하던 지속적인 오류 로그 출력을 수정했습니다. 8f50c620
  • DateDateTime 타입 인자를 받는 quantile* 함수들의 반환 타입을 수정했습니다. #3580
  • 식 없이 단순 별칭만 지정하는 WITH 절을 사용할 때 발생하던 문제를 수정했습니다. #3570
  • enable_optimize_predicate_expression가 활성화되어 있을 때 이름이 지정된 서브쿼리와 정규화된 컬럼 이름을 사용하는 쿼리의 처리 문제를 수정했습니다. Winter Zhang
  • materialized view를 사용할 때 발생하던 Attempt to attach to nullptr thread group 오류를 수정했습니다. Marek Vavruša
  • arrayReverse 함수에 일부 잘못된 인수를 전달하면 발생하던 비정상 종료 문제를 수정했습니다. 73e3a7b6
  • extractURLParameter 함수에서 발생하던 버퍼 오버플로를 수정했습니다. 성능을 개선했습니다. 널(0) 바이트를 포함하는 문자열을 올바르게 처리하도록 했습니다. 141e9799
  • lowerUTF8upperUTF8 FUNCTION에서 발생하던 버퍼 오버플로를 수정했습니다. FixedString 타입 인자에 대해 이 FUNCTION들을 실행할 수 없도록 했습니다. #3662
  • MergeTree 테이블을 삭제할 때 드물게 발생하던 경쟁 조건을 수정했습니다. #3680
  • Buffer 테이블에서 읽으면서 대상 테이블에 대해 동시에 ALTER 또는 DROP을 수행할 때 발생할 수 있던 경쟁 상태를 수정했습니다. #3719
  • max_temporary_non_const_columns 제한을 초과했을 때 발생하던 세그멘테이션 폴트가 수정되었습니다. #3788

개선 사항:

  • 서버는 처리된 설정 파일을 /etc/clickhouse-server/ 디렉토리에 쓰지 않습니다. 대신 설정된 path 경로 내부의 preprocessed_configs 디렉토리에 저장합니다. 이는 /etc/clickhouse-server/ 디렉토리에 clickhouse 사용자에 대한 쓰기 권한이 없도록 하여 보안을 향상합니다. #2443
  • min_merge_bytes_to_use_direct_io 옵션의 기본값은 10 GiB로 설정됩니다. MergeTree 계열 테이블에서 큰 파트를 생성하는 머지 작업은 O_DIRECT 모드로 수행되며, 이는 페이지 캐시의 과도한 제거를 방지합니다. #3504
  • 테이블 수가 매우 많을 때 서버 시작이 더 빨라졌습니다. #3398
  • 레플리카 간 연결을 위한 커넥션 풀과 HTTP Keep-Alive 기능을 추가했습니다. #3594
  • 쿼리 구문이 잘못된 경우 HTTP 인터페이스에서 400 Bad Request 코드가 반환됩니다(이전에는 500 코드가 반환되었습니다). 31bc680a
  • join_default_strictness 옵션은 호환성을 위해 기본적으로 ALL로 설정됩니다. 120e2cbe
  • 잘못되었거나 복잡한 정규식에 대해 re2 라이브러리가 stderr로 출력하던 로그를 제거했습니다. #3723
  • Kafka 테이블 엔진에 다음이 추가되었습니다: Kafka에서 읽기를 시작하기 전에 구독 여부를 확인하는 검사와 테이블용 kafka_max_block_size 설정. Marek Vavruša
  • cityHash64, farmHash64, metroHash64, sipHash64, halfMD5, murmurHash2_32, murmurHash2_64, murmurHash3_32, murmurHash3_64 함수들이 이제 인수 개수에 제한 없이, 튜플 형태의 인수에도 사용할 수 있습니다. #3451 #3519
  • arrayReverse FUNCTION이 이제 모든 유형의 배열에서 작동합니다. 73e3a7b6
  • timeSlots FUNCTION의 슬롯 크기를 지정하는 선택적 매개변수를 추가했습니다. Kirill Shvakov
  • FULLRIGHT JOIN의 경우, 오른쪽 테이블의 조인되지 않은 데이터 스트림에는 max_block_size 설정이 사용됩니다. Amos Bird
  • clickhouse-benchmarkclickhouse-performance-test에서 TLS를 활성화하기 위해 --secure 명령줄 매개변수를 추가했습니다. #3688 #3690
  • Buffer 타입 테이블의 구조가 대상 테이블의 구조와 일치하지 않을 때의 타입 변환. Vitaly Baranov
  • 지정된 시간 동안 비활성 상태가 유지된 후 keep-alive 패킷을 전송하도록 하는 tcp_keep_alive_timeout 옵션을 추가했습니다. #3441
  • system.parts 테이블에서 파티션 키가 단일 컬럼으로 구성된 경우, 파티션 키 값에 대한 불필요한 따옴표 지정을 제거했습니다. #3652
  • 나머지(modulo) 함수는 DateDateTime 데이터 유형에서도 지원됩니다. #3385
  • POWER, LN, LCASE, UCASE, REPLACE, LOCATE, SUBSTR, MID 함수에 대한 동의어를 추가했습니다. #3774 #3763 SQL 표준과의 호환성을 위해 일부 함수 이름에서 대소문자를 구분하지 않도록 했습니다. SQL과의 호환성을 위해 문법적 설탕(syntactic sugar)인 SUBSTRING(expr FROM start FOR length)를 추가했습니다. #3804
  • clickhouse-server 실행 파일 코드에 해당하는 메모리 페이지를 mlock하여 메모리에서 강제로 제거되지 않도록 하는 기능을 추가했습니다. 이 기능은 기본적으로 비활성화되어 있습니다. #3553
  • O_DIRECT를 사용해 읽을 때(min_bytes_to_use_direct_io 옵션이 활성화된 경우) 성능이 향상되었습니다. #3405
  • 상수 키 인수와 비상수 기본 인수를 사용하는 경우 dictGet...OrDefault FUNCTION의 성능이 향상되었습니다. Amos Bird
  • firstSignificantSubdomain FUNCTION이 이제 gov, mil, edu 도메인을 처리합니다. Igor Hatarist가 성능을 개선했습니다. #3628
  • /etc/default/clickhouse에서 CLICKHOUSE_PROGRAM_ENV를 정의하여 SYS-V init.d 스크립트를 사용해 clickhouse-server를 시작할 때 사용자 지정 환경 변수를 지정할 수 있습니다. Pavlo Bashynskyi
  • clickhouse-server init 스크립트의 반환 코드를 올바르게 수정했습니다. #3516
  • system.metrics 테이블에 이제 VersionInteger 메트릭이 추가되었고, ClickHouse 버전의 숫자 형식(예: 18016000)을 포함하는 VERSION_INTEGER 항목이 system.build_options에 추가되었습니다. #3644
  • date = 2018-12-17처럼 날짜를 둘러싼 따옴표를 실수로 생략하여 발생할 수 있는 잠재적 오류를 방지하기 위해 Date 타입을 숫자와 비교할 수 있는 기능을 제거했습니다. #3687
  • rowNumberInAllBlocks와 같은 상태 저장 함수(stateful function)의 동작을 수정했습니다. 이전에는 쿼리 분석 단계에서부터 시작하도록 구현되어 있어 의도한 값보다 1만큼 더 큰 결과가 출력되었습니다. Amos Bird
  • force_restore_data 파일을 삭제할 수 없는 경우 오류 메시지가 표시됩니다. Amos Bird

빌드 개선 사항:

  • 잠재적인 메모리 누수를 수정하는 jemalloc 라이브러리를 업데이트했습니다. Amos Bird
  • 빌드 디버깅을 위해 jemalloc 프로파일링을 기본적으로 활성화했습니다. 2cc82f5c
  • 시스템에 Docker만 설치되어 있어도 통합 테스트를 실행할 수 있도록 기능을 추가했습니다. #3650
  • SELECT 쿼리에 fuzz expression 테스트를 추가했습니다. #3442
  • 더 많은 경쟁 상태를 탐지하기 위해 기능 테스트를 병렬 및 임의 순서로 수행하는 커밋용 스트레스 테스트를 추가했습니다. #3438
  • Docker 이미지에서 clickhouse-server를 시작하는 방식을 개선했습니다. Elghazal Ahmed
  • Docker 이미지에서 /docker-entrypoint-initdb.d 디렉터리의 파일을 사용해 데이터베이스를 초기화하는 기능을 추가했습니다. Konstantin Lebedev
  • ARM 아키텍처 빌드 관련 수정 사항을 반영했습니다. #3709

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

  • Date 타입을 숫자와 비교하는 기능이 제거되었습니다. toDate('2018-12-18') = 17883 대신 명시적인 타입 변환인 = toDate(17883)을 사용해야 합니다. #3687

ClickHouse 18.14 릴리스

ClickHouse 릴리스 18.14.19, 2018-12-19

버그 수정:

  • ODBC 소스를 사용하는 딕셔너리 업데이트 시 발생하던 문제를 수정했습니다. #3825, #3829
  • DDL ON CLUSTER 쿼리를 실행할 때 데이터베이스가 올바르게 지정되도록 수정했습니다. #3460
  • max_temporary_non_const_columns 제한을 초과했을 때 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #3788

빌드 개선 사항:

  • ARM 아키텍처에서의 빌드 관련 수정.

ClickHouse 18.14.18 릴리스, 2018-12-04

버그 수정:

  • 사전(dictionary) 타입이 range이고 인수 중 하나는 상수이며 다른 하나는 상수가 아닐 때 dictGet... 함수에서 발생하던 오류를 수정했습니다. #3751
  • 충분히 최신 버전의 Linux 커널에서만 발생하던 netlink: '...': attribute type 1 has an invalid length 메시지가 Linux 커널 로그에 출력되던 오류를 수정했습니다. #3749
  • FixedString 타입 인수에 대해 empty 함수에서 발생하던 세그멘테이션 폴트를 수정했습니다. Daniel, Dao Quang Minh
  • max_query_size 설정값을 크게 지정했을 때 과도한 메모리 할당이 발생하던 문제를 수정했습니다 (max_query_size 바이트 크기의 메모리 청크가 한 번에 미리 할당되던 문제). #3720

빌드 변경 사항:

  • OS 패키지에 포함된 LLVM/Clang 7 버전 라이브러리를 사용할 때 빌드가 실패하던 문제를 수정했습니다(이 라이브러리는 런타임 쿼리 컴파일에 사용됩니다). #3582

ClickHouse 18.14.17 릴리스, 2018-11-30

버그 수정:

  • ODBC bridge 프로세스가 메인 서버 프로세스와 함께 종료되지 않던 문제를 수정했습니다. #3642
  • 원격 테이블의 컬럼 목록과 다른 컬럼 목록을 사용했을 때 Distributed 테이블에 대한 동기 삽입이 올바르게 처리되지 않던 문제를 수정했습니다. #3673
  • MergeTree 테이블을 삭제할 때 크래시를 일으킬 수 있던 드문 경쟁 상태(race condition)를 수정했습니다. #3643
  • Resource temporarily unavailable 오류로 인해 쿼리 스레드 생성에 실패하는 경우 쿼리 교착 상태가 발생하던 문제를 수정했습니다. #3643
  • CREATE AS table 구문을 사용했을 때 ENGINE 절이 AS table보다 앞에 지정된 경우, 지정된 엔진이 무시되던 ENGINE 절 파싱 문제를 수정했습니다. #3692

ClickHouse 릴리스 18.14.15, 2018-11-21

버그 수정:

  • Array(String) 타입의 컬럼을 역직렬화하는 동안 메모리 청크 크기가 과대 계산되어 「Memory limit exceeded」 오류가 발생했습니다. 이 문제는 버전 18.12.13에서 도입되었습니다. #3589

ClickHouse 18.14.14 릴리스, 2018-11-20

버그 수정:

  • 클러스터가 <secure> 플래그로 보안 구성된 경우 ON CLUSTER 쿼리가 올바르게 동작하도록 수정했습니다. #3599

빌드 변경 사항:

  • 문제 해결(시스템 llvm-7, macOS) #3582

ClickHouse 18.14.13 릴리스, 2018-11-08

버그 수정:

  • Block structure mismatch in MergingSorted stream 오류를 수정했습니다. #3162
  • 클러스터 설정에서 보안 연결(<secure> 플래그)이 활성화되어 있을 때 ON CLUSTER 쿼리가 동작하지 않던 문제를 수정했습니다. #3465
  • SAMPLE, PREWHERE 및 별칭 컬럼을 사용하는 쿼리에서 발생하던 오류를 수정했습니다. #3543
  • min_bytes_to_use_direct_io 설정이 활성화되어 있을 때 드물게 발생하던 unknown compression method 오류를 수정했습니다. #3544

성능 개선:

  • AMD EPYC 프로세서에서 실행될 때 UInt16 또는 Date 타입 컬럼으로 GROUP BY를 수행하는 쿼리의 성능 회귀 문제를 수정했습니다. Igor Lapko
  • 긴 문자열을 처리하는 쿼리의 성능 회귀 문제를 수정했습니다. #3530

빌드 개선 사항:

  • Arcadia 빌드를 단순화하기 위한 개선. #3475, #3535

ClickHouse 18.14.12 릴리스, 2018-11-02

버그 수정:

  • 이름이 지정되지 않은 두 서브쿼리를 조인할 때 발생하던 크래시를 수정했습니다. #3505
  • 외부 데이터베이스를 조회할 때 WHERE 절이 비어 있는 잘못된 쿼리가 생성되던 문제를 수정했습니다. hotid
  • ODBC 딕셔너리에서 잘못된 타임아웃 값을 사용하던 문제를 수정했습니다. Marek Vavruša

ClickHouse 18.14.11 릴리스, 2018-10-29

버그 수정:

  • LIMIT를 사용하는 쿼리에서 Block structure mismatch in UNION stream: different number of columns 오류를 수정했습니다. #2156
  • Nested 구조 내부에 배열을 포함하는 테이블에서 데이터를 병합할 때 발생하던 오류를 수정했습니다. #3397
  • merge_tree_uniform_read_distribution 설정이 비활성화된 경우(기본적으로는 활성화됨) 잘못된 쿼리 결과가 반환되던 문제를 수정했습니다. #3429
  • Native 형식의 분산 테이블(Distributed table)에 데이터를 삽입할 때 발생하던 오류를 수정했습니다. #3411

ClickHouse Release 18.14.10, 2018-10-23

  • compile_expressions 설정(표현식의 JIT 컴파일)은 기본값이 비활성화입니다. #3410
  • enable_optimize_predicate_expression 설정의 기본값은 비활성화입니다.

ClickHouse 18.14.9 릴리스, 2018-10-16

New Features:

  • GROUP BYWITH CUBE 수정자를 추가했습니다(대체 문법인 GROUP BY CUBE(...)도 사용할 수 있습니다). #3172
  • formatDateTime 함수를 추가했습니다. Alexandr Krasheninnikov
  • JDBC 테이블 엔진과 jdbc 테이블 함수를 추가했습니다(clickhouse-jdbc-bridge 설치가 필요합니다). Alexandr Krasheninnikov
  • ISO 주 번호를 처리하기 위한 함수 toISOWeek, toISOYear, toStartOfISOYear, toDayOfYear를 추가했습니다. #3146
  • 이제 MySQLODBC 테이블에 Nullable 컬럼을 사용할 수 있습니다. #3362
  • 중첩 데이터 구조를 JSONEachRow 포맷에서 중첩 객체로 읽을 수 있습니다. input_format_import_nested_json 설정을 추가했습니다. Veloman Yunkan
  • 데이터 삽입 시 여러 MATERIALIZED VIEW에 대해 병렬 처리가 가능해졌습니다. parallel_view_processing 설정을 참조하십시오. Marek Vavruša
  • SYSTEM FLUSH LOGS 쿼리를 추가했습니다(query_log와 같은 시스템 테이블로의 로그 강제 플러시). #3321
  • Replicated 테이블을 선언할 때 미리 정의된 databasetable 매크로를 사용할 수 있게 되었습니다. #3251
  • Decimal 타입 값을 공학적 표기법(10의 거듭제곱을 사용해 표시하는 방식)으로 읽을 수 있는 기능을 추가했습니다. #3153

실험적 기능(Experimental Features):

  • LowCardinality data types.에 대한 GROUP BY 절의 최적화. #3138
  • LowCardinality data types.에 대한 표현식 계산 최적화. #3200

개선사항:

  • ORDER BYLIMIT가 있는 쿼리의 메모리 사용량이 크게 감소했습니다. max_bytes_before_remerge_sort 설정을 참고하십시오. #3205
  • JOIN에 대해 LEFT, INNER 등의 유형을 지정하지 않으면 INNER JOIN이 기본값으로 사용됩니다. #3147
  • JOIN이 포함된 쿼리에서 한정자를 가진 별표(*, 예: table.*)가 올바르게 동작합니다. Winter Zhang
  • ODBC 테이블 엔진이 원격 데이터베이스의 SQL 방언에 맞는 식별자 따옴표 처리 방식을 올바르게 선택합니다. Alexandr Krasheninnikov
  • compile_expressions 설정(식의 JIT 컴파일)은 기본적으로 활성화되어 있습니다.
  • 동시에 실행되는 DROP DATABASE/TABLE IF EXISTSCREATE DATABASE/TABLE IF NOT EXISTS 연산의 동작을 수정합니다. 이전에는 CREATE DATABASE ... IF NOT EXISTS 쿼리가 「File ... already exists」라는 오류 메시지를 반환할 수 있었고, CREATE TABLE ... IF NOT EXISTSDROP TABLE IF EXISTS 쿼리가 Table ... is creating or attaching right now라는 메시지를 반환할 수 있었습니다. #3101
  • 오른쪽 항이 상수인 LIKE 및 IN 표현식은 MySQL 또는 ODBC 테이블을 쿼리할 때 원격 서버로 전달됩니다. #3182
  • MySQL 및 ODBC 테이블에서 쿼리할 때 WHERE 절의 상수 표현식과 비교하는 조건이 원격 서버로 전달됩니다. 이전에는 상수와의 비교만 전달되었습니다. #3182
  • Pretty 포맷에서 상형문자가 포함된 문자열의 터미널 행 너비가 올바르게 계산되도록 수정했습니다. Amos Bird.
  • ALTER UPDATE 쿼리에 ON CLUSTER를 지정할 수 있습니다.
  • JSONEachRow 형식의 데이터 읽기 성능이 개선되었습니다. #3332
  • 호환성을 위해 LENGTHCHARACTER_LENGTH 함수의 동의어를 추가했습니다. 이제 CONCAT 함수는 대소문자를 구분하지 않습니다. #3306
  • DateTime 타입에 TIMESTAMP 동의어를 추가했습니다. #3390
  • 서버 로그에는 로그 라인이 쿼리와 관련이 없더라도 항상 query_id를 위한 공간이 예약되어 있습니다. 이는 서드파티 도구로 서버 텍스트 로그를 더 쉽게 파싱할 수 있도록 합니다.
  • 쿼리의 메모리 사용량이 기가바이트 단위에서 다음 정수 수준을 초과하면 로그에 기록됩니다. #3205
  • Native protocol을 사용하는 클라이언트 라이브러리가 실수로 INSERT 쿼리에서 서버가 예상하는 것보다 더 적은 수의 컬럼을 전송하는 경우를 위한 호환성 모드를 추가했습니다. 이 시나리오는 clickhouse-cpp 라이브러리를 사용할 때 발생할 수 있었습니다. 이전에는 이 시나리오로 인해 서버가 비정상 종료되었습니다. #3171
  • clickhouse-copier의 사용자 정의 WHERE 표현식에서 이제 partition_key 별칭(소스 테이블 파티션을 추가로 필터링하기 위한 별칭)을 사용할 수 있습니다. 이는 복사 중에 파티션 구성 방식이 변경되더라도, 그 변경이 조금만 있는 경우에 유용합니다. #3166
  • Kafka 엔진의 동작 흐름을 백그라운드 스레드 풀로 옮겨, 높은 부하 시 데이터 읽기 속도가 자동으로 줄어들도록 했습니다. Marek Vavruša.
  • Cap'n'Proto format에서 struct와 같은 구조체의 TupleNested 값 읽기를 지원합니다. Marek Vavruša
  • firstSignificantSubdomain FUNCTION에 사용되는 최상위 도메인 목록에 이제 biz 도메인이 포함됩니다. decaseal
  • 외부 딕셔너리 구성에서 null_value 는 해당 데이터 타입의 기본값으로 해석됩니다. #3330
  • Decimal에 대한 intDivintDivOrZero 함수 지원. b48402e8
  • sumMap 집계 함수의 키로 Date, DateTime, UUID, Decimal 타입을 사용할 수 있도록 지원합니다. #3281
  • 외부 딕셔너리에서 Decimal 데이터 타입 지원. #3324
  • SummingMergeTree 테이블에서 Decimal 데이터 타입 지원. #3348
  • if에서 UUID 타입에 대한 특수화를 추가했습니다. #3366
  • MergeTree 테이블에서 읽을 때 수행되는 openclose 시스템 콜의 횟수를 줄였습니다. #3283
  • TRUNCATE TABLE 쿼리는 임의의 레플리카에서 실행할 수 있습니다(쿼리는 리더 레플리카로 전달됩니다). Kirill Shvakov

버그 수정 사항:

  • range_hashed 딕셔너리를 사용하는 Dictionary 테이블에서 발생하던 문제를 수정했습니다. 이 오류는 버전 18.12.17에서 발생했습니다. #1702
  • range_hashed 딕셔너리를 로드할 때 발생하던 오류(메시지: Unsupported type Nullable (...))를 수정했습니다. 이 오류는 18.12.17 버전에만 존재했습니다. #3362
  • 서로 가깝게 위치한 많은 수의 꼭짓점을 가진 다각형에서 부정확한 계산이 누적되어 발생하던 pointInPolygon 함수의 오류를 수정했습니다. #3331 #3341
  • 데이터 파트를 병합한 후 생성된 파트의 체크섬이 다른 레플리카에서 동일한 병합 결과의 체크섬과 다를 경우, 병합 결과는 삭제되고 해당 데이터 파트는 다른 레플리카에서 다운로드됩니다(이는 올바른 동작입니다). 그러나 데이터 파트를 다운로드한 이후, 해당 파트가 이미 존재한다는 오류 때문에 작업 집합에 추가할 수 없었습니다(병합 이후 데이터 파트가 약간의 지연을 두고 삭제되었기 때문입니다). 이로 인해 동일한 데이터를 반복적으로 다운로드하려는 순환적인 시도가 발생했습니다. #3194
  • 모든 쿼리의 총 메모리 사용량이 잘못 계산되던 문제를 수정했습니다(잘못된 계산으로 인해 max_memory_usage_for_all_queries 설정이 올바르게 동작하지 않았고 MemoryTracking 메트릭 값이 잘못되었습니다). 이 오류는 버전 18.12.13에서 발생했습니다. Marek Vavruša
  • CREATE TABLE ... ON CLUSTER ... AS SELECT ... 구문의 동작을 수정했습니다. 이 문제는 18.12.13 버전에서 발생했습니다. #3247
  • JOIN이 원격 서버에서만 수행되는 경우, 쿼리를 시작한 서버에서 JOIN을 위한 데이터 구조를 불필요하게 준비하지 않도록 수정했습니다. #3340
  • Kafka 엔진의 버그를 수정했습니다. 데이터 읽기를 시작할 때 예외 발생 후 교착 상태가 발생하던 문제와 완료 시 잠금이 걸리던 문제를 수정했습니다 Marek Vavruša.
  • Kafka 테이블에서 선택적 매개변수인 schema가 전달되지 않는 문제가 있었습니다 (Cap'n'Proto 포맷의 스키마). Vojtech Splichal
  • ZooKeeper 서버 앙상블에 있는 서버들 가운데 일부가 연결은 수락하지만 핸드셰이크에 응답하는 대신 즉시 연결을 종료하는 경우, ClickHouse는 다른 서버에 연결합니다. 이전에는 이로 인해 Cannot read all data. Bytes read: 0. Bytes expected: 4. 오류가 발생하여 ClickHouse 서버를 시작할 수 없었습니다. 8218cf3a
  • ZooKeeper 서버 앙상블에 DNS 쿼리에서 오류가 발생하는 서버가 포함되어 있는 경우, 해당 서버는 무시됩니다. 17b8e209
  • VALUES 형식으로 데이터를 INSERT할 때(input_format_values_interpret_expressions = 1인 경우) DateDateTime 간의 형 변환 동작을 수정했습니다. 이전에는 유닉스 에포크(Epoch) 기준 일 수를 나타내는 숫자 값과 유닉스 타임스탬프 간에 변환이 수행되어 예기치 않은 결과를 초래했습니다. #3229
  • Decimal과 정수 사이의 타입 변환을 수정했습니다. #3211
  • enable_optimize_predicate_expression 설정의 오류를 수정했습니다. Winter Zhang
  • 기본값이 아닌 CSV 구분자(예: ;)를 사용하는 경우, 부동소수점 숫자가 포함된 CSV 형식에서 발생하던 파싱 오류를 수정했습니다. #3155
  • arrayCumSumNonNegative 함수를 수정했습니다(누산기가 0보다 작으면 음수 값을 누적하지 않습니다). Aleksey Studnev
  • PREWHERE를 사용할 때 Distributed 테이블 위에 구성된 Merge 테이블의 동작을 수정했습니다. #3165
  • ALTER UPDATE 쿼리의 버그를 수정했습니다.
  • 버전 18.12에서 발생한 odbc 테이블 FUNCTION의 버그를 수정했습니다. #3197
  • StateArray 조합자를 사용하는 집계 함수의 동작을 수정했습니다. #3188
  • Decimal 값을 0으로 나눌 때 발생하던 충돌을 수정했습니다. 69dd6609
  • Decimal 및 정수 인수를 사용하는 연산에서 결과 타입이 올바르게 출력되도록 수정했습니다. #3224
  • Decimal128에서 GROUP BY 실행 중 발생하던 세그멘테이션 폴트(segmentation fault)를 수정했습니다. 3359ba06
  • log_query_threads 설정(쿼리 실행의 각 스레드에 대한 정보 로깅)은 이제 log_queries 옵션(쿼리에 대한 정보 로깅)이 1로 설정된 경우에만 적용됩니다. log_query_threads 옵션은 기본적으로 활성화되어 있었기 때문에, 이전에는 쿼리 로깅이 비활성화되어 있어도 스레드 정보가 로그로 남았습니다. #3241
  • quantiles 집계 함수의 분산 실행 시 발생하던 오류(오류 메시지: Not found column quantile...)를 수정했습니다. 292a8855
  • 버전 18.12.17 서버와 이전 버전 서버로 구성된 클러스터에서 동시에 작업할 때 발생하던 호환성 문제를 수정했습니다. 고정 길이 및 비고정 길이 GROUP BY 키가 모두 포함된 분산 쿼리에서 집계해야 할 데이터 양이 많을 경우, 반환된 데이터가 항상 완전히 집계되지 않아 서로 다른 두 행에 동일한 집계 키가 포함되는 문제가 있었습니다. #3254
  • 테스트에서 선언된 치환 중 일부만 쿼리에 포함된 경우를 올바르게 처리하도록 clickhouse-performance-test의 치환 처리 방식을 수정했습니다. #3263
  • FINALPREWHERE를 함께 사용할 때 발생하던 오류를 수정했습니다. #3298
  • ALTER로 추가된 컬럼에 대해 PREWHERE를 사용할 때 발생하던 오류를 수정했습니다. #3298
  • DEFAULTMATERIALIZED 표현식에 arrayJoin이 사용되지 않았는지 확인하는 검사를 추가했습니다. 이전에는 데이터를 삽입할 때 arrayJoin으로 인해 오류가 발생했습니다. #3337
  • PREWHERE 절에서 arrayJoin 이 사용되지 않은 경우를 확인하는 검사를 추가했습니다. 이전에는 쿼리를 실행할 때 Size ... does not match 또는 Unknown compression method 와 같은 메시지가 발생했습니다. #3357
  • 동등성 비교의 AND 체인을 해당 IN 표현식으로 대체하는 최적화 이후 드물게 발생할 수 있었던 segfault(세그멘테이션 폴트)를 수정했습니다. liuyimin-bytedance
  • clickhouse-benchmark에 대한 사소한 수정: 이전에는 클라이언트 정보가 서버로 전송되지 않았으나, 이제 종료 시와 반복 횟수 제한 시 실행된 쿼리 수가 보다 정확하게 계산되도록 했습니다. #3351 #3352

하위 호환성이 깨지는 변경 사항:

  • allow_experimental_decimal_type 옵션이 제거되었습니다. 이제 Decimal 데이터 타입을 기본적으로 사용할 수 있습니다. #3329

ClickHouse 릴리스 18.12

ClickHouse 18.12.17 릴리스, 2018-09-16

새로운 기능:

  • 외부 딕셔너리를 업데이트할 필요가 있는지 확인하기 위한 쿼리를 지정할 수 있게 해 주는 invalidate_queryclickhouse 소스에 대해 구현되었습니다. #3126
  • Date 타입과 함께 UInt*, Int*, DateTime 데이터 타입을 범위의 경계를 정의하는 range_hashed 외부 딕셔너리 키로 사용할 수 있는 기능이 추가되었습니다. 이제 NULL을 사용하여 열린 범위를 지정할 수 있습니다. Vasily Nemkov
  • Decimal 타입이 이제 var*, stddev* 집계 함수들을 지원합니다. #3129
  • Decimal 타입이 이제 수학 함수들(exp, sin 등)을 지원합니다. #3129
  • system.part_log 테이블에 partition_id 컬럼이 추가되었습니다. #3089

버그 수정:

  • 이제 Distributed 테이블에서 Merge가 올바르게 동작합니다. Winter Zhang
  • glibc 버전에 대한 불필요한 종속성으로 인해 Ubuntu Precise 및 그 이전 버전에서 ClickHouse를 실행할 수 없었던 호환성 문제가 해결되었습니다. 이 문제는 18.12.13 버전에서 도입되었습니다. #3130
  • enable_optimize_predicate_expression 설정에서 발생하던 오류가 수정되었습니다. Winter Zhang
  • 18.12.13 이전 버전의 레플리카 클러스터로 작업하면서 동시에 더 최신 버전의 서버에서 테이블의 새로운 레플리카를 생성할 때 발생하던, 하위 호환성과 관련된 경미한 문제가 수정되었습니다. 이 문제는 Can not clone replica, because the ... updated to new ClickHouse version라는 메시지로 표시되며, 메시지 자체는 논리적으로 맞지만 실제로는 발생해서는 안 되는 상황이었습니다. #3122

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

  • enable_optimize_predicate_expression 옵션이 기본값으로 활성화되어 있습니다(다소 공격적인 기본값입니다). 컬럼 이름 검색과 관련된 쿼리 분석 오류가 발생하면 enable_optimize_predicate_expression을 0으로 설정하십시오. Winter Zhang

ClickHouse 18.12.14 릴리스, 2018-09-13

새로운 기능:

  • ALTER UPDATE 쿼리 지원을 추가했습니다. #3035
  • 사용자의 DDL 쿼리 실행을 제한하는 allow_ddl 옵션을 추가했습니다. #3104
  • MergeTree 엔진에 대해 병합의 전체 크기에 대한 임계값을 설정할 수 있는 min_merge_bytes_to_use_direct_io 옵션을 추가했습니다(임계값을 초과하면 데이터 파트 파일이 O_DIRECT를 사용해 처리됩니다). #3117
  • 이제 system.merges 시스템 테이블에 partition_id 컬럼이 포함됩니다. #3099

Improvements

  • 데이터 파트가 머테이션 중에 변경되지 않으면 레플리카에서 다운로드되지 않습니다. #3103
  • clickhouse-client 사용 시 설정 이름에 대한 자동 완성 기능이 제공됩니다. #3106

버그 수정:

  • Nested 타입 필드의 요소인 배열을 삽입할 때 배열 크기를 검사하는 기능을 추가했습니다. #3118
  • ODBC 소스와 hashed 스토리지를 사용하는 외부 딕셔너리를 업데이트할 때 발생하던 오류를 수정했습니다. 이 오류는 18.12.13 버전에서 발생했습니다.
  • IN 조건이 있는 쿼리에서 임시 테이블을 생성할 때 발생하던 충돌을 수정했습니다. Winter Zhang
  • NULL 요소를 포함할 수 있는 배열에 대한 집계 함수에서 발생하던 오류를 수정했습니다. Winter Zhang

ClickHouse 릴리스 18.12.13, 2018-09-10

새로운 기능:

  • DECIMAL(digits, scale) 데이터 타입(Decimal32(scale), Decimal64(scale), Decimal128(scale))을 추가했습니다. 이를 활성화하려면 allow_experimental_decimal_type 설정을 사용해야 합니다. #2846 #2970 #3008 #3047
  • GROUP BY용 새로운 WITH ROLLUP 수정자(대체 구문: GROUP BY ROLLUP(...)). #2948
  • JOIN이 포함된 쿼리에서 별표(*) 문자는 SQL 표준에 따라 모든 테이블의 컬럼 목록으로 확장됩니다. 사용자 구성 수준에서 asterisk_left_columns_only를 1로 설정하면 이전 동작으로 되돌릴 수 있습니다. Winter Zhang
  • table function과 함께 사용하는 JOIN 지원이 추가되었습니다. Winter Zhang
  • clickhouse-client에서 Tab 키로 자동 완성이 가능합니다. Sergey Shcherbin
  • clickhouse-client에서 Ctrl+C를 누르면 입력한 쿼리가 취소됩니다. #2877
  • join_default_strictness SETTING(값: ", 'any', 'all')을 추가했습니다. 이제 JOIN에 대해 ANY 또는 ALL을 명시하지 않아도 됩니다. #2982
  • 쿼리 처리와 관련된 서버 로그의 각 행에는 쿼리 ID가 표시됩니다. #2482
  • 이제 clickhouse-client에서 쿼리 실행 로그를 가져올 수 있습니다 (send_logs_level 설정을 사용하십시오). 분산 쿼리 처리 시에는 모든 서버에서 로그가 계층적으로 전파됩니다. #2482
  • system.query_logsystem.processes (SHOW PROCESSLIST) 테이블에는 이제 쿼리를 실행할 때 변경된 모든 설정에 대한 정보(Settings 데이터의 중첩 구조 포함)가 기록됩니다. log_query_settings 설정이 추가되었습니다. #2482
  • system.query_logsystem.processes 테이블에서 이제 쿼리 실행에 참여하는 스레드 수 정보를 확인할 수 있습니다( thread_numbers 컬럼 참조). #2482
  • 네트워크를 통한 읽기 및 쓰기에 소요된 시간, 디스크 입출력(읽기 및 쓰기)에 소요된 시간, 네트워크 오류 횟수, 네트워크 대역폭이 제한될 때의 대기 시간을 측정하는 ProfileEvents 카운터를 추가했습니다. #2482
  • rusage에서 가져온 시스템 메트릭을 포함하는 ProfileEvents 카운터가 추가되었습니다(이를 사용하여 사용자 공간과 커널에서의 CPU 사용량, 페이지 폴트, 컨텍스트 스위치 정보를 얻을 수 있습니다). 또한 taskstats 메트릭도 추가되었습니다(이를 사용하여 I/O 대기 시간, CPU 대기 시간, 페이지 캐시 사용 여부에 따른 읽기 및 기록된 데이터의 양에 대한 정보를 얻을 수 있습니다). #2482
  • ProfileEvents 카운터는 전역적으로뿐만 아니라 각 쿼리와 각 쿼리 실행 스레드에도 적용되므로, 쿼리별 리소스 사용량을 상세하게 프로파일링할 수 있습니다. #2482
  • 각 쿼리 실행 스레드에 대한 정보를 포함하는 system.query_thread_log 테이블을 추가했습니다. 또한 log_query_threads 설정을 추가했습니다. #2482
  • system.metricssystem.events 테이블에 이제 내장 문서가 추가되었습니다. #3016
  • arrayEnumerateDense 함수를 추가했습니다. Amos Bird
  • arrayCumSumNonNegativearrayDifference 함수를 추가했습니다. Aleksey Studnev
  • 집계 FUNCTION인 retention을 추가했습니다. Sundy Li
  • 이제 플러스 연산자(+)를 사용하여 집계 함수의 상태를 서로 더해(병합해) 사용할 수 있으며, 집계 함수의 상태에 음수가 아닌 상수를 곱할 수도 있습니다. #3062 #3034
  • MergeTree 계열 테이블에는 이제 가상 컬럼 _partition_id가 추가되었습니다. #3089

실험적 기능:

  • LowCardinality(T) 데이터 타입을 추가했습니다. 이 데이터 타입은 값들의 로컬 딕셔너리를 자동으로 생성하며, 딕셔너리를 풀어내지 않고도 데이터를 처리할 수 있게 합니다. #2830
  • JIT 컴파일된 함수의 캐시와, 컴파일 전에 사용 횟수를 세는 카운터를 추가했습니다. 식을 JIT 컴파일하려면 compile_expressions 설정을 활성화하십시오. #2990 #3077

개선 사항:

  • 버려진 레플리카가 있을 때 복제 로그가 무한정 누적되던 문제를 수정했습니다. 지연이 길어진 레플리카를 위한 효과적인 복구 모드를 추가했습니다.
  • 여러 개의 집계 필드가 있고 그중 하나는 문자열이며 나머지는 고정 길이 타입인 경우, GROUP BY의 성능이 향상되었습니다.
  • PREWHERE 사용 시와 표현식이 암묵적으로 PREWHERE로 옮겨지는 경우의 성능이 개선되었습니다.
  • 텍스트 형식(CSV, TSV)의 파싱 성능이 개선되었습니다. Amos Bird #2980
  • 바이너리 포맷에서 문자열과 배열을 읽는 성능이 향상되었습니다. Amos Bird
  • 단일 서버에 테이블 수가 매우 많은 경우 system.tablessystem.columns에 대한 쿼리의 성능이 향상되고 메모리 사용량이 줄었습니다. #2953
  • 오류가 발생하는 대량의 쿼리 스트림이 있을 때 발생하던 성능 문제를 수정했습니다(perf top에서 _dl_addr 함수는 보이지만 서버의 CPU 사용량은 높지 않은 경우). #2938
  • enable_optimize_predicate_expression이 활성화된 경우 조건이 뷰(View)로 전파됩니다. Winter Zhang
  • UUID 데이터 타입의 기능이 개선되었습니다. #3074 #2985
  • UUID 데이터 타입이 The-Alchemist 사전에서 지원됩니다. #2822
  • visitParamExtractRaw 함수는 중첩 구조에서도 올바르게 동작합니다. Winter Zhang
  • input_format_skip_unknown_fields 설정이 활성화되면 JSONEachRow 포맷에서 객체 필드가 올바르게 건너뛰어집니다. BlahGeek
  • 조건을 사용하는 CASE 표현식에서 이제 ELSE를 생략할 수 있으며, 이는 ELSE NULL과 동일합니다. #2920
  • ZooKeeper를 사용할 때 작업 타임아웃을 설정할 수 있게 되었습니다. urykhy
  • LIMIT n, m에서 지정하는 오프셋을 LIMIT n OFFSET m 형식으로도 지정할 수 있습니다. #2840
  • LIMIT 절의 대안으로 SELECT TOP n 문법을 사용할 수 있습니다. #2840
  • system 테이블에 기록하는 큐의 크기를 늘려 SystemLog parameter queue is full 오류가 이전보다 덜 자주 발생하도록 했습니다.
  • windowFunnel 집계 FUNCTION이 이제 동시에 여러 조건을 만족하는 이벤트도 지원합니다. Amos Bird
  • 중복된 컬럼은 JOINUSING 절에서 사용할 수 있습니다. #3006
  • Pretty 포맷에서 이제 컬럼 너비 정렬에 제한이 적용됩니다. output_format_pretty_max_column_pad_width 설정을 사용하십시오. 값의 너비가 이보다 크더라도 전체가 그대로 표시되지만, 테이블의 다른 셀이 과도하게 넓어지지는 않습니다. #3003
  • odbc 테이블 함수에서 이제 데이터베이스/스키마 이름을 지정할 수 있습니다. Amos Bird
  • clickhouse-client 설정 파일에 지정된 사용자명을 사용할 수 있는 기능을 추가했습니다. Vladimir Kozbin
  • ZooKeeperExceptions 카운터가 ZooKeeperUserExceptions, ZooKeeperHardwareExceptions, ZooKeeperOtherExceptions 세 개의 카운터로 분리되었습니다.
  • ALTER DELETE 쿼리는 materialized view에서도 사용할 수 있습니다.
  • 매우 많은 수의 ReplicatedMergeTree 테이블이 존재하는 경우 주기적으로 부하가 급증하는 현상을 방지하기 위해, ReplicatedMergeTree 테이블에 대해 주기적으로 실행되는 정리 스레드에 랜덤화를 도입했습니다.
  • ATTACH TABLE ... ON CLUSTER 쿼리 지원이 추가되었습니다. #3025

버그 수정 사항:

  • Dictionary 테이블에서 Size of offsets does not match size of column 또는 Unknown compression method 예외를 던지던 문제를 수정했습니다. 이 버그는 18.10.3 버전에서 처음 도입되었습니다. #2913
  • CollapsingMergeTree 테이블을 병합할 때 데이터 파트 중 하나가 비어 있고(모든 데이터가 삭제된 경우 병합 또는 ALTER DELETE 과정에서 이러한 파트가 생성됨), 병합에 vertical 알고리즘을 사용한 경우 발생하던 버그를 수정했습니다. #3049
  • SELECT가 동시에 수행되는 Memory 테이블에서 DROP 또는 TRUNCATE 작업 중 발생하던 경쟁 상태를 수정하여 서버가 크래시될 수 있던 문제를 해결했습니다. 이 버그는 버전 1.1.54388에서 도입되었습니다. #3038
  • Session is expired 오류가 반환될 때 Replicated 테이블에 데이터를 삽입할 경우 발생할 수 있는 데이터 손실 문제를 수정했습니다 (데이터 손실은 ReplicatedDataLoss 메트릭(metric)으로 감지할 수 있습니다). 이 오류는 버전 1.1.54378에서 발생했습니다. #2939 #2949 #2964
  • JOIN ... ON 수행 중 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #3000
  • WHERE table.column과 같이 WHERE 표현식이 완전히 정규화된 컬럼 이름 하나로만 구성될 때, 컬럼 이름을 검색하는 과정에서 발생하던 오류를 수정했습니다. #2994
  • 원격 서버에서 서브쿼리가 포함된 IN 표현식으로 구성된 단일 컬럼을 요청하는 경우 분산 쿼리를 실행할 때 발생하던 「Not found column」 오류를 수정했습니다. #3087
  • 세그먼트 중 하나는 로컬이고 다른 하나는 로컬이 아니며 PREWHERE로 이동하는 최적화가 트리거될 때 분산 쿼리에서 발생하던 Block structure mismatch in UNION stream: different number of columns 오류를 수정했습니다. #2226 #3037 #3055 #3065 #3073 #3090 #3093
  • 일부 비볼록 다각형에서 pointInPolygon 함수가 올바르게 동작하도록 수정했습니다. #2910
  • nan과 정수를 비교할 때 잘못된 결과가 나오는 문제를 수정했습니다. #3024
  • zlib-ng 라이브러리의 오류를 수정하여 드물게 segmentation fault(segfault)가 발생하던 문제를 해결했습니다. #2854
  • AggregateFunction 컬럼이 있는 테이블에 데이터를 삽입할 때, 집계 함수의 상태가 단순하지 않아(별도로 메모리를 할당하는 경우) 단일 삽입 요청이 여러 개의 작은 블록으로 나뉘는 경우 발생하던 메모리 누수를 수정했습니다. #3084
  • 동일한 Buffer 또는 MergeTree 테이블을 동시에 생성 및 삭제하는 과정에서 발생할 수 있던 경쟁 상태를 수정했습니다.
  • 특정 비단순 타입(예: tuple)으로 이루어진 tuple을 비교할 때 발생할 수 있던 segfault 문제를 수정했습니다. #2989
  • 특정 ON CLUSTER 쿼리를 실행할 때 세그멘테이션 폴트가 발생할 수 있는 문제를 수정했습니다. Winter Zhang
  • Nullable 배열 요소를 사용하는 arrayDistinct 함수에서 발생하던 오류를 수정했습니다. #2845 #2937
  • enable_optimize_predicate_expression 옵션이 이제 SELECT *가 포함된 경우를 올바르게 지원합니다. Winter Zhang
  • ZooKeeper 세션을 재초기화할 때 발생하던 세그멘테이션 폴트(segfault)를 수정했습니다. #2917
  • ZooKeeper 작업 시 발생할 수 있던 잠재적 블로킹 문제를 수정했습니다.
  • SummingMergeTree에서 중첩 데이터 구조를 추가하는 코드의 오류를 수정했습니다.
  • 집계 함수 상태에 메모리를 할당할 때 정렬(alignment)이 올바르게 고려되도록 수정되어, 집계 함수 상태를 구현할 때 정렬이 필요한 연산을 사용할 수 있게 되었습니다. chenxing-xc

보안 수정:

  • ODBC 데이터 소스를 보다 안전하게 사용할 수 있도록 개선했습니다. ODBC 드라이버와의 상호작용은 별도의 clickhouse-odbc-bridge 프로세스를 사용합니다. 서드파티 ODBC 드라이버의 오류로 인해 더 이상 서버 안정성 문제나 취약성이 발생하지 않습니다. #2828 #2879 #2886 #2893 #2921
  • catBoostPool 테이블 함수에서 파일 경로 검증이 올바르지 않던 문제를 수정했습니다. #2894
  • 시스템 테이블(tables, databases, parts, columns, parts_columns, merges, mutations, replicas, replication_queue)의 내용이 데이터베이스에 대한 사용자의 설정된 접근 권한(allow_databases)에 따라 필터링되도록 했습니다. Winter Zhang

하위 호환성 변경 사항(Backward Incompatible Changes):

  • JOIN이 포함된 쿼리에서 별표 문자는 SQL 표준에 따라 모든 테이블의 컬럼 목록으로 확장됩니다. 사용자 설정 수준에서 asterisk_left_columns_only를 1로 설정하면 이전 동작을 복원할 수 있습니다.

빌드 변경 사항:

  • 대부분의 통합 테스트를 이제 커밋 단위로 실행할 수 있습니다.
  • 코드 스타일 검사도 커밋 단위로 실행할 수 있습니다.
  • CentOS7/Fedora에서 빌드할 때 memcpy 구현이 올바르게 선택됩니다. Etienne Champetier
  • clang을 사용해 빌드할 때, 일반적인 -Wall-Wextra -Werror에 더해 -Weverything에서 일부 경고가 추가되었습니다. #2957
  • 빌드를 디버깅할 때 jemalloc 디버그 옵션을 사용합니다.
  • ZooKeeper와 상호 작용하기 위한 라이브러리의 인터페이스가 추상 인터페이스로 선언되었습니다. #2950

ClickHouse 릴리스 18.10

ClickHouse 릴리스 18.10.3, 2018-08-13

새로운 기능:

  • 복제에 HTTPS를 사용할 수 있게 되었습니다. #2760
  • 기존 murmurHash2_32에 더해 murmurHash2_64, murmurHash3_32, murmurHash3_64, murmurHash3_128 함수가 추가되었습니다. #2791
  • ClickHouse ODBC 드라이버(ODBCDriver2 출력 형식)에서 널 허용(Nullable) 타입을 지원합니다. #2834
  • 키 컬럼에서 UUID 타입을 지원합니다.

개선사항:

  • 설정 파일에서 삭제되면 서버를 재시작하지 않고 클러스터를 제거할 수 있습니다. #2777
  • 설정 파일에서 제거되면 서버를 재시작하지 않고 외부 딕셔너리를 제거할 수 있습니다. #2779
  • Kafka 테이블 엔진에 SETTINGS 지원이 추가되었습니다. Alexander Marshalov
  • UUID 데이터 타입에 대한 개선이 이루어졌습니다(아직 완료되지 않음). #2618
  • SummingMergeTree, CollapsingMergeTree, VersionedCollapsingMergeTree 엔진에서 머지 후 생성되는 비어 있는 파트에 대한 지원이 추가되었습니다. #2815
  • 완료된 뮤테이션의 오래된 레코드가 삭제됩니다(ALTER DELETE). #2784
  • system.merge_tree_settings 테이블이 추가되었습니다. Kirill Shvakov
  • 이제 system.tables 테이블에 종속성을 나타내는 컬럼 dependencies_database, dependencies_table이 추가되었습니다. Winter Zhang
  • max_partition_size_to_drop 설정 옵션이 추가되었습니다. #2782
  • output_format_json_escape_forward_slashes 옵션이 추가되었습니다. Alexander Bocharov
  • max_fetch_partition_retries_count 설정이 추가되었습니다. #2831
  • 로컬 레플리카 선호를 비활성화하고 프로세스 간 상호 작용 없이 로컬 레플리카에 접근할 수 있도록 하는 prefer_localhost_replica 설정이 추가되었습니다. #2832
  • 집계 대상인 Float32 또는 Float64 Set이 비어 있는 경우, quantileExact 집계 함수가 nan을 반환합니다. Sundy Li

버그 수정:

  • ODBC용 연결 문자열 매개변수에 대해 불필요한 이스케이프 처리를 제거했습니다. 이로 인해 연결을 설정할 수 없었습니다. 이 오류는 18.6.0 버전에서 발생했습니다.
  • 복제 큐에서 REPLACE PARTITION 명령을 처리하는 로직을 수정했습니다. 동일한 파티션에 대해 두 개의 REPLACE 명령이 있는 경우, 잘못된 로직으로 인해 그중 하나가 복제 큐에 남아 실행되지 않을 수 있었습니다. #2814
  • 모든 데이터 파트가 비어 있는 경우(모든 데이터가 삭제된 ALTER DELETE 또는 머지 작업에서 생성된 파트)에 발생하던 머지 버그를 수정했습니다. 이 버그는 18.1.0 버전에서 나타났습니다. #2930
  • 동시 Set 또는 Join 실행 시 발생하던 오류를 수정했습니다. Amos Bird
  • 하나의 SELECT 쿼리에 중복 컬럼 이름이 포함된 경우, 서브쿼리 내부의 UNION ALL 쿼리에서 발생하던 Block structure mismatch in UNION stream: different number of columns 오류를 수정했습니다. Winter Zhang
  • MySQL 서버에 연결하는 과정에서 예외가 발생했을 때 발생하던 메모리 누수를 수정했습니다.
  • 쿼리 오류가 발생한 경우 clickhouse-client 응답 코드가 잘못 반환되던 문제를 수정했습니다.
  • DISTINCT를 포함하는 구체화된 뷰(Materialized View)의 잘못된 동작을 수정했습니다. #2795

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

  • 분산 테이블에 대한 CHECK TABLE 쿼리 지원이 제거되었습니다.

빌드 변경 사항:

  • 메모리 할당자(allocator)가 교체되었습니다. 이제 tcmalloc 대신 jemalloc을 사용합니다. 일부 시나리오에서는 속도가 최대 20%까지 향상됩니다. 그러나 최대 20%까지 느려진 쿼리도 있습니다. 일부 시나리오에서는 메모리 사용량이 약 10% 감소하고 안정성이 향상되었습니다. 부하가 매우 높은 경우에는 사용자 공간과 시스템에서의 CPU 사용량이 소폭 증가하는 정도입니다. #2773
  • 서브모듈에서 libressl을 사용합니다. #1983 #2807
  • 서브모듈에서 unixodbc를 사용합니다. #2789
  • 서브모듈에서 mariadb-connector-c를 사용합니다. #2785
  • 테스트 데이터의 사용 가능 여부에 따라 실행할 수 있는 기능 테스트 파일을 저장소에 추가했습니다(현재는 테스트 데이터 자체는 포함하지 않음).

ClickHouse 18.6 릴리스

ClickHouse 릴리스 18.6.0, 2018-08-02

새로운 기능:

  • JOIN ON 구문에서 ON 표현식을 지원하도록 기능이 추가되었습니다: JOIN ON Expr([table.]column ...) = Expr([table.]column, ...) [AND Expr([table.]column, ...) = Expr([table.]column, ...) ...] 이 표현식은 AND 연산자로 연결된 등식들의 체인이어야 합니다. 등식의 양쪽은 각 테이블 중 하나의 컬럼을 사용하는 임의의 표현식이 될 수 있습니다. 오른쪽 테이블에 대해서는 완전 한정 컬럼 이름(table.name, database.table.name, table_alias.name, subquery_alias.name) 사용을 지원합니다. #2742
  • 복제에 HTTPS를 사용할 수 있게 되었습니다. #2760

개선 내용:

  • 서버가 자신의 버전 중 패치 구성 요소를 클라이언트에 전달합니다. 패치 버전 구성 요소에 대한 데이터는 system.processesquery_log에 저장됩니다. #2646

ClickHouse 릴리스 18.5

ClickHouse 18.5.1 릴리스, 2018-07-31

새로운 기능:

  • 해시 함수 murmurHash2_32가 추가되었습니다. #2756.

개선 사항:

  • 이제 from_env #2741 속성을 사용하여 환경 변수에서 설정 파일의 값을 지정할 수 있습니다.
  • coalesce, ifNull, nullIf 함수의 대소문자 구분이 없는 버전을 추가했습니다 #2752.

버그 수정:

  • 레플리카를 시작할 때 발생할 수 있는 잠재적인 버그를 수정했습니다. #2759

ClickHouse 릴리스 18.4

ClickHouse 릴리스 18.4.0, 2018년 7월 28일

새로운 기능:

  • 시스템 테이블 formats, data_type_families, aggregate_function_combinators, table_functions, table_engines, collations가 추가되었습니다 #2721.
  • remote 또는 cluster table function의 인수로 테이블 대신 테이블 함수(table function)를 사용할 수 있는 기능이 추가되었습니다 #2708.
  • 복제(replication) 프로토콜에서 HTTP Basic 인증을 지원합니다 #2727.
  • 이제 has 함수로 Enum 값 배열에서 숫자 값을 검색할 수 있습니다 Maxim Khrisanfov.
  • Kafka에서 읽을 때 임의의 메시지 구분자를 추가로 설정하는 기능을 지원합니다 Amos Bird.

Improvements:

  • ALTER TABLE t DELETE WHERE 쿼리는 WHERE 조건의 영향을 받지 않은 데이터 파트를 재작성하지 않습니다 #2694.
  • ReplicatedMergeTree 테이블에 대한 use_minimalistic_checksums_in_zookeeper 옵션이 기본값으로 활성화됩니다. 이 설정은 1.1.54378 버전(2018-04-16)에 추가되었습니다. 1.1.54378보다 이전 버전은 더 이상 설치할 수 없습니다.
  • ON CLUSTER를 지정하는 KILLOPTIMIZE 쿼리 실행을 지원합니다 Winter Zhang.

버그 수정:

  • IN 표현식을 사용하는 집계에서 발생하던 Column ... is not under an aggregate function and not in GROUP BY 오류를 수정했습니다. 이 버그는 버전 18.1.0에서 발생했습니다. (bbdd780b)
  • windowFunnel 집계 함수에서 발생하던 버그를 수정했습니다. Winter Zhang
  • anyHeavy 집계 함수의 버그를 수정했습니다. (a2101df2)
  • countArray() 집계 함수를 사용할 때 서버가 충돌(crash)하는 문제를 수정했습니다.

이전 버전과의 호환이 깨지는 변경 사항:

  • Kafka 엔진의 매개변수가 Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_schema, kafka_num_consumers])에서 Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_row_delimiter, kafka_schema, kafka_num_consumers])로 변경되었습니다. 테이블에서 kafka_schema 또는 kafka_num_consumers 매개변수를 사용하고 있다면, 메타데이터 파일 path/metadata/database/table.sql을 수동으로 편집하여 kafka_row_delimiter 매개변수를 값 ''로 설정하여 추가해야 합니다.

ClickHouse 18.1 릴리스

ClickHouse 릴리스 18.1.0, 2018-07-23

새로운 기능:

  • 비복제 MergeTree 테이블에 대해 ALTER TABLE t DELETE WHERE 쿼리를 지원합니다(#2634).
  • uniq* 계열 집계 함수에서 임의의 타입을 지원합니다(#2010).
  • 비교 연산자에서 임의의 타입을 지원합니다(#2026).
  • users.xml 파일에서 10.0.0.1/255.255.255.0 형식으로 서브넷 마스크를 설정할 수 있습니다. 이는 중간에 0이 포함된 IPv6 네트워크에서도 마스크를 사용하기 위해 필요합니다(#2637).
  • arrayDistinct 함수를 추가했습니다(#2670).
  • SummingMergeTree 엔진이 이제 AggregateFunction 타입의 컬럼과 함께 동작할 수 있습니다(Constantin S. Pan).

Improvements:

  • 릴리스 버전 번호 체계를 변경했습니다. 이제 첫 번째 부분에는 릴리스 연도(서력 기준, 모스크바 시간대 기준, 2000년을 뺀 값)가 포함되며, 두 번째 부분에는 주요 변경 사항의 번호(대부분의 릴리스에서 증가하는 값)가 포함되고, 세 번째 부분은 패치 버전입니다. 별도로 변경 로그에서 명시하지 않는 한, 릴리스 간의 하위 호환성은 계속 유지됩니다.
  • 부동 소수점 숫자를 문자열로 변환하는 속도를 향상했습니다(Amos Bird).
  • 파싱 오류로 인해 INSERT 중 일부 행이 건너뛰어진 경우(input_allow_errors_numinput_allow_errors_ratio 설정이 활성화된 경우 발생 가능), 이제 건너뛴 행의 개수가 서버 로그에 기록됩니다(Leonardo Cecchi).

버그 수정:

  • 임시 테이블에 대한 TRUNCATE 명령을 수정했습니다. (Amos Bird).
  • 응답을 읽는 동안 네트워크 오류가 발생했을 때 ZooKeeper 클라이언트 라이브러리에서 드물게 발생하던 데드락을 수정했습니다. (c315200).
  • 널 허용(Nullable) 타입으로 CAST하는 동안 발생하던 오류를 수정했습니다. (#1322).
  • 구간 경계가 일치할 때 maxIntersection() 함수의 결과가 잘못되던 문제를 수정했습니다. (Michael Furmur).
  • 함수 인자에서 OR 표현식 체인이 잘못 변환되던 문제를 수정했습니다. (chenxing-xc).
  • 다른 서브쿼리 내부에 IN (subquery) 표현식을 포함하는 쿼리에서 성능 저하가 발생하던 문제를 수정했습니다. (#2571).
  • 대문자로 작성되지 않은 CAST 함수를 사용하는 분산 쿼리에서 서로 다른 버전의 서버 간에 발생하던 비호환 문제를 수정했습니다. (fe8c4d6).
  • 외부 DBMS에 대한 쿼리에서 식별자를 따옴표로 감싸지 않던 문제를 수정했습니다. (#2635).

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

  • 숫자 0을 포함한 문자열은 DateTime으로 변환되지 않습니다. 예: SELECT toDateTime('0'). 이로 인해 테이블에서 DateTime DEFAULT '0'가 작동하지 않으며, 딕셔너리에서 <null_value>0</null_value> 또한 작동하지 않습니다. 해결 방법: 00000-00-00 00:00:00으로 대체합니다.

ClickHouse 1.1 릴리스

ClickHouse 릴리스 1.1.54394, 2018-07-12

새로운 기능:

  • histogram 집계 함수가 추가되었습니다 (Mikhail Surin).
  • 이제 ReplicatedMergeTree에서 파티션을 지정하지 않고도 OPTIMIZE TABLE ... FINAL을 사용할 수 있습니다 (Amos Bird).

버그 수정:

  • 네트워크 또는 디스크에 부하가 있는 경우 더 큰 파트를 다운로드할 수 없게 만들던, 복제된 데이터를 전송 및 다운로드할 때 읽기와 쓰기를 위한 소켓 타임아웃이 매우 짧게(1초) 설정되어 있었던 문제를 수정했습니다. 이로 인해 파트를 다운로드하려는 시도가 계속 반복되는 문제가 있었습니다. 이 오류는 버전 1.1.54388에서 발생했습니다.
  • 테이블에 중복된 데이터 블록을 삽입했을 때 ZooKeeper에서 chroot를 사용할 경우 발생하던 문제를 수정했습니다.
  • 이제 has 함수가 Nullable 요소를 가진 배열에 대해 올바르게 동작합니다(#2115).
  • 이제 system.tables 테이블이 분산 쿼리에서 올바르게 동작합니다. metadata_modification_timeengine_full 컬럼이 이제 가상 컬럼이 아닌 실제 컬럼이 되었습니다. 테이블에서 이 컬럼들만 조회했을 때 발생하던 오류를 수정했습니다.
  • 빈 데이터 블록을 삽입한 후 빈 TinyLog 테이블이 동작하는 방식을 수정했습니다(#2563).
  • ZooKeeper의 노드 값이 NULL인 경우에도 system.zookeeper 테이블이 정상적으로 동작합니다.

ClickHouse 릴리스 1.1.54390, 2018-07-06

새로운 기능:

  • 쿼리를 multipart/form-data 형식의 query 필드에 포함해 전송할 수 있습니다. 이는 쿼리 처리를 위해 외부 데이터도 함께 전송할 때 유용합니다(Olga Hvostikova).
  • CSV 형식 데이터를 읽을 때 작은따옴표와 큰따옴표 처리를 활성화하거나 비활성화할 수 있는 기능이 추가되었습니다. 이는 format_csv_allow_single_quotesformat_csv_allow_double_quotes 설정에서 구성할 수 있습니다(Amos Bird).
  • 이제 비복제(non-replicated) MergeTree 변형에서 OPTIMIZE TABLE ... FINAL을 사용할 때 파티션을 지정하지 않고도 사용할 수 있습니다(Amos Bird).

Improvements:

  • IN 연산자를 사용할 때 테이블 인덱스를 활용할 수 있는 경우 성능을 개선하고, 메모리 사용량을 줄였으며, 메모리 사용량 추적이 올바르게 되도록 했습니다(#2584).
  • 데이터 파트를 추가할 때 중복되는 체크섬 검사 과정을 제거했습니다. 레플리카 수가 매우 많은 경우 전체 검사 횟이가 N^2에 달했기 때문에 중요합니다.
  • arrayEnumerateUniq 함수에서 Array(Tuple(...)) 인자를 지원하도록 추가했습니다(#2573).
  • runningDifference 함수에 Nullable 지원을 추가했습니다(#2594).
  • 표현식 개수가 매우 많은 경우 쿼리 분석 성능을 개선했습니다(#2572).
  • ReplicatedMergeTree 테이블에서 머지를 위한 데이터 파트 선택을 더 빠르게 했습니다. ZooKeeper 세션 복구 속도도 향상되었습니다(#2597).
  • MergeTree 테이블의 format_version.txt 파일이 없으면 다시 생성하도록 했습니다. 이는 파일 없이 디렉터리 구조만 복사한 후 ClickHouse를 실행하는 경우에 의미가 있습니다(Ciprian Hacman).

버그 수정:

  • ZooKeeper 사용 시 발생하던 버그를 수정하여, 서버를 재시작하기 전의 테이블 세션 및 읽기 전용(readonly) 상태를 복구할 수 없게 만들던 문제를 해결했습니다.
  • ZooKeeper 사용 시 세션이 끊어지는 경우 오래된 노드가 삭제되지 않을 수 있던 버그를 수정했습니다.
  • Float 인자를 받는 quantileTDigest 함수의 오류를 수정했습니다(이 버그는 버전 1.1.54388에서 도입되었습니다) (Mikhail Surin).
  • MergeTree 테이블에서, 기본 키 컬럼이 동일한 크기의 부호 있는 정수와 부호 없는 정수 사이의 형 변환 함수 내부에 위치한 경우 인덱스에서 발생하던 버그를 수정했습니다 (#2603).
  • macros를 사용하지만 설정 파일에 정의되어 있지 않을 때 발생하던 segfault를 수정했습니다 (#2570).
  • 클라이언트를 다시 연결할 때 기본 데이터베이스로 올바르게 전환되지 않던 문제를 수정했습니다 (#2583).
  • use_index_for_in_with_subqueries 설정이 비활성화된 경우에 발생하던 버그를 수정했습니다.

보안 수정:

  • MySQL에 연결되어 있는 경우 파일을 전송하는 기능을 더 이상 사용할 수 없습니다 (LOAD DATA LOCAL INFILE).

ClickHouse 1.1.54388 릴리스, 2018년 6월 28일

New Features:

  • 복제된 테이블(Replicated Table)에 대해 ALTER TABLE t DELETE WHERE 쿼리를 지원합니다. 이 유형의 쿼리 진행 상황을 추적하기 위해 system.mutations 테이블이 추가되었습니다.
  • *MergeTree 테이블에 대해 ALTER TABLE t [REPLACE|ATTACH] PARTITION 쿼리를 지원합니다.
  • TRUNCATE TABLE 쿼리를 지원합니다 (Winter Zhang).
  • 복제된 테이블을 위한 여러 새로운 SYSTEM 쿼리가 추가되었습니다 (RESTART REPLICAS, SYNC REPLICA, [STOP|START] [MERGES|FETCHES|SENDS REPLICATED|REPLICATION QUEUES]).
  • MySQL 엔진을 사용하는 테이블과 해당 테이블 함수에 대한 쓰기 기능이 추가되었습니다 (sundy-li).
  • url() 테이블 함수와 URL 테이블 엔진이 추가되었습니다 (Alexander Sapin).
  • windowFunnel 집계 함수가 추가되었습니다 (sundy-li).
  • 문자열용 startsWithendsWith 함수가 추가되었습니다 (Vadim Plakhtinsky).
  • numbers() 테이블 함수에서 이제 오프셋을 지정할 수 있습니다 (Winter Zhang).
  • clickhouse-client 비밀번호를 대화식으로 입력할 수 있습니다.
  • 서버 로그를 syslog로 전송할 수 있습니다 (Alexander Krasheninnikov).
  • 공유 라이브러리 소스를 사용하는 딕셔너리에 대한 로깅을 지원합니다 (Alexander Sapin).
  • 사용자 지정 CSV 구분 기호를 지원합니다 (Ivan Zhukov).
  • date_time_input_format 설정이 추가되었습니다. 이 설정을 'best_effort'으로 변경하면 DateTime 값을 다양한 형식으로 읽을 수 있습니다.
  • 데이터 난독화를 위한 clickhouse-obfuscator 유틸리티가 추가되었습니다. 사용 예: 성능 테스트에 사용된 데이터를 공개하는 경우.

실험적 기능(Experimental Features):

  • and 인자를 실제로 필요한 경우에만 계산하도록 하는 기능이 추가되었습니다. (Anastasia Tsarkova)
  • 일부 식에 대해 네이티브 코드로 JIT 컴파일이 가능해졌습니다. (pyos).

버그 수정:

  • DISTINCTORDER BY가 포함된 쿼리에서 더 이상 중복이 나타나지 않습니다.
  • ARRAY JOINarrayFilter가 포함된 쿼리가 더 이상 잘못된 결과를 반환하지 않습니다.
  • Nested 구조에서 배열 컬럼을 읽을 때 발생하던 오류를 수정했습니다 (#2066).
  • HAVING tuple IN (...)과 같은 HAVING 절이 있는 쿼리를 분석할 때 발생하던 오류를 수정했습니다.
  • 재귀 별칭이 있는 쿼리를 분석할 때 발생하던 오류를 수정했습니다.
  • 모든 행을 필터링하는 PREWHERE 조건과 함께 ReplacingMergeTree에서 읽을 때 발생하던 오류를 수정했습니다 (#2525).
  • HTTP 인터페이스에서 세션을 사용할 때 사용자 프로필 설정이 적용되지 않던 문제를 수정했습니다.
  • clickhouse-local에서 명령줄 매개변수로 전달된 설정이 적용되는 방식을 수정했습니다.
  • ZooKeeper 클라이언트 라이브러리가 이제 서버에서 수신한 세션 타임아웃을 사용합니다.
  • ZooKeeper 클라이언트 라이브러리에서 클라이언트가 타임아웃보다 더 오래 서버 응답을 기다리던 버그를 수정했습니다.
  • 파티션 키 컬럼에 대한 조건이 있는 쿼리에서 파트 프루닝이 제대로 동작하지 않던 문제를 수정했습니다 (#2342).
  • CLEAR COLUMN IN PARTITION 이후에도 머지를 수행할 수 있도록 수정했습니다 (#2315).
  • ODBC 테이블 함수의 타입 매핑을 수정했습니다 (sundy-li).
  • 시간대가 있는 DateTime과 없는 DateTime 간의 타입 비교를 수정했습니다 (Alexander Bocharov).
  • CAST 연산자의 구문 분석 및 포매팅을 수정했습니다.
  • Distributed 테이블 엔진을 사용하는 materialized view로의 데이터 삽입을 수정했습니다 (Babacar Diassé).
  • Kafka 엔진에서 materialized view로 데이터를 기록할 때 발생하던 레이스 컨디션을 수정했습니다 (Yangkuan Liu).
  • remote() 테이블 함수에서 발생하던 SSRF를 수정했습니다.
  • 멀티라인 모드에서 clickhouse-client의 종료 동작을 수정했습니다 (#2510).

Improvements:

  • 복제된 테이블(Replicated Table)의 백그라운드 작업이 이제는 개별 스레드가 아니라 스레드 풀에서 수행됩니다 (Silviu Caragea).
  • LZ4 압축 성능이 향상되었습니다.
  • 많은 수의 JOIN과 서브쿼리가 포함된 쿼리에 대한 분석 속도가 빨라졌습니다.
  • 네트워크 오류가 너무 많을 때 DNS 캐시가 이제 자동으로 업데이트됩니다.
  • 구체화된 뷰(materialized view) 중 하나에 파트가 너무 많아 INSERT를 수행할 수 없으면, 해당 테이블에 대한 INSERT는 더 이상 수행되지 않습니다.
  • 이벤트 카운터 Query, SelectQuery, InsertQuery 간의 불일치가 수정되었습니다.
  • 튜플 타입이 일치하는 경우 tuple IN (SELECT tuple)과 같은 표현이 허용됩니다.
  • ZooKeeper를 구성하지 않은 경우에도 복제된 테이블이 있는 서버를 시작할 수 있습니다.
  • 사용 가능한 CPU 코어 수를 계산할 때 이제 cgroup의 제한이 고려됩니다 (Atri Sharma).
  • systemd 설정 파일에 구성 디렉터리에 대한 chown이 추가되었습니다 (Mikhail Shiryaev).

빌드 변경 사항:

  • 빌드에 gcc8 컴파일러를 사용할 수 있습니다.
  • 서브모듈에서 llvm을 빌드할 수 있습니다.
  • librdkafka 라이브러리 버전이 v0.11.4로 업데이트되었습니다.
  • 시스템 libcpuid 라이브러리를 사용할 수 있습니다. 라이브러리 버전은 0.4.0으로 업데이트되었습니다.
  • vectorclass 라이브러리를 사용할 때 발생하던 빌드 오류를 수정했습니다 (Babacar Diassé).
  • 이제 CMake가 기본적으로 Ninja용 파일을 생성합니다 (-G Ninja를 사용할 때와 동일).
  • libtermcap 대신 libtinfo 라이브러리를 사용할 수 있습니다 (Georgy Kondratiev).
  • Fedora Rawhide에서 발생하던 헤더 파일 충돌을 수정했습니다 (#2520).

하위 호환성이 없는 변경 사항:

  • VerticalPretty* 포맷에서 이스케이프 처리를 제거하고 VerticalRaw 포맷을 삭제했습니다.
  • 분산 쿼리에서 버전 1.1.54388(또는 이후 버전) 서버와 이전 버전 서버를 동시에 사용하고, 해당 쿼리에 AS 키워드 없이 cast(x, 'Type') 표현식이 포함되어 있으며, 키워드 cast를 대문자(예: CAST)로 사용하지 않은 경우, Not found column cast(0, 'UInt8') in block과 같은 메시지와 함께 예외가 발생합니다. 해결 방법: 클러스터 전체의 서버를 업데이트하십시오.

ClickHouse 릴리스 1.1.54385, 2018-06-01

버그 수정:

  • 특정 경우 ZooKeeper 작업이 블로킹되는 오류를 수정했습니다.

ClickHouse 릴리스 1.1.54383, 2018-05-22

버그 수정:

  • 레플리카가 많은 테이블에서 복제 큐의 처리가 지연되던 문제를 수정했습니다.

ClickHouse 릴리스 1.1.54381, 2018-05-14

버그 수정:

  • ClickHouse와 ZooKeeper 서버 간의 연결이 끊어졌을 때 ZooKeeper에서 노드 누수가 발생하던 문제를 수정했습니다.

ClickHouse 1.1.54380 릴리스, 2018년 4월 21일

신규 기능:

  • 테이블 함수 file(path, format, structure)가 추가되었습니다. /dev/urandom에서 바이트를 읽는 예는 다음과 같습니다: ln -s /dev/urandom /var/lib/clickhouse/user_files/random``clickhouse-client -q "SELECT * FROM file('random', 'RowBinary', 'd UInt8') LIMIT 10".

Improvements:

  • 서브쿼리를 () 괄호로 감싸 쿼리 가독성을 향상할 수 있습니다. 예를 들면 (SELECT 1) UNION ALL (SELECT 1)입니다.
  • system.processes 테이블에 대한 단순 SELECT 쿼리는 max_concurrent_queries 제한에 포함되지 않습니다.

버그 수정:

  • MATERIALIZED VIEW에서 SELECT 쿼리를 실행할 때 IN 연산자가 잘못 동작하던 문제를 수정했습니다.
  • partition_key_column IN (...)과 같은 표현식에서 파티션 인덱스로 잘못 필터링되던 문제를 수정했습니다.
  • 테이블에 REANAME이 수행된 경우 리더가 아닌 레플리카에서 OPTIMIZE 쿼리를 실행할 수 없던 문제를 수정했습니다.
  • 리더가 아닌 레플리카에서 OPTIMIZE 또는 ALTER 쿼리를 실행할 때 발생하던 권한 오류를 수정했습니다.
  • KILL QUERY가 멈추는 현상을 수정했습니다.
  • ZooKeeper 설정에서 비어 있지 않은 chroot 프리픽스를 사용하는 경우, ZooKeeper 클라이언트 라이브러리의 오류로 인해 watch 손실, 분산 DDL 큐가 멈추고, 복제 큐가 느려지던 문제를 수정했습니다.

하위 호환성이 없는 변경 사항:

  • (a, b) IN (SELECT (a, b))와 같은 표현식에 대한 지원을 제거했습니다(동등한 표현식인 (a, b) IN (SELECT a, b)를 사용하면 됩니다). 이전 릴리스에서는 이러한 표현식이 예측할 수 없는 WHERE 필터링을 유발하거나 오류를 발생시켰습니다.

ClickHouse 릴리스 1.1.54378, 2018-04-16

New Features:

  • 서버를 다시 시작하지 않고도 로깅 레벨을 변경할 수 있습니다.
  • SHOW CREATE DATABASE 쿼리가 추가되었습니다.
  • query_idclickhouse-client에 전달할 수 있게 되었습니다 (elBroom).
  • 새로운 설정: max_network_bandwidth_for_all_users.
  • MATERIALIZED VIEW에 대해 ALTER TABLE ... PARTITION ...을 지원합니다.
  • 시스템 테이블에 압축 해제된 형태의 데이터 파트 크기에 대한 정보가 추가되었습니다.
  • 분산 테이블에 대한 서버 간 암호화를 지원합니다 (<remote_servers>의 replica 설정에서 <secure>1</secure> 사용).
  • ZooKeeper에 저장되는 데이터 양을 최소화하기 위해 ReplicatedMergeTree 패밀리에 대해 테이블 단위 설정을 추가했습니다: use_minimalistic_checksums_in_zookeeper = 1
  • clickhouse-client 프롬프트를 설정할 수 있습니다. 기본적으로 이제 프롬프트에 서버 이름이 출력됩니다. 서버의 표시 이름을 변경할 수 있으며, X-ClickHouse-Display-Name HTTP 헤더로도 전송됩니다 (Kirill Shvakov).
  • Kafka 엔진에 대해 여러 개의 topics를 쉼표로 구분하여 지정할 수 있습니다 (Tobias Adamson).
  • 쿼리가 KILL QUERY 또는 replace_running_query에 의해 중지될 때, 클라이언트는 불완전한 결과 대신 Query was canceled 예외를 받습니다.

Improvements:

  • ALTER TABLE ... DROP/DETACH PARTITION 쿼리가 복제 큐에서 우선적으로 실행됩니다.
  • 테이블에 데이터 파트가 하나만 있는 경우에도 SELECT ... FINALOPTIMIZE ... FINAL을 사용할 수 있습니다.
  • query_log 테이블이 수동으로 삭제된 경우, 자동으로 다시 생성됩니다 (Kirill Shvakov).
  • lengthUTF8 함수의 실행 속도가 더 빨라졌습니다 (zhang2014).
  • 세그먼트 수가 매우 많은 경우 Distributed 테이블에서 동기 삽입(insert_distributed_sync = 1) 성능이 향상되었습니다.
  • 서버가 클라이언트로부터 send_timeoutreceive_timeout 설정을 전달받아 클라이언트에 연결할 때 적용합니다 (적용 순서는 반대입니다. 서버 소켓의 send_timeout은 클라이언트로부터 전달받은 receive_timeout 값으로 설정되고, 그 반대도 마찬가지입니다).
  • Distributed 테이블에 대한 비동기 삽입 시 장애 복구가 더 견고해졌습니다.
  • countEqual 함수의 반환 타입이 UInt32에서 UInt64로 변경되었습니다 (谢磊).

버그 수정:

  • 표현식의 왼쪽이 Nullable일 때 IN 관련 오류를 수정했습니다.
  • 튜플 구성 요소 일부가 테이블 인덱스(인덱스)에 포함되어 있을 때 IN과 함께 튜플을 사용할 경우, 이제 올바른 결과가 반환됩니다.
  • max_execution_time 제한이 이제 분산 쿼리(distributed queries)에서 올바르게 동작합니다.
  • system.columns 테이블에서 복합 컬럼의 크기를 계산할 때 발생하던 오류를 수정했습니다.
  • CREATE TEMPORARY TABLE IF NOT EXISTS로 임시 테이블을 생성할 때 발생하던 오류를 수정했습니다.
  • StorageKafka에서 발생하던 오류를 수정했습니다(##2075).
  • 특정 집계 함수에 잘못된 인수가 전달될 때 서버가 비정상 종료되던 문제를 수정했습니다.
  • ReplicatedMergeTree 테이블에 대해 DETACH DATABASE 쿼리가 백그라운드 작업을 중지하지 못하던 오류를 수정했습니다.
  • 집계 materialized view에 데이터를 삽입할 때 Too many parts 상태가 발생할 가능성을 줄였습니다(##2084).
  • 동일한 수준에서 하나의 치환 뒤에 또 다른 치환이 이어져야 하는 경우, 설정 파일에서 치환을 재귀적으로 처리하는 로직을 바로잡았습니다.
  • UNION ALL을 사용하는 쿼리를 갖는 VIEW를 생성할 때, 메타데이터 파일의 구문을 수정했습니다.
  • SummingMergeTree가 복합 키를 사용하는 중첩 데이터 구조의 합계를 올바르게 처리하도록 수정했습니다.
  • ReplicatedMergeTree 테이블에서 리더를 선택할 때 경쟁 조건(race condition)이 발생할 수 있던 문제를 수정했습니다.

빌드 변경 사항:

  • 빌드는 릴리스 빌드를 위해 make 대신 ninja를 지원하며, 기본적으로 ninja를 사용합니다.
  • 패키지 이름이 다음과 같이 변경되었습니다: clickhouse-server-baseclickhouse-common-static; clickhouse-server-commonclickhouse-server; clickhouse-common-dbgclickhouse-common-static-dbg. 설치하려면 clickhouse-serverclickhouse-client를 사용하십시오. 이전 이름의 패키지도 하위 호환성을 위해 저장소에서 계속 제공됩니다.

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

  • 좌변에 배열이 지정된 IN 표현식을 특별히 해석하던 동작을 제거했습니다. 이전에는 표현식 arr IN (set)이 「arr 요소 중 적어도 하나가 set에 속한다」로 해석되었습니다. 새 버전에서 동일한 동작을 사용하려면 arrayExists(x -> x IN (set), arr)로 작성하십시오.
  • Poco 라이브러리에서 기본값으로 잘못 활성화되어 있던 소켓 옵션 SO_REUSEPORT의 잘못된 사용을 비활성화했습니다. Linux에서는 이제 더 이상 listen을 위해 주소 ::0.0.0.0을 동시에 지정할 이유가 없으므로, IPv4와 IPv6 모두에 대한 연결을 수신할 수 있도록 하는(기본 커널 구성 설정에서) ::만 사용하면 됩니다. 또한 설정에서 <listen_reuse_port>1</listen_reuse_port>를 지정하여 이전 버전의 동작으로 되돌릴 수도 있습니다.

ClickHouse 1.1.54370 릴리스, 2018-03-16

새로운 기능:

  • system.macros 테이블과 설정 파일이 변경될 때 매크로가 자동으로 업데이트되는 기능을 추가했습니다.
  • SYSTEM RELOAD CONFIG 쿼리를 추가했습니다.
  • 서로 동시에 겹치는 구간 [left; right]의 최대 개수를 반환하는 집계 함수 maxIntersections(left_col, right_col)를 추가했습니다. maxIntersectionsPosition(left, right) 함수는 「최대」 구간의 시작 위치를 반환합니다. (Michael Furmur).

개선 사항:

  • Replicated 테이블에 데이터를 삽입할 때 ZooKeeper로 전송되는 요청 수가 줄어들었고, 사용자 수준 오류 대부분이 ZooKeeper 로그에서 사라졌습니다.
  • 데이터 세트에 대한 별칭을 생성할 수 있는 기능이 추가되었습니다. 예: WITH (1, 2, 3) AS set SELECT number IN set FROM system.numbers LIMIT 10.

버그 수정:

  • Distributed 테이블용 Merge 테이블에서 읽을 때 발생하던 Illegal PREWHERE 오류를 수정했습니다.
  • IPv4 전용 Docker 컨테이너에서 clickhouse-server를 시작할 수 있도록 수정 사항을 추가했습니다.
  • system.parts_columns 시스템 테이블에서 읽을 때 발생하던 경쟁 상태(race condition)를 수정했습니다.
  • Distributed 테이블에 동기식 insert를 수행할 때 연결이 타임아웃될 수 있었던 이중 버퍼링을 제거했습니다.
  • 사용 불가능한 레플리카에 대해 SELECT 쿼리를 시작하기 전에 과도하게 오래 대기하던 버그를 수정했습니다.
  • system.parts 테이블의 잘못된 날짜를 수정했습니다.
  • ZooKeeper 클러스터 설정에서 chroot가 비어 있지 않은 경우 Replicated 테이블에 데이터를 insert할 수 없었던 버그를 수정했습니다.
  • ORDER BY가 비어 있는 테이블에 대한 수직 머지 알고리즘을 수정했습니다.
  • 딕셔너리가 요청을 보내는 서버에 존재하지 않더라도, 쿼리에서 원격 테이블의 딕셔너리를 사용할 수 있는 기능을 복원했습니다. 이 기능은 릴리스 1.1.54362에서 손실되었습니다.
  • IN의 오른쪽에서 로컬 default.table이 아닌 원격 default.table을 사용해야 하는 SELECT * FROM remote('server2', default.table) WHERE col IN (SELECT col2 FROM default.table)과 같은 쿼리에 대한 동작을 복원했습니다. 이 동작은 버전 1.1.54358에서 잘못 동작하게 되었습니다.
  • Not found column ... in block에 대한 불필요한 오류 레벨 로깅을 제거했습니다.

ClickHouse 릴리스 1.1.54362, 2018-03-11

새 기능:

  • 빈 Set에 대해 GROUP BY 없이 집계를 수행할 때(예: SELECT count(*) FROM table WHERE 0) 이제 SQL 표준을 준수하여 집계 함수에 대해 NULL 값을 갖는 1개의 행을 결과로 반환합니다. 이전 동작(빈 결과를 반환)을 복원하려면 empty_result_for_aggregation_by_empty_set을 1로 설정하십시오.
  • UNION ALL에 대한 데이터 타입 변환이 추가되었습니다. SQL 표준을 준수하여 UNION ALL에서 SELECT 위치에 서로 다른 별칭 이름을 사용할 수 있습니다.
  • LIMIT BY 절에서 임의의 표현식을 사용할 수 있습니다. 이전에는 SELECT 결과에서 나온 컬럼만 사용할 수 있었습니다.
  • MergeTree 테이블의 인덱스는 기본 키 컬럼의 표현식으로 구성된 튜플에 IN이 적용될 때 사용됩니다. 예: WHERE (UserID, EventDate) IN ((123, '2000-01-01'), ...) (Anastasiya Tsarkova).
  • 클러스터 간 데이터 복사 및 리세그먼트(resharding)를 위한 clickhouse-copier 도구를 추가했습니다(베타).
  • 일관된 해싱(consistent hashing) 함수 yandexConsistentHash, jumpConsistentHash, sumburConsistentHash가 추가되었습니다. 이후 리샤딩을 수행할 때 네트워크 트래픽을 줄이기 위해 세그먼트 키로 사용할 수 있습니다.
  • 다음 함수들이 추가되었습니다: arrayAny, arrayAll, hasAny, hasAll, arrayIntersect, arrayResize.
  • arrayCumSum 함수를 추가했습니다(Javi Santana).
  • 다양한 형식으로 표현된 텍스트를 포함하는 문자열에서 DateTime 값을 읽을 수 있도록 parseDateTimeBestEffort, parseDateTimeBestEffortOrZero, parseDateTimeBestEffortOrNull 함수를 추가했습니다.
  • 데이터를 업데이트하는 동안 외부 딕셔너리에서 부분적으로 다시 로드할 수 있습니다(이전 로드 시점보다 지정된 필드의 값이 더 큰 레코드만 로드합니다). (Arsen Hakobyan)
  • cluster 테이블 FUNCTION이 추가되었습니다. 예시: cluster(cluster_name, db, table). remote 테이블 FUNCTION은 클러스터 이름이 식별자로 지정된 경우, 첫 번째 인수로 클러스터 이름을 받을 수 있습니다.
  • remotecluster 테이블 FUNCTION은 INSERT 쿼리에서 사용할 수 있습니다.
  • system.tables 테이블에 create_table_queryengine_full 가상 컬럼을 추가했습니다. metadata_modification_time 컬럼은 가상 컬럼입니다.
  • system.tablessystem.databases 테이블에 data_pathmetadata_path 컬럼을 추가했고, system.partssystem.parts_columns 테이블에 path 컬럼을 추가했습니다.
  • system.part_log 테이블에 머지 작업에 대한 추가 정보가 기록되도록 했습니다.
  • system.query_log 테이블에 임의의 파티셔닝 키를 사용할 수 있게 되었습니다(Kirill Shvakov).
  • SHOW TABLES 쿼리가 이제 임시 테이블도 함께 표시합니다. 임시 테이블과 is_temporary 컬럼이 system.tables에 추가되었습니다 (zhang2014).
  • DROP TEMPORARY TABLEEXISTS TEMPORARY TABLE 쿼리를 추가했습니다(zhang2014).
  • 임시 테이블에 대한 SHOW CREATE TABLE 지원 (zhang2014).
  • 내부 프로세스에서 사용하는 설정을 위한 system_profile 구성 매개변수가 추가되었습니다.
  • MongoDB 딕셔너리에서 object_id를 속성으로 로드하는 기능이 지원됩니다(Pavel Litvinenko).
  • MongoDB 소스를 사용하는 외부 딕셔너리에서 데이터를 로드할 때 null을 기본값으로 읽습니다 (Pavel Litvinenko).
  • 작은따옴표 없이 Unix 타임스탬프에서 Values 형식의 DateTime 값을 읽을 수 있습니다.
  • 일부 레플리카에 요청된 테이블이 존재하지 않는 경우를 대비해 remote 테이블 함수에서 장애 조치를 지원합니다.
  • 구성 설정은 clickhouse-server를 실행할 때 커맨드라인에서 덮어쓸 수 있습니다. 예: clickhouse-server -- --logger.level=information.
  • FixedString 타입 인자를 받는 empty 함수가 구현되었습니다. 이 함수는 문자열이 전부 null 바이트로만 구성된 경우 1을 반환합니다(zhang2014).
  • 일부 주소를 수신할 수 없는 경우(IPv4 또는 IPv6 지원이 비활성화된 시스템에 유용함)에도 종료하지 않고, 리스닝 주소들 중 최소 하나에 대해서는 수신을 시도하도록 하는 listen_try 구성 파라미터를 추가했습니다.
  • VersionedCollapsingMergeTree 테이블 엔진이 추가되었습니다.
  • library 딕셔너리 소스에서 행과 임의의 수치형 타입을 지원합니다.
  • MergeTree 테이블은 기본 키 없이도 사용할 수 있습니다. 이때 ORDER BY tuple()를 지정해야 합니다.
  • 인수가 NULL이 아니면 Nullable 타입 값을 널 허용이 아닌 타입으로 CAST할 수 있습니다.
  • RENAME TABLEVIEW에 대해 실행할 수 있습니다.
  • throwIf FUNCTION이 추가되었습니다.
  • odbc_default_field_size 옵션을 추가하여 ODBC 소스에서 로드되는 값의 최대 크기를 늘릴 수 있습니다(기본값은 1024입니다).
  • system.processes 테이블과 SHOW PROCESSLIST에는 이제 is_cancelledpeak_memory_usage 컬럼이 추가되었습니다.

Improvements:

  • 결과에 대한 제한과 QUOTA는 더 이상 INSERT SELECT 쿼리나 SELECT 서브쿼리의 중간 데이터에는 적용되지 않습니다.
  • 서버 시작 시 Replicated 테이블의 상태를 확인할 때 force_restore_data가 잘못 트리거되는 경우가 줄어들었습니다.
  • allow_distributed_ddl 옵션이 추가되었습니다.
  • 비결정적 함수는 MergeTree 테이블 키를 위한 표현식에서 허용되지 않습니다.
  • config.d 디렉터리의 치환 값을 포함하는 파일은 알파벳 순으로 로드됩니다.
  • 상수 다차원 배열의 요소 중 하나가 빈 배열인 경우 arrayElement 함수의 성능이 향상되었습니다. 예: [[1], []][x].
  • 매우 큰 치환 값(예: 매우 긴 IP 네트워크 목록)이 포함된 설정 파일을 사용할 때 서버 시작 속도가 더 빨라졌습니다.
  • 쿼리를 실행할 때 테이블 값 함수는 한 번만 실행됩니다. 이전에는 remotemysql 테이블 값 함수가 원격 서버에서 테이블 구조를 가져오기 위해 동일한 쿼리를 두 번 수행했습니다.
  • MkDocs 문서 생성기를 사용합니다.
  • 다른 컬럼의 DEFAULT/MATERIALIZED 표현식이 의존하는 테이블 컬럼을 삭제하려고 시도하면 예외가 발생합니다(zhang2014).
  • 텍스트 포맷에서 빈 줄을 Float 데이터 타입의 숫자 0으로 파싱할 수 있는 기능이 추가되었습니다. 이 기능은 이전에 존재했으나 릴리스 1.1.54342에서 누락되었습니다.
  • Enum 값은 min, max, sum 및 일부 다른 함수에서 사용할 수 있습니다. 이 경우 해당 숫자 값이 사용됩니다. 이 기능은 이전에 존재했으나 릴리스 1.1.54337에서 누락되었습니다.
  • 별칭을 재귀적으로 전개한 후 AST 크기를 제한하기 위해 max_expanded_ast_elements가 추가되었습니다.

Bug Fixes:

  • 서브쿼리에서 불필요한 컬럼이 잘못 제거되거나, UNION ALL이 포함된 서브쿼리에서 제거되지 않던 문제를 수정했습니다.
  • ReplacingMergeTree 테이블에 대한 머지 작업에서 발생하던 버그를 수정했습니다.
  • Distributed 테이블에서의 동기 삽입(insert_distributed_sync = 1) 문제를 수정했습니다.
  • 서브쿼리 내 중복 컬럼과 함께 FULLRIGHT JOIN을 특정 방식으로 사용할 때 발생하던 세그폴트(segfault)를 수정했습니다.
  • replace_running_queryKILL QUERY를 특정 방식으로 사용할 때 발생하던 세그폴트(segfault)를 수정했습니다.
  • system.dictionaries 테이블에서 sourcelast_exception 컬럼의 순서를 수정했습니다.
  • DROP DATABASE 쿼리가 메타데이터 파일을 삭제하지 않던 버그를 수정했습니다.
  • Dictionary 데이터베이스에 대한 DROP DATABASE 쿼리를 수정했습니다.
  • 1억 개를 초과하는 아이템 카디널리티에 대해 uniqHLL12uniqCombined 함수의 낮은 정밀도 문제를 수정했습니다 (Alex Bocharov).
  • INSERT 쿼리에서 명시적 기본 표현식을 동시에 계산해야 할 때, 암시적 기본값 계산과 관련된 문제를 수정했습니다 (zhang2014).
  • MergeTree 테이블에 대한 쿼리가 종료되지 않을 수 있었던 드문 사례를 수정했습니다 (chenxing-xc).
  • 모든 세그먼트가 로컬인 경우 Distributed 테이블에 대해 CHECK 쿼리를 실행하면 발생하던 크래시를 수정했습니다 (chenxing.xc).
  • 정규식을 사용하는 함수에서 발생한 경미한 성능 회귀를 수정했습니다.
  • 복잡한 표현식에서 다차원 배열을 생성할 때 발생하던 성능 회귀를 수정했습니다.
  • 메타데이터가 포함된 .sql 파일에 불필요한 FORMAT 섹션이 추가로 나타날 수 있던 버그를 수정했습니다.
  • 명시적으로 지정된 테이블을 참조하는 MATERIALIZED VIEW를 삭제하려 할 때 max_table_size_to_drop 제한이 적용되던 버그를 수정했습니다.
  • 이전 클라이언트와의 비호환성 문제를 수정했습니다 (이전 클라이언트에는 이해하지 못하는 DateTime('timezone') 타입의 데이터가 전송되는 경우가 있었음).
  • ALTER를 사용해 추가했지만 이전 파티션에서는 비어 있는 구조의 Nested 컬럼 요소를 읽을 때, 이 컬럼들에 대한 조건이 PREWHERE로 이동하는 경우 발생하던 버그를 수정했습니다.
  • Merge 테이블에 대한 쿼리에서 가상 _table 컬럼으로 테이블을 필터링할 때 발생하던 버그를 수정했습니다.
  • Distributed 테이블에서 ALIAS 컬럼을 사용할 때 발생하던 버그를 수정했습니다.
  • quantile 패밀리의 집계 함수를 사용하는 쿼리에 대해 동적 컴파일이 불가능해지던 버그를 수정했습니다.
  • 많은 수의 테이블을 가진 Merge 테이블을 사용할 때와 GLOBAL 서브쿼리를 사용할 때, 매우 드문 경우에 쿼리 실행 파이프라인에서 발생하던 레이스 컨디션을 수정했습니다.
  • 여러 인자를 사용하는 집계 함수와 함께 arrayReduce 함수를 사용할 때, 크기가 다른 배열을 전달하면 발생하던 크래시를 수정했습니다.
  • MATERIALIZED VIEW에서 UNION ALL이 포함된 쿼리 사용을 금지했습니다.
  • 서버 시작 시 part_log 시스템 테이블 초기화 중 발생하던 오류를 수정했습니다 (part_log는 기본적으로 비활성화되어 있음).

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

  • distributed_ddl_allow_replicated_alter 옵션을 제거했습니다. 이 동작은 기본적으로 활성화되어 있습니다.
  • strict_insert_defaults 설정을 제거했습니다. 이 기능을 사용 중이었다면 feedback@clickhouse.com으로 문의하십시오.
  • UnsortedMergeTree 엔진을 제거했습니다.

ClickHouse Release 1.1.54343, 2018-02-05

  • 분산 DDL 쿼리와 Distributed 테이블(분산 테이블) 생성자에서 클러스터 이름을 정의하기 위한 매크로 지원이 추가되었습니다: CREATE TABLE distr ON CLUSTER '{cluster}' (...) ENGINE = Distributed('{cluster}', 'db', 'table').
  • 이제 SELECT ... FROM table WHERE expr IN (subquery)와 같은 쿼리는 table 인덱스를 사용하여 처리됩니다.
  • Replicated 테이블(복제된 테이블)에 데이터를 삽입할 때 중복 처리 방식이 개선되어, 복제 큐 실행을 더 이상 지연시키지 않도록 했습니다.

ClickHouse Release 1.1.54342, 2018-01-22

이번 릴리스에는 이전 릴리스 1.1.54337에 대한 버그 수정이 포함되어 있습니다:

  • 1.1.54337의 회귀(regression)로 인해 발생한 문제 수정: 기본 사용자에게 읽기 전용(readonly) 권한만 있는 경우, 서버가 Cannot create database in readonly mode 메시지와 함께 시작을 거부하던 문제를 수정했습니다.
  • 1.1.54337의 회귀(regression)로 인해 발생한 문제 수정: systemd를 사용하는 시스템에서, 설정과 무관하게 로그가 항상 syslog에 기록되고 watchdog 스크립트는 여전히 init.d를 사용하던 문제를 수정했습니다.
  • 1.1.54337의 회귀(regression)로 인해 발생한 문제 수정: Docker 이미지에서 잘못된 기본 설정이 사용되던 문제를 수정했습니다.
  • GraphiteMergeTree의 비결정적 동작을 수정했습니다(로그 메시지 Data after merge is not byte-identical to the data on another replicas에서 확인할 수 있습니다).
  • 복제된 테이블(Replicated Table)에 대해 OPTIMIZE 쿼리를 실행한 후 병합 결과가 일관되지 않을 수 있는 버그를 수정했습니다(로그 메시지 Part ... intersects the previous part에서 확인할 수 있습니다).
  • 대상 테이블에 MATERIALIZED 컬럼이 존재할 때 Buffer 테이블이 이제 올바르게 동작합니다(zhang2014 기여).
  • NULL 구현의 버그를 수정했습니다.

ClickHouse 릴리스 1.1.54337, 2018-01-18

새로운 기능:

  • 테이블에 다차원 배열과 튜플(Tuple 데이터 타입)을 저장하는 기능을 지원합니다.
  • DESCRIBEINSERT 쿼리에 대한 테이블 함수(table functions)를 지원합니다. DESCRIBE에서 서브쿼리를 지원합니다. 예시: DESC TABLE remote('host', default.hits); DESC TABLE (SELECT 1); INSERT INTO TABLE FUNCTION remote('host', default.hits). INSERT INTO 외에 INSERT INTO TABLE도 지원합니다.
  • 시간대(time zone) 지원이 개선되었습니다. DateTime 데이터 타입에 텍스트 포맷에서의 파싱 및 포맷팅에 사용되는 시간대를 주석으로 지정할 수 있습니다. 예시: DateTime('Asia/Istanbul'). DateTime 인자를 받는 함수에서 시간대를 지정하면, 반환 타입이 시간대를 추적하고 값이 기대한 대로 표시됩니다.
  • toTimeZone, timeDiff, toQuarter, toRelativeQuarterNum 함수를 추가했습니다. toRelativeHour/Minute/Second 함수는 Date 타입 값을 인자로 받을 수 있습니다. now 함수 이름은 대소문자를 구분합니다.
  • toStartOfFifteenMinutes 함수를 추가했습니다 (Kirill Shvakov).
  • 쿼리 포맷팅용 도구 clickhouse format을 추가했습니다.
  • format_schema_path 설정 매개변수를 추가했습니다 (Marek Vavruša). Cap'n Proto 포맷의 스키마를 지정하는 데 사용됩니다. 스키마 파일은 지정된 디렉터리 안에만 둘 수 있습니다.
  • 외부 딕셔너리 및 모델 구성을 위한 설정 치환(inclconf.d)을 지원합니다 (Pavel Yakunin).
  • system.settings 테이블에 문서용 컬럼을 추가했습니다 (Kirill Shvakov).
  • MergeTree 테이블의 각 데이터 파트에서 컬럼 크기 정보를 제공하는 system.parts_columns 테이블을 추가했습니다.
  • 로드된 CatBoost 머신 러닝 모델에 대한 정보를 제공하는 system.models 테이블을 추가했습니다.
  • 원격 데이터베이스에 접근하기 위한 mysqlodbc 테이블 함수와 해당 MySQLODBC 테이블 엔진을 추가했습니다. 이 기능은 베타 단계입니다.
  • groupArray 집계 함수에 대해 AggregateFunction 타입 인자를 전달할 수 있는 기능을 추가했습니다(이로써 특정 집계 함수 상태의 배열을 생성할 수 있습니다).
  • 다양한 집계 함수 조합자(combinator) 조합에 대한 제한을 제거했습니다. 예를 들어, 서로 다른 동작을 하는 avgForEachIfavgIfForEach 집계 함수를 모두 사용할 수 있습니다.
  • 다중 인자를 갖는 집계 함수의 경우에도 -ForEach 집계 함수 조합자가 동작하도록 확장했습니다.
  • 함수 결과가 Nullable이 아닌 경우에도 Nullable 인자를 갖는 집계 함수를 지원합니다 (Silviu Caragea의 기여). 예시: groupArray, groupUniqArray, topK.
  • clickhouse-clientmax_client_network_bandwidth를 추가했습니다 (Kirill Shvakov).
  • readonly = 2 설정을 가진 사용자는 TEMPORARY 테이블(CREATE, DROP, INSERT...)을 사용할 수 있습니다 (Kirill Shvakov).
  • Kafka 엔진에서 다수의 컨슈머를 사용할 수 있도록 지원을 추가했습니다. Kafka에 대한 설정 옵션을 확장했습니다 (Marek Vavruša).
  • intExp3intExp4 함수를 추가했습니다.
  • sumKahan 집계 함수를 추가했습니다.
  • to Number OrNull 함수들을 추가했습니다. 여기서 Number는 숫자 타입입니다.
  • INSERT SELECT 쿼리에 대한 WITH 절 지원을 추가했습니다 (author: zhang2014).
  • http_connection_timeout, http_send_timeout, http_receive_timeout 설정을 추가했습니다. 특히, 이 설정은 복제를 위한 데이터 파트 다운로드에 사용됩니다. 이 설정을 변경하면 네트워크가 과부하 상태일 때 더 빠르게 장애 조치를 수행할 수 있습니다.
  • Null 타입 테이블에 대한 ALTER 지원을 추가했습니다 (Anastasiya Tsarkova).
  • reinterpretAsString 함수를 메모리에 연속적으로 저장되는 모든 데이터 타입으로 확장했습니다.
  • clickhouse-local 도구에 --silent 옵션을 추가했습니다. 이 옵션은 stderr로 쿼리 실행 정보를 출력하는 것을 억제합니다.
  • 월과/또는 일이 두 자리 대신 한 자리 숫자로 지정된 포맷의 텍스트에서 Date 타입 값을 읽는 기능을 지원합니다 (Amos Bird).

성능 최적화:

  • 문자열 인자를 사용하는 집계 함수 min, max, any, anyLast, anyHeavy, argMin, argMax의 성능이 향상되었습니다.
  • 함수 isInfinite, isFinite, isNaN, roundToExp2의 성능이 향상되었습니다.
  • 텍스트 형식에서 DateDateTime 타입 값의 파싱 및 포매팅 성능이 향상되었습니다.
  • 부동 소수점 수를 파싱하는 작업의 성능과 정밀도가 향상되었습니다.
  • 왼쪽과 오른쪽 파트에 USING 에 포함되지 않은 동일한 이름의 컬럼이 있을 때 JOIN 의 메모리 사용량이 감소했습니다.
  • 계산 안정성을 일부 희생하는 방식으로 집계 함수 varSamp, varPop, stddevSamp, stddevPop, covarSamp, covarPop, corr 의 성능이 향상되었습니다. 이전 함수들은 varSampStable, varPopStable, stddevSampStable, stddevPopStable, covarSampStable, covarPopStable, corrStable 라는 이름으로 계속 사용할 수 있습니다.

버그 수정:

  • DROP 또는 DETACH PARTITION 쿼리를 실행한 후 데이터 중복 제거가 올바르게 동작하지 않던 문제를 수정했습니다. 이전 버전에서는 파티션을 드롭한 뒤 동일한 데이터를 다시 삽입하면, 삽입된 블록이 중복으로 간주되어 제대로 동작하지 않았습니다.
  • POPULATE이 포함된 CREATE MATERIALIZED VIEW 쿼리에서 WHERE 절이 잘못 해석될 수 있던 버그를 수정했습니다.
  • zookeeper_servers 설정에서 root_path 파라미터를 사용할 때 발생하던 버그를 수정했습니다.
  • Date 인자를 toStartOfDay에 전달했을 때 예기치 않은 결과가 나올 수 있던 문제를 수정했습니다.
  • 결과가 이전 연도가 되는 경우에 대한 addMonthssubtractMonths 함수와 INTERVAL n MONTH 산술 동작을 수정했습니다.
  • UUID 데이터 타입에 대해 DISTINCT, JOIN, uniq 집계 함수 및 외부 딕셔너리(작성자: Evgeniy Ivanov)에 대한 누락된 지원을 추가했습니다. UUID 지원은 아직 완전하지 않습니다.
  • 합계 결과가 0이 되는 행에 대해 SummingMergeTree의 동작을 수정했습니다.
  • Kafka 엔진과 관련된 다양한 문제를 수정했습니다 (Marek Vavruša).
  • Join 테이블 엔진의 잘못된 동작을 수정했습니다 (Amos Bird).
  • FreeBSD 및 OS X에서 메모리 할당자의 잘못된 동작을 수정했습니다.
  • extractAll 함수가 이제 빈 매치도 지원합니다.
  • openssl 대신 libressl을 사용할 수 없게 하던 오류를 수정했습니다.
  • 임시 테이블로부터 실행되는 CREATE TABLE AS SELECT 쿼리를 수정했습니다.
  • 복제 큐를 업데이트할 때 원자성이 보장되지 않던 문제를 수정했습니다. 이로 인해 서버를 재시작할 때까지 레플리카 간 동기화가 맞지 않을 수 있었습니다.
  • gcd, lcmmodulo (% 연산자)에서 발생할 수 있는 오버플로를 수정했습니다 (Maks Skorokhod).
  • 이제 umask를 변경한 후에 -preprocessed 파일이 생성됩니다 (umask는 설정 파일에서 변경할 수 있습니다).
  • 사용자 정의 파티션 키를 사용할 때 파트에 대한 백그라운드 검사(MergeTreePartChecker)에서 발생하던 버그를 수정했습니다.
  • 텍스트 포맷에서 튜플(Tuple 데이터 타입의 값)을 파싱하는 동작을 수정했습니다.
  • multiIf, array 및 일부 다른 함수에 전달되는 호환되지 않는 타입에 대한 오류 메시지를 개선했습니다.
  • Nullable 타입 지원을 재설계했습니다. 서버 크래시로 이어질 수 있는 버그를 수정했습니다. INSERT SELECT에서의 잘못된 타입 변환, HAVING 및 PREWHERE에서의 Nullable 지원 부족, join_use_nulls 모드, OR 연산자의 인자로서의 Nullable 타입 등 NULL 지원과 관련된 거의 모든 다른 버그를 수정했습니다.
  • 데이터 타입의 내부 의미론과 관련된 여러 버그를 수정했습니다. 예: SummingMergeTree에서 Enum 타입 필드의 불필요한 합산, Pretty 포맷에서 Enum 타입의 정렬(alignment) 등.
  • 복합 컬럼에서 허용되는 조합에 대한 검사를 더 엄격하게 했습니다.
  • 매우 큰 파라미터를 FixedString 데이터 타입에 지정할 때 발생하던 오버플로를 수정했습니다.
  • 일반적인 경우의 topK 집계 함수에서 발생하던 버그를 수정했습니다.
  • -Array 조합자를 사용하는 n-항 집계 함수 변형의 인자에 대해 배열 크기 동일성 확인이 누락되어 있던 부분을 추가했습니다.
  • clickhouse-client--pager에서 발생하던 버그를 수정했습니다 (작성자: ks1322).
  • exp10 함수의 정밀도를 수정했습니다.
  • 문서와의 일치성을 높이기 위해 visitParamExtract 함수의 동작을 수정했습니다.
  • 잘못된 데이터 타입이 지정되었을 때 발생하던 크래시를 수정했습니다.
  • 모든 컬럼이 상수인 경우 DISTINCT의 동작을 수정했습니다.
  • 튜플 요소 인덱스로 복잡한 상수 표현식을 사용하는 경우 tupleElement 함수가 포함된 쿼리의 포매팅을 수정했습니다.
  • range_hashed 딕셔너리에 대한 Dictionary 테이블의 버그를 수정했습니다.
  • FULLRIGHT JOIN 결과에 불필요한 행이 포함되던 버그를 수정했습니다 (Amos Bird).
  • 설정 리로드 중 config.d 디렉터리에서 임시 파일을 생성 및 제거할 때 서버가 크래시가 발생하던 문제를 수정했습니다.
  • SYSTEM DROP DNS CACHE 쿼리를 수정했습니다. 캐시는 비워졌지만 클러스터 노드 주소가 업데이트되지 않던 문제를 해결했습니다.
  • 뷰가 참조하는 테이블에 대해 DETACH TABLE을 실행한 이후 MATERIALIZED VIEW의 동작을 수정했습니다 (Marek Vavruša).

빌드 개선 사항:

  • 빌드에는 pbuilder 도구를 사용합니다. 빌드 프로세스는 빌드 호스트 환경에 거의 완전히 독립적으로 동작합니다.
  • 서로 다른 OS 버전에서 단일 빌드 결과물을 사용합니다. 패키지와 바이너리는 다양한 Linux 시스템에서 호환되도록 만들었습니다.
  • clickhouse-test 패키지를 추가했습니다. 기능 테스트를 실행하는 데 사용할 수 있습니다.
  • 소스 tarball을 이제 저장소에 게시할 수 있습니다. GitHub을 사용하지 않고도 빌드를 재현하는 데 사용할 수 있습니다.
  • Travis CI와의 제한적인 통합을 추가했습니다. Travis의 빌드 시간 제한으로 인해 디버그 빌드만 테스트되며, 제한된 일부 테스트만 실행됩니다.
  • 기본 빌드에 Cap'n'Proto 지원을 추가했습니다.
  • 문서 소스의 형식을 Restricted Text에서 Markdown으로 변경했습니다.
  • systemd 지원을 추가했습니다(Vladimir Smirnov). 일부 OS 이미지와의 비호환성 때문에 기본적으로 비활성화되어 있으며, 수동으로 활성화할 수 있습니다.
  • 동적 코드 생성을 위해 clanglldclickhouse 바이너리에 내장했습니다. clickhouse clangclickhouse lld로 호출할 수도 있습니다.
  • 코드에서 GNU 확장 기능 사용을 제거했습니다. -Wextra 옵션을 활성화했습니다. clang으로 빌드할 때 기본값은 libstdc++ 대신 libc++입니다.
  • 다양한 도구의 빌드 속도를 높이기 위해 clickhouse_parsersclickhouse_common_io 라이브러리를 분리했습니다.

이전 버전과의 호환성이 없는 변경 사항:

  • Nullable 컬럼을 포함하는 Log 타입 테이블에서 사용되는 마크 포맷이 이전 버전과 호환되지 않는 방식으로 변경되었습니다. 이러한 테이블이 있는 경우, 새 서버 버전을 시작하기 전에 해당 테이블을 TinyLog 타입으로 변환해야 합니다. 이를 위해 metadata 디렉터리의 해당 .sql 파일에서 ENGINE = LogENGINE = TinyLog로 교체하십시오. 테이블에 Nullable 컬럼이 없거나 테이블 타입이 Log가 아니라면 아무 작업도 하지 않아도 됩니다.
  • experimental_allow_extended_storage_definition_syntax 설정이 제거되었습니다. 이제 이 기능은 기본적으로 활성화되어 있습니다.
  • 혼란을 피하기 위해 runningIncome 함수 이름이 runningDifferenceStartingWithFirstvalue로 변경되었습니다.
  • ARRAY JOIN이 FROM 바로 뒤에 테이블 없이 지정되는 FROM ARRAY JOIN arr 구문이 제거되었습니다 (Amos Bird).
  • 시연 목적에만 사용되던 BlockTabSeparated 포맷이 제거되었습니다.
  • 집계 함수 varSamp, varPop, stddevSamp, stddevPop, covarSamp, covarPop, corr의 상태 포맷이 변경되었습니다. 이 집계 함수들의 상태를 테이블에 저장해 두었거나 (AggregateFunction 데이터 타입 사용 또는 해당 상태를 사용하는 구체화된 뷰(materialized view) 사용) 한 경우에는 feedback@clickhouse.com으로 연락해 주십시오.
  • 이전 서버 버전에는 문서화되지 않은 기능이 있었습니다. 집계 함수가 파라미터에 의존하더라도, AggregateFunction 데이터 타입에서 파라미터를 지정하지 않고 사용할 수 있었습니다. 예: AggregateFunction(quantiles, UInt64) (원래는 AggregateFunction(quantiles(0.5, 0.9), UInt64)여야 함). 이 기능은 현재 사라졌습니다. 문서화되지 않았던 기능이지만, 향후 릴리스에서 다시 지원할 계획입니다.
  • Enum 데이터 타입은 min/max 집계 함수에서 사용할 수 없습니다. 이 기능은 다음 릴리스에서 다시 제공될 예정입니다.

업그레이드 시 유의 사항:

  • 클러스터에서 롤링 업데이트를 수행할 때, 일부 레플리카는 이전 버전의 ClickHouse를 실행하고 일부는 새 버전을 실행하는 시점에는 복제가 일시적으로 중지되며, 로그에 unknown parameter 'shard' 메시지가 기록됩니다. 클러스터의 모든 레플리카가 업데이트된 후 복제가 다시 계속됩니다.
  • 클러스터 서버에서 서로 다른 버전의 ClickHouse가 실행 중인 경우, 다음 함수들을 사용하는 분산 쿼리의 결과가 올바르지 않을 수 있습니다: varSamp, varPop, stddevSamp, stddevPop, covarSamp, covarPop, corr. 모든 클러스터 노드를 업데이트해야 합니다.

2017년 변경 로그