ClickHouse v21.2.2.8 Release Notes

Release Date: 2021-02-07 // about 3 years ago
  • Backward Incompatible Change

    • Bitwise functions (bitAnd, bitOr, etc) are forbidden for floating point arguments. Now you have to do explicit cast to integer. #19853 (Azat Khuzhin).
    • Forbid lcm/gcd for floats. #19532 (Azat Khuzhin).
    • πŸ›  Fix memory tracking for OPTIMIZE TABLE/merges; account query memory limits and sampling for OPTIMIZE TABLE/merges. #18772 (Azat Khuzhin).
    • πŸ‘€ Disallow floating point column as partition key, see #18421. #18464 (hexiaoting).
    • πŸ‘ Excessive parenthesis in type definitions no longer supported, example: Array((UInt8)).

    πŸ†• New Feature

    • βž• Added PostgreSQL table engine (both select/insert, with support for multidimensional arrays), also as table function. Added PostgreSQL dictionary source. Added PostgreSQL database engine. #18554 (Kseniia Sumarokova).
    • πŸ‘ Data type Nested now supports arbitrary levels of nesting. Introduced subcolumns of complex types, such as size0 in Array, null in Nullable, names of Tuple elements, which can be read without reading of whole column. #17310 (Anton Popov).
    • βž• Added Nullable support for FlatDictionary, HashedDictionary, ComplexKeyHashedDictionary, DirectDictionary, ComplexKeyDirectDictionary, RangeHashedDictionary. #18236 (Maksim Kita).
    • Adds a new table called system.distributed_ddl_queue that displays the queries in the DDL worker queue. #17656 (Bharat Nallan).
    • βž• Added support of mapping LDAP group names, and attribute values in general, to local roles for users from ldap user directories. #17211 (Denis Glazachev).
    • πŸ‘Œ Support insert into table function cluster, and for both table functions remote and cluster, support distributing data across nodes by specify sharding key. Close #16752. #18264 (flynn).
    • βž• Add function decodeXMLComponent to decode characters for XML. Example: SELECT decodeXMLComponent('Hello,"world"!') #17659. #18542 (nauta).
    • βž• Added functions parseDateTimeBestEffortUSOrZero, parseDateTimeBestEffortUSOrNull. #19712 (Maksim Kita).
    • βž• Add sign math function. #19527 (flynn).
    • βž• Add information about used features (functions, table engines, etc) into system.query_log. #18495. #19371 (Kseniia Sumarokova).
    • πŸ‘ Function formatDateTime support the %Q modification to format date to quarter. #19224 (Jianmei Zhang).
    • πŸ‘Œ Support MetaKey+Enter hotkey binding in play UI. #19012 (sundyli).
    • βž• Add three functions for map data type: 1. mapContains(map, key) to check weather map.keys include the second parameter key. 2. mapKeys(map) return all the keys in Array format 3. mapValues(map) return all the values in Array format. #18788 (hexiaoting).
    • βž• Add log_comment setting related to #18494. #18549 (Zijie Lu).
    • βž• Add support of tuple argument to argMin and argMax functions. #17359 (Ildus Kurbangaliev).
    • πŸ‘Œ Support EXISTS VIEW syntax. #18552 (Du Chuan).
    • βž• Add SELECT ALL syntax. closes #18706. #18723 (flynn).

    🐎 Performance Improvement

    • Faster parts removal by lowering the number of stat syscalls. This returns the optimization that existed while ago. More safe interface of IDisk. This closes #19065. #19086 (alexey-milovidov).
    • Aliases declared in WITH statement are properly used in index analysis. Queries like WITH column AS alias SELECT ... WHERE alias = ... may use index now. #18896 (Amos Bird).
    • Add optimize_alias_column_prediction (on by default), that will: - Respect aliased columns in WHERE during partition pruning and skipping data using secondary indexes; - Respect aliased columns in WHERE for trivial count queries for optimize_trivial_count; - Respect aliased columns in GROUP BY/ORDER BY for optimize_aggregation_in_order/optimize_read_in_order. #16995 (sundyli).
    • Speed up aggregate function sum. Improvement only visible on synthetic benchmarks and not very practical. #19216 (alexey-milovidov).
    • 🐎 Update libc++ and use another ABI to provide better performance. #18914 (Danila Kutenin).
    • Rewrite sumIf() and sum(if()) function to countIf() function when logically equivalent. #17041 (flynn).
    • Use a connection pool for S3 connections, controlled by the s3_max_connections settings. #13405 (Vladimir Chebotarev).
    • βž• Add support for zstd long option for better compression of string columns to save space. #17184 (ygrek).
    • 🚀 Slightly improve server latency by removing access to configuration on every connection. #19863 (alexey-milovidov).
    • πŸ”’ Reduce lock contention for multiple layers of the Buffer engine. #19379 (Azat Khuzhin).
    • πŸ‘Œ Support splitting Filter step of query plan into Expression + Filter pair. Together with Expression + Expression merging optimization (#17458) it may delay execution for some expressions after Filter step. #19253 (Nikolai Kochetov).

    πŸ‘Œ Improvement

    • πŸ›  SELECT count() FROM table now can be executed if only one any column can be selected from the table. This PR fixes #10639. #18233 (Vitaly Baranov).
    • πŸ›  Set charset to utf8mb4 when interacting with remote MySQL servers. Fixes #19795. #19800 (alexey-milovidov).
    • πŸ‘ S3 table function now supports auto compression mode (autodetect). This closes #18754. #19793 (Vladimir Chebotarev).
    • Correctly output infinite arguments for formatReadableTimeDelta function. In previous versions, there was implicit conversion to implementation specific integer value. #19791 (alexey-milovidov).
    • Table function S3 will use global region if the region can't be determined exactly. This closes #10998. #19750 (Vladimir Chebotarev).
    • In distributed queries if the setting async_socket_for_remote is enabled, it was possible to get stack overflow at least in debug build configuration if very deeply nested data type is used in table (e.g. Array(Array(Array(...more...)))). This fixes #19108. This change introduces minor backward incompatibility: excessive parenthesis in type definitions no longer supported, example: Array((UInt8)). #19736 (alexey-milovidov).
    • βž• Add separate pool for message brokers (RabbitMQ and Kafka). #19722 (Azat Khuzhin).
    • Fix rare max_number_of_merges_with_ttl_in_pool limit overrun (more merges with TTL can be assigned) for non-replicated MergeTree. #19708 (alesapin).
    • πŸ“œ Dictionary: better error message during attribute parsing. #19678 (Maksim Kita).
    • βž• Add an option to disable validation of checksums on reading. Should never be used in production. Please do not expect any benefits in disabling it. It may only be used for experiments and benchmarks. The setting only applicable for tables of MergeTree family. Checksums are always validated for other table engines and when receiving data over network. In my observations there is no performance difference or it is less than 0.5%. #19588 (alexey-milovidov).
    • πŸ‘Œ Support constant result in function multiIf. #19533 (Maksim Kita).
    • Enable function length/empty/notEmpty for datatype Map, which returns keys number in Map. #19530 (taiyang-li).
    • βž• Add --reconnect option to clickhouse-benchmark. When this option is specified, it will reconnect before every request. This is needed for testing. #19872 (alexey-milovidov).
    • πŸ‘Œ Support using the new location of .debug file. This fixes #19348. #19520 (Amos Bird).
    • πŸ“œ toIPv6 function parses IPv4 addresses. #19518 (Bharat Nallan).
    • Add http_referer field to system.query_log, system.processes, etc. This closes #19389. #19390 (alexey-milovidov).
    • πŸ‘Œ Improve MySQL compatibility by making more functions case insensitive and adding aliases. #19387 (Daniil Kondratyev).
    • βž• Add metrics for MergeTree parts (Wide/Compact/InMemory) types. #19381 (Azat Khuzhin).
    • πŸ‘ Allow docker to be executed with arbitrary uid. #19374 (filimonov).
    • πŸ›  Fix wrong alignment of values of IPv4 data type in Pretty formats. They were aligned to the right, not to the left. This closes #19184. #19339 (alexey-milovidov).
    • Allow change max_server_memory_usage without restart. This closes #18154. #19186 (alexey-milovidov).
    • πŸ›  The exception when function bar is called with certain NaN argument may be slightly misleading in previous versions. This fixes #19088. #19107 (alexey-milovidov).
    • πŸ›  Explicitly set uid / gid of clickhouse user & group to the fixed values (101) in clickhouse-server images. #19096 (filimonov).
    • πŸ›  Fixed PeekableReadBuffer: Memory limit exceed error when inserting data with huge strings. Fixes #18690. #18979 (tavplubix).
    • 🐳 Docker image: several improvements for clickhouse-server entrypoint. #18954 (filimonov).
    • βž• Add normalizeQueryKeepNames and normalizedQueryHashKeepNames to normalize queries without masking long names with ?. This helps better analyze complex query logs. #18910 (Amos Bird).
    • Check per-block checksum of the distributed batch on the sender before sending (without reading the file twice, the checksums will be verified while reading), this will avoid stuck of the INSERT on the receiver (on truncated .bin file on the sender). Avoid reading .bin files twice for batched INSERT (it was required to calculate rows/bytes to take squashing into account, now this information included into the header, backward compatible is preserved). #18853 (Azat Khuzhin).
    • πŸ›  Fix issues with RIGHT and FULL JOIN of tables with aggregate function states. In previous versions exception about cloneResized method was thrown. #18818 (templarzq).
    • βž• Added prefix-based S3 endpoint settings. #18812 (Vladimir Chebotarev).
    • βž• Add [UInt8, UInt16, UInt32, UInt64] arguments types support for bitmapTransform, bitmapSubsetInRange, bitmapSubsetLimit, bitmapContains functions. This closes #18713. #18791 (sundyli).
    • Allow CTE (Common Table Expressions) to be further aliased. Propagate CSE (Common Subexpressions Elimination) to subqueries in the same level when enable_global_with_statement = 1. This fixes #17378 . This fixes https://github.com/ClickHouse/ClickHouse/pull/16575#issuecomment-753416235 . #18684 (Amos Bird).
    • ⚑️ Update librdkafka to v1.6.0-RC2. Fixes #18668. #18671 (filimonov).
    • πŸ›  In case of unexpected exceptions automatically restart background thread which is responsible for execution of distributed DDL queries. Fixes #17991. #18285 (εΎη‚˜).
    • ⚑️ Updated AWS C++ SDK in order to utilize global regions in S3. #17870 (Vladimir Chebotarev).
    • Added support for WITH ... [AND] [PERIODIC] REFRESH [interval_in_sec] clause when creating LIVE VIEW tables. #14822 (vzakaznikov).
    • πŸ”€ Restrict MODIFY TTL queries for MergeTree tables created in old syntax. Previously the query succeeded, but actually it had no effect. #19064 (Anton Popov).

    πŸ› Bug Fix

    • πŸ›  Fix index analysis of binary functions with constant argument which leads to wrong query results. This fixes #18364. #18373 (Amos Bird).
    • πŸ›  Fix starting the server with tables having default expressions containing dictGet(). Allow getting return type of dictGet() without loading dictionary. #19805 (Vitaly Baranov).
    • πŸ›  Fix server crash after query with if function with Tuple type of then/else branches result. Tuple type must contain Array or another complex type. Fixes #18356. #20133 (alesapin).
    • ⚑️ MaterializeMySQL (experimental feature): Fix replication for statements that update several tables. #20066 (HΓ₯vard KvΓ₯len).
    • 🐳 Prevent "Connection refused" in docker during initialization script execution. #20012 (filimonov).
    • EmbeddedRocksDB is an experimental storage. Fix the issue with lack of proper type checking. Simplified code. This closes #19967. #19972 (alexey-milovidov).
    • πŸ›  Fix a segfault in function fromModifiedJulianDay when the argument type is Nullable(T) for any integral types other than Int32. #19959 (PHO).
    • The function greatCircleAngle returned inaccurate results in previous versions. This closes #19769. #19789 (alexey-milovidov).
    • πŸ›  Fix rare bug when some replicated operations (like mutation) cannot process some parts after data corruption. Fixes #19593. #19702 (alesapin).
    • πŸ›  Background thread which executes ON CLUSTER queries might hang waiting for dropped replicated table to do something. It's fixed. #19684 (yiguolei).
    • πŸ›  Fix wrong deserialization of columns description. It makes INSERT into a table with a column named \ impossible. #19479 (alexey-milovidov).
    • Mark distributed batch as broken in case of empty data block in one of files. #19449 (Azat Khuzhin).
    • πŸ›  Fixed very rare bug that might cause mutation to hang after DROP/DETACH/REPLACE/MOVE PARTITION. It was partially fixed by #15537 for the most cases. #19443 (tavplubix).
    • πŸ›  Fix possible error Extremes transform was already added to pipeline. Fixes #14100. #19430 (Nikolai Kochetov).
    • πŸ›  Fix default value in join types with non-zero default (e.g. some Enums). Closes #18197. #19360 (vdimir).
    • Do not mark file for distributed send as broken on EOF. #19290 (Azat Khuzhin).
    • Fix leaking of pipe fd for async_socket_for_remote. #19153 (Azat Khuzhin).
    • πŸ›  Fix infinite reading from file in ORC format (was introduced in #10580). Fixes #19095. #19134 (Nikolai Kochetov).
    • πŸ›  Fix issue in merge tree data writer which can lead to marks with bigger size than fixed granularity size. Fixes #18913. #19123 (alesapin).
    • πŸ›  Fix startup bug when clickhouse was not able to read compression codec from LowCardinality(Nullable(...)) and throws exception Attempt to read after EOF. Fixes #18340. #19101 (alesapin).
    • πŸ›  Simplify the implementation of tupleHammingDistance. Support for tuples of any equal length. Fixes #19029. #19084 (Nikolai Kochetov).
    • πŸ‘‰ Make sure groupUniqArray returns correct type for argument of Enum type. This closes #17875. #19019 (alexey-milovidov).
    • πŸ›  Fix possible error Expected single dictionary argument for function if use function ignore with LowCardinality argument. Fixes #14275. #19016 (Nikolai Kochetov).
    • πŸ›  Fix inserting of LowCardinality column to table with TinyLog engine. Fixes #18629. #19010 (Nikolai Kochetov).
    • πŸ›  Fix minor issue in JOIN: Join tries to materialize const columns, but our code waits for them in other places. #18982 (Nikita Mikhaylov).
    • 🚚 Disable optimize_move_functions_out_of_any because optimization is not always correct. This closes #18051. This closes #18973. #18981 (alexey-milovidov).
    • πŸ›  Fix possible exception QueryPipeline stream: different number of columns caused by merging of query plan's Expression steps. Fixes #18190. #18980 (Nikolai Kochetov).
    • πŸ›  Fixed very rare deadlock at shutdown. #18977 (tavplubix).
    • πŸ›  Fixed rare crashes when server run out of memory. #18976 (tavplubix).
    • πŸ›  Fix incorrect behavior when ALTER TABLE ... DROP PART 'part_name' query removes all deduplication blocks for the whole partition. Fixes #18874. #18969 (alesapin).
    • πŸ›  Fixed issue #18894 Add a check to avoid exception when long column alias('table.column' style, usually auto-generated by BI tools like Looker) equals to long table name. #18968 (Daniel Qin).
    • Fix error Task was not found in task queue (possible only for remote queries, with async_socket_for_remote = 1). #18964 (Nikolai Kochetov).
    • πŸ›  Fix bug when mutation with some escaped text (like ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1') serialized incorrectly. Fixes #18878. #18944 (alesapin).
    • ATTACH PARTITION will reset mutations. #18804. #18935 (fastio).
    • πŸ›  Fix issue with bitmapOrCardinality that may lead to nullptr dereference. This closes #18911. #18912 (sundyli).
    • πŸ›  Fixed Attempt to read after eof error when trying to CAST NULL from Nullable(String) to Nullable(Decimal(P, S)). Now function CAST returns NULL when it cannot parse decimal from nullable string. Fixes #7690. #18718 (Winter Zhang).
    • πŸ›  Fix data type convert issue for MySQL engine. #18124 (bo zeng).
    • πŸ›  Fix clickhouse-client abort exception while executing only select. #19790 (taiyang-li).

    πŸ— Build/Testing/Packaging Improvement