skills/lakehouse-architect/SKILL.md
Delta Lake, Apache Iceberg, Hudi for ACID transactions on object storage. Activate on: lakehouse, Delta Lake, Iceberg, Hudi, table format, ACID on S3, time travel, data lake, open table format. NOT for: warehouse query tuning (use data-warehouse-optimizer), streaming ingestion (use streaming-pipeline-architect).
npx skillsauth add curiositech/windags-skills lakehouse-architectInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Design data lakehouse architectures using Delta Lake, Apache Iceberg, or Apache Hudi for ACID transactions, time travel, and schema evolution on object storage.
Activate on: "lakehouse", "Delta Lake", "Apache Iceberg", "Hudi", "table format", "ACID on S3", "time travel", "data lake", "open table format", "Databricks", "catalog"
NOT for: Warehouse query tuning → data-warehouse-optimizer | Streaming pipeline design → streaming-pipeline-architect | Data quality rules → data-quality-guardian
| Domain | Technologies | |--------|-------------| | Table Formats | Apache Iceberg 1.7+, Delta Lake 3.x, Apache Hudi 1.x | | Compute | Spark 3.5+, Trino, DuckDB, Snowflake (Iceberg), Flink | | Catalogs | Unity Catalog, AWS Glue, Nessie, REST Catalog, Polaris | | Storage | S3, GCS, ADLS, MinIO | | Managed | Databricks Lakehouse, AWS Lake Formation, Snowflake Iceberg |
Bronze (Raw) Silver (Cleaned) Gold (Business)
───────────── ──────────────── ───────────────
Raw JSON/CSV/Parquet → Typed, deduplicated → Aggregated, modeled
Append-only → Merge/upsert → Materialized views
Schema-on-read → Schema enforced → Star schema
Full history → Latest + SCD Type 2 → Pre-aggregated metrics
Storage: S3/GCS All layers use Iceberg/Delta
Format: Parquet ACID transactions at each layer
-- Create Iceberg table with partitioning
CREATE TABLE catalog.silver.orders (
order_id STRING,
customer_id STRING,
amount DECIMAL(10,2),
status STRING,
order_date DATE,
_loaded_at TIMESTAMP
)
USING iceberg
PARTITIONED BY (days(order_date))
TBLPROPERTIES (
'write.metadata.delete-after-commit.enabled' = 'true',
'write.metadata.previous-versions-max' = '100'
);
-- Upsert (merge) new data
MERGE INTO catalog.silver.orders t
USING staging.new_orders s
ON t.order_id = s.order_id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
-- Time travel: query as of yesterday
SELECT * FROM catalog.silver.orders
FOR SYSTEM_TIME AS OF TIMESTAMP '2026-03-19 00:00:00';
-- Maintenance: compact small files
CALL catalog.system.rewrite_data_files('silver.orders');
CALL catalog.system.expire_snapshots('silver.orders', TIMESTAMP '2026-03-01');
Feature Iceberg Delta Lake Hudi
────────── ─────── ────────── ────
ACID transactions Yes Yes Yes
Time travel Yes Yes Yes
Schema evolution Full Full Full
Partition evolution Yes (hidden) No (requires Limited
rewrite)
Engine support Widest Spark/Databricks Spark/Flink
Catalog REST/Nessie Unity/Hive Hive
Community Apache Linux Foundation Apache
Best for Multi-engine Databricks users CDC workloads
data-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.