StarRocks version 3.4
3.4.10
リリース日:2026 年 1 月 12 日
改善点
GROUP BY式を Scan オペレーターにプッシュダウンし、マテリアライズドビューによるリライトをサポートすることで、クエリ性能をさらに向上させました。 #66546- Hudi ライブラリの内部メタデータテーブルに対する設定スイッチを追加しました。性能問題が発生した場合、この内部メタデータテーブルを無効化できます。 #67581
バグ修正
以下の問題を修正しました:
- セキュリティ脆弱性 CVE-2025-12183 および CVE-2025-66566 を修正しました。 #66373 #66480
- マルチステートメント送信時、Profile に記録される SQL/ステートメント情報が不正確となり、トラブルシューティングや性能分析データの信頼性が低下する問題を修正しました。 #67119
- 入力列が「すべて NULL かつ nullable」の場合、Java UDF/UDAF のパラメータ変換が異常経路に入り、Java ヒープメモリが異常に増大し、OOM を引き起こす可能性がある問題を修正しました。 #67105
PARTITION BY/GROUP BYがなく、ランキング系ウィンドウ関数(row_number/rank/dense_rank)を使用した場合、最適化器が不正な実行計画(ORDER BY が空の TOP-N + MERGING-EXCHANGE)を生成し、BE がクラッシュする問題を修正しました。 #67085Object/ JSON 列に対して resize、デシリアライズ、フィルタリングなどの操作を行った後も、内部ポインタキャッシュが古いアドレスを参照し続け(ダングリングポインタ)、オブジェクト値の読み取り時にnullptrを返してセグメンテーションフォールトやデータ破損を引き起こす問題を修正しました。 #66990- 特定の Unicode 空白文字や境界入力において、
trim()がベクトル境界外アクセス(例:空 slice に対するアンダーフロー)を引き起こし、BE の内部エラーやクラッシュにつながる問題を修正しました。 #66484 trim()のバッファ予約長計算が不適切で、予約不足や頻繁な拡張が発生し、例外パスを誘発して深刻な場合に BE の内部エラーを引き起こす問題を修正しました。 #66489- テーブル値関数のリライト(
bitmap_to_arrayからunnest_bitmap)後、投影列の型が誤って推論され(bitmap がARRAY<BIGINT>と誤認)、後続の計画や実行段階で型不整合が発生する可能性がある問題を修正しました。 #66986 - BE が致命的シグナル(例:SIGSEGV)によってクラッシュ処理に入った際、短時間ハートビートが成功を返し続け、FE が BE を生存していると誤認する問題を修正しました(ハートビートタイムアウトまでの間、クラッシュしたノードにクエリがスケジュールされる可能性がありました)。 #66250
- Execution Group において、初回サブミットと動的 driver 追加(
submit_next_driver)の間に競合状態が存在し、「driver already blocked yet added to schedule」というアサーション失敗や BE クラッシュを引き起こす問題を修正しました。 #66111 - DISTINCT + LIMIT のプッシュダウン時に、グローバル LIMIT が Exchange ノードの前に誤って適用され、データが早期に切り詰められて結果セットが欠落する問題を修正しました。 #66129
- ExecutionGroup(グループ実行)モード使用時に、JOIN の後にウィンドウ関数が続くと、データの順序乱れや重複が発生し、誤った結果を返す問題を修正しました。 #66458
- 監査ログおよびクエリ統計において、高選択率フィルタリングの一部シナリオでスキャン行数などの統計が欠落または不正確となり、監視やトラブルシューティング情報が歪む問題を修正しました。 #66422
- CASE-WHEN のネストが深く、かつ各レイヤーに多数の分岐がある場合、式ツリーノード数が指数関数的に増加し、FE が OOM になる問題を修正しました。 #66379
percentile_approx_weighted関数が、定数パラメータから圧縮係数を取得する際に誤った引数位置にアクセスし、BE クラッシュを引き起こす問題を修正しました。 #65217- BE 起動時の Tablet メタデータ読み込み中に RocksDB のイテレーションがタイムアウトすると、すでに読み込んだ Tablet を破棄して最初から再試行してしまい、クロスディスク移行シナリオでバージョン喪失が発生する問題を修正しました。 #65445 #65427
- Stream Load のトランザクションコミット時に、無効な Tablet 参照(ALTER 中に削除された場合など)によりロードが失敗する問題を修正しました。 #65986
- Primary Key テーブルで Rowset COMMIT または Compaction COMMIT が失敗した場合に Rowset ID が解放されず、ファイルが GC されずにディスク容量がリークする問題を修正しました。 #66336
- DELETE 文のパーティションプルーニング中にマテリアライズドビューのリライト準備が試行され、テーブルロック順序やデッドロックにより DELETE がブロックまたは失敗する問題を修正しました。 #65818 #65820
- 同一クエリ内で同じテーブルを複数回参照した場合、Scan ノードが並行してパーティション ID を割り当て、ID 競合やパーティションマッピングの混乱が発生し、誤ったクエリ結果を返す問題を修正しました。 #65608
- カラムモードの部分更新と条件付き更新を同時に使用した場合、「invalid rssid」エラーが発生してロードが失敗する問題を修正しました。 #66217
- 同一のパーティション値を持ち、異なるトランザクション ID を持つ一時パーティションを並行トランザクションが作成した場合、「Duplicate values」エラーにより自動パーティション作成が失敗する問題を修正しました。 #66203 #66398
_finish_clone_primary失敗後のクリーンアップ処理で、Clone タスクが誤ったステータス変数をチェックし、クリーンアップが正しく実行されない問題を修正しました。 #65765- 同一 Tablet 上で DROP と CLONE タスクが同時に実行された場合、唯一のレプリカが DROP により削除され、クエリが失敗する問題を修正しました。 #66271
- Spilling シナリオにおいて、非常に大きな文字列のエンコード時にバッファ予約エラーや型オーバーフローが発生し、BE がクラッシュする問題を修正しました。 #65373
- CACHE SELECT 機能使用時に、カラムイテレーターの seek が不適切、またはスキーマの並び替えが誤っている場合、アサーション失敗やデータ混乱が発生し、BE がクラッシュする問題を修正しました。 #66276
- 外部テーブル(ファイル形式スキーマ検出)のサンプリングスキャンで、range インデックスの境界外アクセスが発生し、BE クラッシュや誤データ読み取りが起きる問題を修正しました。 #65931
- VIEW + JOIN を基にしたマテリアライズドビューで、ビュー名が別データベースのベーステーブル名と一致する場合、パーティション式の解析に失敗し、MV 作成エラーが発生する問題を修正しました。 #66315
- 複数レベルでパーティション化されたベーステーブル上のマテリアライズドビュー更新時に、親パーティションのみをチェックし、子パーティションの変更を検知できず、更新がスキップされる問題を修正しました。 #66108
- Iceberg テーブルのスナップショット期限切れ後、パーティションの
last_updated_atが NULL となり、依存するマテリアライズドビューがパーティション変更を正しく追跡できず更新されない問題を修正しました。 #66044 - 同一クエリで異なるパーティション述語を用いて同じテーブルを複数回参照した場合、MV 補償(MVCompensation)がパーティション情報を混同し、誤ったリライトが行われる問題を修正しました。 #66416
- AST キャッシュヒット後のテキストベースのマテリアライズドビューリライトで、メタデータが更新されず、古い Tablet 情報が使用されてクエリ失敗やデータ不整合が発生する問題を修正しました。 #66583
- 低カーディナリティ最適化において、カラム伝播の無効化ロジックに不具合があり、誤ったカラム無効化や誤結果が発生する問題を修正しました。 #66771
- 低カーディナリティ最適化を有効にした PRIMARY KEY テーブルで、グローバル辞書収集ロジックの非互換性によりクラッシュや誤データが発生する問題を修正しました。 #66739
- ネストされた CTE において、部分的なインライン化と部分的な再利用が混在する場合、最適化器の検証が過度に厳しく、正当な実行計画が拒否される問題を修正しました。 #66703
- UNION を定数(VALUES)にマージした後、出力列の NULL 許容属性が誤って設定され、下流オペレーターのクラッシュや誤結果を引き起こす問題を修正しました。 #65454
- パーティション列の min/max リライト最適化が、PARTITION BY / ORDER BY のないシナリオで不正な TOP-N を生成し、BE クラッシュや誤結果を引き起こす問題を修正しました。 #66498
- 非決定性関数(例:
now())が誤って下位オペレーターにプッシュダウンされ、オペレーターやシャード間で結果が不一致となる問題を修正しました。 #66391 - FE 再起動後に外部キー制約が失われる問題を修正しました。原因は
MaterializedView.onCreate()が制約の再構築・登録を行っていなかったためです。 #66615 - マテリアライズドビューに
colocate_withプロパティが設定されている場合、メタデータが Edit Log に書き込まれず、Follower FE が colocate 関係を認識できず性能が低下する問題を修正しました。 #65840 #65405 - Warehouse 削除後に
SHOW LOADやinformation_schema.loadsが失敗し、既存セッションで SQL(Warehouse 切り替え含む)が実行できなくなる問題を修正しました。 #66464 - Tablet 統計の報告が遅延した場合、境界ケースで表カーディナリティ推定が誤ってサンプル統計(カーディナリティ 1)を使用し、実行計画が大きく乖離する問題を修正しました。 #65655
- Tablet 統計報告のタイミング問題により、パーティション行数が 0 となり、カーディナリティ推定が完全に無効化される問題を修正しました。 #65266
createPartition実行時の TransactionState に対する FE のロック順序が Gson シリアライズと逆で、デッドロックを引き起こす可能性がある問題を修正しました。 #65792- ABA アップグレード/ダウングレードシナリオで、DELETE VECTOR の CRC32 検証がバージョン非互換により失敗し、クエリエラーが発生する問題を修正しました。 #65436 #65421 #65475 #65483
map_agg集約関数が特定の入力でクラッシュする問題を修正しました。 #67460flat_pathが空の場合にsubstr(1)を呼び出すとstd::out_of_range例外が発生し、BE がクラッシュする問題を修正しました。 #65386- Shared-data クラスターにおいて、テーブル作成やスキーマ変更時に圧縮設定が正しく反映されない問題を修正しました。 #65778
- デフォルト値付きカラム追加時に、並行 INSERT により無効なカラム参照が発生し、ロードが失敗する問題を修正しました。 #66107 #65968
- Scan 初期化時に、Shared-data と Shared-nothing 環境で Segment Iterator の選択順が一致せず、スキャン動作が不整合となる問題を修正しました。 #65782 #61171
- merge commit 有効時に
merge_conditionがサポートされず、部分更新が失敗する問題を修正しました。 #65278 - Image journal ID の取得ロジックが誤っており、クラスタースナップショット機能が正常に動作しない問題を修正しました。 #65989
- LDAP ユーザーが TaskRun 実行時に
ConnectContext.get()が null となり、NPE によってタスクが失敗する問題を修正しました。 #65877 - Follower FE で ANALYZE を実行した場合、RPC タイムアウトが
statistic_collect_query_timeoutではなくquery_timeoutを使用してしまい、早すぎる/遅すぎるタイムアウトが発生する問題を修正しました。 #66785 MemoryScratchSinkOperatorが RecordBatchQueue シャットダウン後にpending_finishを正しく完了できず、タスクがハングする問題を修正しました。 #66095- クエリエラー率メトリクスの計算で誤った変数を使用し、負の値や不正確な統計が生成される問題を修正しました。 #65901
- Load Profile のカウンターが重複更新され、統計値が過大になる問題を修正しました。 #65352
- マルチタスク展開(deploy more tasks)シナリオで、Profile 収集スレッドのコンテキスト切り替えが正しく行われず、一部メトリクスが失われる問題を修正しました。 #65733
- Local / Lake TabletsChannel のライフサイクル管理において循環ロック待ちのリスクがあり、特定の close / deregister パスでデッドロックが発生し、ロード/書き込みタスクの可用性に影響する問題を修正しました。 #66820
- ファイルシステムインスタンスキャッシュ(filesystem cache)で、容量を 0 に設定した後にキャッシュキーとインスタンスが不一致となり、クエリ性能が大幅に低下し回復しない問題を修正しました。 #65979
3.4.9
リリース日:2025年11月24日
動作変更
- Trino 方言において、
json_extractの戻り値の型を STRING から JSON に変更しました。これにより、CAST、UNNEST、型チェックロジックとの互換性問題が発生する可能性があります。#59718 /metricsにおける「ユーザーごとの接続数」を報告するメトリクスは、管理者認証が必須となりました。認証なしの場合は総接続数のみが公開され、メトリクス経由でユーザー名が漏洩するリスクを防止します。#64635- 非推奨となっていたシステム変数
analyze_mvを削除しました。マテリアライズド・ビューのリフレッシュは ANALYZE ジョブを自動実行しなくなり、大量のバックグラウンド統計タスクが発生する状況を回避します。既存の動作に依存していたユーザーは注意が必要です。#64863 - x86 上で LARGEINT から DECIMAL128 へのキャスト時のオーバーフロー検知ロジックを変更しました。
INT128_MIN * 1はもはやオーバーフローと見なされず、極値におけるキャストセマンティクスの一貫性を確保します。#63559 finishTransactionにテーブル単位のロックタイムアウト設定を追加しました。タイムアウト内にテーブルロックを取得できない場合、そのラウンドのトランザクション完了は失敗し、後で再試行されます。無限にブロックされることがなくなり、ロック動作がより明確になります。最終的な結果に変更はありません。#63981
バグ修正
以下の問題を修正しました:
- BE 起動時、RocksDB からタブレットメタデータを読み込む際にタイムアウトが発生すると、RocksDB が最初から読み込み直すことで古いタブレットエントリを誤って取り込み、データバージョンが失われる可能性がありました。#65146
- Lake プライマリキー表の delete-vector に対する CRC32C チェックサムに関連するデータ破損問題。#65006 #65354 #65442 #65354
- JSON ハイパー抽出パスが
$、またはすべてのパスがスキップされることでflat_pathが空文字列になると、substr呼び出しで例外が発生し、BE がクラッシュする問題を修正しました。#65260 - 大きな文字列をディスクへスピルする際、長さチェック不足、32 ビット添付サイズの使用、BlockReader の問題によりクラッシュが発生する可能性がありました。#65373
- 複数の HTTP リクエストが同一 TCP 接続を再利用する場合、ExecuteSQL リクエストの後に非 ExecuteSQL リクエストが到着すると、チャネルクローズ時に
HttpConnectContextが解除されず、HTTP コンテキストリークが発生していました。#65203 - JSON flatten 中に、特定の状況下でプリミティブ値が失われる問題を修正しました。#64939 #64703
- JSON スキーマが不整合なチャンクを追加すると
ChunkAccumulatorがクラッシュする問題を修正しました。#64894 AsyncFlushOutputStreamにおいて、非同期 I/O タスクが破棄済みのMemTrackerにアクセスし、use-after-free クラッシュにつながる問題を修正しました。#64735- 同一 Lake プライマリキー表に対する複数の Compaction が並行実行される場合、整合性チェックが不足しており、publish 失敗後にメタデータが不整合状態のまま残る可能性がありました。#65005
- Hash Join のスピル処理で、ビルド側の
set_finishingタスクが失敗した場合、その状態が spiller にのみ記録され、プローブ側が実行を継続した結果、クラッシュまたは無限ループが発生する可能性がありました。#65027 - タブレット移行中、唯一最新のレプリカが DECOMMISSION とマークされている場合、ターゲットレプリカのバージョンが古いまま VERSION_INCOMPLETE に固定される問題。#62942
PartitionedSpillerWriterがパーティションを削除する際、対応する Block Group が解放されず、use-after-free が発生する問題。#63903 #63825- MorselQueue が split を取得できない場合に BE がクラッシュする問題。#62753
- shared-data クラスタにおいて、Sorted-by-key スキャンが複数 I/O タスクで実行されると、ソートベース集約の結果が誤る可能性がありました。#63849
- ARM 環境で、特定の Hive 外部テーブルの Parquet 列を読み取る際、NULL ビットマップをコピーする処理で乱序実行により NULL バッファのポインタが古い状態となり、LZ4 変換時にクラッシュすることがありました。#63294
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 以降、
insert_timeoutは INSERT に関与する操作(例: UPDATE、DELETE、CTAS、マテリアライズドビューのリフレッシュ、統計収集、PIPE)に適用され、query_timeoutを置き換えます。 -
v3.4.0 以降、
mysql_server_versionのデフォルト値は8.0.33に変更されました。
ダウングレードノート
- クラスタはv3.4.0からv3.3.9以降にのみダウングレードできます。