v24.2 チェンジログ
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).
バグ修正 (公式の安定リリースにおけるユーザー可視の誤動作)
intDiv
の小数引数に関するバグを修正 #59243 (Yarik Briukhovetskyi).- wingfuzz によって見つかった kql の問題を修正 #59626 (Yong Wang).
- AsynchronousBoundedReadBuffer における "Read beyond last offset" エラーを修正 #59630 (Vitaly Baranov).
- rabbitmq: acked でも nacked でもないメッセージを持たない状態を修正 #59775 (Kseniia Sumarokova).
- const と LOWCARDINALITY に対する関数実行を修正、アナライザーの GROUP BY const #59986 (Azat Khuzhin).
- DateTime64 のスケール変換を修正 #60004 (Yarik Briukhovetskyi).
- 単一引用符を使った SQLite への INSERT 修正 (バックスラッシュの代わりに引用符で単一引用符をエスケープする) #60015 (Azat Khuzhin).
- optimize_uniq_to_count がカラムエイリアスを削除するバグを修正 #60026 (Raúl Marín).
- MergeTree に対する finished_mutations_to_keep=0 を修正 (ドキュメントには0はすべてを保持するためと記載されている) #60031 (Azat Khuzhin).
- ドロップ時に s3queue テーブルからの可能な例外を修正 #60036 (Kseniia Sumarokova).
- 同じパーツの PartsSplitter の無効範囲を修正 #60041 (Maksim Kita).
- DDLLogEntry 内でハードコーディングされている 4096 の代わりにコンテキストから max_query_size を使用 #60083 (Kruglov Pavel).
- クエリの不整合なフォーマットを修正 #60095 (Alexey Milovidov).
- サブクエリ内の explain の不整合なフォーマットを修正 #60102 (Alexey Milovidov).
- Nullable との cosinedistance クラッシュを修正 #60150 (Raúl Marín).
- bool の文字列表現を真の bool にキャストできるように #60160 (Robert Schulze).
- system.s3queue_log を修正 #60166 (Kseniia Sumarokova).
- nullable 集約関数名での arrayReduce を修正 #60188 (Raúl Marín).
- 事前フィルタリング (PK, パーティション プルーニング) 中のアクション実行を修正 #60196 (Azat Khuzhin).
- s3queue の機密情報を非表示に #60233 (Kseniia Sumarokova).
- "ORDER BY ALL" を "ORDER BY *" に置き換えるのを元に戻す #60248 (Robert Schulze).
- Azure Blob Storage: エンドポイントとプレフィックスの問題を修正 #60251 (SmitaRKulkarni).
- http例外コードを修正 #60252 (Austin Kothig).
- LRUResource Cache のバグを修正 (Hive キャッシュ) #60262 (shanfengp).
- s3queue: バグを修正 (test_storage_s3_queue/test.py::test_shards_distributed のフレークテストも修正) #60282 (Kseniia Sumarokova).
- IPv6 でのハッシュ関数での未初期化値の使用と無効な結果を修正 #60359 (Kruglov Pavel).
- パラレルレプリカが変更された場合、再分析を強制 #60362 (Raúl Marín).
- 新しいディスク設定オプションでプレーンメタデータタイプを使用する問題を修正 #60396 (Kseniia Sumarokova).
- 理由がないため max_parallel_replicas を 0 に設定することを許可しない #60430 (Kruglov Pavel).
- mapContainsKeyLike で 'Cannot capture column because it has incompatible type' の論理エラーを修正を試みる #60451 (Kruglov Pavel).
- null 引数で OptimizeDateOrDateTimeConverterWithPreimageVisitor を修正 #60453 (Raúl Marín).
- CREATE TABLE のためのスカラサブクエリの計算を回避試み #60464 (Nikolai Kochetov).
- マージ #59674. #60470 (Alexey Milovidov).
- s3Cluster でのキーを正しく確認 #60477 (Antonio Andelic).
- 多くの行がエラーのためスキップされた場合のパラレルパース時のデッドロックを修正 #60516 (Kruglov Pavel).
- fix_kql_compound_operator に対する max_query_size 修正: #60534 (Yong Wang).
- Keeper 修正: コミットログを待っている間のタイムアウトを追加 #60544 (Antonio Andelic).
system.numbers
からの行読み取り数を減らす #60546 (JackyWoo).- 日付型に対して数値ヒントを出力しない #60577 (Raúl Marín).
- フィルター内の非決定論的関数を持つ MergeTree からの読み取りを修正 #60586 (Kruglov Pavel).
- 不適切な互換設定値タイプの論理エラーを修正 #60596 (Kruglov Pavel).
- 混合 x86-64 / ARM クラスタにおける集約関数の状態の不整合を修正 #60610 (Harry Lee).
- fix(prql): 安定したパニックハンドラー #60615 (Maximilian Roos).
- decimal と date 引数の
intDiv
を修正 #60672 (Yarik Briukhovetskyi). - alter modify クエリでの CTE を展開する修正 #60682 (Yakov Olkhovskiy).
- 非 Atomic/Ordinary データベースエンジン (i.e. Memory) に対する system.parts を修正 #60689 (Azat Khuzhin).
- パラメータ化されたビューに対する "Invalid storage definition in metadata file" を修正 #60708 (Azat Khuzhin).
- CompressionCodecMultiple におけるバッファオーバーフローを修正 #60731 (Alexey Milovidov).
- SQL/JSON からナンセンスを削除 #60738 (Alexey Milovidov).
- 集約関数 quantileGK での不正なサニタイズチェックを削除 #60740 (李扬).
- insert-select + insert_deduplication_token バグを修正、ストリームを 1 に設定 #60745 (Jordi Villar).
- サポートされていないマルチパートアップロード操作に対するカスタムメタデータヘッダーの設定を防止 #60748 (Francisco J. Jurado Moreno).
- toStartOfInterval を修正 #60763 (Andrey Zvonov).
- arrayEnumerateRanked におけるクラッシュを修正 #60764 (Raúl Marín).
- INSERT SELECT JOIN における input() 使用時のクラッシュを修正 #60765 (Kruglov Pavel).
- サブクエリ内での異なる allow_experimental_analyzer 値によるクラッシュを修正 #60770 (Dmitry Novik).
- S3 からの読み取り時に再帰を削除 #60849 (Antonio Andelic).
- HashedDictionaryParallelLoader でのエラー時のスタックを防ぐ可能性を修正 #60926 (vdimir).
- レプリケートデータベースでの非同期 RESTORE を修正 #60934 (Antonio Andelic).
- ネイティブプロトコルを通じた
Log
テーブルへの非同期挿入時のデッドロックを修正 #61055 (Anton Popov). - RangeHashedDictionary に対する dictGetOrDefault のデフォルト引数の遅延実行を修正 #61196 (Kruglov Pavel).
- groupArraySorted における複数のバグを修正 #61203 (Raúl Marín).
- スタンドアロンバイナリのための Keeper 再構成を修正 #61233 (Antonio Andelic).
- S3 エンジンにおける session_token の使用を修正 #61234 (Kruglov Pavel).
- 集約関数
uniqExact
の結果が不正である可能性を修正 #61257 (Anton Popov). - データベース表示に関するバグを修正 #61269 (Raúl Marín).
- MATERIALIZED カラムを含む RabbitMQ ストレージにおける論理エラーを修正 #61320 (vdimir).
- CREATE OR REPLACE DICTIONARY を修正 #61356 (Vitaly Baranov).
- 外部 ON CLUSTER を持つ ATTACH クエリを修正 #61365 (Nikolay Degterinsky).
- アクション DAG 分割の問題を修正 #61458 (Raúl Marín).
- 失敗した RESTORE を完了するための修正 #61466 (Vitaly Baranov).
- 互換設定に正しく依存して async_insert_use_adaptive_busy_timeout を無効化 #61468 (Raúl Marín).
- 復元プールでのキューイングを許可 #61475 (Nikita Taranov).
- UUID を使って system.parts を読み込む際のバグを修正 (問題 61220) #61479 (Dan Wu).
- ウィンドウビューにおけるクラッシュを修正 #61526 (Alexey Milovidov).
- 非ネイティブ整数との
repeat
を修正 #61527 (Antonio Andelic). - クライアントの
-s
引数を修正 #61530 (Mikhail f. Shiryaev). - arrayPartialReverseSort におけるクラッシュを修正 #61539 (Raúl Marín).
- 定数位置での文字列検索を修正 #61547 (Antonio Andelic).
- datetime64 使用時に addDays がエラーを引き起こすことを修正 #61561 (Shuai li).
- 重複排除を持つ非同期挿入用の
system.part_log
を修正 #61620 (Antonio Andelic). - system.parts に対する非準備状態を修正 #61666 (Nikolai Kochetov).