From a69d1a3e4a0471799434a8c153f0bca5cca108b2 Mon Sep 17 00:00:00 2001 From: rmoff Date: Mon, 12 Jan 2026 14:37:54 +0000 Subject: [PATCH 01/17] DuckDB/Iceberg/MinIO bare bones example --- iceberg/duckdb-minio/README.md | 136 ++++++++++++++++++++++++ iceberg/duckdb-minio/docker-compose.yml | 46 ++++++++ iceberg/duckdb-minio/test.sh | 77 ++++++++++++++ 3 files changed, 259 insertions(+) create mode 100644 iceberg/duckdb-minio/README.md create mode 100644 iceberg/duckdb-minio/docker-compose.yml create mode 100755 iceberg/duckdb-minio/test.sh diff --git a/iceberg/duckdb-minio/README.md b/iceberg/duckdb-minio/README.md new file mode 100644 index 0000000..d8cf47b --- /dev/null +++ b/iceberg/duckdb-minio/README.md @@ -0,0 +1,136 @@ +# Minimal Iceberg Stack: DuckDB + MinIO + +A bare-bones Apache Iceberg environment for local development and testing. + +## Stack + +- **MinIO** - S3-compatible object storage +- **Iceberg REST Catalog** - Lightweight catalog service +- **DuckDB** - Query engine with Iceberg support + +## Quick Start + +```bash +docker compose up -d +``` + +Access DuckDB: +```bash +docker compose exec duckdb duckdb +``` + +## Writing Data + +```sql +-- Install and load extensions +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; + +-- Configure S3 access for MinIO +CREATE SECRET s3_secret ( + TYPE S3, + KEY_ID 'admin', + SECRET 'password', + REGION 'us-east-1', + ENDPOINT 'minio:9000', + USE_SSL false, + URL_STYLE 'path' +); + +-- Create Iceberg catalog authentication (token can be any value) +CREATE SECRET iceberg_secret ( + TYPE iceberg, + TOKEN 'dummy' +); + +-- Connect to the Iceberg catalog +ATTACH 'warehouse' AS iceberg_catalog ( + TYPE iceberg, + ENDPOINT 'http://iceberg-rest:8181', + SECRET iceberg_secret +); + +-- Create a schema +CREATE SCHEMA iceberg_catalog.demo; + +-- Create a table +CREATE TABLE iceberg_catalog.demo.users ( + id INTEGER, + name VARCHAR, + email VARCHAR, + created_at TIMESTAMP +); + +-- Insert data +INSERT INTO iceberg_catalog.demo.users VALUES + (1, 'Alice', 'alice@example.com', CURRENT_TIMESTAMP), + (2, 'Bob', 'bob@example.com', CURRENT_TIMESTAMP), + (3, 'Charlie', 'charlie@example.com', CURRENT_TIMESTAMP); +``` + +## Reading Data + +```sql +-- Query the table +SELECT * FROM iceberg_catalog.demo.users; + +-- View table metadata +SELECT * FROM iceberg_metadata('iceberg_catalog.demo.users'); +``` + +Snapshots & time travel: + +```sql +-- View snapshots (for time travel) +SELECT * FROM iceberg_snapshots('iceberg_catalog.demo.users'); + +-- Query a specific snapshot (time travel using snapshot_from_id) +SELECT * FROM iceberg_scan('iceberg_catalog.demo.users', snapshot_from_id => ); +``` + +## Viewing Data in MinIO + +### Web Console + +Access the MinIO console at http://localhost:9001 + +- **Username**: `admin` +- **Password**: `password` + +Navigate to the `warehouse` bucket to see your Iceberg table structure: +- `warehouse/demo/users/metadata/` - Table metadata (JSON files) +- `warehouse/demo/users/data/` - Parquet data files + +### CLI + +Use the MinIO client to browse the bucket: + +```bash +# List all buckets +docker compose exec mc mc ls minio + +# List warehouse bucket contents +docker compose exec mc mc ls minio/warehouse/ + +# List Iceberg table structure +docker compose exec mc mc ls --recursive minio/warehouse/demo/ + +# View table metadata files +docker compose exec mc mc ls minio/warehouse/demo/users/metadata/ + +# View data files (Parquet) +docker compose exec mc mc ls minio/warehouse/demo/users/data/ +``` + +## Cleanup + +```bash +docker compose down +``` + +To remove data volumes: +```bash +docker compose down -v +``` diff --git a/iceberg/duckdb-minio/docker-compose.yml b/iceberg/duckdb-minio/docker-compose.yml new file mode 100644 index 0000000..bb95791 --- /dev/null +++ b/iceberg/duckdb-minio/docker-compose.yml @@ -0,0 +1,46 @@ +services: + minio: + image: minio/minio:latest + ports: + - "9000:9000" + - "9001:9001" + environment: + MINIO_ROOT_USER: admin + MINIO_ROOT_PASSWORD: password + command: ["server", "/data", "--console-address", ":9001"] + + mc: + image: minio/mc:latest + depends_on: + - minio + entrypoint: > + /bin/sh -c " + until (mc alias set minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done; + mc mb -p minio/warehouse; + tail -f /dev/null + " + + iceberg-rest: + image: tabulario/iceberg-rest:latest + depends_on: + - mc + ports: + - "8181:8181" + environment: + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: admin + AWS_SECRET_ACCESS_KEY: password + CATALOG_WAREHOUSE: s3://warehouse/ + CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO + CATALOG_S3_ENDPOINT: http://minio:9000 + CATALOG_S3_ACCESS__KEY__ID: admin + CATALOG_S3_SECRET__ACCESS__KEY: password + CATALOG_S3_PATH__STYLE__ACCESS: "true" + CATALOG_S3_REGION: us-east-1 + + duckdb: + image: duckdb/duckdb:latest + depends_on: + - iceberg-rest + stdin_open: true + tty: true diff --git a/iceberg/duckdb-minio/test.sh b/iceberg/duckdb-minio/test.sh new file mode 100755 index 0000000..93b9107 --- /dev/null +++ b/iceberg/duckdb-minio/test.sh @@ -0,0 +1,77 @@ +#!/bin/bash +set -e + +echo "" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo " ▒ ▒" +echo " ▓ ___ ▓▓▓▓▓ ▓" +echo " █ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █" +echo " █ \\ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █" +echo " █ \`---' └───────────┘ ▓▓▓▓▓▓▓ ▒▒▒ █" +echo " ▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓" +echo " ▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒" +echo " ░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo "" + +echo "1. Checking MinIO buckets (before)..." +docker compose exec mc mc ls minio +echo "" + +echo "2. Creating Iceberg table and inserting data..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; + +-- Configure S3 +CREATE SECRET s3_secret ( + TYPE S3, + KEY_ID 'admin', + SECRET 'password', + REGION 'us-east-1', + ENDPOINT 'minio:9000', + USE_SSL false, + URL_STYLE 'path' +); + +-- Configure Iceberg catalog +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); + +-- Create schema and table +CREATE SCHEMA IF NOT EXISTS cat.test; +DROP TABLE IF EXISTS cat.test.products; +CREATE TABLE cat.test.products (id INTEGER, name VARCHAR, price DECIMAL(10,2)); + +-- Insert data +INSERT INTO cat.test.products VALUES + (1, 'Widget', 9.99), + (2, 'Gadget', 19.99), + (3, 'Doohickey', 14.99); + +-- Query data +SELECT 'Row count:' as metric, COUNT(*)::VARCHAR as value FROM cat.test.products +UNION ALL +SELECT 'Total value:', CAST(SUM(price) AS VARCHAR) FROM cat.test.products; +" +echo "" + +echo "3. Verifying data in DuckDB..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; +CREATE SECRET s3_secret (TYPE S3, KEY_ID 'admin', SECRET 'password', REGION 'us-east-1', ENDPOINT 'minio:9000', USE_SSL false, URL_STYLE 'path'); +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); +SELECT * FROM cat.test.products ORDER BY id; +" +echo "" + +echo "4. Checking MinIO bucket contents (after)..." +docker compose exec mc mc ls --recursive minio/warehouse/test/products/ | head -10 +echo "" + From 4ff21770626ec1cde4838e1c424c5c776cf4296d Mon Sep 17 00:00:00 2001 From: rmoff Date: Mon, 12 Jan 2026 15:47:00 +0000 Subject: [PATCH 02/17] Add arch image --- iceberg/duckdb-minio/README.md | 2 ++ iceberg/duckdb-minio/minio01.excalidraw.png | Bin 0 -> 98542 bytes 2 files changed, 2 insertions(+) create mode 100644 iceberg/duckdb-minio/minio01.excalidraw.png diff --git a/iceberg/duckdb-minio/README.md b/iceberg/duckdb-minio/README.md index d8cf47b..1a20b07 100644 --- a/iceberg/duckdb-minio/README.md +++ b/iceberg/duckdb-minio/README.md @@ -8,6 +8,8 @@ A bare-bones Apache Iceberg environment for local development and testing. - **Iceberg REST Catalog** - Lightweight catalog service - **DuckDB** - Query engine with Iceberg support +![](minio01.excalidraw.png) + ## Quick Start ```bash diff --git a/iceberg/duckdb-minio/minio01.excalidraw.png b/iceberg/duckdb-minio/minio01.excalidraw.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ad11c4077c83e1c90b378c644884e9df0cbd0d GIT binary patch literal 98542 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 literal 0 HcmV?d00001 From 5f0fda71fcefca83fbae14d38e6c672792fc6c6d Mon Sep 17 00:00:00 2001 From: rmoff Date: Mon, 12 Jan 2026 15:47:06 +0000 Subject: [PATCH 03/17] Add RustFS --- .../rustfs/architecture.excalidraw | 552 ++++++++++++++++++ .../duckdb-minio/rustfs/docker-compose.yml | 46 ++ .../duckdb-minio/rustfs/rustfs.excalidraw.png | Bin 0 -> 43552 bytes iceberg/duckdb-minio/rustfs/test.sh | 77 +++ 4 files changed, 675 insertions(+) create mode 100644 iceberg/duckdb-minio/rustfs/architecture.excalidraw create mode 100644 iceberg/duckdb-minio/rustfs/docker-compose.yml create mode 100644 iceberg/duckdb-minio/rustfs/rustfs.excalidraw.png create mode 100755 iceberg/duckdb-minio/rustfs/test.sh diff --git a/iceberg/duckdb-minio/rustfs/architecture.excalidraw b/iceberg/duckdb-minio/rustfs/architecture.excalidraw new file mode 100644 index 0000000..bd0a07a --- /dev/null +++ b/iceberg/duckdb-minio/rustfs/architecture.excalidraw @@ -0,0 +1,552 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "minio-box", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 100, + "y": 300, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 180, + "height": 100, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "minio-text", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 150, + "y": 330, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 80, + "height": 50, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "MinIO\n:9000\nS3 Storage", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": null, + "originalText": "MinIO\n:9000\nS3 Storage", + "lineHeight": 1.25, + "baseline": 43 + }, + { + "type": "rectangle", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "mc-box", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 100, + "y": 150, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "width": 180, + "height": 80, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "mc-text", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 130, + "y": 170, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 120, + "height": 40, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "mc\n(init bucket)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": null, + "originalText": "mc\n(init bucket)", + "lineHeight": 1.25, + "baseline": 33 + }, + { + "type": "rectangle", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "catalog-box", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 400, + "y": 300, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "width": 200, + "height": 100, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "catalog-text", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 430, + "y": 325, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 140, + "height": 50, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "iceberg-rest\n:8181\nREST Catalog", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": null, + "originalText": "iceberg-rest\n:8181\nREST Catalog", + "lineHeight": 1.25, + "baseline": 43 + }, + { + "type": "rectangle", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "duckdb-box", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 700, + "y": 300, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 180, + "height": 100, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "duckdb-text", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 730, + "y": 330, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 120, + "height": 50, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "DuckDB\n\nQuery Engine", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": null, + "originalText": "DuckDB\n\nQuery Engine", + "lineHeight": 1.25, + "baseline": 43 + }, + { + "type": "arrow", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "arrow-mc-minio", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 190, + "y": 230, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 0, + "height": 60, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { "type": 2 }, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [0, 0], + [0, 60] + ] + }, + { + "type": "arrow", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "arrow-catalog-minio", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 400, + "y": 350, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 120, + "height": 0, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { "type": 2 }, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [0, 0], + [-120, 0] + ] + }, + { + "type": "arrow", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "arrow-duckdb-catalog", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 700, + "y": 350, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 100, + "height": 0, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { "type": 2 }, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [0, 0], + [-100, 0] + ] + }, + { + "type": "text", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "label-init", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 200, + "y": 250, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 80, + "height": 25, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "creates bucket", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "creates bucket", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "text", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "label-s3", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 300, + "y": 320, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 80, + "height": 25, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "S3 API", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "S3 API", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "text", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "label-rest", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 610, + "y": 320, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 80, + "height": 25, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "REST API", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "REST API", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "text", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "title", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 300, + "y": 50, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 400, + "height": 35, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Iceberg + DuckDB + MinIO", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Iceberg + DuckDB + MinIO", + "lineHeight": 1.25, + "baseline": 25 + }, + { + "type": "text", + "version": 1, + "versionNonce": 1, + "isDeleted": false, + "id": "note", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 100, + "y": 480, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 780, + "height": 60, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Data Flow:\n1. mc creates warehouse bucket in MinIO on startup\n2. DuckDB connects to iceberg-rest catalog (:8181)\n3. Catalog stores metadata and data files in MinIO via S3 API", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Data Flow:\n1. mc creates warehouse bucket in MinIO on startup\n2. DuckDB connects to iceberg-rest catalog (:8181)\n3. Catalog stores metadata and data files in MinIO via S3 API", + "lineHeight": 1.25, + "baseline": 53 + } + ], + "appState": { + "gridSize": 20, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} diff --git a/iceberg/duckdb-minio/rustfs/docker-compose.yml b/iceberg/duckdb-minio/rustfs/docker-compose.yml new file mode 100644 index 0000000..ed7fb00 --- /dev/null +++ b/iceberg/duckdb-minio/rustfs/docker-compose.yml @@ -0,0 +1,46 @@ +services: + minio: + image: rustfs/rustfs:latest + ports: + - "9000:9000" + - "9001:9001" + environment: + RUSTFS_CONSOLE_ENABLE: true + RUSTFS_ACCESS_KEY: admin + RUSTFS_SECRET_KEY: password + + mc: + image: minio/mc:latest + depends_on: + - minio + entrypoint: > + /bin/sh -c " + until (mc alias set minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done; + mc mb -p minio/warehouse; + tail -f /dev/null + " + + iceberg-rest: + image: tabulario/iceberg-rest:latest + depends_on: + - mc + ports: + - "8181:8181" + environment: + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: admin + AWS_SECRET_ACCESS_KEY: password + CATALOG_WAREHOUSE: s3://warehouse/ + CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO + CATALOG_S3_ENDPOINT: http://minio:9000 + CATALOG_S3_ACCESS__KEY__ID: admin + CATALOG_S3_SECRET__ACCESS__KEY: password + CATALOG_S3_PATH__STYLE__ACCESS: "true" + CATALOG_S3_REGION: us-east-1 + + duckdb: + image: duckdb/duckdb:latest + depends_on: + - iceberg-rest + stdin_open: true + tty: true diff --git a/iceberg/duckdb-minio/rustfs/rustfs.excalidraw.png b/iceberg/duckdb-minio/rustfs/rustfs.excalidraw.png new file mode 100644 index 0000000000000000000000000000000000000000..f12482e4dd4ffc0b4b5f2c7ef65f573de0490af9 GIT binary patch literal 43552 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 literal 0 HcmV?d00001 diff --git a/iceberg/duckdb-minio/rustfs/test.sh b/iceberg/duckdb-minio/rustfs/test.sh new file mode 100755 index 0000000..93b9107 --- /dev/null +++ b/iceberg/duckdb-minio/rustfs/test.sh @@ -0,0 +1,77 @@ +#!/bin/bash +set -e + +echo "" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo " ▒ ▒" +echo " ▓ ___ ▓▓▓▓▓ ▓" +echo " █ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █" +echo " █ \\ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █" +echo " █ \`---' └───────────┘ ▓▓▓▓▓▓▓ ▒▒▒ █" +echo " ▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓" +echo " ▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒" +echo " ░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo "" + +echo "1. Checking MinIO buckets (before)..." +docker compose exec mc mc ls minio +echo "" + +echo "2. Creating Iceberg table and inserting data..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; + +-- Configure S3 +CREATE SECRET s3_secret ( + TYPE S3, + KEY_ID 'admin', + SECRET 'password', + REGION 'us-east-1', + ENDPOINT 'minio:9000', + USE_SSL false, + URL_STYLE 'path' +); + +-- Configure Iceberg catalog +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); + +-- Create schema and table +CREATE SCHEMA IF NOT EXISTS cat.test; +DROP TABLE IF EXISTS cat.test.products; +CREATE TABLE cat.test.products (id INTEGER, name VARCHAR, price DECIMAL(10,2)); + +-- Insert data +INSERT INTO cat.test.products VALUES + (1, 'Widget', 9.99), + (2, 'Gadget', 19.99), + (3, 'Doohickey', 14.99); + +-- Query data +SELECT 'Row count:' as metric, COUNT(*)::VARCHAR as value FROM cat.test.products +UNION ALL +SELECT 'Total value:', CAST(SUM(price) AS VARCHAR) FROM cat.test.products; +" +echo "" + +echo "3. Verifying data in DuckDB..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; +CREATE SECRET s3_secret (TYPE S3, KEY_ID 'admin', SECRET 'password', REGION 'us-east-1', ENDPOINT 'minio:9000', USE_SSL false, URL_STYLE 'path'); +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); +SELECT * FROM cat.test.products ORDER BY id; +" +echo "" + +echo "4. Checking MinIO bucket contents (after)..." +docker compose exec mc mc ls --recursive minio/warehouse/test/products/ | head -10 +echo "" + From 34db4e70bc112cea92fb9b470a21296c097d4b50 Mon Sep 17 00:00:00 2001 From: rmoff Date: Mon, 12 Jan 2026 15:47:57 +0000 Subject: [PATCH 04/17] wrong file --- .../rustfs/architecture.excalidraw | 552 ------------------ 1 file changed, 552 deletions(-) delete mode 100644 iceberg/duckdb-minio/rustfs/architecture.excalidraw diff --git a/iceberg/duckdb-minio/rustfs/architecture.excalidraw b/iceberg/duckdb-minio/rustfs/architecture.excalidraw deleted file mode 100644 index bd0a07a..0000000 --- a/iceberg/duckdb-minio/rustfs/architecture.excalidraw +++ /dev/null @@ -1,552 +0,0 @@ -{ - "type": "excalidraw", - "version": 2, - "source": "https://excalidraw.com", - "elements": [ - { - "type": "rectangle", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "minio-box", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 100, - "y": 300, - "strokeColor": "#1e1e1e", - "backgroundColor": "#ffec99", - "width": 180, - "height": 100, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { "type": 3 }, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "minio-text", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 150, - "y": 330, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 80, - "height": 50, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 20, - "fontFamily": 1, - "text": "MinIO\n:9000\nS3 Storage", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": null, - "originalText": "MinIO\n:9000\nS3 Storage", - "lineHeight": 1.25, - "baseline": 43 - }, - { - "type": "rectangle", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "mc-box", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 100, - "y": 150, - "strokeColor": "#1e1e1e", - "backgroundColor": "#a5d8ff", - "width": 180, - "height": 80, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { "type": 3 }, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "mc-text", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 130, - "y": 170, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 120, - "height": 40, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 20, - "fontFamily": 1, - "text": "mc\n(init bucket)", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": null, - "originalText": "mc\n(init bucket)", - "lineHeight": 1.25, - "baseline": 33 - }, - { - "type": "rectangle", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "catalog-box", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 400, - "y": 300, - "strokeColor": "#1e1e1e", - "backgroundColor": "#b2f2bb", - "width": 200, - "height": 100, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { "type": 3 }, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "catalog-text", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 430, - "y": 325, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 140, - "height": 50, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 20, - "fontFamily": 1, - "text": "iceberg-rest\n:8181\nREST Catalog", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": null, - "originalText": "iceberg-rest\n:8181\nREST Catalog", - "lineHeight": 1.25, - "baseline": 43 - }, - { - "type": "rectangle", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "duckdb-box", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 700, - "y": 300, - "strokeColor": "#1e1e1e", - "backgroundColor": "#ffc9c9", - "width": 180, - "height": 100, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { "type": 3 }, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "duckdb-text", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 730, - "y": 330, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 120, - "height": 50, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 20, - "fontFamily": 1, - "text": "DuckDB\n\nQuery Engine", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": null, - "originalText": "DuckDB\n\nQuery Engine", - "lineHeight": 1.25, - "baseline": 43 - }, - { - "type": "arrow", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "arrow-mc-minio", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 190, - "y": 230, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 0, - "height": 60, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { "type": 2 }, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "startBinding": null, - "endBinding": null, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [0, 0], - [0, 60] - ] - }, - { - "type": "arrow", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "arrow-catalog-minio", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 400, - "y": 350, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 120, - "height": 0, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { "type": 2 }, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "startBinding": null, - "endBinding": null, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [0, 0], - [-120, 0] - ] - }, - { - "type": "arrow", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "arrow-duckdb-catalog", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 700, - "y": 350, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 100, - "height": 0, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { "type": 2 }, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "startBinding": null, - "endBinding": null, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [0, 0], - [-100, 0] - ] - }, - { - "type": "text", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "label-init", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 200, - "y": 250, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 80, - "height": 25, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "creates bucket", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "creates bucket", - "lineHeight": 1.25, - "baseline": 18 - }, - { - "type": "text", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "label-s3", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 300, - "y": 320, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 80, - "height": 25, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "S3 API", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "S3 API", - "lineHeight": 1.25, - "baseline": 18 - }, - { - "type": "text", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "label-rest", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 610, - "y": 320, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 80, - "height": 25, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "REST API", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "REST API", - "lineHeight": 1.25, - "baseline": 18 - }, - { - "type": "text", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "title", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 300, - "y": 50, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 400, - "height": 35, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 28, - "fontFamily": 1, - "text": "Iceberg + DuckDB + MinIO", - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "Iceberg + DuckDB + MinIO", - "lineHeight": 1.25, - "baseline": 25 - }, - { - "type": "text", - "version": 1, - "versionNonce": 1, - "isDeleted": false, - "id": "note", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 100, - "y": 480, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 780, - "height": 60, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1, - "link": null, - "locked": false, - "fontSize": 16, - "fontFamily": 1, - "text": "Data Flow:\n1. mc creates warehouse bucket in MinIO on startup\n2. DuckDB connects to iceberg-rest catalog (:8181)\n3. Catalog stores metadata and data files in MinIO via S3 API", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Data Flow:\n1. mc creates warehouse bucket in MinIO on startup\n2. DuckDB connects to iceberg-rest catalog (:8181)\n3. Catalog stores metadata and data files in MinIO via S3 API", - "lineHeight": 1.25, - "baseline": 53 - } - ], - "appState": { - "gridSize": 20, - "viewBackgroundColor": "#ffffff" - }, - "files": {} -} From ab59dbdeda5ec97fca64998b42c93c6a924daf6c Mon Sep 17 00:00:00 2001 From: rmoff Date: Mon, 12 Jan 2026 18:16:14 +0000 Subject: [PATCH 05/17] Add Garage, tidy up few other things --- ...o01.excalidraw.png => arch.excalidraw.png} | Bin .../duckdb-minio/garage/arch.excalidraw.png | Bin 0 -> 59137 bytes .../duckdb-minio/garage/docker-compose.yml | 103 ++++++++++++++++++ iceberg/duckdb-minio/garage/test.sh | 76 +++++++++++++ ...tfs.excalidraw.png => arch.excalidraw.png} | Bin iceberg/duckdb-minio/rustfs/test.sh | 3 +- iceberg/duckdb-minio/test.sh | 3 +- 7 files changed, 181 insertions(+), 4 deletions(-) rename iceberg/duckdb-minio/{minio01.excalidraw.png => arch.excalidraw.png} (100%) create mode 100644 iceberg/duckdb-minio/garage/arch.excalidraw.png create mode 100644 iceberg/duckdb-minio/garage/docker-compose.yml create mode 100755 iceberg/duckdb-minio/garage/test.sh rename iceberg/duckdb-minio/rustfs/{rustfs.excalidraw.png => arch.excalidraw.png} (100%) diff --git a/iceberg/duckdb-minio/minio01.excalidraw.png b/iceberg/duckdb-minio/arch.excalidraw.png similarity index 100% rename from iceberg/duckdb-minio/minio01.excalidraw.png rename to iceberg/duckdb-minio/arch.excalidraw.png diff --git a/iceberg/duckdb-minio/garage/arch.excalidraw.png b/iceberg/duckdb-minio/garage/arch.excalidraw.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a480bd87d03a78255f6c912debae8ce8c05788 GIT binary patch literal 59137 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 z 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 + /bin/sh -c " + apk add --no-cache docker-cli; + CONTAINER=$$(docker ps --filter name=garage-garage-1 --format '{{.Names}}'); + NODE_ID=$$(docker exec $$CONTAINER /garage -c /etc/garage.toml status 2>/dev/null | grep 'NO ROLE ASSIGNED' | awk '{print \$$1}'); + if [ ! -z \"$$NODE_ID\" ]; then + docker exec $$CONTAINER /garage -c /etc/garage.toml layout assign -z dc1 -c 10G $$NODE_ID; + docker exec $$CONTAINER /garage -c /etc/garage.toml layout apply --version 1; + sleep 2; + fi; + docker exec $$CONTAINER /garage -c /etc/garage.toml key import -n admin --yes GKb69252a3b0643e8bd08d4cd4 9115be9c9e4994306a4176543b0db461f4eb04c5c8a388676d1b57392d0f4e93 2>/dev/null || true; + docker exec $$CONTAINER /garage -c /etc/garage.toml bucket create warehouse 2>/dev/null || true; + docker exec $$CONTAINER /garage -c /etc/garage.toml bucket allow --read --write warehouse --key GKb69252a3b0643e8bd08d4cd4; + echo 'Garage initialization complete'; + " + + mc: + image: minio/mc:latest + depends_on: + garage-init: + condition: service_completed_successfully + entrypoint: > + /bin/sh -c " + until (mc alias set garage http://garage:3900 GKb69252a3b0643e8bd08d4cd4 9115be9c9e4994306a4176543b0db461f4eb04c5c8a388676d1b57392d0f4e93 --insecure) do echo '...waiting...' && sleep 1; done; + echo 'Garage is ready for S3 operations'; + tail -f /dev/null + " + + iceberg-rest: + image: tabulario/iceberg-rest:latest + depends_on: + mc: + condition: service_started + ports: + - "8181:8181" + environment: + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: GKb69252a3b0643e8bd08d4cd4 + AWS_SECRET_ACCESS_KEY: 9115be9c9e4994306a4176543b0db461f4eb04c5c8a388676d1b57392d0f4e93 + CATALOG_WAREHOUSE: s3://warehouse/ + CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO + CATALOG_S3_ENDPOINT: http://garage:3900 + CATALOG_S3_ACCESS__KEY__ID: GKb69252a3b0643e8bd08d4cd4 + CATALOG_S3_SECRET__ACCESS__KEY: 9115be9c9e4994306a4176543b0db461f4eb04c5c8a388676d1b57392d0f4e93 + CATALOG_S3_PATH__STYLE__ACCESS: "true" + CATALOG_S3_REGION: us-east-1 + + duckdb: + image: duckdb/duckdb:latest + depends_on: + - iceberg-rest + stdin_open: true + tty: true + +configs: + garage-config: + content: | + metadata_dir = "/var/lib/garage/meta" + data_dir = "/var/lib/garage/data" + db_engine = "sqlite" + replication_mode = "none" + rpc_bind_addr = "[::]:3901" + rpc_secret = "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" + + [s3_api] + s3_region = "us-east-1" + api_bind_addr = "[::]:3900" + root_domain = ".s3.garage" + + [s3_web] + bind_addr = "[::]:3902" + root_domain = ".web.garage" + + [admin] + api_bind_addr = "[::]:3903" + + [k2v_api] + api_bind_addr = "0.0.0.0:3904" diff --git a/iceberg/duckdb-minio/garage/test.sh b/iceberg/duckdb-minio/garage/test.sh new file mode 100755 index 0000000..2e2ddd0 --- /dev/null +++ b/iceberg/duckdb-minio/garage/test.sh @@ -0,0 +1,76 @@ +#!/bin/bash +set -e + +echo "" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo " ▒ ▒" +echo " ▓ ___ ▓▓▓▓▓ ▓" +echo " █ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █" +echo " █ \\ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █" +echo " █ \`---' └───────────┘ ▓▓ Garage ▒▒▒ █" +echo " ▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓" +echo " ▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒" +echo " ░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo "" + +echo "1. Checking Garage buckets (before)..." +docker compose exec garage /garage -c /etc/garage.toml bucket list +echo "" + +echo "2. Creating Iceberg table and inserting data..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; + +-- Configure S3 +CREATE SECRET s3_secret ( + TYPE S3, + KEY_ID 'GKb69252a3b0643e8bd08d4cd4', + SECRET '9115be9c9e4994306a4176543b0db461f4eb04c5c8a388676d1b57392d0f4e93', + REGION 'us-east-1', + ENDPOINT 'garage:3900', + USE_SSL false, + URL_STYLE 'path' +); + +-- Configure Iceberg catalog +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); + +-- Create schema and table +CREATE SCHEMA IF NOT EXISTS cat.test; +DROP TABLE IF EXISTS cat.test.products; +CREATE TABLE cat.test.products (id INTEGER, name VARCHAR, price DECIMAL(10,2)); + +-- Insert data +INSERT INTO cat.test.products VALUES + (1, 'Widget', 9.99), + (2, 'Gadget', 19.99), + (3, 'Doohickey', 14.99); + +-- Query data +SELECT 'Row count:' as metric, COUNT(*)::VARCHAR as value FROM cat.test.products +UNION ALL +SELECT 'Total value:', CAST(SUM(price) AS VARCHAR) FROM cat.test.products; +" +echo "" + +echo "3. Verifying data in DuckDB..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; +CREATE SECRET s3_secret (TYPE S3, KEY_ID 'GKb69252a3b0643e8bd08d4cd4', SECRET '9115be9c9e4994306a4176543b0db461f4eb04c5c8a388676d1b57392d0f4e93', REGION 'us-east-1', ENDPOINT 'garage:3900', USE_SSL false, URL_STYLE 'path'); +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); +SELECT * FROM cat.test.products ORDER BY id; +" +echo "" + +echo "4. Listing bucket objects with mc..." +docker compose exec mc mc ls --recursive garage/warehouse/ +echo "" diff --git a/iceberg/duckdb-minio/rustfs/rustfs.excalidraw.png b/iceberg/duckdb-minio/rustfs/arch.excalidraw.png similarity index 100% rename from iceberg/duckdb-minio/rustfs/rustfs.excalidraw.png rename to iceberg/duckdb-minio/rustfs/arch.excalidraw.png diff --git a/iceberg/duckdb-minio/rustfs/test.sh b/iceberg/duckdb-minio/rustfs/test.sh index 93b9107..512079b 100755 --- a/iceberg/duckdb-minio/rustfs/test.sh +++ b/iceberg/duckdb-minio/rustfs/test.sh @@ -7,7 +7,7 @@ echo " ▒ ▒" echo " ▓ ___ ▓▓▓▓▓ ▓" echo " █ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █" echo " █ \\ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █" -echo " █ \`---' └───────────┘ ▓▓▓▓▓▓▓ ▒▒▒ █" +echo " █ \`---' └───────────┘ ▓▓ RustFS ▒▒▒ █" echo " ▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓" echo " ▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒" echo " ░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░" @@ -74,4 +74,3 @@ echo "" echo "4. Checking MinIO bucket contents (after)..." docker compose exec mc mc ls --recursive minio/warehouse/test/products/ | head -10 echo "" - diff --git a/iceberg/duckdb-minio/test.sh b/iceberg/duckdb-minio/test.sh index 93b9107..e750952 100755 --- a/iceberg/duckdb-minio/test.sh +++ b/iceberg/duckdb-minio/test.sh @@ -7,7 +7,7 @@ echo " ▒ ▒" echo " ▓ ___ ▓▓▓▓▓ ▓" echo " █ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █" echo " █ \\ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █" -echo " █ \`---' └───────────┘ ▓▓▓▓▓▓▓ ▒▒▒ █" +echo " █ \`---' └───────────┘ ▓▓ MinIO ▒▒▒ █" echo " ▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓" echo " ▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒" echo " ░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░" @@ -74,4 +74,3 @@ echo "" echo "4. Checking MinIO bucket contents (after)..." docker compose exec mc mc ls --recursive minio/warehouse/test/products/ | head -10 echo "" - From a5476dcd1310202d1468abfa417ab0e7c9038b88 Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 11:37:48 +0000 Subject: [PATCH 06/17] SeaweedFS example --- .../seaweedfs/arch.excalidraw.png | Bin 0 -> 44133 bytes .../duckdb-minio/seaweedfs/docker-compose.yml | 71 ++++++++++++++ iceberg/duckdb-minio/seaweedfs/test.sh | 87 ++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 iceberg/duckdb-minio/seaweedfs/arch.excalidraw.png create mode 100644 iceberg/duckdb-minio/seaweedfs/docker-compose.yml create mode 100755 iceberg/duckdb-minio/seaweedfs/test.sh diff --git a/iceberg/duckdb-minio/seaweedfs/arch.excalidraw.png b/iceberg/duckdb-minio/seaweedfs/arch.excalidraw.png new file mode 100644 index 0000000000000000000000000000000000000000..3d696bf1f09ca9ebcec5be6408c96059595df858 GIT binary patch literal 44133 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 + /bin/sh -c " + until (mc alias set seaweedfs http://seaweedfs:9000 admin password) do echo '...waiting...' && sleep 1; done; + mc mb -p seaweedfs/warehouse; + tail -f /dev/null + " + + iceberg-rest: + image: tabulario/iceberg-rest:latest + depends_on: + - mc + ports: + - "8181:8181" + restart: on-failure + environment: + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: admin + AWS_SECRET_ACCESS_KEY: password + CATALOG_WAREHOUSE: s3://warehouse/ + CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO + CATALOG_S3_ENDPOINT: http://seaweedfs:9000 + CATALOG_S3_ACCESS__KEY__ID: admin + CATALOG_S3_SECRET__ACCESS__KEY: password + CATALOG_S3_PATH__STYLE__ACCESS: "true" + CATALOG_S3_REGION: us-east-1 + + duckdb: + image: duckdb/duckdb:latest + depends_on: + - iceberg-rest + stdin_open: true + tty: true + +configs: + s3-config: + content: | + { + "identities": [ + { + "name": "anonymous", + "credentials": [ + { + "accessKey": "admin", + "secretKey": "password" + } + ], + "actions": [ + "Admin", + "Read", + "Write" + ] + } + ] + } diff --git a/iceberg/duckdb-minio/seaweedfs/test.sh b/iceberg/duckdb-minio/seaweedfs/test.sh new file mode 100755 index 0000000..d368f9a --- /dev/null +++ b/iceberg/duckdb-minio/seaweedfs/test.sh @@ -0,0 +1,87 @@ +#!/bin/bash +set -e + +echo "" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo " ▒ ▒" +echo " ▓ ___ ▓▓▓▓▓ ▓" +echo " █ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █" +echo " █ \\ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █" +echo " █ \`---' └───────────┘ ▓SeaweedFS▒▒▒ █" +echo " ▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓" +echo " ▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒" +echo " ░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo "" + +echo "Waiting for all services to be ready..." +until docker compose exec mc mc ls seaweedfs >/dev/null 2>&1; do + echo "...waiting for SeaweedFS..." + sleep 2 +done +until curl -sf http://localhost:8181/v1/config >/dev/null 2>&1; do + echo "...waiting for Iceberg REST..." + sleep 2 +done +echo "" + +echo "1. Checking SeaweedFS buckets (before)..." +docker compose exec mc mc ls seaweedfs +echo "" + +echo "2. Creating Iceberg table and inserting data..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; + +-- Configure S3 +CREATE SECRET s3_secret ( + TYPE S3, + KEY_ID 'admin', + SECRET 'password', + REGION 'us-east-1', + ENDPOINT 'seaweedfs:9000', + USE_SSL false, + URL_STYLE 'path' +); + +-- Configure Iceberg catalog +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); + +-- Create schema and table +CREATE SCHEMA IF NOT EXISTS cat.test; +DROP TABLE IF EXISTS cat.test.products; +CREATE TABLE cat.test.products (id INTEGER, name VARCHAR, price DECIMAL(10,2)); + +-- Insert data +INSERT INTO cat.test.products VALUES + (1, 'Widget', 9.99), + (2, 'Gadget', 19.99), + (3, 'Doohickey', 14.99); + +-- Query data +SELECT 'Row count:' as metric, COUNT(*)::VARCHAR as value FROM cat.test.products +UNION ALL +SELECT 'Total value:', CAST(SUM(price) AS VARCHAR) FROM cat.test.products; +" +echo "" + +echo "3. Verifying data in DuckDB..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; +CREATE SECRET s3_secret (TYPE S3, KEY_ID 'admin', SECRET 'password', REGION 'us-east-1', ENDPOINT 'seaweedfs:9000', USE_SSL false, URL_STYLE 'path'); +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); +SELECT * FROM cat.test.products ORDER BY id; +" +echo "" + +echo "4. Checking SeaweedFS bucket contents (after)..." +docker compose exec mc mc ls --recursive seaweedfs/warehouse/test/products/ | head -10 +echo "" From ac250fc108c85e899b98bc81d599bd95e5da301f Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 11:38:23 +0000 Subject: [PATCH 07/17] fixes --- iceberg/duckdb-minio/garage/docker-compose.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/iceberg/duckdb-minio/garage/docker-compose.yml b/iceberg/duckdb-minio/garage/docker-compose.yml index e1fc4c7..1f86b3b 100644 --- a/iceberg/duckdb-minio/garage/docker-compose.yml +++ b/iceberg/duckdb-minio/garage/docker-compose.yml @@ -46,16 +46,15 @@ services: condition: service_completed_successfully entrypoint: > /bin/sh -c " - until (mc alias set garage http://garage:3900 GKb69252a3b0643e8bd08d4cd4 9115be9c9e4994306a4176543b0db461f4eb04c5c8a388676d1b57392d0f4e93 --insecure) do echo '...waiting...' && sleep 1; done; - echo 'Garage is ready for S3 operations'; + mc alias set garage http://garage:3900 GKb69252a3b0643e8bd08d4cd4 9115be9c9e4994306a4176543b0db461f4eb04c5c8a388676d1b57392d0f4e93 --insecure; tail -f /dev/null " iceberg-rest: image: tabulario/iceberg-rest:latest depends_on: - mc: - condition: service_started + garage-init: + condition: service_completed_successfully ports: - "8181:8181" environment: From 6460ca4e33caef59bd8e7f494121790af38c0a40 Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 11:41:11 +0000 Subject: [PATCH 08/17] pin versions --- iceberg/duckdb-minio/rustfs/docker-compose.yml | 2 +- iceberg/duckdb-minio/seaweedfs/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/iceberg/duckdb-minio/rustfs/docker-compose.yml b/iceberg/duckdb-minio/rustfs/docker-compose.yml index ed7fb00..5ae074c 100644 --- a/iceberg/duckdb-minio/rustfs/docker-compose.yml +++ b/iceberg/duckdb-minio/rustfs/docker-compose.yml @@ -1,6 +1,6 @@ services: minio: - image: rustfs/rustfs:latest + image: rustfs/rustfs:1.6.40 ports: - "9000:9000" - "9001:9001" diff --git a/iceberg/duckdb-minio/seaweedfs/docker-compose.yml b/iceberg/duckdb-minio/seaweedfs/docker-compose.yml index 95243cd..e645857 100644 --- a/iceberg/duckdb-minio/seaweedfs/docker-compose.yml +++ b/iceberg/duckdb-minio/seaweedfs/docker-compose.yml @@ -1,6 +1,6 @@ services: seaweedfs: - image: chrislusf/seaweedfs:latest + image: chrislusf/seaweedfs:4.06 ports: - "9000:9000" - "9001:8888" From 80aecc3a8f8c6e749bc02345c26e3c5089236ee2 Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 12:03:59 +0000 Subject: [PATCH 09/17] tidied up --- .../duckdb-minio/seaweedfs/docker-compose.yml | 25 +++---------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/iceberg/duckdb-minio/seaweedfs/docker-compose.yml b/iceberg/duckdb-minio/seaweedfs/docker-compose.yml index e645857..ce05aa0 100644 --- a/iceberg/duckdb-minio/seaweedfs/docker-compose.yml +++ b/iceberg/duckdb-minio/seaweedfs/docker-compose.yml @@ -2,11 +2,9 @@ services: seaweedfs: image: chrislusf/seaweedfs:4.06 ports: - - "9000:9000" - - "9001:8888" + - "9333:9333" + - "8888:8888" command: server -s3 -s3.port=9000 -s3.config=/etc/seaweedfs/s3.json -master.port=9333 -volume.port=8080 -filer -filer.port=8888 - environment: - WEED_MASTER_VOLUME_GROWTH_COPY_1: 1 configs: - source: s3-config target: /etc/seaweedfs/s3.json @@ -51,21 +49,4 @@ services: configs: s3-config: content: | - { - "identities": [ - { - "name": "anonymous", - "credentials": [ - { - "accessKey": "admin", - "secretKey": "password" - } - ], - "actions": [ - "Admin", - "Read", - "Write" - ] - } - ] - } + { "identities": [ { "name": "anonymous", "credentials": [ { "accessKey": "admin", "secretKey": "password" } ], "actions": [ "Admin", "Read", "Write" ] } ] } From dd0653c927bb2984a3cd5149094ac76ceb6a41d7 Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 14:34:59 +0000 Subject: [PATCH 10/17] add Apache Ozone --- .../duckdb-minio/apache-ozone/arch.excalidraw | 616 ++++++++++++++++++ .../apache-ozone/docker-compose.yml | 111 ++++ iceberg/duckdb-minio/apache-ozone/test.sh | 76 +++ 3 files changed, 803 insertions(+) create mode 100644 iceberg/duckdb-minio/apache-ozone/arch.excalidraw create mode 100644 iceberg/duckdb-minio/apache-ozone/docker-compose.yml create mode 100755 iceberg/duckdb-minio/apache-ozone/test.sh diff --git a/iceberg/duckdb-minio/apache-ozone/arch.excalidraw b/iceberg/duckdb-minio/apache-ozone/arch.excalidraw new file mode 100644 index 0000000..a02a085 --- /dev/null +++ b/iceberg/duckdb-minio/apache-ozone/arch.excalidraw @@ -0,0 +1,616 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor", + "elements": [ + { + "type": "rectangle", + "version": 204, + "versionNonce": 1541555567, + "isDeleted": false, + "id": "s3g", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 537.64453125, + "y": 266.828125, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 200, + "height": 80, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "s3g-text" + } + ], + "updated": 1768314246324, + "link": null, + "locked": false, + "index": "a4" + }, + { + "type": "text", + "version": 205, + "versionNonce": 1232453519, + "isDeleted": false, + "id": "s3g-text", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 576.6245651245117, + "y": 294.328125, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 122.03993225097656, + "height": 25, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1768314246324, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "S3 Gateway", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "s3g", + "originalText": "S3 Gateway", + "lineHeight": 1.25, + "baseline": 23, + "index": "a5", + "autoResize": true + }, + { + "type": "rectangle", + "version": 241, + "versionNonce": 1188361647, + "isDeleted": false, + "id": "om", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 537.81640625, + "y": 156.2109375, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 200, + "height": 80, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "om-text" + } + ], + "updated": 1768314246324, + "link": null, + "locked": false, + "index": "a6" + }, + { + "type": "text", + "version": 240, + "versionNonce": 1529374671, + "isDeleted": false, + "id": "om-text", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 563.7064590454102, + "y": 183.7109375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 148.2198944091797, + "height": 25, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1768314246324, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Ozone Manager", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "om", + "originalText": "Ozone Manager", + "lineHeight": 1.25, + "baseline": 23, + "index": "a7", + "autoResize": true + }, + { + "type": "rectangle", + "version": 254, + "versionNonce": 344495599, + "isDeleted": false, + "id": "scm", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 763.34375, + "y": 155.34375, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 200, + "height": 85, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "scm-text" + } + ], + "updated": 1768314246324, + "link": null, + "locked": false, + "index": "a8" + }, + { + "type": "text", + "version": 254, + "versionNonce": 704512015, + "isDeleted": false, + "id": "scm-text", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 774.0238265991211, + "y": 160.34375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 178.6398468017578, + "height": 75, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1768314246324, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Storage Container\nManager\n", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "scm", + "originalText": "Storage Container\nManager\n", + "lineHeight": 1.25, + "baseline": 23, + "index": "a9", + "autoResize": true + }, + { + "type": "rectangle", + "version": 187, + "versionNonce": 1568745007, + "isDeleted": false, + "id": "datanode", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 765.82421875, + "y": 264.4296875, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 200, + "height": 80, + "seed": 1, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "rsfF0S8rk6rRjVpswIzj2" + } + ], + "updated": 1768314246324, + "link": null, + "locked": false, + "index": "aA" + }, + { + "id": "rsfF0S8rk6rRjVpswIzj2", + "type": "text", + "x": 814.2942504882812, + "y": 291.9296875, + "width": 103.0599365234375, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aAV", + "roundness": null, + "seed": 1841579535, + "version": 194, + "versionNonce": 502958159, + "isDeleted": false, + "boundElements": null, + "updated": 1768314246324, + "link": null, + "locked": false, + "text": "Data node", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "datanode", + "originalText": "Data node", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 265, + "versionNonce": 169996687, + "isDeleted": false, + "id": "c90-MKlpdPpn2CLg0feC9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 233.7240541033484, + "y": 115.400390625, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "width": 200, + "height": 100, + "seed": 6943617, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "i5au62hnxzeCkf8QH0OQR" + }, + { + "id": "seJMYFQ7tE8FdcZfqr4za", + "type": "arrow" + }, + { + "id": "iCKLvSs78yfl5WuTmC-jS", + "type": "arrow" + } + ], + "updated": 1768314250130, + "link": null, + "locked": false, + "index": "aT" + }, + { + "id": "i5au62hnxzeCkf8QH0OQR", + "type": "text", + "x": 263.3640916399695, + "y": 127.900390625, + "width": 140.7199249267578, + "height": 75, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aU", + "roundness": null, + "seed": 1623317345, + "version": 262, + "versionNonce": 1193994159, + "isDeleted": false, + "boundElements": [], + "updated": 1768314250130, + "link": null, + "locked": false, + "text": "iceberg-rest\n\nREST Catalog", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "c90-MKlpdPpn2CLg0feC9", + "originalText": "iceberg-rest\n\nREST Catalog", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 248, + "versionNonce": 33632783, + "isDeleted": false, + "id": "2RRU-Z4Og59tZaW15k8v8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 180.1303041033484, + "y": 292.021484375, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 180, + "height": 100, + "seed": 1636943681, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "g1jglF6BANafiQZe36s9F" + }, + { + "id": "seJMYFQ7tE8FdcZfqr4za", + "type": "arrow" + }, + { + "id": "JJ4CjBUsTOWiwicXXIZJa", + "type": "arrow" + } + ], + "updated": 1768314250130, + "link": null, + "locked": false, + "index": "aV" + }, + { + "id": "g1jglF6BANafiQZe36s9F", + "type": "text", + "x": 231.07033706233278, + "y": 329.521484375, + "width": 78.11993408203125, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aW", + "roundness": null, + "seed": 1027159841, + "version": 251, + "versionNonce": 1917720623, + "isDeleted": false, + "boundElements": [], + "updated": 1768314250130, + "link": null, + "locked": false, + "text": "DuckDB", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "2RRU-Z4Og59tZaW15k8v8", + "originalText": "DuckDB", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "arrow", + "version": 819, + "versionNonce": 937599361, + "isDeleted": false, + "id": "iCKLvSs78yfl5WuTmC-jS", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 440.1198744152565, + "y": 168.8016939973786, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 94.06541713472228, + "height": 122.54727726660121, + "seed": 908569345, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1768314250388, + "link": null, + "locked": false, + "startBinding": { + "elementId": "c90-MKlpdPpn2CLg0feC9", + "focus": -0.7500043716066388, + "gap": 6.395820311908096 + }, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 94.06541713472228, + 122.54727726660121 + ] + ], + "index": "aX" + }, + { + "type": "arrow", + "version": 687, + "versionNonce": 1496773953, + "isDeleted": false, + "id": "seJMYFQ7tE8FdcZfqr4za", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 231.39442727716448, + "y": 291.5325891277698, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 99.40134693182071, + "height": 75.1207253521165, + "seed": 350003937, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1768314250388, + "link": null, + "locked": false, + "startBinding": { + "elementId": "2RRU-Z4Og59tZaW15k8v8", + "focus": -0.6758653900963482, + "gap": 1 + }, + "endBinding": { + "elementId": "c90-MKlpdPpn2CLg0feC9", + "focus": -0.38860601438414893, + "gap": 1.0114731506533303 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 99.40134693182071, + -75.1207253521165 + ] + ], + "index": "aY" + }, + { + "type": "arrow", + "version": 1030, + "versionNonce": 604546337, + "isDeleted": false, + "id": "JJ4CjBUsTOWiwicXXIZJa", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 361.739301782745, + "y": 346.04331160592096, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 171.8546687746994, + "height": 6.310246583388164, + "seed": 1709678273, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1768314250388, + "link": null, + "locked": false, + "startBinding": { + "elementId": "2RRU-Z4Og59tZaW15k8v8", + "focus": 0.13855396407704584, + "gap": 1.6089976793965661 + }, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 171.8546687746994, + -6.310246583388164 + ] + ], + "index": "aZ" + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/iceberg/duckdb-minio/apache-ozone/docker-compose.yml b/iceberg/duckdb-minio/apache-ozone/docker-compose.yml new file mode 100644 index 0000000..8ff2558 --- /dev/null +++ b/iceberg/duckdb-minio/apache-ozone/docker-compose.yml @@ -0,0 +1,111 @@ +services: + scm: + image: apache/ozone:2.1.0 + ports: + - "9876:9876" + environment: + OZONE-SITE.XML_ozone.scm.names: scm + OZONE-SITE.XML_ozone.scm.datanode.id.dir: /data/metadata + OZONE-SITE.XML_ozone.scm.block.client.address: scm + OZONE-SITE.XML_ozone.scm.client.address: scm + OZONE-SITE.XML_ozone.metadata.dirs: /data/metadata + OZONE-SITE.XML_ozone.replication: "1" + OZONE-SITE.XML_hdds.scm.safemode.min.datanode: "1" + ENSURE_SCM_INITIALIZED: /data/metadata/scm/current/VERSION + command: ["ozone", "scm"] + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9876/"] + interval: 5s + timeout: 3s + retries: 10 + + om: + image: apache/ozone:2.1.0 + ports: + - "9874:9874" + environment: + OZONE-SITE.XML_ozone.om.address: om + OZONE-SITE.XML_ozone.om.http-address: om:9874 + OZONE-SITE.XML_ozone.scm.names: scm + OZONE-SITE.XML_ozone.scm.block.client.address: scm + OZONE-SITE.XML_ozone.scm.client.address: scm + OZONE-SITE.XML_ozone.metadata.dirs: /data/metadata + OZONE-SITE.XML_ozone.replication: "1" + ENSURE_OM_INITIALIZED: /data/metadata/om/current/VERSION + WAITFOR: scm:9876 + command: ["ozone", "om"] + depends_on: + scm: + condition: service_healthy + + datanode: + image: apache/ozone:2.1.0 + ports: + - "9864:9864" + environment: + OZONE-SITE.XML_hdds.datanode.dir: /data/hdds + OZONE-SITE.XML_ozone.metadata.dirs: /data/metadata + OZONE-SITE.XML_ozone.scm.names: scm + OZONE-SITE.XML_ozone.scm.block.client.address: scm + OZONE-SITE.XML_ozone.scm.client.address: scm + OZONE-SITE.XML_ozone.replication: "1" + command: ["ozone", "datanode"] + depends_on: + scm: + condition: service_healthy + + s3g: + image: apache/ozone:2.1.0 + ports: + - "9878:9878" + environment: + OZONE-SITE.XML_ozone.om.address: om + OZONE-SITE.XML_ozone.scm.names: scm + OZONE-SITE.XML_ozone.scm.block.client.address: scm + OZONE-SITE.XML_ozone.scm.client.address: scm + OZONE-SITE.XML_ozone.replication: "1" + command: ["ozone", "s3g"] + depends_on: + scm: + condition: service_healthy + om: + condition: service_started + datanode: + condition: service_started + + mc: + image: minio/mc:latest + depends_on: + - s3g + entrypoint: > + /bin/sh -c " + sleep 10; + until (mc alias set ozone http://s3g:9878 admin password) do echo '...waiting...' && sleep 1; done; + mc mb -p ozone/warehouse; + tail -f /dev/null + " + + iceberg-rest: + image: tabulario/iceberg-rest:latest + depends_on: + - mc + ports: + - "8181:8181" + environment: + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: admin + AWS_SECRET_ACCESS_KEY: password + CATALOG_WAREHOUSE: s3://warehouse/ + CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO + CATALOG_S3_ENDPOINT: http://s3g:9878 + CATALOG_S3_ACCESS__KEY__ID: admin + CATALOG_S3_SECRET__ACCESS__KEY: password + CATALOG_S3_PATH__STYLE__ACCESS: "true" + CATALOG_S3_REGION: us-east-1 + + duckdb: + image: duckdb/duckdb:latest + depends_on: + - iceberg-rest + stdin_open: true + tty: true diff --git a/iceberg/duckdb-minio/apache-ozone/test.sh b/iceberg/duckdb-minio/apache-ozone/test.sh new file mode 100755 index 0000000..dabfd20 --- /dev/null +++ b/iceberg/duckdb-minio/apache-ozone/test.sh @@ -0,0 +1,76 @@ +#!/bin/bash +set -e + +echo "" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo " ▒ ▒" +echo " ▓ ___ ▓▓▓▓▓ ▓" +echo " █ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █" +echo " █ \\ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █" +echo " █ \`---' └───────────┘ ▓▓ Ozone ▒▒▒ █" +echo " ▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓" +echo " ▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒" +echo " ░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo "" + +echo "1. Checking Ozone buckets (before)..." +docker compose exec mc mc ls ozone +echo "" + +echo "2. Creating Iceberg table and inserting data..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; + +-- Configure S3 +CREATE SECRET s3_secret ( + TYPE S3, + KEY_ID 'admin', + SECRET 'password', + REGION 'us-east-1', + ENDPOINT 's3g:9878', + USE_SSL false, + URL_STYLE 'path' +); + +-- Configure Iceberg catalog +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); + +-- Create schema and table +CREATE SCHEMA IF NOT EXISTS cat.test; +DROP TABLE IF EXISTS cat.test.products; +CREATE TABLE cat.test.products (id INTEGER, name VARCHAR, price DECIMAL(10,2)); + +-- Insert data +INSERT INTO cat.test.products VALUES + (1, 'Widget', 9.99), + (2, 'Gadget', 19.99), + (3, 'Doohickey', 14.99); + +-- Query data +SELECT 'Row count:' as metric, COUNT(*)::VARCHAR as value FROM cat.test.products +UNION ALL +SELECT 'Total value:', CAST(SUM(price) AS VARCHAR) FROM cat.test.products; +" +echo "" + +echo "3. Verifying data in DuckDB..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; +CREATE SECRET s3_secret (TYPE S3, KEY_ID 'admin', SECRET 'password', REGION 'us-east-1', ENDPOINT 's3g:9878', USE_SSL false, URL_STYLE 'path'); +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); +SELECT * FROM cat.test.products ORDER BY id; +" +echo "" + +echo "4. Checking Ozone bucket contents (after)..." +docker compose exec mc mc ls --recursive ozone/warehouse/test/products/ | head -10 +echo "" From 47cb24eb3c2211978eb63ac5868b515572b235d8 Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 16:43:05 +0000 Subject: [PATCH 11/17] Add cloudserver --- .../cloudserver/arch.excalidraw.png | Bin 0 -> 44454 bytes .../cloudserver/docker-compose.yml | 47 ++++++++++ iceberg/duckdb-minio/cloudserver/test.sh | 87 ++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 iceberg/duckdb-minio/cloudserver/arch.excalidraw.png create mode 100644 iceberg/duckdb-minio/cloudserver/docker-compose.yml create mode 100755 iceberg/duckdb-minio/cloudserver/test.sh diff --git a/iceberg/duckdb-minio/cloudserver/arch.excalidraw.png b/iceberg/duckdb-minio/cloudserver/arch.excalidraw.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8b23d19501018606d13a0f3f9b424ae6becb74 GIT binary patch literal 44454 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 CS&vo# literal 0 HcmV?d00001 diff --git a/iceberg/duckdb-minio/cloudserver/docker-compose.yml b/iceberg/duckdb-minio/cloudserver/docker-compose.yml new file mode 100644 index 0000000..f8e1262 --- /dev/null +++ b/iceberg/duckdb-minio/cloudserver/docker-compose.yml @@ -0,0 +1,47 @@ +services: + cloudserver: + image: ghcr.io/scality/cloudserver:9.2.8 + platform: linux/amd64 + ports: + - "8000:8000" + environment: + S3BACKEND: mem + REMOTE_MANAGEMENT_DISABLE: "1" + LOG_LEVEL: info + ENDPOINT: "cloudserver,s3.docker.internal,localhost,127.0.0.1" + + mc: + image: minio/mc:latest + depends_on: + - cloudserver + entrypoint: > + /bin/sh -c " + until (mc alias set cloudserver http://cloudserver:8000 accessKey1 verySecretKey1) do echo '...waiting...' && sleep 1; done; + mc mb -p cloudserver/warehouse; + tail -f /dev/null + " + + iceberg-rest: + image: tabulario/iceberg-rest:latest + depends_on: + - mc + ports: + - "8181:8181" + environment: + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: accessKey1 + AWS_SECRET_ACCESS_KEY: verySecretKey1 + CATALOG_WAREHOUSE: s3://warehouse/ + CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO + CATALOG_S3_ENDPOINT: http://cloudserver:8000 + CATALOG_S3_ACCESS__KEY__ID: accessKey1 + CATALOG_S3_SECRET__ACCESS__KEY: verySecretKey1 + CATALOG_S3_PATH__STYLE__ACCESS: "true" + CATALOG_S3_REGION: us-east-1 + + duckdb: + image: duckdb/duckdb:latest + depends_on: + - iceberg-rest + stdin_open: true + tty: true diff --git a/iceberg/duckdb-minio/cloudserver/test.sh b/iceberg/duckdb-minio/cloudserver/test.sh new file mode 100755 index 0000000..570c567 --- /dev/null +++ b/iceberg/duckdb-minio/cloudserver/test.sh @@ -0,0 +1,87 @@ +#!/bin/bash +set -e + +echo "" +echo " ░▒▓██████████████████████████████████████████████▓▒░" +echo " ▒ ▒" +echo " ▓ ___ ▓▓▓▓▓ ▓" +echo " █ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █" +echo " █ \\ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █" +echo " █ \`---' └───────────┘ ▓CloudServer▒ █" +echo " ▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓" +echo " ▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒" +echo " ░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo "" + +echo "Waiting for all services to be ready..." +until docker compose exec mc mc ls cloudserver >/dev/null 2>&1; do + echo "...waiting for CloudServer..." + sleep 2 +done +until curl -sf http://localhost:8181/v1/config >/dev/null 2>&1; do + echo "...waiting for Iceberg REST..." + sleep 2 +done +echo "" + +echo "1. Checking CloudServer buckets (before)..." +docker compose exec mc mc ls cloudserver +echo "" + +echo "2. Creating Iceberg table and inserting data..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; + +-- Configure S3 +CREATE SECRET s3_secret ( + TYPE S3, + KEY_ID 'accessKey1', + SECRET 'verySecretKey1', + REGION 'us-east-1', + ENDPOINT 'cloudserver:8000', + USE_SSL false, + URL_STYLE 'path' +); + +-- Configure Iceberg catalog +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); + +-- Create schema and table +CREATE SCHEMA IF NOT EXISTS cat.test; +DROP TABLE IF EXISTS cat.test.products; +CREATE TABLE cat.test.products (id INTEGER, name VARCHAR, price DECIMAL(10,2)); + +-- Insert data +INSERT INTO cat.test.products VALUES + (1, 'Widget', 9.99), + (2, 'Gadget', 19.99), + (3, 'Doohickey', 14.99); + +-- Query data +SELECT 'Row count:' as metric, COUNT(*)::VARCHAR as value FROM cat.test.products +UNION ALL +SELECT 'Total value:', CAST(SUM(price) AS VARCHAR) FROM cat.test.products; +" +echo "" + +echo "3. Verifying data in DuckDB..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; +CREATE SECRET s3_secret (TYPE S3, KEY_ID 'accessKey1', SECRET 'verySecretKey1', REGION 'us-east-1', ENDPOINT 'cloudserver:8000', USE_SSL false, URL_STYLE 'path'); +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); +SELECT * FROM cat.test.products ORDER BY id; +" +echo "" + +echo "4. Checking CloudServer bucket contents (after)..." +docker compose exec mc mc ls --recursive cloudserver/warehouse/test/products/ | head -10 +echo "" From 4b399ddd741196c2cb0ec9a6df1c14fbc3396e26 Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 17:26:41 +0000 Subject: [PATCH 12/17] Add s3proxy --- .../duckdb-minio/s3proxy/arch.excalidraw.png | Bin 0 -> 43664 bytes .../duckdb-minio/s3proxy/docker-compose.yml | 46 +++++++++ iceberg/duckdb-minio/s3proxy/test.sh | 87 ++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 iceberg/duckdb-minio/s3proxy/arch.excalidraw.png create mode 100644 iceberg/duckdb-minio/s3proxy/docker-compose.yml create mode 100755 iceberg/duckdb-minio/s3proxy/test.sh diff --git a/iceberg/duckdb-minio/s3proxy/arch.excalidraw.png b/iceberg/duckdb-minio/s3proxy/arch.excalidraw.png new file mode 100644 index 0000000000000000000000000000000000000000..e7f975104bfd697861b040bc4ea0c48660a768c1 GIT binary patch literal 43664 zcmYhjb9i0d^FAD$Hnz>iw(X=b8{4++6E|iXJ82r*c4OPN-_z&&Jn!fC*S@a3&t7Zx ztXZ>W?tA7$D#}YDz~aJ!fq@}NONl9ifkE_xfq_#&e+J#Dc>*qhfgyuQiwUcGfS>9@ z8K8?}y))ddN4q2-(qLvl3+7P~t7ZHQkdZ7iLKi+F6(%8Wr~QeJg7%4e27mxf`jz;W zrv2glf-{wyWAIC}tWzqjf+uestG(H}PiyMS{aWTy-ph3^F)=hWL{Pwg7vxQ7fbcsS z001uBb%7EO1N+~zS~B7SE;pY7b!6nf4~71@YzPTe$RR_BM4TRW9`Zo4AUYxFtwvh6FUlQB7*Xr~k(P=dCsXI7z>r z6A45&e0u(Wa{iTiJt`pH$iAJ$DD~gFjHJXIa3F!>NI?UEW7(~>xI!Z!h~MmwE7ceX z=b|m2*^2P-(@Vz)i<}cI+YLlNkbePhtY^dcPjU!U&{S1AZlbAx5U~)ku%n>_vaNFR z5I65kWCaCTWn+U?^{aQum2r=&oPx{uQ??2`%=ar=w~b|@i}%7G{|Sdo1r1H@b}f?x zpJWjq5Ff#1rT$yTQSsQtF5rANI2pJkfWaI&AE_|HEQZ^)hTV6tOkVI+?mfSeSyl=+I00Q(zi$ywg7#fj|L?>8Rt%iqoL+1^h>RT3Vs} z!E+RT-9$&sQ`X%TMl6Z)266v+@}pkvV*~33(Znuy?32KzuM~vtpa)a_p@3ApbgX17 zyjspqo%`eojr4yS4-^vH{J{-J?FXF*_30HSBWDZhi=s)YN${>HTqI0?1*NAjF*Qnw zF<+X}DGbXnbNirg=V9@Xqw+G9@n6mVqk;7h(7Hfr1aG0hCmWQNOM9`yP%LdWS0$+; zUz!0tI=>YLvN%tMNyXz^SJ%?qHU^JL{%2GUf4>Y7jMY0_+K(N_Y(20A9R@-m5G=Cx z9)H#V)z~ZM%S4(*#6K3h=?xvx9~ljri+3G+TFpO%j# zo7lfb4uJuZNJ(Q|F5(26&?qsighmdwP56QW;7Or9P(a3= z&k%NxoJ9VI*-tN)CPfVS(i-4Vy}(Qe!7UwzaJ3chiSo}Ipb3blkdc*bbR1bxO2|SM zg~*lOr6~o1z%D$!Vl1otxJ>lK{!*!XLVj0Ad0Mb3~2K0l9%k@Ua)27vwh6XP3HsFAP4 zH|T(ffFR;Elx|=>J<^( zD~dWR&4(jGq$@%Ww5V19{Dc|NRPZ_*Zpc20@;LCTgvDoIDTBaH-ye!1X8h#Ls|flF zXa(nVjSYA^4tXg@^e$JEKwWgyuHj(Hsa7k6u@{?^N;#ImKp_GZop$7%uBLq!S>diV z=#cPmGIDZ2t}mhPXCKUL*&ctB-UBOYm>y6&g8HaG9bM zPp#C(B>cLus(t`j8kheb>A?1vhZ0>G{ymI_KO^hL zuO_t}3w#~xujsWj2twR;tAZ^X_WPmM&Zz7N7RnW!x6vuI2_<gTjbN>VO&aZZn?x#71bQ{|khG}SSCCQi#eoeowYz_> zsbR`2PAQP|MwiZ+IiQU#A_yjsncPwl9)8fg(xmLV|HBG5I)hn%wzKStk(=wgPZx$m?G)g|wt=(O0|u1y}-K5fgMqGWIJLzgg7oQvcfe?7zl zu~2o*JNL^r{pOx~(6rU2s<^ULgmehMA-!~sRu;}|#Rb*Hp060|WWwA2FN+aBkDeDG zp@l%e7ffzMO=X++U)4L1SAE5Z*{Y3fSY2O_IX*v}uc;iIbLnu~zfPFCWKo-&?NEJe z2Y03C7dzhdVBoL#q9>s6)?8eyaryV)rl97&^DRm6_2-Cb51;~kpuo>?-VKGZS#Z}k za4UnaW>&g~)TrDTt1reB>F(43Qn6?|fpiAawbisH!V;gjxzQyMQ@Cr%>!hS+~Ur>(m2!g(S7 zSn~Af>cfR-vs68TdQxM2<_2%gq3CJWT)8SJ%VE@w<=o9Zi+IE3Xeg|^J<{*oUVbmu znJU=VB>#iv%YH?t_X}beJ3)Z`i+u0#g?h~p141nDIt3VfMLnFT}*vmz1kKoy=e}h?C;pesMDlF z($z(6pK1)F{v~nEN#=nX#`d^NV!!|P@=)tArhu(j+(;T(2jv$WR}RvLgmZD~gr>CP z@vY@pKl8r5PJ3Xau0$}$E8nrCoUeUblz)+K3rerx{YM>E>%v7(1~)D9_V^D?9#51e z;5ypfKjr9iQ{`i3<{V8EjJ#&gGiX~yYllJz#~q%N%j-bu1>Z?SCWwixU7tC zqMVn}_*EZJ_ig)*gm|mK*0fCEhX@@*7GGSU3TEvP1$jlM{G(Pj=iw57Cxypm7imgQ zL0vBvHh1x9&~0xxo8N)L5Br(_{h1qr@}8(T>Z{#GTg+9qq~S^#{ZI}g)HisG7<2v7 zyyH}Py%J@@#A2xlfH#MP(L|oTT8CNYvWK?^)NjIhy=-TOUVS29I*~&EJjO@K)xhr; zR2@yO*ZOWQOiuuLop$O+u=q|7#&pc1V~otv-8^_ zA!;b+&(WeQh>Luk%|xTY9b3W4sqekbxj*;fIZh>{S&Z$7CSK6HC7vP>c2seYxM6oq zNdNEHoFo+z8T0s>n;n2n=m4!+wgh&I?Yv>CK}l3op!q>pp|RWwtD}5quV4R(+}V5n z;unHo^9uG}_n0;v(dRb~e1bt&$-&w+HQxan9JP_&>FjV@@~3>yHzAQ{ot?4@h~Y!u z*`9XU;z|+>=kPJ*oYi_~4a2#L4WY@i&1c_k=ea4a`0q|AIMT+KSqfbOxs}FW`itYT zIM^yaTzpvgo9I0K)rsQM1XWu32z`ImL=C^SIr?WUJ`j~FRlk&5ym|8ev3O%~dw*g? zv=t0UW=%C5wa;WKeZdADKGgOP6$<7hE)83EgbR)ZR+%K)6v@93U>r9tg&#NY81qEl z4&wI`DjYDQ@jp3J|D2q#SRlGl7iAPNN!MaI7zu(Xgq47^j-(IiU!BLh5%)F86tVA< zx4Cu(K-hSRL_nSfy>z=AQ5QK(nhN}BW+@E#(q9#@OW!iA@~yqnJT_a2!qFTOR$)1; zBbu(cjwPCO60^6&pJF?i0b!0C32yMcPi(ktvU9LPp(q%T`UwM1{d0TvmYdJu!_NwzxaIwqWgaJ0mZrp2~m)34r7uuxRT9l_Mhy_VhtPV|Dl+(=%l4;^PQsVnV4POh{x_6>+XhBSVH5qcL<(X@a2^o1r_`JU}~ z4&Jqu1LENFyx>92eLpLpd{8IsbF{R)&pN9W(R0Gb4eDIHP z#HU%_#??mb#5ZpdQc_YrW+0FR6olzT1eAyLz!eiye4>K5#dJRQY0afIL>GyQ%us84 zPa_$*@iw^8Gd-z1X;hVAtb9|rGfR{$v<*v5H;Dz_yVt> zh_f?g>4UU4PH%@ib^7GIefM4&qkJM5hKaxNl6#zQkS=-UQBPTG`b2?|JLcF_Qvvc8 z6(a-8wgWB$)6dn)`84yuqoD@AFWvMy4bXKm*gQY@XFrXgEB`>YhxdWgh5z|Jkk@$C zqs^GF9^T^Ne96o4Gn*kg88915sqgdc&KRVGPb&rE-{lRNJf5&TI<(j^4X^t2g`DsO ztUA1y6hn)GV;MV~Phu-wrkj}HD_)q-H(Kp!lYsx1FaQHQBHN#iBW!C)gcO)V?L}Pn zwipbg9s8p&Fmk*(_@KoVKk4}lA!A^6=@MF)t#3c2mBa_bWJ?BaL9D_Ah5}JK+>SDq zKLt5<(&ba$@7-4$c=TaApe&~P$B35yuuY&j3(lsa!;HS}QT9K}QfujWni)ieD$EGB+n`28&UZmk#5F~M>&4%lAsdNfm0l{*pM8Y2K}o$U|YiA zZGNaJSxgl9@{efF)PGoj5#W&C%!avNi#4D1v$=MpULtYcu)3ntiK%Ql&zG_eb={?3 zZx5B&@5=@*{$-FY-z|gf6dFV?opqUyE0G-%@UXg-9Pb0{9WKswr|K$(FDvmHg(j;h z9N9NYzpB;C0;G=?5y|FaG4%b}#FJ-NvZ_tMO~x~Ivsqn&qK}meWWWcuC}eZwl3DwL z06A~vK_$J-J4l^K_I_%2`@S9FTDyN3x4Or|N%~p77uyeFfx%07GN!<(-+dCc| zAMszYS)f*VAKT4&16u`{@B?_@Qw{JPYhk}6yC=0OW^sGr-lnjG{M}$BMVLR@uk9d{ z^|?6Y?)n9!te`j_0Y0AMhuXb0mRFw(d*9Qfvjy0bED{?%{CwCt1@+jVpHvtH;bdae z83S+fwv83|p-VSCZ4&AA5w%#~h9iIK4&_`?;%`!nvg zY;yGAYZ0D1Yo$3&HWncm}$ zq=sSepU}S=SFTUSi=;G;K5?@&IZ1t9E4o*HIsLU3pG@}W95XpnHFOD0yH&*(V{&wj zvFQu$1K~ac!Y$!!`H06xF+$>K?26A4%9*6A@U(fQf;}B8+#O!W0>HN8v|x8`bARMU zj^G?&><^A~CNsT2+8UNl&0zCV^{0BVhQ;fH3rq(%&vC2kl1m6Qw3ZCKYP^j-ZoF{BilEf8Y8(+cODTx-xv}kpsVH+fnRIuu`j2N(*1Q7@ z|K|f)f_djmJ^?P1h;QVjuH^rKQC-?7i}lu6eX^$r8j?0rbO45Rrz%R4{)w$!jc-29 z;-xfk!HMh&4cNm~v-*YTG5Mls}bNB8StD&Cu`e9!#>77DzX&?xSPpxttk9ea$ z5phWUKEm;9TTY@F8ePfYU>y*BWjq zjFT`P470nh0i9#%0g=X@)BgiG3U^@u=IP-EFJybNtw;+Nsnf)cNC2yfmrgG&Rv-H9 zg*f3B+`9x!IjR4HS^k2RI>MVn9lD#_O6JQTZ0_@y=__mqpVFb$q;=7kY27~!Rz9J> z2S29<{_`m{qQuAw)f+HvOuAUAZx{^esf{ECwVIb=F~!6oi@a69QuT+<#QkiOoAd)`Y8rejQg31+6|US2^9c=8fY{83$WW}Is?)&SXKuE6*NR(WI+6O zSKB#@HE8!jqXSHGK+iym(BbliUHSMH>_5-YJDd;YJK|=~#?cHXx9~~LKC5hz{67fi zpY)d0;bNU%@pq^Oqi$a$8Px4j@a?;=&6D$&BL8)~(f#qRvYMqwyFbJgFXPSGXoN24 zY0YV7^vwOtBxHO4TX1AD2rN5@WGfD#_ra{_ZeVRbSQVF>0jHZ?lp^%$QVUAHfK50N zMcC&0T5FTn6Y0J@cG!g^(!hXPbaJdfh3+evI^CmswwXUUk<%Vy!8M9(kHgWcR&r{v zH8lPj){!#g6?!Wml?o2xJucv(AMHhOpG8!-D-(I>LDNySLTe*a?wVS=q4I+ux-&Nj zZ=rg7vQUtECGKn^cob{Wc)B98$>F(xW~J#FoO->{n3bbKvtXp0(19=Wh`}G?TlM#w8JIbqn&r=ZovoyMc3CN5RK~^ zGtERKinT`Kf*CP#;-D?C8Xj>fIk(Lg*GB?dthFT}|?pTIXHh`pUW z9mDPQg=_UdQzW7W;>Yc3^e)(3V_kH)M#h*T~tOC*Eg)S2|&xMpl-#|cQr#Zw1|A;uu&dg$lD#+e{0g! z^wmU67)3TSRQVOYgF~b%3k>llp(&rj%lst!ZzlqvA;|ksWP2e@8d$yxZ-PSvibfHQ zX*q#57%~z-L{#)I^}rM(>1_G`XHhQo2{;%Q0M zT6;t`fEF|jIj=a4SNV`Ml5t*2iUuUfmH6iS+l%Jw+b&c{(`@+Ai-nT5I|!~66@fmu zE7!2`O=lfMy69a$%dByIqj9bseahslFyZ>z0?*L+75JH2xllsRSTBpCOD2IY}=kmp8s^v1c|&+^;^V>Ji!LbOzC4Rru%km;oKR&F=n8 zi(C0j8@SABi5b9sP;_ z>*q^(5wRw6K4S?JE}7o}a=9JpmYIfC3i{xx8&pkS-q+yI34hABy@HsiQO5YRgLY{A zWk0ZTbNazD`%3?=_66lh%>gD@uNdx(J}k6Pf7v1jj6gVZ1;dY6dIM;oVe=gC63?)) zCBXM()jP%zm6VfAwE0q z{iK(q!ti{>X}g&|I7DIj^aP9LT<~+GiGOh%ZyGDh6cl4*xI7Bg(`&RN%H!r3C$8_^ zmg1W<_Xj`n*1;lwBLI+ z%2TQAIgKj_jvU`xUQ+^l1+7y_Y@RJ_KCELH8VXO7TGefI+Of?QBp#j_(pfP&Co)3V z;SQE=U5kWjl}j#-_}gZFktr9-mq*)LZY7$ky-%GJ(A?dN#y8>}PTs%0op|}YO{4qF z-NXHbI`-k8G0Qu(1M3DSJY1H^4|qRbvEVw=qK}B=`tCOxy4(4rBm!A@y`lBlH`-%R;0x)!0QlHI?8o`%xMA=J}s)ZK_w>Qrr* z=z4EnwJX{Sj2Fs^=W@~cVX$1Yu8F~+?b++<5mm;9 zsH4MWD#gULpP|3MmB}d3KT>l6#69WEqnfO{8}q7I`$^yhp9vf|TOV|0Q$ zlWiBe4%qUIi)_>OcG;N5u)pec4}LjK%sE4D!rHSmxhf5&tTmgE0g;E8&+V@y672** zoqn-hG3A_^1m!xNPHUH3)x98S)8MfDZK`u#5_@eQ&PMl2q2f%QkS|bwFg#!3?t!`C z4Vo^u7U2K!jO7QPPGHTezTWPPwZNd;n|!0;0ODTo7k?3v&#!3Mcc<)S*7)D(l{M3a zyW{u7^&U_`@Yar6_`G)JY`*H84^?#sR=#}KwLYM*QLAlU(O#(ZZZD8e9nitQ^c=vl zHj-0tw6L(~GA0FshUf_EYBAlCHo6`!$;LZe0uBd&qPQ}L&tC&d-4`##BAA_Zo@@X z-;Q@?0Ds$dMKa*NZCd}8p#3*pad@ULt9^>>!9)rDzF!WrM7?K$fgziJBj@_*^kh+k z{{d#9XjV>%Dgrxhd+GCfn;SO+?!D60p4mm7)&bJ=UES4?_F@a1R0@7GL88HN<`-GS zll7U?kL@LueHyHr93>=8<<$TNLR=p7^ zy*40bU96xfIm2IKM?{B@7dCppP|AGrU;)$+w1~xg+n6b%DWrVT+(i*j^MA4m#J%Yq zSwnu+(eP0%6^N{l-Zx%pfs&6!FIA=$f6Un5xM{&glKkN3!ezLgnKd*^{ws(cd)cuJi3@561hq z4#kAYBNC#O^;@^AQ_C_M)C`*O;ERN})`l`C!bC|=%O^0QYNk;c0TmcqFC-PcWl&0B ziZa7Rd}TP>sjNMwwAK6#0l{bm50rG&CM@wb+6QXZy!TU7&h<16(yEFN&@E|(&|)!` zu!)bTf?^J4hbx_o-}AQnRr<{p$J;ywli%lxoCZAvOdxPO44Iuyt=&_ znyIxwFbH!0Av{Te{p(n^jrWKjonAvHo!fngE+l+H!;{eO{aCUhs~H}|A_5|fL0qU( z^U=rDWADP$R(X{Ni1JXi(M&I!4lzXO)yJ!78^X^__Ke>93;8l1Hg0*8+7f_h57a0= zZFqP44W+*CfX0=iGp65;{utkCJ+>LGt;n_)QrMFDWGB>kP zCL7KS3rel1kax6}oRM5L^UXc!!9NkS1%QqF^qMiH+;&0m zB<3O-&*S$ln#Bx>CVd&1@SL8)u`|ksB@_vU@NmU*@A*n^{T0xCMU?cNVSsKi{&3b9Ew?;z<-eVbKS@-kH_{T&RK4?%o6pg?ydK~tj&EPMBLDp6l3jDn=FReO|NC%tG zI}wWTjSf@%c`3`;_}EgblO1(yYvS$NFgv@L{`*xtP32u_ilR;{wr^)A@y-DKlaA$I zj0|g|N*seO`{I7T226UYK%Y7-XRU_Fe?rLZx{jg!-h_~p@ zlCZkMMin=Se-koL#M0yGFY!}BWH9g74rnVec}m^BcZT2dX|}nJ?>3V=?rP6H>V7ME z+$noI`iL$09uA*gN3}i1Ws+n4gYx?mC{JQi5+Qx)?b~ude<(*kMRdRTwvy=4xn9pW zqE;Qe`a~o?(e_Ez0%C3wJLGjg=A;Ju<7Tx@cd3Y7*75kz5R>)?A*;KcmVf%#ho<9R zt!a8np2;+0+MBvVw7Eiev&vw73q60^V9QYMx*?|Bhc&`syIER)x$TDN^)9t0{#Rve zJ!8x?W}YT%yn$O^tkj8I!#UBPL@ehUb$;do1)KXpLqk#_q1+Fn;qgYC`oOf7$qdfc z%H#9w*0dRCe6#!Xs3a(b#SzAwmH?G-`Q-_E%;=HX@-cW(dMU!BV!4Ug@IF+Nxdn`7 z!tu&FtE?3zxPF_^BDn^>`CJ7jT*A!;GG61pfvZE7CtnObrMo-aA*Cr?%I|}hY?> zv@a{a`^$9Ks$wqx$WE5=A%%`&D)r?)IS=ZtxP{vyUT^^t*OwqW!H1bff16CELMG$# z#}&0}Z#EC8xz@@ajhA>_{ATuu!m;yB=DM_vVgFLL_5jFRf4?w=< zB{#2BrT@z>E%8g-d&mfn#%|yHj#X^wY@tMqI(t6*m(mXq*-T}W)!1~06r;6uKfV$H zTnr=<-7lGnB?|K+vJKS#Wr8Glv&X20+&dpD^3k8W6C-RN{B}Tfc^UpuA#B!snb7L! z08Z9E4B8$1V9R0Fsa0h*89+<55y(c%7f^9beJ1oyWwS*h^M=pi(!+yY85jC_EDFap z)TI}*SSXSVB8G2Gjbt1lF?Z1s`M|&M!G*ZNLY3~2xd(YtPY>}m*piHWor4E!=CT;twP$_)|J4&4dLRXxMgh5Y0&Y}(SH}yYW?etA5khZfV zuyrC(21i+zdEw1^W6@8u?P>}iwXpfltj$wf{S+_UR3joD-U|3*9lixor!zsuMiO4I- zC_%k#Iv5Kxm)a0XM6d_aI@@aqF{tK zC(fV%wEjmTQIALO*ya_+ZaDdPdSj$IzQ6~InYvgHk zUI+eeexxbx+bBZ1{>Svc;WV?``cf1*e}@f-1SGE0KxCZZ0jhcD_rb*l6b zI_xK$a_1bFl=pANF46@!gfsSA=7${PEoEGF%*8J0v*pieh(KG4^gT?^)tF#7>`3cJ_*Npy>FoIp+8k$r~JwtAn^JN zJ*jenP-l1*D!qob>sXBnEu^z&c#SR0!ko&AefO=3yH@hhEiJqCX3nxdwoy7yaHaRp zLLxHTc4ZUG-W+Q{W<#eE$I^lT;mpxz}^eov6sQtRW88*k9K5 z_PGj4!ag0?J=)oI8NrPG+lK2p`L}?sa$Mp|EuY2w!`G14r)1c0;y{YX%qh?B%PBED z^3jo-+-m~`9&aNEt||1@Hwy9Ox%zDaVkim&-0rz36%nileNa)CN`hqqp2Q6BcT*&Y zSn|3Cj=-M&=+#fbu+@H3_-~j9Y72o#=;RxcZhVhB6^&7{IWxHK_2#_{4(3P=^eT5S zp^RAkh%d%$-~89*`5zrxxxH>nMYWiG82oUrAnU9Q_q0jQlsYAicfD>=DxTfA)p5i= z9`$I4HDm|{$oCoOd4NGG@l3EkiT@(CvB<=pWlOiV+H*mrWRCB*!BZmYs?{GnO^}fM zuXAJ9|6u`Dd>1WqKBA0>);)FJ3+!H~g-u{2_2~fBIqdL%dO8%K1^%g@^-(U$iK|wprhyfojq| z>7EFi$JbU9Sz&p$Y7)z0_1%~4414UnYjNi~9X`9Bb{>Y)c z^F63ck$nU4*XUk9Yp%BH_0(nKKWP!xzRMNhE)vY(3cfgR>2!*V&Yfda=w0^fSSZj= z?x5cAZO^!><_>re8*uZl%4MT0OI^S0!YSn6gyc{?+c=7I9Zj2hpHKR%*-1v`?W)UR zI|&m=I$dwV)Q=OKtiLpHMj(jNy4gqk4$Vu$B3$oqOe&MY#1KhjNSZV5w!N3Ki)6&m z)UUD=cfp=bF18xw4%1>X2@=Z;g;zS_Da6XDR1rRd0F?~5)py0a#$h8d%lYa)rsof8 zPKrjK&RyCVuG>f0oX^$4#%O=~(Kv^c82Z3eDv+nC0@e;e= z1Upu#kK!*AsWXFUj&qal8X$Vuf)+I{RN}=l{c`@w0a|x^#7Xfy2_B0CPp0e6wj2b@G(*^InD zg-U}YEKfh08kzlz8ZV+NLG>zu3j&srL8gRz)bA_Ks)e-#$_2l|;8&ZBV(4SPayIaw zYI~J6>#hQkD7Vz{?Q3>8EPP5~UQFa16j@H_+nyS~GI={TR;|imWEKFUdO5rgpSrqJ zv&INsD`!?ZtfFO_cOV(ekY;7PE=0M;{P>SfX&}6772=q0F@ah@gE1L>OA|F^b9z%|rno=aniAg(mhK}f# zCz;9x{>FF0NB> ztFj3x9UrU+U57xeTqN?#WO!V>;WfdxwZ_1zgtYH3ACYw59?vH(qutJFUIFaMq`wWY zl@OEoksL3k!Hk7d5u9}yCPV#R7s0F#tB1$z(>_`TMmtKBk&qnf#h zIQ;YewAqP)rh$uNPxCmjP%5@DtRAWtje|iaZZh*$gOPTN!aW#$ zO+7~J6oUtP1HZ%VPiVE4aD&~pc0Er&%;RQe{n@I-Jqy`U1e#n0v2QBA10jurI2m8? zHXc3(xFC;R8vK^{?p>5zCwflq!k(q6R$&~GwR`+%3#E~zx3G*U49yXHJ?a;D^=z{wUHXDEvW7j4lqfF`;3!v z<+UKNxpIM8eDL_-bdck0`vzhzIJFsPM&jx7$1}X$FIKL3L>2ZV1#d+sM4G=txqwQe zN@?16z!k7RMshd&bK6mG0ZDDyJRZt#rxVB#keLspEJl=46#5{nBeR4j(XwMYHu^-s z+C;Zvpx;!rWUZDkN`r3LrXq2bxK5SJcb6>*Ae~?yje`VE6dXNcA*ip8s?&_;rFIID z=*>V{kUi)|AdK4!saH!X6fbxtcY}XtkYs z@w0hQs&A?l2_BIt-rR{ROU)}uDiIC+Jo#hxkx&X$1Zd@2Qf`#$Ua=PT@^GF%_K~Cd z?c=@UYvC=vJBN!UBb?M&vmnc`Lvu^=pV!9$k+gU3c7N+O=0jWYSm_aN!ky^So@Qr( zG0J3%?c>-hSL{zOMT2RjQaaF5?Zlfn0G8tGF)o%U;!PMpmaYv}O~K-;Y3E>!AjY6u zZL7Q|Q7*%?97H-iPZ!1=J#^cDCHrIL#aqxYC(^XFS@;U4W3`bIUW*aVuwI z#jtQC{9|sa!D?$$W2J}+q(NO!z!>lHt9OjMjtb&qsSL%6(e(WHk4W;9W;iIvQq+2j z1k>-&{Fy>YwnoAt%eKc*QkeCMu{_C{??^u~Dav#y(^%#?eKD;MKRLeH+(G*^c#+c$ zh{6)FE&D9NxUSoF70LYCA1>N%YlehA%Lgv=!Bh&`m-B7O44-$UMogu+g>h!=sM*}M z&209@j(9xQ436s=@e}xcW@j!c=3--0)sX(n(@Fz{C^n$MzZ!iv@n|H8A0p7Nsfv!P zTL4vUn3?d2LyQ@-*w++^KRkiU$2JSz7MZUoYJCKOt({oCg++i z4+3h=NW$PYbG)9k@TTW^*^rBd>F+Prm;tp zlhZ?(%A_df7+qmfp1H`XM3xtW8p7^3$uUT38bv4C@dEpPS8cs~wPhY& z9rbtuekptTMsQsEXBO(lJirhk2S2w@Q?O)4o33v$>2OptsH+#6%}$kw8a{=1eLK81 z0d+$t&uIKPkE_+;Pt%&OvC(-=qJGc5-`(WEKFcs1#JN}i+_S*z526hJ>mplhhIQ79 zBE#}aAv1+P@^l$lUIs%JqVW+YlVAR7cp828ZxbP3XaMd({QyFrc13)AFeBOKDP}OJ zx5_i{4vXo=n?r0Qh!=unTM5tv`M0`~*`pt8({F4wW!&!oUIC|XGN5=M$`U_J=@2xi zqnwvA1IUukB?H!ts#bG3N&4P`hoOT4@Q|s#Pd~{+=Af^5_d)b%pT544WDtr4yf8Wo znsre11@|t8ePcWCzL&jST&77R&KFF*MZbx0mo^B3rv?qE1U;oaR)K8%lX%-28hvcD ztsm5;c$DzdV(5^XH3?Fep_F)Y68bV{0VyOSo?_4EDZOAYjUygg)`vL(*%1SLS^*z0 z@|_M5bw`FhTfgQz7nv+$kWde@L%-};0z?iv8o(P>$Vtd)j0Z)S7#VrdIO>bM6=Ur{ zW}l`%2abfWQ^mE;Va|l!=&;Y0bU@*0`dPazQ`2}f3lsT89sYd4s zeTzN}p2A)FD0!(Klb=sMAFPW+u+RUN{5up$pC%a@NLo*T6q6JipWrVb6?9(=SR
  • =>{^ybyR5?B!Yd-cVRAkY2OWqrTU@3~ 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 bM7cH^L+jaA$081VzFm+OR}d={)%W`!s?j#o literal 0 HcmV?d00001 diff --git a/iceberg/duckdb-minio/s3proxy/docker-compose.yml b/iceberg/duckdb-minio/s3proxy/docker-compose.yml new file mode 100644 index 0000000..83043af --- /dev/null +++ b/iceberg/duckdb-minio/s3proxy/docker-compose.yml @@ -0,0 +1,46 @@ +services: + s3proxy: + image: andrewgaul/s3proxy:3.0.0 + ports: + - "8000:8000" + environment: + S3PROXY_AUTHORIZATION: aws-v2-or-v4 + S3PROXY_IDENTITY: admin + S3PROXY_CREDENTIAL: password + S3PROXY_ENDPOINT: http://0.0.0.0:8000 + + mc: + image: minio/mc:latest + depends_on: + - s3proxy + entrypoint: > + /bin/sh -c " + until (mc alias set s3proxy http://s3proxy:8000 admin password) do echo '...waiting...' && sleep 1; done; + mc mb -p s3proxy/warehouse; + tail -f /dev/null + " + + iceberg-rest: + image: tabulario/iceberg-rest:latest + depends_on: + - mc + ports: + - "8181:8181" + environment: + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: admin + AWS_SECRET_ACCESS_KEY: password + CATALOG_WAREHOUSE: s3://warehouse/ + CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO + CATALOG_S3_ENDPOINT: http://s3proxy:8000 + CATALOG_S3_ACCESS__KEY__ID: admin + CATALOG_S3_SECRET__ACCESS__KEY: password + CATALOG_S3_PATH__STYLE__ACCESS: "true" + CATALOG_S3_REGION: us-east-1 + + duckdb: + image: duckdb/duckdb:latest + depends_on: + - iceberg-rest + stdin_open: true + tty: true diff --git a/iceberg/duckdb-minio/s3proxy/test.sh b/iceberg/duckdb-minio/s3proxy/test.sh new file mode 100755 index 0000000..5a1ddfc --- /dev/null +++ b/iceberg/duckdb-minio/s3proxy/test.sh @@ -0,0 +1,87 @@ +#!/bin/bash +set -e + +echo "" +echo " ░▒▓██████████████████████████████████████████████▓▒░" +echo " ▒ ▒" +echo " ▓ ___ ▓▓▓▓▓ ▓" +echo " █ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █" +echo " █ \\ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █" +echo " █ \`---' └───────────┘ ▓S3Proxy▒ █" +echo " ▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓" +echo " ▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒" +echo " ░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░" +echo " ░▒▓██████████████████████████████████████████████████▓▒░" +echo "" + +echo "Waiting for all services to be ready..." +until docker compose exec mc mc ls s3proxy >/dev/null 2>&1; do + echo "...waiting for s3proxy..." + sleep 2 +done +until curl -sf http://localhost:8181/v1/config >/dev/null 2>&1; do + echo "...waiting for Iceberg REST..." + sleep 2 +done +echo "" + +echo "1. Checking s3proxy buckets (before)..." +docker compose exec mc mc ls s3proxy +echo "" + +echo "2. Creating Iceberg table and inserting data..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; + +-- Configure S3 +CREATE SECRET s3_secret ( + TYPE S3, + KEY_ID 'admin', + SECRET 'password', + REGION 'us-east-1', + ENDPOINT 's3proxy:8000', + USE_SSL false, + URL_STYLE 'path' +); + +-- Configure Iceberg catalog +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); + +-- Create schema and table +CREATE SCHEMA IF NOT EXISTS cat.test; +DROP TABLE IF EXISTS cat.test.products; +CREATE TABLE cat.test.products (id INTEGER, name VARCHAR, price DECIMAL(10,2)); + +-- Insert data +INSERT INTO cat.test.products VALUES + (1, 'Widget', 9.99), + (2, 'Gadget', 19.99), + (3, 'Doohickey', 14.99); + +-- Query data +SELECT 'Row count:' as metric, COUNT(*)::VARCHAR as value FROM cat.test.products +UNION ALL +SELECT 'Total value:', CAST(SUM(price) AS VARCHAR) FROM cat.test.products; +" +echo "" + +echo "3. Verifying data in DuckDB..." +docker compose exec duckdb duckdb -c " +INSTALL iceberg; +INSTALL httpfs; +LOAD iceberg; +LOAD httpfs; +CREATE SECRET s3_secret (TYPE S3, KEY_ID 'admin', SECRET 'password', REGION 'us-east-1', ENDPOINT 's3proxy:8000', USE_SSL false, URL_STYLE 'path'); +CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); +ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); +SELECT * FROM cat.test.products ORDER BY id; +" +echo "" + +echo "4. Checking s3proxy bucket contents (after)..." +docker compose exec mc mc ls --recursive s3proxy/warehouse/test/products/ | head -10 +echo "" From 19a88366b9be336092680f26e81f0085f7f4d5fb Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 17:54:15 +0000 Subject: [PATCH 13/17] move minio into its own folder --- iceberg/duckdb-minio/README.md | 138 ------------------ .../{ => minio}/arch.excalidraw.png | Bin .../{ => minio}/docker-compose.yml | 0 iceberg/duckdb-minio/{ => minio}/test.sh | 0 4 files changed, 138 deletions(-) delete mode 100644 iceberg/duckdb-minio/README.md rename iceberg/duckdb-minio/{ => minio}/arch.excalidraw.png (100%) rename iceberg/duckdb-minio/{ => minio}/docker-compose.yml (100%) rename iceberg/duckdb-minio/{ => minio}/test.sh (100%) diff --git a/iceberg/duckdb-minio/README.md b/iceberg/duckdb-minio/README.md deleted file mode 100644 index 1a20b07..0000000 --- a/iceberg/duckdb-minio/README.md +++ /dev/null @@ -1,138 +0,0 @@ -# Minimal Iceberg Stack: DuckDB + MinIO - -A bare-bones Apache Iceberg environment for local development and testing. - -## Stack - -- **MinIO** - S3-compatible object storage -- **Iceberg REST Catalog** - Lightweight catalog service -- **DuckDB** - Query engine with Iceberg support - -![](minio01.excalidraw.png) - -## Quick Start - -```bash -docker compose up -d -``` - -Access DuckDB: -```bash -docker compose exec duckdb duckdb -``` - -## Writing Data - -```sql --- Install and load extensions -INSTALL iceberg; -INSTALL httpfs; -LOAD iceberg; -LOAD httpfs; - --- Configure S3 access for MinIO -CREATE SECRET s3_secret ( - TYPE S3, - KEY_ID 'admin', - SECRET 'password', - REGION 'us-east-1', - ENDPOINT 'minio:9000', - USE_SSL false, - URL_STYLE 'path' -); - --- Create Iceberg catalog authentication (token can be any value) -CREATE SECRET iceberg_secret ( - TYPE iceberg, - TOKEN 'dummy' -); - --- Connect to the Iceberg catalog -ATTACH 'warehouse' AS iceberg_catalog ( - TYPE iceberg, - ENDPOINT 'http://iceberg-rest:8181', - SECRET iceberg_secret -); - --- Create a schema -CREATE SCHEMA iceberg_catalog.demo; - --- Create a table -CREATE TABLE iceberg_catalog.demo.users ( - id INTEGER, - name VARCHAR, - email VARCHAR, - created_at TIMESTAMP -); - --- Insert data -INSERT INTO iceberg_catalog.demo.users VALUES - (1, 'Alice', 'alice@example.com', CURRENT_TIMESTAMP), - (2, 'Bob', 'bob@example.com', CURRENT_TIMESTAMP), - (3, 'Charlie', 'charlie@example.com', CURRENT_TIMESTAMP); -``` - -## Reading Data - -```sql --- Query the table -SELECT * FROM iceberg_catalog.demo.users; - --- View table metadata -SELECT * FROM iceberg_metadata('iceberg_catalog.demo.users'); -``` - -Snapshots & time travel: - -```sql --- View snapshots (for time travel) -SELECT * FROM iceberg_snapshots('iceberg_catalog.demo.users'); - --- Query a specific snapshot (time travel using snapshot_from_id) -SELECT * FROM iceberg_scan('iceberg_catalog.demo.users', snapshot_from_id => ); -``` - -## Viewing Data in MinIO - -### Web Console - -Access the MinIO console at http://localhost:9001 - -- **Username**: `admin` -- **Password**: `password` - -Navigate to the `warehouse` bucket to see your Iceberg table structure: -- `warehouse/demo/users/metadata/` - Table metadata (JSON files) -- `warehouse/demo/users/data/` - Parquet data files - -### CLI - -Use the MinIO client to browse the bucket: - -```bash -# List all buckets -docker compose exec mc mc ls minio - -# List warehouse bucket contents -docker compose exec mc mc ls minio/warehouse/ - -# List Iceberg table structure -docker compose exec mc mc ls --recursive minio/warehouse/demo/ - -# View table metadata files -docker compose exec mc mc ls minio/warehouse/demo/users/metadata/ - -# View data files (Parquet) -docker compose exec mc mc ls minio/warehouse/demo/users/data/ -``` - -## Cleanup - -```bash -docker compose down -``` - -To remove data volumes: -```bash -docker compose down -v -``` diff --git a/iceberg/duckdb-minio/arch.excalidraw.png b/iceberg/duckdb-minio/minio/arch.excalidraw.png similarity index 100% rename from iceberg/duckdb-minio/arch.excalidraw.png rename to iceberg/duckdb-minio/minio/arch.excalidraw.png diff --git a/iceberg/duckdb-minio/docker-compose.yml b/iceberg/duckdb-minio/minio/docker-compose.yml similarity index 100% rename from iceberg/duckdb-minio/docker-compose.yml rename to iceberg/duckdb-minio/minio/docker-compose.yml diff --git a/iceberg/duckdb-minio/test.sh b/iceberg/duckdb-minio/minio/test.sh similarity index 100% rename from iceberg/duckdb-minio/test.sh rename to iceberg/duckdb-minio/minio/test.sh From dd43ac4bc8cdb815793cec8eaa4488af248cdd8c Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 17:54:25 +0000 Subject: [PATCH 14/17] fix container name --- iceberg/duckdb-minio/rustfs/docker-compose.yml | 12 ++++++------ iceberg/duckdb-minio/rustfs/test.sh | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/iceberg/duckdb-minio/rustfs/docker-compose.yml b/iceberg/duckdb-minio/rustfs/docker-compose.yml index 5ae074c..52f8910 100644 --- a/iceberg/duckdb-minio/rustfs/docker-compose.yml +++ b/iceberg/duckdb-minio/rustfs/docker-compose.yml @@ -1,6 +1,6 @@ services: - minio: - image: rustfs/rustfs:1.6.40 + rustfs: + image: rustfs/rustfs:1.0.0-alpha.79 ports: - "9000:9000" - "9001:9001" @@ -12,11 +12,11 @@ services: mc: image: minio/mc:latest depends_on: - - minio + - rustfs entrypoint: > /bin/sh -c " - until (mc alias set minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done; - mc mb -p minio/warehouse; + until (mc alias set rustfs http://rustfs:9000 admin password) do echo '...waiting...' && sleep 1; done; + mc mb -p rustfs/warehouse; tail -f /dev/null " @@ -32,7 +32,7 @@ services: AWS_SECRET_ACCESS_KEY: password CATALOG_WAREHOUSE: s3://warehouse/ CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO - CATALOG_S3_ENDPOINT: http://minio:9000 + CATALOG_S3_ENDPOINT: http://rustfs:9000 CATALOG_S3_ACCESS__KEY__ID: admin CATALOG_S3_SECRET__ACCESS__KEY: password CATALOG_S3_PATH__STYLE__ACCESS: "true" diff --git a/iceberg/duckdb-minio/rustfs/test.sh b/iceberg/duckdb-minio/rustfs/test.sh index 512079b..40436bc 100755 --- a/iceberg/duckdb-minio/rustfs/test.sh +++ b/iceberg/duckdb-minio/rustfs/test.sh @@ -31,7 +31,7 @@ CREATE SECRET s3_secret ( KEY_ID 'admin', SECRET 'password', REGION 'us-east-1', - ENDPOINT 'minio:9000', + ENDPOINT 'rustfs:9000', USE_SSL false, URL_STYLE 'path' ); @@ -64,13 +64,13 @@ INSTALL iceberg; INSTALL httpfs; LOAD iceberg; LOAD httpfs; -CREATE SECRET s3_secret (TYPE S3, KEY_ID 'admin', SECRET 'password', REGION 'us-east-1', ENDPOINT 'minio:9000', USE_SSL false, URL_STYLE 'path'); +CREATE SECRET s3_secret (TYPE S3, KEY_ID 'admin', SECRET 'password', REGION 'us-east-1', ENDPOINT 'rustfs:9000', USE_SSL false, URL_STYLE 'path'); CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); SELECT * FROM cat.test.products ORDER BY id; " echo "" -echo "4. Checking MinIO bucket contents (after)..." -docker compose exec mc mc ls --recursive minio/warehouse/test/products/ | head -10 +echo "4. Checking RustFS bucket contents (after)..." +docker compose exec mc mc ls --recursive rustfs/warehouse/test/products/ | head -10 echo "" From 8403c2be4e8ccb05a9e4655f059776879692b75b Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 17:55:59 +0000 Subject: [PATCH 15/17] Move to top level folder --- .../apache-ozone/arch.excalidraw | 0 .../apache-ozone/docker-compose.yml | 0 .../apache-ozone/test.sh | 0 .../cloudserver/arch.excalidraw.png | Bin .../cloudserver/docker-compose.yml | 0 .../cloudserver/test.sh | 0 .../garage/arch.excalidraw.png | Bin .../garage/docker-compose.yml | 0 .../garage/test.sh | 0 .../minio/arch.excalidraw.png | Bin .../minio/docker-compose.yml | 0 .../minio/test.sh | 0 .../rustfs/arch.excalidraw.png | Bin .../rustfs/docker-compose.yml | 0 .../rustfs/test.sh | 0 .../s3proxy/arch.excalidraw.png | Bin .../s3proxy/docker-compose.yml | 0 .../s3proxy/test.sh | 0 .../seaweedfs/arch.excalidraw.png | Bin .../seaweedfs/docker-compose.yml | 0 .../seaweedfs/test.sh | 0 21 files changed, 0 insertions(+), 0 deletions(-) rename {iceberg/duckdb-minio => minio-alternatives}/apache-ozone/arch.excalidraw (100%) rename {iceberg/duckdb-minio => minio-alternatives}/apache-ozone/docker-compose.yml (100%) rename {iceberg/duckdb-minio => minio-alternatives}/apache-ozone/test.sh (100%) rename {iceberg/duckdb-minio => minio-alternatives}/cloudserver/arch.excalidraw.png (100%) rename {iceberg/duckdb-minio => minio-alternatives}/cloudserver/docker-compose.yml (100%) rename {iceberg/duckdb-minio => minio-alternatives}/cloudserver/test.sh (100%) rename {iceberg/duckdb-minio => minio-alternatives}/garage/arch.excalidraw.png (100%) rename {iceberg/duckdb-minio => minio-alternatives}/garage/docker-compose.yml (100%) rename {iceberg/duckdb-minio => minio-alternatives}/garage/test.sh (100%) rename {iceberg/duckdb-minio => minio-alternatives}/minio/arch.excalidraw.png (100%) rename {iceberg/duckdb-minio => minio-alternatives}/minio/docker-compose.yml (100%) rename {iceberg/duckdb-minio => minio-alternatives}/minio/test.sh (100%) rename {iceberg/duckdb-minio => minio-alternatives}/rustfs/arch.excalidraw.png (100%) rename {iceberg/duckdb-minio => minio-alternatives}/rustfs/docker-compose.yml (100%) rename {iceberg/duckdb-minio => minio-alternatives}/rustfs/test.sh (100%) rename {iceberg/duckdb-minio => minio-alternatives}/s3proxy/arch.excalidraw.png (100%) rename {iceberg/duckdb-minio => minio-alternatives}/s3proxy/docker-compose.yml (100%) rename {iceberg/duckdb-minio => minio-alternatives}/s3proxy/test.sh (100%) rename {iceberg/duckdb-minio => minio-alternatives}/seaweedfs/arch.excalidraw.png (100%) rename {iceberg/duckdb-minio => minio-alternatives}/seaweedfs/docker-compose.yml (100%) rename {iceberg/duckdb-minio => minio-alternatives}/seaweedfs/test.sh (100%) diff --git a/iceberg/duckdb-minio/apache-ozone/arch.excalidraw b/minio-alternatives/apache-ozone/arch.excalidraw similarity index 100% rename from iceberg/duckdb-minio/apache-ozone/arch.excalidraw rename to minio-alternatives/apache-ozone/arch.excalidraw diff --git a/iceberg/duckdb-minio/apache-ozone/docker-compose.yml b/minio-alternatives/apache-ozone/docker-compose.yml similarity index 100% rename from iceberg/duckdb-minio/apache-ozone/docker-compose.yml rename to minio-alternatives/apache-ozone/docker-compose.yml diff --git a/iceberg/duckdb-minio/apache-ozone/test.sh b/minio-alternatives/apache-ozone/test.sh similarity index 100% rename from iceberg/duckdb-minio/apache-ozone/test.sh rename to minio-alternatives/apache-ozone/test.sh diff --git a/iceberg/duckdb-minio/cloudserver/arch.excalidraw.png b/minio-alternatives/cloudserver/arch.excalidraw.png similarity index 100% rename from iceberg/duckdb-minio/cloudserver/arch.excalidraw.png rename to minio-alternatives/cloudserver/arch.excalidraw.png diff --git a/iceberg/duckdb-minio/cloudserver/docker-compose.yml b/minio-alternatives/cloudserver/docker-compose.yml similarity index 100% rename from iceberg/duckdb-minio/cloudserver/docker-compose.yml rename to minio-alternatives/cloudserver/docker-compose.yml diff --git a/iceberg/duckdb-minio/cloudserver/test.sh b/minio-alternatives/cloudserver/test.sh similarity index 100% rename from iceberg/duckdb-minio/cloudserver/test.sh rename to minio-alternatives/cloudserver/test.sh diff --git a/iceberg/duckdb-minio/garage/arch.excalidraw.png b/minio-alternatives/garage/arch.excalidraw.png similarity index 100% rename from iceberg/duckdb-minio/garage/arch.excalidraw.png rename to minio-alternatives/garage/arch.excalidraw.png diff --git a/iceberg/duckdb-minio/garage/docker-compose.yml b/minio-alternatives/garage/docker-compose.yml similarity index 100% rename from iceberg/duckdb-minio/garage/docker-compose.yml rename to minio-alternatives/garage/docker-compose.yml diff --git a/iceberg/duckdb-minio/garage/test.sh b/minio-alternatives/garage/test.sh similarity index 100% rename from iceberg/duckdb-minio/garage/test.sh rename to minio-alternatives/garage/test.sh diff --git a/iceberg/duckdb-minio/minio/arch.excalidraw.png b/minio-alternatives/minio/arch.excalidraw.png similarity index 100% rename from iceberg/duckdb-minio/minio/arch.excalidraw.png rename to minio-alternatives/minio/arch.excalidraw.png diff --git a/iceberg/duckdb-minio/minio/docker-compose.yml b/minio-alternatives/minio/docker-compose.yml similarity index 100% rename from iceberg/duckdb-minio/minio/docker-compose.yml rename to minio-alternatives/minio/docker-compose.yml diff --git a/iceberg/duckdb-minio/minio/test.sh b/minio-alternatives/minio/test.sh similarity index 100% rename from iceberg/duckdb-minio/minio/test.sh rename to minio-alternatives/minio/test.sh diff --git a/iceberg/duckdb-minio/rustfs/arch.excalidraw.png b/minio-alternatives/rustfs/arch.excalidraw.png similarity index 100% rename from iceberg/duckdb-minio/rustfs/arch.excalidraw.png rename to minio-alternatives/rustfs/arch.excalidraw.png diff --git a/iceberg/duckdb-minio/rustfs/docker-compose.yml b/minio-alternatives/rustfs/docker-compose.yml similarity index 100% rename from iceberg/duckdb-minio/rustfs/docker-compose.yml rename to minio-alternatives/rustfs/docker-compose.yml diff --git a/iceberg/duckdb-minio/rustfs/test.sh b/minio-alternatives/rustfs/test.sh similarity index 100% rename from iceberg/duckdb-minio/rustfs/test.sh rename to minio-alternatives/rustfs/test.sh diff --git a/iceberg/duckdb-minio/s3proxy/arch.excalidraw.png b/minio-alternatives/s3proxy/arch.excalidraw.png similarity index 100% rename from iceberg/duckdb-minio/s3proxy/arch.excalidraw.png rename to minio-alternatives/s3proxy/arch.excalidraw.png diff --git a/iceberg/duckdb-minio/s3proxy/docker-compose.yml b/minio-alternatives/s3proxy/docker-compose.yml similarity index 100% rename from iceberg/duckdb-minio/s3proxy/docker-compose.yml rename to minio-alternatives/s3proxy/docker-compose.yml diff --git a/iceberg/duckdb-minio/s3proxy/test.sh b/minio-alternatives/s3proxy/test.sh similarity index 100% rename from iceberg/duckdb-minio/s3proxy/test.sh rename to minio-alternatives/s3proxy/test.sh diff --git a/iceberg/duckdb-minio/seaweedfs/arch.excalidraw.png b/minio-alternatives/seaweedfs/arch.excalidraw.png similarity index 100% rename from iceberg/duckdb-minio/seaweedfs/arch.excalidraw.png rename to minio-alternatives/seaweedfs/arch.excalidraw.png diff --git a/iceberg/duckdb-minio/seaweedfs/docker-compose.yml b/minio-alternatives/seaweedfs/docker-compose.yml similarity index 100% rename from iceberg/duckdb-minio/seaweedfs/docker-compose.yml rename to minio-alternatives/seaweedfs/docker-compose.yml diff --git a/iceberg/duckdb-minio/seaweedfs/test.sh b/minio-alternatives/seaweedfs/test.sh similarity index 100% rename from iceberg/duckdb-minio/seaweedfs/test.sh rename to minio-alternatives/seaweedfs/test.sh From 5b488ed6628d60fdbf745072fe86711c23bc4659 Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 18:06:54 +0000 Subject: [PATCH 16/17] Fix Ozone image --- .../apache-ozone/arch.excalidraw | 616 ------------------ .../apache-ozone/arch.excalidraw.png | Bin 0 -> 112218 bytes 2 files changed, 616 deletions(-) delete mode 100644 minio-alternatives/apache-ozone/arch.excalidraw create mode 100644 minio-alternatives/apache-ozone/arch.excalidraw.png diff --git a/minio-alternatives/apache-ozone/arch.excalidraw b/minio-alternatives/apache-ozone/arch.excalidraw deleted file mode 100644 index a02a085..0000000 --- a/minio-alternatives/apache-ozone/arch.excalidraw +++ /dev/null @@ -1,616 +0,0 @@ -{ - "type": "excalidraw", - "version": 2, - "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor", - "elements": [ - { - "type": "rectangle", - "version": 204, - "versionNonce": 1541555567, - "isDeleted": false, - "id": "s3g", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 537.64453125, - "y": 266.828125, - "strokeColor": "#1e1e1e", - "backgroundColor": "#ffec99", - "width": 200, - "height": 80, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "s3g-text" - } - ], - "updated": 1768314246324, - "link": null, - "locked": false, - "index": "a4" - }, - { - "type": "text", - "version": 205, - "versionNonce": 1232453519, - "isDeleted": false, - "id": "s3g-text", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 576.6245651245117, - "y": 294.328125, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 122.03993225097656, - "height": 25, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1768314246324, - "link": null, - "locked": false, - "fontSize": 20, - "fontFamily": 1, - "text": "S3 Gateway", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "s3g", - "originalText": "S3 Gateway", - "lineHeight": 1.25, - "baseline": 23, - "index": "a5", - "autoResize": true - }, - { - "type": "rectangle", - "version": 241, - "versionNonce": 1188361647, - "isDeleted": false, - "id": "om", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 537.81640625, - "y": 156.2109375, - "strokeColor": "#1e1e1e", - "backgroundColor": "#ffec99", - "width": 200, - "height": 80, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "om-text" - } - ], - "updated": 1768314246324, - "link": null, - "locked": false, - "index": "a6" - }, - { - "type": "text", - "version": 240, - "versionNonce": 1529374671, - "isDeleted": false, - "id": "om-text", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 563.7064590454102, - "y": 183.7109375, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 148.2198944091797, - "height": 25, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1768314246324, - "link": null, - "locked": false, - "fontSize": 20, - "fontFamily": 1, - "text": "Ozone Manager", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "om", - "originalText": "Ozone Manager", - "lineHeight": 1.25, - "baseline": 23, - "index": "a7", - "autoResize": true - }, - { - "type": "rectangle", - "version": 254, - "versionNonce": 344495599, - "isDeleted": false, - "id": "scm", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 763.34375, - "y": 155.34375, - "strokeColor": "#1e1e1e", - "backgroundColor": "#ffec99", - "width": 200, - "height": 85, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "scm-text" - } - ], - "updated": 1768314246324, - "link": null, - "locked": false, - "index": "a8" - }, - { - "type": "text", - "version": 254, - "versionNonce": 704512015, - "isDeleted": false, - "id": "scm-text", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 774.0238265991211, - "y": 160.34375, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 178.6398468017578, - "height": 75, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1768314246324, - "link": null, - "locked": false, - "fontSize": 20, - "fontFamily": 1, - "text": "Storage Container\nManager\n", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "scm", - "originalText": "Storage Container\nManager\n", - "lineHeight": 1.25, - "baseline": 23, - "index": "a9", - "autoResize": true - }, - { - "type": "rectangle", - "version": 187, - "versionNonce": 1568745007, - "isDeleted": false, - "id": "datanode", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 765.82421875, - "y": 264.4296875, - "strokeColor": "#1e1e1e", - "backgroundColor": "#ffec99", - "width": 200, - "height": 80, - "seed": 1, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "rsfF0S8rk6rRjVpswIzj2" - } - ], - "updated": 1768314246324, - "link": null, - "locked": false, - "index": "aA" - }, - { - "id": "rsfF0S8rk6rRjVpswIzj2", - "type": "text", - "x": 814.2942504882812, - "y": 291.9296875, - "width": 103.0599365234375, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aAV", - "roundness": null, - "seed": 1841579535, - "version": 194, - "versionNonce": 502958159, - "isDeleted": false, - "boundElements": null, - "updated": 1768314246324, - "link": null, - "locked": false, - "text": "Data node", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "datanode", - "originalText": "Data node", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "type": "rectangle", - "version": 265, - "versionNonce": 169996687, - "isDeleted": false, - "id": "c90-MKlpdPpn2CLg0feC9", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 233.7240541033484, - "y": 115.400390625, - "strokeColor": "#1e1e1e", - "backgroundColor": "#b2f2bb", - "width": 200, - "height": 100, - "seed": 6943617, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "i5au62hnxzeCkf8QH0OQR" - }, - { - "id": "seJMYFQ7tE8FdcZfqr4za", - "type": "arrow" - }, - { - "id": "iCKLvSs78yfl5WuTmC-jS", - "type": "arrow" - } - ], - "updated": 1768314250130, - "link": null, - "locked": false, - "index": "aT" - }, - { - "id": "i5au62hnxzeCkf8QH0OQR", - "type": "text", - "x": 263.3640916399695, - "y": 127.900390625, - "width": 140.7199249267578, - "height": 75, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aU", - "roundness": null, - "seed": 1623317345, - "version": 262, - "versionNonce": 1193994159, - "isDeleted": false, - "boundElements": [], - "updated": 1768314250130, - "link": null, - "locked": false, - "text": "iceberg-rest\n\nREST Catalog", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "c90-MKlpdPpn2CLg0feC9", - "originalText": "iceberg-rest\n\nREST Catalog", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "type": "rectangle", - "version": 248, - "versionNonce": 33632783, - "isDeleted": false, - "id": "2RRU-Z4Og59tZaW15k8v8", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 180.1303041033484, - "y": 292.021484375, - "strokeColor": "#1e1e1e", - "backgroundColor": "#ffc9c9", - "width": 180, - "height": 100, - "seed": 1636943681, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "g1jglF6BANafiQZe36s9F" - }, - { - "id": "seJMYFQ7tE8FdcZfqr4za", - "type": "arrow" - }, - { - "id": "JJ4CjBUsTOWiwicXXIZJa", - "type": "arrow" - } - ], - "updated": 1768314250130, - "link": null, - "locked": false, - "index": "aV" - }, - { - "id": "g1jglF6BANafiQZe36s9F", - "type": "text", - "x": 231.07033706233278, - "y": 329.521484375, - "width": 78.11993408203125, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aW", - "roundness": null, - "seed": 1027159841, - "version": 251, - "versionNonce": 1917720623, - "isDeleted": false, - "boundElements": [], - "updated": 1768314250130, - "link": null, - "locked": false, - "text": "DuckDB", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "2RRU-Z4Og59tZaW15k8v8", - "originalText": "DuckDB", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "type": "arrow", - "version": 819, - "versionNonce": 937599361, - "isDeleted": false, - "id": "iCKLvSs78yfl5WuTmC-jS", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 440.1198744152565, - "y": 168.8016939973786, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 94.06541713472228, - "height": 122.54727726660121, - "seed": 908569345, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 2 - }, - "boundElements": [], - "updated": 1768314250388, - "link": null, - "locked": false, - "startBinding": { - "elementId": "c90-MKlpdPpn2CLg0feC9", - "focus": -0.7500043716066388, - "gap": 6.395820311908096 - }, - "endBinding": null, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 94.06541713472228, - 122.54727726660121 - ] - ], - "index": "aX" - }, - { - "type": "arrow", - "version": 687, - "versionNonce": 1496773953, - "isDeleted": false, - "id": "seJMYFQ7tE8FdcZfqr4za", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 231.39442727716448, - "y": 291.5325891277698, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 99.40134693182071, - "height": 75.1207253521165, - "seed": 350003937, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 2 - }, - "boundElements": [], - "updated": 1768314250388, - "link": null, - "locked": false, - "startBinding": { - "elementId": "2RRU-Z4Og59tZaW15k8v8", - "focus": -0.6758653900963482, - "gap": 1 - }, - "endBinding": { - "elementId": "c90-MKlpdPpn2CLg0feC9", - "focus": -0.38860601438414893, - "gap": 1.0114731506533303 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 99.40134693182071, - -75.1207253521165 - ] - ], - "index": "aY" - }, - { - "type": "arrow", - "version": 1030, - "versionNonce": 604546337, - "isDeleted": false, - "id": "JJ4CjBUsTOWiwicXXIZJa", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 361.739301782745, - "y": 346.04331160592096, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 171.8546687746994, - "height": 6.310246583388164, - "seed": 1709678273, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 2 - }, - "boundElements": [], - "updated": 1768314250388, - "link": null, - "locked": false, - "startBinding": { - "elementId": "2RRU-Z4Og59tZaW15k8v8", - "focus": 0.13855396407704584, - "gap": 1.6089976793965661 - }, - "endBinding": null, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 171.8546687746994, - -6.310246583388164 - ] - ], - "index": "aZ" - } - ], - "appState": { - "gridSize": 20, - "gridStep": 5, - "gridModeEnabled": false, - "viewBackgroundColor": "#ffffff" - }, - "files": {} -} \ No newline at end of file diff --git a/minio-alternatives/apache-ozone/arch.excalidraw.png b/minio-alternatives/apache-ozone/arch.excalidraw.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef4bbb22c2f484862fa21ab678af486afa6dc7b GIT binary patch literal 112218 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 K==jqzR==(xWsPj(MDuy$F9yF! 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 I1+?D&AE)mxIRF3v literal 0 HcmV?d00001 From 2abf24862539ab72fd7c2f9fec292c99eae392e3 Mon Sep 17 00:00:00 2001 From: rmoff Date: Tue, 13 Jan 2026 18:16:51 +0000 Subject: [PATCH 17/17] standardise creds --- minio-alternatives/cloudserver/docker-compose.yml | 12 +++++++----- minio-alternatives/cloudserver/test.sh | 6 +++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/minio-alternatives/cloudserver/docker-compose.yml b/minio-alternatives/cloudserver/docker-compose.yml index f8e1262..8b7300b 100644 --- a/minio-alternatives/cloudserver/docker-compose.yml +++ b/minio-alternatives/cloudserver/docker-compose.yml @@ -9,6 +9,8 @@ services: REMOTE_MANAGEMENT_DISABLE: "1" LOG_LEVEL: info ENDPOINT: "cloudserver,s3.docker.internal,localhost,127.0.0.1" + SCALITY_ACCESS_KEY_ID: admin + SCALITY_SECRET_ACCESS_KEY: password mc: image: minio/mc:latest @@ -16,7 +18,7 @@ services: - cloudserver entrypoint: > /bin/sh -c " - until (mc alias set cloudserver http://cloudserver:8000 accessKey1 verySecretKey1) do echo '...waiting...' && sleep 1; done; + until (mc alias set cloudserver http://cloudserver:8000 admin password) do echo '...waiting...' && sleep 1; done; mc mb -p cloudserver/warehouse; tail -f /dev/null " @@ -29,13 +31,13 @@ services: - "8181:8181" environment: AWS_REGION: us-east-1 - AWS_ACCESS_KEY_ID: accessKey1 - AWS_SECRET_ACCESS_KEY: verySecretKey1 + AWS_ACCESS_KEY_ID: admin + AWS_SECRET_ACCESS_KEY: password CATALOG_WAREHOUSE: s3://warehouse/ CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO CATALOG_S3_ENDPOINT: http://cloudserver:8000 - CATALOG_S3_ACCESS__KEY__ID: accessKey1 - CATALOG_S3_SECRET__ACCESS__KEY: verySecretKey1 + CATALOG_S3_ACCESS__KEY__ID: admin + CATALOG_S3_SECRET__ACCESS__KEY: password CATALOG_S3_PATH__STYLE__ACCESS: "true" CATALOG_S3_REGION: us-east-1 diff --git a/minio-alternatives/cloudserver/test.sh b/minio-alternatives/cloudserver/test.sh index 570c567..bd16bef 100755 --- a/minio-alternatives/cloudserver/test.sh +++ b/minio-alternatives/cloudserver/test.sh @@ -39,8 +39,8 @@ LOAD httpfs; -- Configure S3 CREATE SECRET s3_secret ( TYPE S3, - KEY_ID 'accessKey1', - SECRET 'verySecretKey1', + KEY_ID 'admin', + SECRET 'password', REGION 'us-east-1', ENDPOINT 'cloudserver:8000', USE_SSL false, @@ -75,7 +75,7 @@ INSTALL iceberg; INSTALL httpfs; LOAD iceberg; LOAD httpfs; -CREATE SECRET s3_secret (TYPE S3, KEY_ID 'accessKey1', SECRET 'verySecretKey1', REGION 'us-east-1', ENDPOINT 'cloudserver:8000', USE_SSL false, URL_STYLE 'path'); +CREATE SECRET s3_secret (TYPE S3, KEY_ID 'admin', SECRET 'password', REGION 'us-east-1', ENDPOINT 'cloudserver:8000', USE_SSL false, URL_STYLE 'path'); CREATE SECRET iceberg_secret (TYPE iceberg, TOKEN 'dummy'); ATTACH 'warehouse' AS cat (TYPE iceberg, ENDPOINT 'http://iceberg-rest:8181', SECRET iceberg_secret); SELECT * FROM cat.test.products ORDER BY id;