この記事は さくらインターネット Advent Calendar 2025 と Distributed Computing Advent Calendar 2025 の16日目の記事です。
12/16って言ったら12/16なんです。
今回は、この記事を読んで pg_lake に興味が湧いたので触ってみました。
では、始める前に、想定読者と前提は以下の通りです。
- Iceberg大好きっ子
- Docker Compose / Docker イメージ作成は一通り分かる人
- PostgreSQLを利用したことがある人
- pg_lakeは 1/22時点の
4bc1a58のものを前提とする - 実行環境は PC端末上のWSL2のUbuntu環境とする
ハンズオンでは、最終的に以下が出来る事を目指します。
- pg_lakeの実行環境をビルドする
- Docker Composeでpg_lakeを起動(S3互換ストレージには、さくらのオブジェクトストレージを利用)
- pg_lakeの外から、SparkとTrinoを使ってpg_lakeのIcebergテーブルを参照する
では、以下の目次の流れで進めていきます。
- pg_lakeの面白さ
- pg_lakeのざっくり全体像
- アーキテクチャ
- コンポーネント
- デカいIcebergテーブルを読んだら即OOMなんじゃ?
- PostgreSQLテーブルの型とIcebergテーブルの型の対応状況は?
- Icebergテーブルのメンテナンス
- ハンズオン
- 環境説明
- pg_lake環境の構築
- pg_lakeのイメージのビルド
- pg_lakeの外から接続出来るようにする
- オブジェクトストレージをlocalstackからさくらのオブジェクトストレージに変更する
- Docker Composeファイルの変更
- ケース0:Icebergテーブルを作成してみる
- ケース1:PostgreSQLとして内部的にIcebergテーブルを参照
- TrinoからPostgreSQLとしてpg_lakeに接続してクエリ
- SparkからPostgreSQLとしてpg_lakeに接続してSQLクエリ
- ケース2:Icebergカタログ(JDBC)としてSparkやTrinoからクエリ
- SparkからIcebergカタログとしてpg_lakeに接続してクエリ
- TrinoからIcebergカタログとしてpg_lakeに接続してクエリ
- ケース3:S3上のファイルを直接参照したり、テーブルをS3に吐く
- バケット上にあるParquetファイルをテーブルとして参照する
- ParquetファイルをIcebergテーブルにImportする
- Icebergテーブルのクエリ結果をS3に出力する
- ケース4:PostgreSQLってことはrollbackできるの?
- おまけ:もしかして、2PC(分散トランザクション)っていける?
- 使いどころ(ユースケース)を考えてみる
- 「PostgreSQL中心でやりたい」組織のレイクハウス基盤
- Iceberg 中心のデータ基盤に「PostgreSQLの窓口」を付けたい
- S3上のファイルを“そのまま”分析したい
- "軽量な"データパイプライン・ETLの代替
- 地理空間データのレイクハウス化
- 「開発向け運用分析」基盤
- pg_lake を“使わない方がいい”ケース
- 落とし穴と運用Tips
- 公式Docker Composeはdownしたら揮発する
- Iceberg JDBCカタログ互換は限定的
- 2PC不可(1PCのみ)
- Small FilesとVACUUM競合
- pgduck_serverはメモリ無限ではない
- まとめ
- 最後に

