v24.10 Changelog for Cloud
Relevant changes for ClickHouse Cloud services based on the v24.10 release.
Backward Incompatible Change
- Allow to write
SETTINGS
beforeFORMAT
in a chain of queries withUNION
when subqueries are inside parentheses. This closes #39712. Change the behavior when a query has the SETTINGS clause specified twice in a sequence. The closest SETTINGS clause will have a preference for the corresponding subquery. In the previous versions, the outermost SETTINGS clause could take a preference over the inner one. #60197#68614 (Alexey Milovidov). - Reimplement Dynamic type. Now when the limit of dynamic data types is reached new types are not casted to String but stored in a special data structure in binary format with binary encoded data type. Now any type ever inserted into Dynamic column can be read from it as subcolumn. #68132 (Pavel Kruglov).
- Expressions like
a[b].c
are supported for named tuples, as well as named subscripts from arbitrary expressions, e.g.,expr().name
. This is useful for processing JSON. This closes #54965. In previous versions, an expression of formexpr().name
was parsed astupleElement(expr(), name)
, and the query analyzer was searching for a columnname
rather than for the corresponding tuple element; while in the new version, it is changed totupleElement(expr(), 'name')
. In most cases, the previous version was not working, but it is possible to imagine a very unusual scenario when this change could lead to incompatibility: if you stored names of tuple elements in a column or an alias, that was named differently than the tuple element's name:SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a
. It is very unlikely that you used such queries, but we still have to mark this change as potentially backward incompatible. #68435 (Alexey Milovidov). - When the setting
print_pretty_type_names
is enabled, it will printTuple
data type in a pretty form inSHOW CREATE TABLE
statements,formatQuery
function, and in the interactive mode inclickhouse-client
andclickhouse-local
. In previous versions, this setting was only applied toDESCRIBE
queries andtoTypeName
. This closes #65753. #68492 (Alexey Milovidov). - Reordering of filter conditions from
[PRE]WHERE
clause is now allowed by default. It could be disabled by settingallow_reorder_prewhere_conditions
tofalse
. #70657 (Nikita Taranov). - Fix
optimize_functions_to_subcolumns
optimization (previously could lead toInvalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String)
error), by preservingLowCardinality
type inmapKeys
/mapValues
. #70716 (Azat Khuzhin).
New Feature
- Function
toStartOfInterval()
now has a new overload which emulates TimescaleDB'stime_bucket()
function, respectively PostgreSQL'sdate_bin()
function. (#55619). It allows to align date or timestamp values to multiples of a given interval from an arbitrary origin (instead of 0000-01-01 00:00:00.000 as fixed origin). For example,SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));
returns2023-01-01 14:44:30
which is a multiple of 1 minute intervals, starting from origin2023-01-01 14:35:30
. #56738 (Yarik Briukhovetskyi). - MongoDB integration refactored: migration to new driver mongocxx from deprecated Poco::MongoDB, remove support for deprecated old protocol, support for connection by URI, support for all MongoDB types, support for WHERE and ORDER BY statements on MongoDB side, restriction for expression unsupported by MongoDB. #63279 (Kirill Nikiforov).
- A new
--progress-table
option in clickhouse-client prints a table with metrics changing during query execution; a new--enable-progress-table-toggle
is associated with the--progress-table
option, and toggles the rendering of the progress table by pressing the control key (Space). #63689 (Maria Khristenko). - This allows to grant access to the wildcard prefixes.
GRANT SELECT ON db.table_pefix_* TO user
. #65311 (pufit). - Introduced JSONCompactWithProgress format where ClickHouse outputs each row as a newline-delimited JSON object, including metadata, data, progress, totals, and statistics. #66205 (Alexey Korepanov).
- Add system.query_metric_log which contains history of memory and metric values from table system.events for individual queries, periodically flushed to disk. #66532 (Pablo Marcos).
- Add the
input_format_json_empty_as_default
setting which, when enabled, treats empty fields in JSON inputs as default values. Closes #59339. #66782 (Alexis Arnaud). - Added functions
overlay
andoverlayUTF8
which replace parts of a string by another string. Example:SELECT overlay('Hello New York', 'Jersey', 11)
returnsHello New Jersey
. #66933 (李扬). - Add new Command, Lightweight Delete In Partition
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;
``` VM-114-29-tos :) select * from ads_app_poster_ip_source_channel_di_replicated_local;. #67805 (sunny). - Implemented comparison for
Interval
data type values so they are converting now to the least supertype. #68057 (Yarik Briukhovetskyi). - Add create_if_not_exists setting to default to IF NOT EXISTS behavior during CREATE statements. #68164 (Peter Nguyen).
- Makes possible to read Iceberg tables in Azure and locally. #68210 (Daniil Ivanik).
- Add aggregate functions distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes for better introspection of JSON column type content. #68463 (Pavel Kruglov).
- Query cache entries can now be dropped by tag. For example, the query cache entry created by
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'
can now be dropped bySYSTEM DROP QUERY CACHE TAG 'abc'
(or of course just:SYSTEM DROP QUERY CACHE
which will clear the entire query cache). #68477 (Michał Tabaszewski). - A simple SELECT query can be written with implicit SELECT to enable calculator-style expressions, e.g.,
ch "1 + 2"
. This is controlled by a new setting,implicit_select
. #68502 (Alexey Milovidov). - Support --copy mode for clickhouse local as a shortcut for format conversion #68503. #68583 (Denis Hananein).
- Added
ripeMD160
function, which computes the RIPEMD-160 cryptographic hash of a string. Example:SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog'))
returns37F332F68DB77BD9D7EDD4969571AD671CF9DD3B
. #68639 (Dergousov Maxim). - Add virtual column _headers for url table engine. Closes #65026. #68867 (flynn).
- Adding
system.projections
table to track available projections. #68901 (Jordi Villar). - Add support for
arrayUnion
function. #68989 (Peter Nguyen). - Add new function
arrayZipUnaligned
for spark compatiablity(arrays_zip), which allowed unaligned arrays based on originalarrayZip
. ``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬). - Support aggreate function
quantileExactWeightedInterpolated
, which is a interpolated version based on quantileExactWeighted. Some people may wonder why we need a newquantileExactWeightedInterpolated
since we already havequantileExactInterpolatedWeighted
. The reason is the new one is more accurate than the old one. BTW, it is for spark compatiability in Apache Gluten. #69619 (李扬). - Support function arrayElementOrNull. It returns null if array index is out of range or map key not found. #69646 (李扬).
- Support Dynamic type in most functions by executing them on internal types inside Dynamic. #69691 (Pavel Kruglov).
- Adds argument
scale
(default:true
) to functionarrayAUC
which allows to skip the normalization step (issue #69609). #69717 (gabrielmcg44). - Re-added
RIPEMD160
function, which computes the RIPEMD-160 cryptographic hash of a string. Example:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))
returns37F332F68DB77BD9D7EDD4969571AD671CF9DD3B
. #70087 (Dergousov Maxim). - Allow to cache read files for object storage table engines and data lakes using hash from ETag + file path as cache key. #70135 (Kseniia Sumarokova).
- Support reading Iceberg tables on HDFS. #70268 (flynn).
- Allow to read/write JSON type as binary string in RowBinary format under settings
input_format_binary_read_json_as_string/output_format_binary_write_json_as_string
. #70288 (Pavel Kruglov). - Allow to serialize/deserialize JSON column as single String column in Native format. For output use setting
output_format_native_write_json_as_string
. For input, use serialization version1
before the column data. #70312 (Pavel Kruglov). - Supports standard CTE,
with insert
, as previously only supportsinsert ... with ...
. #70593 (Shichao Jin).