ClickHouse リリースタグ: 24.2.2.15987
互換性のない変更
- ネストされた型における疑わしい/実験的な型を検証します。以前は、Array/Tuple/Mapのようなネストされた型内でそのような型(JSONを除く)を検証していませんでした。#59385 (Kruglov Pavel).
- ソート句
ORDER BY ALL
(v23.12で導入)は ORDER BY *
に置き換えられました。以前の構文は、列 all
を持つテーブルに対してエラーが発生しやすすぎました。#59450 (Robert Schulze).
- スレッド数とブロックサイズに対する健全性チェックを追加しました。#60138 (Raúl Marín).
- クエリレベルの設定
async_insert
と deduplicate_blocks_in_dependent_materialized_views
が同時に有効な場合、受信INSERTクエリを拒否します。この動作は設定 throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert
によって管理され、デフォルトで有効です。これは、https://github.com/ClickHouse/ClickHouse/pull/59699 の継続であり、https://github.com/ClickHouse/ClickHouse/pull/59915 を解除するために必要です。#60888 (Nikita Mikhaylov).
- ユーティリティ
clickhouse-copier
がGitHubの別のリポジトリに移動しました: https://github.com/ClickHouse/copier。バンドルにはもはや含まれなくなりましたが、別途ダウンロード可能です。これにより、次の問題が解決されます: #60734 #60540 #60250 #52917 #51140 #47517 #47189 #46598 #40257 #36504 #35485 #33702 #26702 ### ユーザー向け変更のドキュメントエントリ。#61058 (Nikita Mikhaylov).
- MySQLとの互換性を高めるために、関数
locate
はデフォルトで引数 (needle, haystack[, start_pos])
を受け入れるようになりました。以前の動作 (haystack, needle, [, start_pos])
は、設定 function_locate_has_mysql_compatible_argument_order = 0
によって復元可能です。#61092 (Robert Schulze).
- 23.5 バージョン以降、メモリ内データパーツは非推奨となり、23.10 バージョン以降はサポートされなくなりました。現在、残りのコードは削除されました。これは#55186および#45409の継続です。メモリ内データパーツを使用している可能性は低いですが、それらは23.5バージョン以前の手動で設定された MergeTree テーブルにのみ存在していました。メモリ内データパーツがあるかどうかを確認するには、次のクエリを実行します:
SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type
。メモリ内データパーツの使用を無効にするには、ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT
を実行します。古いClickHouseリリースからアップグレードする前に、まずメモリ内データパーツがないことを確認してください。もしある場合は、最初にそれらを無効にし、次にそれらが存在しないことを確認してからアップグレードを続行します。#61127 (Alexey Milovidov).
MergeTree
テーブルの ORDER BY
で SimpleAggregateFunction
を禁止します(AggregateFunction
が禁止されているのと同様ですが、比較可能でないため禁止されています)。デフォルトで禁止されています(許可するには allow_suspicious_primary_key
を使用します)。#61399 (Azat Khuzhin).
- ClickHouseでは、Stringデータ型に任意のバイナリデータを許可しますが、通常はUTF-8です。Parquet/ORC/ArrowのStringはUTF-8のみをサポートします。このため、ClickHouseのStringデータ型に使用するArrowのデータ型 - StringまたはBinaryを選択できます。これは設定
output_format_parquet_string_as_string
、output_format_orc_string_as_string
、output_format_arrow_string_as_string
によって管理されます。Binaryの方がより正確で互換性が高いですが、デフォルトでStringを使用することは、ほとんどの場合ユーザーの期待に一致します。Parquet/ORC/Arrowは、lz4やzstdなどの多くの圧縮方法をサポートします。ClickHouseはすべての圧縮方法をサポートしています。一部の劣ったツールは、より速い lz4
圧縮方法をサポートしていないため、デフォルトで zstd
を設定しています。これは設定 output_format_parquet_compression_method
、output_format_orc_compression_method
、output_format_arrow_compression_method
によって管理されます。ParquetおよびORCのデフォルトを zstd
に変更しましたが、Arrowについては変更していません(これは低レベルの使用のために強調されています)。#61817 (Alexey Milovidov).
- マテリアライズドビューのセキュリティ問題の修正により、ユーザーが必要な権限なしにテーブルに挿入できることを防止しました。修正により、ユーザーがマテリアライズドビューだけでなく、すべての基になるテーブルへの挿入の権限を持っていることが検証されます。これにより、以前は動作していたクエリが、現在は十分な権限がないために失敗することがあります。この問題に対処するために、リリースにおいてSQLビューのセキュリティの新機能が導入されます https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security。#54901 (pufit)
新機能
- Topk/topkweighed サポートモードが追加され、値のカウントとそのエラーを返します。#54508 (UnamedRus).
- View/Materialized View内で定義者ユーザーを指定できる新しい構文が追加されました。これにより、基になるテーブルに対する明示的な権限なしでビューからの選択/挿入が実行可能になります。#54901 (pufit).
- 異なる種類のマージツリー テーブルを複製エンジンに自動的に変換する機能を実装しました。テーブルのデータディレクトリに空の
convert_to_replicated
ファイルを作成すると、そのテーブルは次回のサーバー起動時に自動的に変換されます。#57798 (Kirill).
MergeTree
テーブルのインデックスおよびマークファイルの内容を表すテーブル関数 mergeTreeIndex
が追加されました。これは透視に使用できます。構文: mergeTreeIndex(database, table, [with_marks = true])
で、database.table
は MergeTree
エンジンを持つ既存のテーブルです。#58140 (Anton Popov).
- スキーマ推論中に形式が未知の場合、自動的にファイル形式を検出しようとします。これにより #50576 が解決されます。#59092 (Kruglov Pavel).
- 自然数の算術数列を生成するテーブル関数として
generate_series
を追加しました。#59390 (divanik).
- 空のパーティションに関連するZooKeeperノードを削除するクエリ
ALTER TABLE table FORGET PARTITION partition
が追加されました。#59507 (Sergei Trifonov).
- tarアーカイブとしてのバックアップの読み書きをサポートします。#59535 (josh-hildred).
- 新しい集約関数「groupArrayIntersect」を提供します。これは#49862のフォローアップです。#59598 (Yarik Briukhovetskyi).
- DNSの問題をデバッグするために有用な system.dns_cache テーブルを実装しました。#59856 (Kirill Nikiforov).
- S3Expressバケットのサポートを実装しました。#59965 (Nikita Taranov).
- コーデック
LZ4HC
は以前の最小レベル3よりも速い新しいレベル2を受け入れますが、圧縮率は低下します。以前のバージョンでは、LZ4HC(2)
以下は LZ4HC(3)
と同じでした。著者: Cyan4973。#60090 (Alexey Milovidov).
- DNSの問題をデバッグするために有用な system.dns_cache テーブルを実装しました。新しいサーバー設定 dns_cache_max_size.#60257 (Kirill Nikiforov).
toMillisecond
関数が追加され、DateTime
または DateTime64
型の値に対するミリ秒コンポーネントを返します。#60281 (Shaun Struwig).
- マージテーブル関数の単一引数バージョンをサポートします。
merge(['db_name', ] 'tables_regexp')
として。#60372 (豪肥肥).
- すべてのフォーマット名を大文字小文字区別なしにします。Tsv、TSV、tsv、またはrowbinaryのように。#60420 (豪肥肥).
- View/Materialized View 内で定義者ユーザーを指定できる新しい構文が追加されました。これにより、基になるテーブルに対する明示的な権限なしでビューからの選択/挿入が実行可能になります。#60439 (pufit).
StorageMemory
(メモリエンジン) に min_bytes_to_keep
, max_bytes_to_keep
, min_rows_to_keep
および max_rows_to_keep
の4つのプロパティを追加しました - 新しい変更を反映するためのテストを追加 - memory.md
ドキュメントを更新 - MemorySink
にテーブルパラメータ境界にアクセスするためのテーブル context
プロパティを追加しました。#60612 (Jake Bamrah).
toMillisecond
関数が追加され、DateTime
または DateTime64
型の値に対するミリ秒コンポーネントを返します。#60649 (Robert Schulze).
- 待機中および実行中のクエリの数に関する制限を分けます。新しいサーバー設定
max_waiting_queries
が追加され、async_load_databases
のために待機しているクエリの数を制限します。既存の実行中のクエリに対する制限は、もはや待機中のクエリをカウントしません。#61053 (Sergei Trifonov).
ATTACH PARTITION ALL
のサポートを追加します。#61107 (Kirill Nikiforov).
- SELECTセクションにおけるGROUP BYキーのmin/max/any/anyLast集約器を排除します。#52230 (JackyWoo).
- nullableカラムを複数含む場合のシリアライズ集約メソッドのパフォーマンスを向上させます。これは、抽象性の整合性を損なうことなく、#51399の一般型です。#55809 (Amos Bird).
- ALL結合のパフォーマンスを向上させるために、結合出力を遅延ビルドします。#58278 (LiuNeng).
- ArgMin / ArgMax / any / anyLast / anyHeavy集約関数、および
ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1
クエリの改善。#58640 (Raúl Marín).
- bigintおよびbig decimal型の条件付きsum/avgのパフォーマンスを最適化し、ブランチミスを減少させます。#59504 (李扬).
- アクティブなミューテーションによるSELECTのパフォーマンスを向上させます。#59531 (Azat Khuzhin).
- 列フィルターのトリビアルな最適化。フィルタリングされる数値データ型でないフィルター列を避け、
result_size_hint = -1
を設定します。最大メモリ使用量を元の44%に削減できる場合があります。#59698 (李扬).
- 主キーが使用するメモリ量が減少します。#60049 (Alexey Milovidov).
- 主キーとその他の操作のメモリ使用量を改善します。#60050 (Alexey Milovidov).
- テーブルの主キーは、最初のアクセス時に遅延してメモリに読み込まれます。これは、デフォルトでオンの新しいMergeTree設定
primary_key_lazy_load
によって制御されます。これにはいくつかの利点があります: - 使用されていないテーブルにはロードされません; - メモリが不足している場合は、サーバーの起動時ではなく、最初の使用時に例外がスローされます。これにはいくつかの欠点もあります: - 主キーのロードの遅延は最初のクエリで支払われます; - これは理論的にはサンダリングハード問題を引き起こす可能性があります。これにより, #11188 が解決されます。#60093 (Alexey Milovidov).
- ベクター検索に便利なベクトル化された関数
dotProduct
を実装しました。#60202 (Robert Schulze).
- テーブルの主キーがほとんど役に立たないカラムを含む場合は、それらをメモリに保持しません。これは新しい設定
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns
によって制御され、デフォルトで値は 0.9
です。これは、コンポジット主キーの場合、あるカラムが90%以上の割合で値を変更する場合、次のカラムはロードされないことを意味します。#60255 (Alexey Milovidov).
- 結果タイプの基になるタイプが数値の場合、multiIf関数を列指向的に実行します。#60384 (李扬).
- 図1に示されるように、「&&」を「&」に置き換えることでSIMDコードを生成できる可能性があります。
図1. '&&'(左)および '&'(右)からコンパイルされたコード。#60498 (Zhiguo Zhou).
- mutexの速度がほぼ2倍高速化されました(ThreadFuzzerのために遅くなっていました)。#60823 (Azat Khuzhin).
- 接続の排出を準備から作業に移動し、複数の接続を並行して排出します。#60845 (lizhuoyu5).
- nullableな数値またはnullableな文字列のinsertManyFromを最適化しました。#60846 (李扬).
- 不要なメモリコピーを省略するように
dotProduct
関数を最適化しました。#60928 (Robert Schulze).
- ファイルシステムキャッシュとの操作は、ロック競合の影響を軽減します。#61066 (Alexey Milovidov).
- ColumnString::replicateを最適化し、memcpySmallAllowReadWriteOverflow15Implの最適化を防止します。 #61074 により、ColumnString::replicateはx86-64で2.46倍の速度向上を実現しました。#61075 (李扬).
- 256ビット整数の印刷速度が30倍高速化されました。#61100 (Raúl Marín).
- 構文エラーのあるクエリがCOLUMNSマッチャを正規表現を含む場合、パーサのバックトラッキング中に正規表現が毎回コンパイルされ、1回だけコンパイルされるべきではありませんでした。これは根本的なエラーでした。コンパイルされた正規表現はASTに入れられました。ASTの文字Aは「抽象」を意味し、重たいオブジェクトを含むべきではありません。ASTの部品は、パース中に作成され、廃棄される可能性があります。バックトラッキングが多くなる可能性があるため、これはパース側の遅さを引き起こし、結果として読み取り専用ユーザーによるDoSを可能にします。しかし、主な問題は、それがファズテストの進展を妨げることです。#61543 (Alexey Milovidov).
バグ修正 (公式の安定リリースにおけるユーザー可視の誤動作)