Upgrade to Pro — share decks privately, control downloads, hide ads and more …

最低限のSQLしか書けない私が Apache Icebergを触ってみた結果 〜S3なのにU...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for inori inori
July 17, 2026
130

最低限のSQLしか書けない私が Apache Icebergを触ってみた結果 〜S3なのにUPDATE・Time Travelできた話〜

2026年7月18日開催
BigData-JAWS #34 Apache Iceberg LT大会 初心者から有識者に 登壇資料
https://jawsug-bigdata.connpass.com/event/394145/

Avatar for inori

inori

July 17, 2026

Transcript

  1. Agenda はじめに 01 01 Apache Icebergとは? 02 02 実践 03

    03 ハマりポイント 04 04 まとめ 05 05
  2. S3バケットは以下のように作成   バケット名:   apache-iceberg-demo-2026 Athena設定は以下   Location of query

    result:   s3://apache-iceberg-demo-2026/athena-results/ 実践編 ∼S3バケット作成・Athena設定∼ S3バケット内を ディレクトリで整理する為
  3. DB作成 Icebergテーブル作成 create DATABASE my_iceberg_db; 実践編 ∼DB作成・Icebergテーブル作成∼ CREATE TABLE my_iceberg_db.users (

    id BIGINT, name STRING, score BIGINT ) LOCATION 's3://apache-iceberg-demo-2026/iceberg/users/' TBLPROPERTIES ('table_type' = 'ICEBERG');
  4. DB作成 Icebergテーブル作成 create DATABASE my_iceberg_db; CREATE TABLE my_iceberg_db.users ( id

    BIGINT, name STRING, score BIGINT ) LOCATION 's3://apache-iceberg-demo-2026/iceberg/users/' TBLPROPERTIES ('table_type' = 'ICEBERG'); 実践編 ∼DB作成・Icebergテーブル作成∼ my_iceberg_db.users →userテーブル作成 id /name /score →カラムの定義 LOCATION →S3内のデータの保存場所 TBLPROPERTIES ('table_type' = 'ICEBERG'); →「これは Icebergテーブルだよ」という宣⾔ コレがないとIcebergにならない!!!
  5. usersテーブルへ3人分のデータをINSERT INSERTしたデータの確認(SELECT) 実践編 ∼INSERT・SELECT∼ INSERT INTO my_iceberg_db.users VALUES (1, 'Alice', 100),

    (2, 'Bob', 200), (3, 'Charlie', 300); この時点でスナップショットが作成される SELECT * FROM my_iceberg_db.users;
  6. usersテーブルへ3人分のデータをINSERT INSERTしたデータの確認(SELECT) 実践編 ∼INSERT・SELECT∼ INSERT INTO my_iceberg_db.users VALUES (1, 'Alice', 100),

    (2, 'Bob', 200), (3, 'Charlie', 300); この時点でスナップショットが作成される SELECT * FROM my_iceberg_db.users;
  7. usersテーブルへ3人分のデータをINSERT INSERTしたデータの確認(SELECT) 実践編 ∼INSERT①・SELECT∼ INSERT INTO my_iceberg_db.users VALUES (1, 'Alice', 100),

    (2, 'Bob', 200), (3, 'Charlie', 300); この時点でスナップショットが作成される SELECT * FROM my_iceberg_db.users; INSERTした3行が表⺬されている!
  8. INSERT INTO my_iceberg_db.users VALUES (4, 'Dave', 999); 実践編 ∼スナップショット確認∼ スナップショットを確認するSELECT文を実⾏ SELECT

    * FROM "my_iceberg_db"."users$snapshots" ORDER BY committed_at; スナップショットが2つ存在している事を確認! 今回は1を使います
  9. INSERT INTO my_iceberg_db.users VALUES (4, 'Dave', 999); 実践編 ∼Time Travel∼ 先ほど確認したDaveを追加する前の時刻を入れてSELECT

    さっき追加したDaveがいない!!!!!! SELECT * FROM my_iceberg_db.users FOR TIMESTAMP AS OF TIMESTAMP '2026-07-17 15:30:22.160';
  10. emailカラムを追加 確認 INSERT INTO my_iceberg_db.users VALUES (4, 'Dave', 999); INSERT

    INTO my_iceberg_db.users VALUES (4, 'Dave', 999); 実践編 ∼スキーマ進化(カラム追加)∼ ALTER TABLE my_iceberg_db.users ADD COLUMNS (email STRING); SELECT * FROM my_iceberg_db.users;
  11. emailカラムを追加 確認 INSERT INTO my_iceberg_db.users VALUES (4, 'Dave', 999); INSERT

    INTO my_iceberg_db.users VALUES (4, 'Dave', 999); 実践編 ∼スキーマ進化(カラム追加)∼ ALTER TABLE my_iceberg_db.users ADD COLUMNS (email STRING); SELECT * FROM my_iceberg_db.users;
  12. emailカラムを追加 確認 INSERT INTO my_iceberg_db.users VALUES (4, 'Dave', 999); INSERT

    INTO my_iceberg_db.users VALUES (4, 'Dave', 999); 実践編 ∼スキーマ進化(カラム追加)∼ emailカラムが存在している!! ALTER TABLE my_iceberg_db.users ADD COLUMNS (email STRING); SELECT * FROM my_iceberg_db.users;