🐈

RisingWave v2.5 の新機能まとめ:Iceberg 統合/OpenAI 埋め込み/バックフィル順序制御

に公開

RisingWaveは、リアルタイムイベントデータの処理・分析・管理を、最もシンプルかつコスト効率の高い形で実現するために設計されたリアルタイムイベントストリーミングプラットフォームです。さらに、Apache Iceberg™のオープンテーブル形式をネイティブにサポートしており、PostgreSQL互換のSQLインターフェースと、DataFrameスタイルのPythonインターフェースの両方を備えています。

RisingWaveは毎秒数百万件のイベントを取り込み、ライブストリームと履歴データを継続的に結合・分析し、低レイテンシでアドホッククエリに応答しながら、Apache Iceberg™やその他の下流システムへ鮮度と整合性のある結果を永続化します。


RisingWave v2.5 のリリースを発表できることを大変うれしく思います!
今回のアップデートでは、Apache Iceberg との統合強化、マテリアライズドビューのバックフィルにおけるきめ細かな制御、高負荷時の JOIN 処理改善、新たな SQL 構文機能など、複数の領域で大幅な機能拡張が行われています。

本記事では、v2.5 の代表的な新機能の一部をご紹介します。全更新内容については、リリースノートをご参照ください。

Apache Iceberg との統合強化

今回のリリースでは、Apache Iceberg とのネイティブ統合が大幅に強化され、データ管理の改善、設定の簡略化、そしてより強力なデータ書き込み機能が追加されました。

  • Iceberg コンパクション:
    RisingWave は Iceberg テーブルエンジン および Iceberg Sink における自動コンパクションをサポートしました。
    enable_compaction=true のような簡単なオプションで、テーブルや Sink の設定から直接、定期的なコンパクションとスナップショットの有効期限を有効化できます。
    この重要なメンテナンス処理により、小さなデータファイルを大きく最適化されたファイルに統合し、読み取り性能を大幅に向上させます。これにより AWS Glue や Spark などの外部サービスは不要になります。

  • カスタムデータパーティショニング:
    Iceberg テーブル作成時に partition_by 句を使用してパーティション戦略を定義できるようになりました。これにより、データを論理的に整理し、効率的なパーティションプルーニングと高速クエリが可能になります。

  • 外部設定ファイル:
    新しい enable_config_load オプションを使うことで、Iceberg のプロパティをホストシステム上の設定ファイルから直接読み込むことができます。これにより、DDL をすっきり保ち、Sink・Source・Connection・テーブルエンジン全体での資格情報や複雑な設定の管理が容易になります。

詳細は Interact with Iceberg をご覧ください。

バックフィル順序制御

CREATE MATERIALIZED VIEWWITH 句で backfill_order オプションが利用可能になりました。これは、本番環境で発生し得る JOIN の増幅や不要な更新といった重大なパフォーマンス問題を軽減するための機能です。

バックフィルの順序を制御するには、WITH 句に backfill_order = FIXED(...) を指定します。-> 演算子は依存関係を表し、左側のテーブルのバックフィルが完了してから右側のテーブルを開始します。

create table fact(k int, d1 int, d2 int, v int);
create table dim(k int);
create table dim2(k int);

-- fact の前に dim と dim2 をバックフィル
explain (backfill, format dot) create materialized view m1 with (backfill_order=FIXED(dim->fact, dim2->fact)) as
select fact.v from fact join dim on fact.d1 = dim.k join dim2 on fact.d2 = dim2.k;

可観測性のため、DESCRIBE FRAGMENTS でフラグメントレベルの依存関係グラフを確認し、rw_catalog.rw_fragment_backfill_progress で進捗を監視できます。

詳細は Backfill behavior and controls をご覧ください。

高 JOIN 増幅の分離

ストリーミングクエリにおける高い JOIN 増幅は、重大なバックプレッシャーを引き起こし、パイプライン全体を遅延させます。これに対応するため、RisingWave v2.5 では unaligned join(非整列 JOIN) が導入されました。これは、問題のある JOIN を下流オペレーターから分離する強力な最適化です。

SET streaming_enable_unaligned_join = true;

この機能を有効化すると、JOIN オペレーターの後に自動的にバッファが挿入されます。JOIN の出力はこのバッファに書き込まれ、遅い下流オペレーターがデータを処理するのを待たずに、チェックポイントバリアが即時に通過できるようになります。

トレードオフとして、バッファリングによるエンドツーエンド遅延がわずかに増加します。バリア遅延は改善されますが、大量データを処理するにはクラスタのスケールアップが依然として必要な場合があります。バッファ内の潜在的なデータ遅延の監視も推奨されます。

詳細は Isolating high-amplification joins をご覧ください。

openai_embedding による埋め込み生成

RisingWave v2.5 では、新たに openai_embedding 関数が追加され、SQL 内から直接テキスト埋め込みを生成できるようになりました。これにより、セマンティック検索やレコメンデーションシステムなど、AI を活用したワークフローをデータベース内で完結させられます。

openai_embedding ( api_key constant text, model constant text, input text )real[]

これにより、RAG(Retrieval-Augmented Generation) パイプラインを簡単に構築できます。RisingWave 内に埋め込みを保存・検索し、最も関連性の高いコンテキストを LLM に供給できます。

詳細は openai_embedding および Building a RAG system on RisingWave をご覧ください。

ALTER DEFAULT PRIVILEGES コマンド

スキーマ内でテーブルやマテリアライズドビューを作成・削除するには、対象スキーマに対する usage 権限と create 権限が必要です。
新しく作成されるスキーマに対して動的にユーザーへ権限を付与したい場合や、他のユーザーが作成したリレーションに対して操作を許可したい場合には、「デフォルト権限」機能が必要です。

ALTER DEFAULT PRIVILEGES
    [ FOR USER  target_user [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    abbreviated_grant_or_revoke

デフォルト権限は、自動的な権限付与テンプレートとして機能し、新しく作成されるスキーマ・テーブル・マテリアライズドビュー等にのみ適用されます。
既存のスキーマやリレーションに対しては、引き続き手動で権限を付与する必要があります。

詳細は ALTER DEFAULT PRIVILEGES をご参照ください。

WINDOW 句の拡張

WINDOW 句を使用すると、ウィンドウ仕様を一度だけ定義し、同じクエリ内で複数のウィンドウ関数に再利用できます。これにより、記述の繰り返しが減り、クエリの可読性と保守性が大幅に向上します。
例えば、同じウィンドウ(PARTITION BY col1 ORDER BY col2)で合計と行番号を計算する場合を考えます。

  • WINDOW 句を使わない場合、各関数に同じウィンドウ仕様を繰り返し記述する必要があります。
SELECT
    sum(col2) OVER (PARTITION BY col1 ORDER BY col2),
    row_number() OVER (PARTITION BY col1 ORDER BY col2)
FROM t;
  • WINDOW 句を使えば、ウィンドウ仕様を一度だけ定義して w という名前を付け、それを再利用できます。クエリがよりすっきりします。
SELECT
    sum(col2) OVER w,
    row_number() OVER w
FROM t
WINDOW w AS (PARTITION BY col1 ORDER BY col2);

なお、v2.5 以降では WINDOW は予約語となったため、非引用の識別子(例: テーブルエイリアス)として使用できません。「window」をエイリアスとして使用する場合は、ダブルクォーテーションで囲む必要があります。

詳細は Named window をご覧ください。

まとめ

以上が v2.5 に含まれる主な新機能です。Source や Sink コネクタに関する更新を含む全機能の一覧は、リリースノート をご参照ください。

来月のアップデートでも、RisingWave の新機能を継続的に拡張していきます。最新の開発状況や今後のリリース予定については、RisingWave GitHub リポジトリ をご覧ください。

RisingWave の最新情報をフォローするには、月次ニュースレター に登録してください。
また、TwitterLinkedIn をフォローし、Slack コミュニティ に参加して、エンジニアや世界中のストリーミング愛好家と交流しましょう。

Discussion