DuckDB 1.5 から location を指定することで S3 Tables でない通常の S3 上にも Iceberg テーブルを作成できるようになった。
EMR Serverless から S3 Tables に Iceberg テーブルを作成しデータを書き込んで Athena からクエリする - sambaiz.net
LOAD aws;
LOAD httpfs;
LOAD iceberg;
CREATE SECRET s3_secret (
TYPE s3,
PROVIDER credential_chain,
CHAIN 'config',
PROFILE 'your-profile'
);
ATTACH '123456789012' AS glue_catalog (
TYPE iceberg,
ENDPOINT_TYPE glue,
SECRET s3_secret
);
CREATE TABLE glue_catalog.default.iceberg_test (
id INTEGER,
name VARCHAR,
created_at TIMESTAMP
) WITH (
'format-version' = '2',
'location' = 's3://your-bucket/iceberg-test/'
);
SELECT, INSERT, UPDATE, DELETE は従来通り動作する。
INSERT INTO glue_catalog.default.iceberg_test VALUES
(1, 'Alice', '2026-03-17 22:00:00'),
(2, 'Bob', '2026-03-17 22:01:00'),
(3, 'Charlie', '2026-03-17 22:02:00');
UPDATE glue_catalog.default.iceberg_test SET name = 'Alice Updated' WHERE id = 1;
DELETE FROM glue_catalog.default.iceberg_test WHERE id = 3;
SELECT * FROM glue_catalog.default.iceberg_test;
ちなみに 10 万行のテーブルに対する SELECT SUM(value) を EXPLAIN ANALYZE したところ、Total Time 576ms のうち、単一の Parquet ファイルを読み込む ICEBERG_SCAN にかかる時間は 180ms 程度だった。 続いて SELECT AVG(value) を実行したところ External File Cache によりファイルがキャッシュされ #GET: 1、Total Time 128ms に短縮されたので、その多くはインターネット通信によるものだと思われる。
┌─────────────────────────────────────┐
│┌───────────────────────────────────┐│
││ HTTPFS HTTP Stats ││
││ in: 1.3 MiB ││
││ #GET: 5 ││
│└───────────────────────────────────┘│
└─────────────────────────────────────┘
┌────────────────────────────────────────────────┐
│┌──────────────────────────────────────────────┐│
││ Total Time: 0.576s ││
│└──────────────────────────────────────────────┘│
└────────────────────────────────────────────────┘
┌───────────────────────────┐
│ UNGROUPED_AGGREGATE │
│ 1 row │
│ 0.00s │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ PROJECTION │
│ 100,000 rows │
│ 0.00s │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ TABLE_SCAN │
│ Function: │
│ ICEBERG_SCAN │
│ Projections: value │
│ Total Files Read: 1 │
│ 100,000 rows │
│ 0.18s │
└───────────────────────────┘