0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Iceberg にストリーミングデータを取り込む最もシンプルな方法: RisingWave Open Lake

0
Posted at

Apache Iceberg は、モダンなレイクハウスにおける事実上の標準テーブルフォーマットとして急速に普及しています。スキーマ進化(Schema Evolution)、ACID トランザクション、そしてエンジン間の高い相互運用性といった強力な特性を備えています。

しかし――Iceberg にデータを取り込むこと、とりわけストリーミングデータの取り込みは、いまだに非常に複雑です。

多くのチームは、Iceberg テーブルを本番環境で安定運用するために、Kafka、Flink や Spark のジョブ、外部カタログ、コンパクションサービス、さらには独自のオーケストレーションロジックまでを組み合わせざるを得ません。

この複雑さを根本から取り除くのが、RisingWave Open Lake です。

Rust 実装の Apache Iceberg プロジェクト の主要コントリビューターによって開発された RisingWave Open Lake は、ストリーミングファーストな Iceberg レイクハウスを最も簡単に構築・運用する方法です。必要なものはすべて揃っており、不要なものは一切ありません。

オープンソース版(GitHub)と、フルマネージドサービス版(RisingWave Cloud)の両方が提供されています。

RisingWave Open Lake(画像提供: 著者)

たった 3 ステップの SQL で Iceberg レイクハウスを起動

RisingWave Open Lake を使えば、オブジェクトストレージをそのままストリーミング対応の Iceberg レイクとして利用できます。別途カタログ、コンパクションサービス、オーケストレーションレイヤーを立ち上げる必要はありません。 Kafka、CDC ストリーム、バッチデータなどを、PostgreSQL ライクな SQL で取り込み可能。コンパクション、スキーマ進化、Exactly-Once 配信はすべて自動で処理されます。

-- 1. Connect to your object store
CREATE CONNECTION my_iceberg_connection WITH (
    type = 'iceberg',
    warehouse.path = 's3://your-bucket/iceberg-stocks',
    hosted_catalog = true -- No external catalog needed
);

-- 2. Create your Iceberg table
CREATE TABLE stock_trades (
    trade_id INT PRIMARY KEY,
    symbol STRING,
    trade_price DOUBLE,
    trade_volume INT,
    trade_time TIMESTAMP,
    trade_value DOUBLE
) ENGINE = iceberg;

-- 3. Transform streaming data and write continuously
CREATE MATERIALIZED VIEW stock_trades_mv AS
SELECT
  CAST(trade_id AS INT) AS trade_id,
  TRIM(symbol) AS symbol,
  CAST(price AS DOUBLE) AS trade_price,
  CAST(volume AS INT) AS trade_volume,
  CAST(trade_time AS TIMESTAMP) AS trade_time,
  price * volume AS trade_value
FROM stock_trades_src
WHERE price > 0 AND volume > 0;
INSERT INTO stock_trades
SELECT * FROM stock_trades_mv;

👉 詳細な手順はこちら:https://risingwave.com/blog/create-iceberg-table-3-steps/

バラバラな構成はもう不要。すべてが最初から統合済み

Iceberg の「オープンさ」は大きな魅力です。しかしその代償として、運用負荷が増大しがちなのも事実です。

RisingWave Open Lake は、完全統合型の Iceberg データプレーンを提供します。脆弱で分断された複数サービスの寄せ集めを、自分たちで組み立てる必要はありません。

Hosted Iceberg REST Catalog

Apache Polaris や LakeKeeper などのオープンソース Iceberg REST Catalog をマネージドで提供します。

Hive Metastore も不要。AWS Glue も不要。運用負荷ゼロで、あらゆる Iceberg エンジンとの互換性を維持できます。

組み込みコンパクションと Delete 処理

ストリーミングワークロードでは、小さなファイルや equality delete が大量に発生します。RisingWave は、Apache DataFusion ベースのコンピュートエンジンを活用し、バックグラウンドで継続的にコンパクションと delete 適用を実行します。

そのため、equality delete をネイティブサポートしていないクエリエンジンからでも、安全にテーブルを読み取ることができます。

ストリーミングとバッチの高速インジェスト

Kafka、Postgres / MySQL の CDC、オブジェクトストレージなどから、Exactly-Once 保証付きでデータを取り込みます。

並列バックフィル、スキーマ進化、障害耐性もすべて自動処理。追加のチューニングや複雑な設定は不要です。

Iceberg 上のインクリメンタル Materialized View

Iceberg テーブル上に直接インクリメンタルなマテリアライズドビューを構築可能です。

ビューは自動更新され、複数のパイプライン間で再利用できます。複雑なストリーミング変換も、組み合わせ可能で保守しやすい形で実装できます。

データの所有権は常にあなたに

オープンソース版でもマネージド版でも、データは常にあなた自身のクラウドストレージと VPC 内に保持されます。

独自フォーマットなし。隠れたストレージレイヤーなし。ベンダーロックインなし。

RisingWave でデータを取り込み、Trino、Spark、DuckDB、その他あらゆる Iceberg 互換エンジンで自由にクエリ可能です。

📘 Iceberg ドキュメント:

Iceberg へのストリーミング書き込みを、ついに正しく実現

もともと Apache Iceberg は、高スループットなストリーミングワークロード向けに設計されたものではありません。

RisingWave Open Lake は、このギャップを埋めるために最適化されています。

リアルタイム CDC / Kafka インジェスト

Kafka やデータベースの CDC ストリームから、継続的にデータを取り込み・変換。

更新はインクリメンタルに処理され、バッチジョブや再処理なしで Iceberg テーブルにリアルタイム同期されます。

Parquet ファイルの自動コンパクション

小さなファイルは継続的にコンパクションされ、クエリ性能の予測可能性とストレージ効率を維持します。

手動チューニング不要。メンテナンスウィンドウも不要です。

同一エンジンでそのまま分析

RisingWave の SQL エンジンを使って、Iceberg テーブルを直接クエリ可能。リアルタイム分析もアドホッククエリも、別のクエリエンジンを立ち上げることなく実行できます。

ストリーミングデータと履歴データが、シームレスに共存します。

まとめ

Iceberg は「オープン性」を提供します。

RisingWave Open Lake は、妥協なきシンプルさを提供します。

Kafka パイプラインやオーケストレーター、終わりのないメンテナンスに悩まされることなく、ストリーミングレイクハウスを構築したいのであれば――これこそが、最後のピースです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?