How to store GeoJSON in Apache Iceberg tables
Storing raw GeoJSON payloads in a lakehouse table degrades query performance, breaks vectorized execution, and introduces uncontrolled schema drift. The prod…
Read the guideA production-focused resource for implementing, optimizing, and maintaining spatial data in open table formats (Apache Iceberg, Delta Lake). The transition from monolithic spatial databases to a spatial data lakehouse is not a storage migration — it is a fundamental re-architecture of how geospatial data is serialized, versioned, indexed, and queried at scale.
This site documents the engineering contracts required to make that architecture deliver: deterministic geometry serialization (WKB / GeoParquet), partition strategies that align with real query patterns, predicate pushdown that actually pushes down, and Python orchestration that respects snapshot isolation.
Every guide is written for data engineers, platform architects, gis backend developers, and cloud/infrastructure teams. who own the pipeline end-to-end — from S3 buckets and catalog manifests to PySpark configurations and CI/CD validation gates. No vendor pitches, no toy examples; just patterns and trade-offs that survive contact with petabyte-scale data.
Pick a section below to explore deeper topics, troubleshooting matrices, and ready-to-paste configurations.
The most-referenced engineering deep-dives — battle-tested patterns, troubleshooting matrices, and copy-ready configurations across every section.
Storing raw GeoJSON payloads in a lakehouse table degrades query performance, breaks vectorized execution, and introduces uncontrolled schema drift. The prod…
Read the guideThis guide is a complete, runnable recipe for loading DuckDB's spatial extension, reading a GeoParquet file straight from disk or S3, and executing an ST_Int…
Read the guideThis guide gives you a complete Python plus GitHub Actions recipe that inspects a GeoParquet file's geo metadata — version, primary_column, CRS presence, and…
Read the guideHigh-frequency spatial telemetry, mobility grids, and raster tile streams consistently degrade in Delta Lake deployments when partitioned directly by fine-gr…
Read the guideThis guide builds a complete Python and CI recipe that validates a geospatial table's schema before any write — checking the geometry column type, required C…
Read the guideThis guide gives a complete, runnable recipe for compacting a small-file-ridden spatial Iceberg table using the rewrite_data_files procedure with a bounding-…
Read the guideThis guide settles a concrete storage decision: whether to persist geometry as a GeoParquet-native column carrying file-level geo metadata and a bbox coverin…
Read the guideThis guide compares Apache Iceberg and Delta Lake specifically for spatial workloads — how each handles geometry, partitioning, clustering, engine access, an…
Read the guideSilent geometry drift during schema evolution remains the primary failure vector in production spatial lakehouses. When engineering teams execute ALTER TABLE…
Read the guideThis guide gives you a single, self-contained Python harness that runs the identical ST_Intersects workload against DuckDB, Trino, and Apache Sedona over one…
Read the guideIn production spatial lakehouse architectures, the most persistent failure mode is silent spatial index invalidation triggered by background compaction and s…
Read the guideThe primary failure mode in spatial lakehouse ingestion pipelines is unbounded memory allocation during legacy vector parsing. Shapefiles (.shp, .shx, .dbf)…
Read the guideThis guide gives you a repeatable method — plus a runnable script that samples your dataset and prints a recommendation — for picking the H3 resolution that…
Read the guideIn spatial data lakehouse deployments, query latency is predominantly driven by compute-side geometry evaluation. When a query engine receives a geospatial f…
Read the guideThis recipe writes many spatial partitions into an Apache Iceberg table concurrently from a single Python process, using asyncio to overlap Parquet serializa…
Read the guideIn production spatial lakehouse deployments, deterministic access control is a non-negotiable infrastructure requirement. The primary failure mode occurs whe…
Read the guideThis guide gives you a complete PySpark and Apache Sedona recipe that performs a broadcast spatial join — a small reference layer is broadcast to every execu…
Read the guideThis recipe implements row-level security on a spatial Delta table in Databricks Unity Catalog by attaching a SQL ROW FILTER function that restricts rows to…
Read the guideThis guide runs H3, S2, and geohash head-to-head on the same points, measures the partition cardinality each produces at comparable cell sizes, and turns the…
Read the guideThis guide gives you a complete Python recipe that inspects each incoming batch, compares its declared coordinate reference system against what the coordinat…
Read the guideThis guide delivers a runnable recipe that enforces row-level security on a spatial Iceberg table in Trino by combining a system access control provider with…
Read the guideThis guide gives you a single runnable Trino SQL recipe that spatially joins a large fact table in an Iceberg catalog against reference geometries in a separ…
Read the guideIn production spatial lakehouse architectures, partitioning by Universal Transverse Mercator (UTM) zones appears geographically intuitive but consistently tr…
Read the guideUnbounded memory consumption and transaction contention are the dominant failure modes when ingesting vector geometries into Delta Lake. The root cause is a…
Read the guideThis recipe converts a GeoPandas GeoDataFrame into a PyArrow table under an explicit geometry-as-WKB schema that carries CRS metadata and tolerates null geom…
Read the guideIn production lakehouse architectures, spatial join failures rarely stem from raw compute exhaustion. They originate from cross-partition shuffle skew. When…
Read the guideThis guide provides a complete delta-rs recipe that schedules OPTIMIZE followed by VACUUM with a safe retention window on a spatial Delta table, guarding tim…
Read the guideThis guide shows how to read an Apache Iceberg table from DuckDB using the iceberg extension, decode its WKB geometry column with the spatial extension, and…
Read the guideDecouple storage, catalog, and compute. Master geometry serialization (WKB/GeoParquet), snapshot semantics, and the Iceberg/Delta trade-offs that govern production spatial stacks.
Hierarchical grids, Z-ordering, Hilbert curves, predicate pushdown, and raster/vector hybrid layouts engineered for sub-second queries at petabyte scale.
Arrow schemas, PyIceberg, delta-rs, async catalog orchestration, and CI/CD validation — the Python contract that keeps spatial pipelines reproducible and fast.
DuckDB, Trino, and Apache Sedona against lakehouse tables — spatial SQL functions, distributed joins, catalog federation, and the benchmarks that decide which engine owns each workload.