StarRocks version 3.4
3.4.8
リリース日:2025年9月30日
動作変更
enable_lake_tablet_internal_parallelをtrueに設定すると、共有データクラスタにおけるクラウドネイティブテーブルの並列スキャンがデフォルトで有効になり、クエリ単位の内部並列度が向上します。ただし、ピーク時のリソース使用量が増加する可能性があります。 #62159
バグ修正
以下の問題を修正しました:
- Delta Lake のパーティション列名が強制的に小文字に変換され、実際の列名と不一致となる問題。 #62953
- Iceberg の manifest キャッシュ削除時の競合により NullPointerException (NPE) が発生する可能性。 #63052 #63043
- Iceberg スキャンフェーズで捕捉されなかった例外によりスキャン範囲のサブミットが中断され、メトリクスが生成されない問題。 #62994
- 複雑な多層の投影ビューを用いたマテリアライズドビューのリライトで無効な計画や列統計の欠落が発生。 #62918 #62198
- Hive テーブルベースのマテリアライズドビューにおいて、パーティション列の大文字小文字の不一致が誤って拒否される問題。 #62598
- マテリアライズドビューのリフレッシュが作成者のデフォルトロールのみを使用していたため、権限不足が発生する問題。 #62396
- リストパーティション型のマテリアライズドビューでパーティション名が大文字小文字を区別しない場合、重複名エラーが発生する問題。 #62389
- マテリアライズドビューの復元失敗後に残るバージョンマッピングが原因で、以降の増分リフレッシュがスキップされ空結果を返す問題。 #62634
- マテリアライズドビューの復元後に異常なパーティションが存在すると FE 再起動時に NullPointerException が発生。 #62563
- グローバル集計でないクエリに対して集計プッシュダウンのリライトが誤って適用され、無効な計画が生成される問題。 #63060
- タブレットの削除状態がメモリ内でのみ更新され永続化されなかったため、GC が実行中と判断し回収をスキップする問題。 #63623
- クエリとタブレット削除の並行実行により delvec が早期にクリーンアップされ、「no delete vector found」エラーが発生。 #63291
- 主キーインデックスで Base Compaction と Cumulative Compaction が同じ
max_rss_rowidを共有していた問題。 #63277 - LakePersistentIndex のデストラクタが初期化失敗後に実行されると BE がクラッシュする可能性。 #62279
- Publish スレッドプールの優雅なシャットダウンでキューに残っていたタスクが失敗としてマークされず破棄され、バージョンの欠落や「すべて成功」の誤認を招く問題。 #62417
- リバランス時に新規追加された BE 上の新しい複製が即座に冗長と判断され削除され、データ移行が妨げられる問題。 #62542
- タブレットの最大バージョンを読み取る際にロックが欠落し、複製トランザクションの決定が不整合となる問題。 #62238
date_truncの等価条件と生の列範囲述語の組み合わせが点区間に簡約され、空の結果セットが返る問題(例:date_trunc('month', dt)='2025-09-01' AND dt>'2025-09-23')。 #63464- 非決定的述語(ランダム/時間関数)のプッシュダウンにより結果が不一致となる問題。 #63495
- CTE の再利用判断後に consumer ノードが欠落し、実行計画が不完全になる問題。 #62784
- テーブル関数と低カーディナリティ辞書エンコードが共存する場合の型不一致クラッシュ。 #62466 #62292
- 大規模 CSV が並列フラグメントに分割される際、各フラグメントがヘッダー行をスキップしてデータが欠落する問題。 #62719
SHOW CREATE ROUTINE LOADがデータベースを明示しない場合、同名の他データベースのジョブを返す問題。 #62745- ロードジョブの並行クリーンアップ中に
sameLabelJobsが null となり NullPointerException が発生する問題。 #63042 - すべてのタブレットがリサイクルビンに移動済みであるにもかかわらず BE のデコミッションがブロックされる問題。 #62781
OPTIMIZE TABLEタスクがスレッドプール拒否後に PENDING 状態で停止する問題。 #62300- 汚れたタブレットメタデータのクリーンアップで GTID 引数の順序が誤っていた問題。 #62275
3.4.7
リリース日:2025年9月1日
バグ修正
以下の問題を修正しました:
- Routine Load ジョブが
max_filter_ratioをシリアライズしていませんでした。 #61755 - Stream Load の
now(precision)関数で精度パラメータが失われる問題。 #61721 - Audit Log において、
INSERT INTO SELECT文の Scan Rows 結果が正確ではありませんでした。 #61381 - クラスターを v3.4.5 にアップグレードした後、
fslib read iops指標がアップグレード前より高くなる問題。 #61724 - JDBC Catalog を使用して SQLServer にクエリすると、クエリが頻繁にハングする問題。 #61719
3.4.6
リリース日:2025年8月7日
改善点
INSERT INTO FILESでデータを Parquet ファイルにエクスポートする際に、parquet.versionを指定してエクスポートする Parquet ファイルのバージョンを選べるようになりました。他のツールでエクスポートされた Parquet ファイルを読み取る際の互換性が向上します。 #60843
バグ修正
以下の問題を修正しました:
TableMetricsManagerにおけるロックの粒度が大きすぎて、インポートジョブが失敗する問題。 #58911FILES()を使用して Parquet データをインポートする際、列名が大文字小文字を区別していた問題。 #61059- ストレージとコンピュートが分離されたクラスタを v3.3 から v3.4 以降にアップグレードした後、キャッシュが有効にならない問題。 #60973
- パーティション ID が null の場合にゼロ除算エラーが発生し、BE がクラッシュする問題。 #60842
- BE 拡張中に Broker Load ジョブがエラーになる問題。 #60224
動作の変更
information_schema.keywordsビュー内のkeyword列はwordにリネームされ、MySQL の定義と互換性を持たせました。 #60863
3.4.5
リリース日: 2025年7月10日
改善点
- ロードジョブの実行状況の可観測性を向上: ロードタスクの実行情報を
information_schema.loadsビューに統一しました。このビューでは、すべての INSERT、Broker Load、Stream Load、Routine Load のサブタスクの実行情報を確認できます。また、より多くのカラムを追加し、ロードタスクの実行状況や親ジョブ(PIPES、Routine Load Job)との関連情報を明確に把握できるようにしました。 ALTER ROUTINE LOADステートメントでkafka_broker_listを変更することをサポート。
バグ修正
以下の問題を修正しました:
- 高頻度ロード時に Compaction が遅延する可能性がある問題。 #59998
- Unified Catalog 経由で Iceberg 外部テーブルをクエリすると、
not support getting unified metadata table factoryエラーが発生する問題。 #59412 DESC FILES()でリモートストレージ上のCSVファイルを確認する際、システムがxinfをFLOAT型と誤認したため、結果が誤って返される問題。 #59574- 空のパーティションに対して
INSERT INTOを行うと BE がクラッシュする問題。 #59553 - Iceberg の Equality Delete ファイルを読み込む際、Icebergテーブルで既に削除されたデータが StarRocks で読み取れてしまう問題。 #59709
- カラム名変更後にクエリが失敗する問題。 #59178
動作の変更
- BE 構成パラメータ
skip_pk_preloadのデフォルト値がfalseからtrueに変更されました。これにより、プライマリキーのインデックスプリロードをスキップし、Reached Timeoutエラーの発生を低減します。この変更により、プライマリキーインデックスの読み込みが必要なクエリの応答時間が増加する可能性があります。
3.4.4
リリース日:2025 年 6 月 10 日
改善点
- Storage Volume が Managed Identity 認証を用いた ADLS2 をサポートしました。#58454
- 混合式に基づくパーティション において、大部分の DATETIME 関連関数で効果的なパーティションプルーニングが可能になりました。
FILESテーブル関数を使用して、Azure から Avro データファイルのインポートをサポートしました。 #58131- Routine Load で不正な JSON 形式のデータを読み込んだ際、現在処理中のパーティションおよび Offset 情報をエラーログに出力するように改善しました。問題の特定が容易になります。 #55772
バグ修正
以下の問題を修正しました:
- パーティションテーブルの同一パーティションへの同時クエリが Hive Metastore をハングさせる問題。 #58089
INSERTタスクが異常終了した場合、対応するジョブがQUEUEING状態のままになる問題。 #58603- v3.4.0 から v3.4.2 にアップグレードした後、多数のタブレットレプリカが異常状態になる問題。 #58518
- 不正な
UNION実行プランが FE のメモリ不足 (OOM) を引き起こす問題。 #59040 - パーティション回収時に無効なデータベース ID があると FE の起動に失敗する問題。 #59666
- CheckPoint 処理の失敗後に FE が正常に終了できず、処理がブロックされる問題。 #58602
3.4.3
リリース日: 2025 年 4 月 30 日
改善点
- Routine Load および Stream Load は、
columnsパラメータで Lambda 式を使用して、複雑な列データの抽出をサポートします。ユーザーは、array_filter/map_filterを使用して ARRAY / MAP データをフィルタリングおよび抽出できます。cast関数を組み合わせて JSON Array / JSON Object を ARRAY および MAP 型に変換することで、JSON データの複雑なフィルタリングと抽出が可能になります。例えば、COLUMNS (js, col=array_filter(i -> json_query(i, '$.type')=='t1', cast(js as Array<JSON>))[1])を使用すると、jsという JSON Array からtypeがt1の最初の JSON Object を抽出できます。 #58149 cast関数を使用して JSON Object を MAP 型に変換し、map_filterと組み合わせて、特定の条件を満たす JSON Object 内の項目を抽出することができます。例えば、map_filter((k, v) -> json_query(v, '$.type') == 't1', cast(js AS MAP<String, JSON>))を使用すると、jsという JSON Object からtypeがt1の JSON Object を抽出できます。 #58045information_schema.task_runsビューのクエリ時に LIMIT がサポートされるようになりました。 #57404
バグ修正
以下の問題を修正しました:
- ORC フォーマットの Hive テーブルをクエリする際に、エラー
OrcChunkReader::lazy_seek_to failed. reason = bad read in RleDecoderV2: :readByteが発生する問題。 #57454 - Equality Delete ファイルを含む Iceberg テーブルをクエリする際に、上位の RuntimeFilter がプッシュダウンできない問題。 #57651
- ディスクスピルの事前集計戦略を有効にすると、クエリがクラッシュする問題。 #58022
- クエリがエラー
ConstantRef-cmp-ConstantRef not supported here, null != 111 should be eliminated earlierで返される。 #57735 - クエリキュー機能が有効でない状態で、
query_queue_pending_timeout_secondパラメータでタイムアウトが発生する問題。 #57719
3.4.2
リリース日: 2025 年 4 月 10 日
改善点
- FEはシステムの可用性向上のため、優雅なシャットダウンをサポートします。
./stop_fe.sh -gでFEをシャットダウンする際、FEはまず/api/healthAPIを通じてフロントエンドのロードバランサーに500エラーを返し、シャットダウン準備中であることを通知します。これにより、ロードバランサーは他の利用可能なFEノードに切り替えることができます。その間、実行中のクエリは終了するか、タイムアウト(デフォルト60秒)するまで実行され続けます。#56823
バグ修正
以下の問題を修正しました:
- パーティション列が生成列である場合、パーティションプルーニングが無効になる可能性がある問題を修正。#54543
concat関数の引数処理に問題があり、クエリ実行中に BE がクラッシュする可能性がある問題を修正。#57522- Broker Load を使用してデータをインポートする際に、
ssl_enableプロパティが有効にならない問題を修正。#57229 - NULL データが存在する場合に、STRUCT 型列のサブフィールドをクエリすると BE がクラッシュする問題を修正。#56496
ALTER TABLE {table} PARTITIONS (p1, p1) DISTRIBUTED BY ...文でパーティション名を重複指定すると、内部で生成された一時パーティションが削除できなくなる問題を修正。#57005- 共有データクラスタで
SHOW PROC '/current_queries'を実行すると、"Error 1064 (HY000): Sending collect query statistics request fails" エラーが発生する問題を修正。#56597 INSERT OVERWRITEインポートタスクを並列実行した場合に、"ConcurrentModificationException: null" エラーが発生し、インポートが失敗する問題を修正。#56557- v2.5.21 から v3.1.17 にアップグレードした後、複数の Broker Load タスクを並列実行すると異常が発生する可能性がある問題を修正。#56512
動作の変更
- BEの設定項目
avro_ignore_union_type_tagのデフォルト値がtrueに変更され、["NULL", "STRING"]を STRING 型データとして直接解析できるようになり、一般的なユーザーの利用要件により適合するようになりました。#57553 - セッション変数
big_query_profile_thresholdのデフォルト値が 0 から 30(秒)に変更されました。#57177 - 新しい FE 設定項目
enable_mv_refresh_collect_profileが追加され、マテリアライズドビューのリフレッシュ中に Profile 情報を収集するかどうかを制御できるようになりました。デフォルト値はfalse(以前はシステムで Profile がデフォルトで収集されていました)。#56971
3.4.1(廃止予定)
リリース日: 2025年3月12日
このバージョンは、共有データクラスタにおけるメタデータ損失の問題によりオフラインになりました。
-
問題:共有データクラスタ内のリーダー FE ノードのシフト中に、まだ Publish されていないコミット済みコンパクショントランザクションがある場合、シフト後にメタデータ損失が発生することがある。
-
影響範囲:この問題は共有データクラスタにのみ影響します。共有なしクラスタは影響を受けません。
-
一時的な回避策:Publish タスクがエラーで返された場合、
SHOW PROC 'compactions'を実行して、空のFinishTimeを持つ 2 つのコンパクショントランザクションを持つパーティションがあるかどうかを確認できます。ALTER TABLE DROP PARTITION FORCEを実行してパーティションを削除すると、Publish タスクがハングアップするのを防ぐことができます。
新機能と改善点
- Data Lake 分析で Delta Lake の Deletion Vector をサポートしました。
- セキュアビューをサポートしました。セキュアビューを作成することで、基となるテーブルの SELECT 権限を持たないユーザーが、ビューをクエリできないようにできます(そのユーザーがビュー自体の SELECT 権限を持っていたとしても)。
- Sketch HLL (
ds_hll_count_distinct) をサポートしました。approx_count_distinctと比較して、より高精度な近似重複排除が可能になります。 - 共有データクラスタで、クラスターリカバリのための自動 Snapshot 作成をサポートしました。
- 共有データクラスタの Storage Volume が Azure Data Lake Storage Gen2 をサポートしました。
- MySQL プロトコルを使用した StarRocks への接続で SSL 認証をサポートしました。これにより、クライアントと StarRocks クラスター間のデータ通信が不正アクセスから保護されます。
バグ修正
以下の問題を修正しました:
- OLAP ビューがマテリアライズドビューの処理ロジックに影響を与える問題を修正しました。#52989
- 1 つのレプリカが見つからない場合、他のレプリカがいくつ成功してもトランザクションが失敗する問題を修正しました。(修正後は、大多数のレプリカが成功すればトランザクションが完了するようになりました。)#55212
- Alive 状態が false のノードに Stream Load がスケジュールされるとインポートが失敗する問題を修正しました。#55371
- クラスター Snapshot 内のファイルが誤って削除される問題を修正しました。#56338
動作の変更
- グレースフルシャットダウンのデフォルト設定を「無効」から「有効」に変更しました。関連するBE/CNパラメータ
loop_count_wait_fragments_finishのデフォルト値が2に変更され、システムは実行中のクエリが完了するまで最大20秒待機するようになりました。#56002
3.4.0
リリース日: 2025年1月24日
データレイク分析
- Iceberg V2のクエリパフォーマンスを最適化し、delete-filesの繰り返し読み込みを減らすことでメモリ使用量を削減しました。
- Delta Lakeテーブルのカラムマッピングをサポートし、Delta Schema Evolution後のデータに対するクエリを可能にしました。詳細はDelta Lake catalog - Feature supportをご覧ください。
- Data Cacheに関連する改善:
- Segmented LRU (SLRU) キャッシュ削除戦略を導入し、偶発的な大規模クエリによるキャッシュ汚染を大幅に防ぎ、キャッシュヒット率を向上させ、クエリパフォーマンスの変動を減少させます。大規模クエリのシミュレーションテストケースでは、SLRUベースのクエリパフォーマンスが70%以上向上することがあります。詳細はData Cache - Cache replacement policiesをご覧ください。
- 共有データアーキテクチャとデータレイククエリシナリオの両方で使用されるData Cacheインスタンスを統一し、設定を簡素化し、リソース利用を向上させました。詳細はData Cacheをご覧ください。
- Data Cacheの適応型I/O戦略最適化を提供し、キャッシュディスクの負荷とパフォーマンスに基づいて一部のクエリ要求をリモートストレージに柔軟にルーティングし、全体的なアクセススループットを向上させます。
- データレイククエリシナリオでのData Cache内のデータの永続化をサポートします。以前にキャッシュされたデータは、BE再起動後に再利用でき、クエリパフォーマンスの変動を減少させます。
- クエリによってトリガーされる自動ANALYZEタスクを通じて、外部テーブル統計の自動収集をサポートします。これにより、メタデータファイルと比較してより正確なNDV情報を提供し、クエリプランを最適化し、クエリパフォーマンスを向上させます。詳細はQuery-triggered collectionをご覧ください。
- IcebergのTime Travelクエリ機能を提供し、TIMESTAMPまたはVERSIONを指定することで、指定されたBRANCHまたはTAGからデータを読み取ることができます。
- データレイククエリのクエリフラグメントの非同期配信をサポートします。これにより、FEがクエリを実行する前にすべてのファイルを取得する必要があるという制限を回避し、FEがクエリファイルを取得し、BEがクエリを並行して実行できるようになり、キャッシュにない多数のファイルを含むデータレイククエリの全体的な遅延を削減します。同時に、ファイルリストをキャッシュすることによるFEのメモリ負荷を軽減し、クエリの安定性を向上させます。(現在、HudiとDelta Lakeの最適化が実装されており、Icebergの最適化はまだ開発中です。)
パフォーマンスの向上とクエリの最適化
- [実験的] 遅いクエリの自動最適化のための初期的なQuery Feedback機能を提供します。システムは遅いクエリの実行詳細を収集し、潜在的な最適化の機会を自動的に分析し、クエリに対するカスタマイズされた最適化ガイドを生成します。CBOが後続の同一クエリに対して同じ悪いプランを生成した場合、システムはこのクエリプランをガイドに基づいてローカルに最適化します。詳細はQuery Feedbackをご覧ください。
- [実験的] Python UDFをサポートし、Java UDFと比較してより便利な関数カスタマイズを提供します。詳細はPython UDFをご覧ください。
- 複数カラムのOR述語のプッシュダウンを可能にし、複数カラムのOR条件(例:
a = xxx OR b = yyy)を持つクエリが特定のカラムインデックスを利用できるようにし、データの読み取り量を削減し、クエリパフォーマンスを向上させます。 - TPC-DS 1TB IcebergデータセットでTPC-DSクエリパフォーマンスを約20%最適化しました。最適化方法には、テーブルプルーニングと主キーおよび外部キーを使用した集約カラムプルーニング、集約プッシュダウンが含まれます。
共有データの強化
- Query Cacheをサポートし、共有なしアーキテクチャと整合性を持たせました。
- 同期マテリアライズドビューをサポートし、共有なしアーキテクチャと整合性を持たせました。
ストレージエンジン
- すべてのパーティション化の手法を式に基づくパーティション化に統一し、各レベルが任意の式であるマルチレベルパーティション化をサポートしました。詳細はExpression Partitioningをご覧ください。
- [プレビュー] 集計テーブルでのすべてのネイティブ集計関数をサポートします。汎用集計関数状態ストレージフレームワークを導入することで、StarRocksがサポートするすべてのネイティブ集計関数を使用して集計テーブルを定義できます。
- ベクトルインデックスをサポートし、大規模で高次元のベクトルの高速な近似最近傍検索(ANNS)を可能にします。これは、ディープラーニングや機械学習のシナリオで一般的に必要とされます。現在、StarRocksは2種類のベクトルインデックスをサポートしています: IVFPQとHNSW。
ロード
- INSERT OVERWRITEは新しいセマンティック - Dynamic Overwriteをサポートします。このセマンティックが有効な場合、取り込まれたデータは新しいパーティションを作成するか、または新しいデータレコードに対応する既存のパーティションを上書きします。関与しないパーティションは切り捨てられたり削除されたりしません。このセマンティックは、ユーザーが特定のパーティションのデータを復元したい場合に特に便利です。詳細はDynamic Overwriteをご覧ください。
- INSERT from FILESを使用したデータ取り込みを最適化し、Broker Loadを優先するロード方法として置き換えました:
- FILESはリモートストレージ内のファイルのリスト化をサポートし、ファイルの基本統計を提供します。詳細はFILES - list_files_onlyをご覧ください。
- INSERTはカラム名による一致をサポートし、特に同一の名前を持つ多数のカラムからデータをロードする際に便利です。(デフォルトの動作はカラムの位置による一致です。)詳細はMatch column by nameをご覧ください。
- INSERTは他のロード方法と整合性を持たせてPROPERTIESを指定することをサポートします。ユーザーはINSERT操作のために
strict_mode、max_filter_ratio、およびtimeoutを指定してデータ取り込みの動作と品質を制御できます。詳細はINSERT - PROPERTIESをご覧ください。 - INSERT from FILESは、より正確なソースデータスキーマを推測するために、FILESのスキャン段階にターゲットテーブルスキーマチェックをプッシュダウンすることをサポートします。詳細はPush down target table schema checkをご覧ください。
- FILESは異なるスキーマを持つファイルの統合をサポートします。ParquetとORCファイルのスキーマはカラム名に基づいて統合され、CSVファイルのスキーマはカラムの位置(順序)に基づいて統合されます。カラムが一致しない場合、ユーザーはプロパティ
fill_mismatch_column_withを指定してカラムをNULLで埋めるかエラーを返すかを選択できます。詳細はUnion files with different schemaをご覧ください。 - FILESはParquetファイルからSTRUCT型データを推測することをサポートします。(以前のバージョンでは、STRUCTデータはSTRING型として推測されていました。)詳細はInfer STRUCT type from Parquetをご覧ください。
- 複数の同時Stream Loadリクエストを単一のトランザクションにマージし、データをバッチでコミットすることをサポートし、リアルタイムデータ取り込みのスループットを向上させます。これは、高い同時実行性、小規模バッチ(KBから数十MB)のリアルタイムロードシナリオ向けに設計されています。頻繁なロード操作によって引き起こされる過剰なデータバージョン、Compaction中のリソース消費、および過剰な小ファイルによるIOPSとI/O遅延を削減できます。
その他
- BEとCNの優雅な終了プロセスを最適化し、優雅な終了中のBEまたはCNノードのステータスを正確に
SHUTDOWNとして表示します。 - ログの印刷を最適化し、過剰なディスクスペースの占有を回避します。
- 共有なしクラスタは、ビュー、external catalogメタデータ、および式に基づくパーティション化とリストパーティション化戦略で作成されたパーティションなど、より多くのオブジェクトのバックアップと復元をサポートします。
- [プレビュー] CheckPointをFollower FEでサポートし、CheckPoint中のLeader FEの過剰なメモリを回避し、Leader FEの安定性を向上させます。
動作の変更
共有データアーキテクチャとデータレイククエリシナリオの両方で使用される Data Cache インスタンスが統一されたため、v3.4.0 へのアップグレード後に以下の動作が変更されます:
-
BE の設定項目
datacache_disk_pathは廃止された。データは${storage_root_path}/datacacheディレクトリ以下にキャッシュされる。Data Cache 専用のディスクを割り当てたい場合は、シンボリックリンクを使用して手動で上記のディレクトリを指定してください。 -
共有データクラスタのキャッシュデータは自動的に
${storage_root_path}/datacacheに移行され、アップグレード後も再利用できる。 -
datacache_disk_sizeの動作が変わる:datacache_disk_sizeが0(デフォルト) の場合、キャッシュ容量の自動調整が有効になる (アップグレード前の動作と同じ)。datacache_disk_sizeが0より大きい値に設定されている場合、システムはdatacache_disk_sizeとstarlet_star_cache_disk_size_percentの間の大きい値をキャッシュ容量として選択する。
ダウングレードノート
- クラスタはv3.4.0からv3.3.9以降にのみダウングレードできます。