This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/sedona-db.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 0b69230b Deployed 96fdd77 to latest-snapshot with MkDocs 1.6.1 and
mike 2.1.3
0b69230b is described below
commit 0b69230bbd6932f6e310a0082a989fd9c65e3a25
Author: GitHub Actions <[email protected]>
AuthorDate: Sun Dec 14 06:07:06 2025 +0000
Deployed 96fdd77 to latest-snapshot with MkDocs 1.6.1 and mike 2.1.3
---
latest-snapshot/404.html | 28 ++
latest-snapshot/contributors-guide/index.html | 28 ++
latest-snapshot/crs-examples/index.html | 28 ++
latest-snapshot/delta-lake/index.html | 34 +-
latest-snapshot/geopandas-interop/index.html | 28 ++
latest-snapshot/iceberg.ipynb | 536 +++++++++++++++++++++
latest-snapshot/{delta-lake => iceberg}/index.html | 381 ++++++++-------
latest-snapshot/index.html | 28 ++
latest-snapshot/overture-examples/index.html | 28 ++
latest-snapshot/programming-guide/index.html | 28 ++
latest-snapshot/quickstart-python/index.html | 28 ++
.../_matplotlib_defaults.cpython-314.pyc | Bin 431 -> 431 bytes
.../__pycache__/_render_meta.cpython-314.pyc | Bin 8436 -> 8436 bytes
latest-snapshot/reference/functions/index.html | 30 +-
.../reference/functions/st_analyze_agg/index.html | 30 +-
.../reference/functions/st_buffer/index.html | 30 +-
.../reference/functions/st_intersection/index.html | 30 +-
latest-snapshot/reference/python/index.html | 28 ++
latest-snapshot/reference/sql-joins/index.html | 28 ++
latest-snapshot/reference/sql/index.html | 28 ++
latest-snapshot/search/search_index.json | 2 +-
latest-snapshot/sitemap.xml | 4 +
latest-snapshot/sitemap.xml.gz | Bin 367 -> 375 bytes
.../working-with-parquet-files/index.html | 34 +-
.../working-with-sql-sedonadb/index.html | 28 ++
25 files changed, 1270 insertions(+), 177 deletions(-)
diff --git a/latest-snapshot/404.html b/latest-snapshot/404.html
index 78dbe99a..5c1bb56a 100644
--- a/latest-snapshot/404.html
+++ b/latest-snapshot/404.html
@@ -1014,6 +1014,34 @@
+ <li class="md-nav__item">
+ <a href="/sedonadb/latest/iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="/sedonadb/latest/working-with-parquet-files/"
class="md-nav__link">
diff --git a/latest-snapshot/contributors-guide/index.html
b/latest-snapshot/contributors-guide/index.html
index ce822c01..392bf45a 100644
--- a/latest-snapshot/contributors-guide/index.html
+++ b/latest-snapshot/contributors-guide/index.html
@@ -1044,6 +1044,34 @@
+ <li class="md-nav__item">
+ <a href="../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../working-with-parquet-files/" class="md-nav__link">
diff --git a/latest-snapshot/crs-examples/index.html
b/latest-snapshot/crs-examples/index.html
index 77bd3e94..c718a848 100644
--- a/latest-snapshot/crs-examples/index.html
+++ b/latest-snapshot/crs-examples/index.html
@@ -1145,6 +1145,34 @@
+ <li class="md-nav__item">
+ <a href="../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../working-with-parquet-files/" class="md-nav__link">
diff --git a/latest-snapshot/delta-lake/index.html
b/latest-snapshot/delta-lake/index.html
index d6d0453a..50fca905 100644
--- a/latest-snapshot/delta-lake/index.html
+++ b/latest-snapshot/delta-lake/index.html
@@ -13,7 +13,7 @@
<link rel="prev" href="../crs-examples/">
- <link rel="next" href="../working-with-parquet-files/">
+ <link rel="next" href="../iceberg/">
@@ -1139,6 +1139,34 @@
+ <li class="md-nav__item">
+ <a href="../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../working-with-parquet-files/" class="md-nav__link">
@@ -1707,13 +1735,13 @@
- <a href="../working-with-parquet-files/" class="md-footer__link
md-footer__link--next" aria-label="Next: Working with Parquet Files">
+ <a href="../iceberg/" class="md-footer__link md-footer__link--next"
aria-label="Next: Iceberg">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
- Working with Parquet Files
+ Iceberg
</div>
</div>
<div class="md-footer__button md-icon">
diff --git a/latest-snapshot/geopandas-interop/index.html
b/latest-snapshot/geopandas-interop/index.html
index d2e5ee2e..c90a93e5 100644
--- a/latest-snapshot/geopandas-interop/index.html
+++ b/latest-snapshot/geopandas-interop/index.html
@@ -1128,6 +1128,34 @@
+ <li class="md-nav__item">
+ <a href="../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../working-with-parquet-files/" class="md-nav__link">
diff --git a/latest-snapshot/iceberg.ipynb b/latest-snapshot/iceberg.ipynb
new file mode 100644
index 00000000..4f014261
--- /dev/null
+++ b/latest-snapshot/iceberg.ipynb
@@ -0,0 +1,536 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "bfe3c140-3694-40af-8e39-57c0657aac6a",
+ "metadata": {},
+ "source": [
+ "# SedonaDB + Iceberg\n",
+ "\n",
+ "This page demonstrates how to store spatial data in Iceberg tables and
how to query them with SedonaDB.\n",
+ "\n",
+ "You will learn how to create an Iceberg table with a well-known text
(WKT) or well-known binary (WKB) column in an Iceberg table and some of the
advantages of storing geometric data in Iceberg.\n",
+ "\n",
+ "Make sure to run `pip install pyiceberg` to install the required
dependencies for this notebook.\n",
+ "\n",
+ "Let’s start by loading the required dependencies and saving a spatial
dataset in an Iceberg table."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "16ff79eb-5249-47c7-80c9-b0aa88858599",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from pyiceberg.catalog import load_catalog\n",
+ "import sedona.db\n",
+ "import pyarrow as pa\n",
+ "import os"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cf73a0c0-30d4-4e61-b434-485f10695c2b",
+ "metadata": {},
+ "source": [
+ "## Create an Iceberg table with geometric data\n",
+ "\n",
+ "Start by creating the Iceberg warehouse:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "ab77da72-68cd-4c66-89fa-44280ce7955c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "os.makedirs(\"/tmp/warehouse\", exist_ok=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4b35bb19-725c-4da4-a9a7-8866fc31ec9e",
+ "metadata": {},
+ "source": [
+ "Now set up the catalog:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "757f6995-68da-49f3-b2b1-8173876edc05",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "warehouse_path = \"/tmp/warehouse\"\n",
+ "catalog = load_catalog(\n",
+ " \"default\",\n",
+ " **{\n",
+ " \"type\": \"sql\",\n",
+ " \"uri\": f\"sqlite:///{warehouse_path}/pyiceberg_catalog.db\",\n",
+ " \"warehouse\": f\"file://{warehouse_path}\",\n",
+ " },\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f2b00cd7-017a-47c1-a27a-69b905fe135d",
+ "metadata": {},
+ "source": [
+ "Use SedonaDB to read a Parquet file containing country data into a
DataFrame."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "a9a4bd5f-a986-44dc-a787-5d8a80916a8d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sd = sedona.db.connect()\n",
+ "\n",
+ "countries = sd.read_parquet(\n",
+ "
\"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_countries_geo.parquet\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ee5c39cd-1858-4049-803b-c63cdac82034",
+ "metadata": {},
+ "source": [
+ "Convert all the columns to be plain strings because Iceberg doesn’t
support geometry columns yet:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "68296482-4fd5-41b1-86a1-6915fdd91fd7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "countries.to_view(\"countries\", True)\n",
+ "df = sd.sql(\"\"\"\n",
+ " select \n",
+ " ARROW_CAST(name, 'Utf8') as name, \n",
+ " ARROW_CAST(continent, 'Utf8') as continent, \n",
+ " ST_AsText(geometry) as geometry_wkt \n",
+ " from countries\n",
+ "\"\"\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "daebb7f0-8ea4-4e98-89b2-e14fe52057c3",
+ "metadata": {},
+ "source": [
+ "The explicit casting with `ARROW_CAST` is necessary because PyIceberg
doesn't support string views.\n",
+ "\n",
+ "Check out the schema of the DataFrame:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "5139d006-81e1-4f45-a844-c7e4f702b91f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "SedonaSchema with 3 fields:\n",
+ " name: utf8<Utf8>\n",
+ " continent: utf8<Utf8>\n",
+ " geometry_wkt: utf8<Utf8>"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.schema"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3ad1052a-24ec-4522-b581-6c672d9093c9",
+ "metadata": {},
+ "source": [
+ "Now create a new Iceberg table:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "31c30e61-463d-4e21-bf00-9b40ac633cfe",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from pyiceberg.exceptions import NamespaceAlreadyExistsError\n",
+ "\n",
+ "try:\n",
+ " catalog.create_namespace(\"default\")\n",
+ "except NamespaceAlreadyExistsError:\n",
+ " pass\n",
+ "\n",
+ "if catalog.table_exists(\"default.countries\"):\n",
+ " catalog.drop_table(\"default.countries\")\n",
+ "\n",
+ "table = catalog.create_table(\n",
+ " \"default.countries\",\n",
+ " schema=pa.schema(df.schema),\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c7c85415-6dbf-4c54-afe9-5e939338e11f",
+ "metadata": {},
+ "source": [
+ "Append the DataFrame to the table:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "9605c683-ee76-458a-8f3d-418608817a49",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "table.append(df.to_arrow_table())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4cfc60c9-02b0-4377-a504-bbd9fbcbf58e",
+ "metadata": {},
+ "source": [
+ "Now let’s see how to read the data with SedonaDB.\n",
+ "\n",
+ "## Read the Iceberg table into SedonaDB via Arrow\n",
+ "\n",
+ "Here’s how to read an Iceberg table into a SedonaDB DataFrame:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "8f3f63e1-9a1f-4d5f-8bc5-01c7ecb57549",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "table = catalog.load_table(\"default.countries\")\n",
+ "arrow_table = table.scan().to_arrow()\n",
+ "df = sd.create_data_frame(arrow_table)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "00343bb6-c486-4723-8b29-40566ac15e3e",
+ "metadata": {},
+ "source": [
+ "The Iceberg table is first exposed as an arrow table and then read into a
SedonaDB DataFrame.\n",
+ "\n",
+ "Now view the contents of the SedonaDB DataFrame:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "f6573e68-975d-4285-999d-43bd4ea8fdd8",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+
"┌─────────────────────────────┬───────────┬────────────────────────────────────────────────────────┐\n",
+ "│ name ┆ continent ┆
geom │\n",
+ "│ utf8 ┆ utf8 ┆
geometry │\n",
+
"╞═════════════════════════════╪═══════════╪════════════════════════════════════════════════════════╡\n",
+ "│ Fiji ┆ Oceania ┆ MULTIPOLYGON(((180
-16.067132663642447,180 -16.555216… │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ United Republic of Tanzania ┆ Africa ┆ POLYGON((33.90371119710453
-0.9500000000000001,34.072… │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Western Sahara ┆ Africa ┆ POLYGON((-8.665589565454809
27.656425889592356,-8.665… │\n",
+
"└─────────────────────────────┴───────────┴────────────────────────────────────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "df.to_view(\"my_table\", True)\n",
+ "res = sd.sql(\"\"\"\n",
+ "SELECT\n",
+ " name,\n",
+ " continent,\n",
+ " ST_GeomFromWKT(geometry_wkt) as geom\n",
+ "from my_table\n",
+ "\"\"\")\n",
+ "res.show(3)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "efe2c02c-6453-4819-9a7f-7a5e30309090",
+ "metadata": {},
+ "source": [
+ "You can see that the geom column contains the geometry type, which
enables spatial analysis of the data.\n",
+ "\n",
+ "The geometry data is stored as WKT, which isn't as efficient as WKB. The
example that follows demonstrates how to store WKB in Iceberg tables.\n",
+ "\n",
+ "## Future Iceberg geography/geometry work\n",
+ "\n",
+ "Iceberg added support for geometry and geography columns in the v3
spec.\n",
+ "\n",
+ "The Iceberg v3 implementation has not been released yet, and it the v3
spec hasn't started in Iceberg Rust. Here is [the open
issue](https://github.com/apache/iceberg-rust/issues/1884) to add geo support
to Iceberg Rust.\n",
+ "\n",
+ "It’s best to manually persist the bbox information of files in your
Iceberg table if you’re storing geometric data as WKT or WKB. \n",
+ "\n",
+ "## Create an Iceberg table with WKB and bbox\n",
+ "\n",
+ "Let’s see how to create an Iceberg table with a WKB and bbox columns to
allow for faster spatial analyses.\n",
+ "\n",
+ "Start by creating the cities DataFrame."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "a466349e-98f9-4e0a-9c7a-fddf451b18fa",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cities = sd.read_parquet(\n",
+ "
\"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities_geo.parquet\"\n",
+ ")\n",
+ "cities.to_view(\"cities\", True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8317ca27-f69c-445f-9477-c18c91cd4a1c",
+ "metadata": {},
+ "source": [
+ "Now write the DataFrame to an Iceberg table with bbox columns:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "0aeb9dd6-cccb-4cec-a649-34846194ad12",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = sd.sql(\"\"\"\n",
+ "select \n",
+ " ARROW_CAST(name, 'Utf8') as name, \n",
+ " ARROW_CAST(ST_AsBinary(geometry), 'Binary') as geometry_wkb,\n",
+ " ST_XMin(geometry) as bbox_xmin,\n",
+ " ST_YMin(geometry) as bbox_ymin,\n",
+ " ST_XMax(geometry) as bbox_xmax,\n",
+ " ST_YMax(geometry) as bbox_ymax\n",
+ "from cities\n",
+ "\"\"\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "17a5f37a-01f5-4913-adfb-129213355474",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if catalog.table_exists(\"default.cities\"):\n",
+ " catalog.drop_table(\"default.cities\")\n",
+ "\n",
+ "table = catalog.create_table(\n",
+ " \"default.cities\",\n",
+ " schema=pa.schema(df.schema),\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "a018252f-9ca5-49e7-a103-1b7451ba05b1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "table.append(df.to_arrow_table())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ad8bd437-ce73-46f5-8ace-e2e9056c460f",
+ "metadata": {},
+ "source": [
+ "Load the `cities` table into a DataFrame with SedonaDB."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "e86fcb62-f1fd-43ca-9aaf-54e60516cc5e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+
"┌──────────────┬───────────────────────────┬─────────────┬─────────────┬─────────────┬─────────────┐\n",
+ "│ name ┆ geometry_wkb ┆ bbox_xmin ┆ bbox_ymin
┆ bbox_xmax ┆ bbox_ymax │\n",
+ "│ utf8 ┆ binary ┆ float64 ┆ float64
┆ float64 ┆ float64 │\n",
+
"╞══════════════╪═══════════════════════════╪═════════════╪═════════════╪═════════════╪═════════════╡\n",
+ "│ Vatican City ┆ 010100000054e57b4622e828… ┆ 12.4533865 ┆ 41.9032822
┆ 12.4533865 ┆ 41.9032822 │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ San Marino ┆ 0101000000dcb122b42fe228… ┆ 12.4417702 ┆ 43.9360958
┆ 12.4417702 ┆ 43.9360958 │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Vaduz ┆ 01010000006dae9ae7880823… ┆ 9.5166695 ┆ 47.1337238
┆ 9.5166695 ┆ 47.1337238 │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Lobamba ┆ 01010000007bcb8b0233333f… ┆ 31.1999971 ┆ -26.4666675
┆ 31.1999971 ┆ -26.4666675 │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Luxembourg ┆ 0101000000c08d39741f8518… ┆ 6.1300028 ┆ 49.6116604
┆ 6.1300028 ┆ 49.6116604 │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Palikir ┆ 0101000000b237e796ccc463… ┆ 158.1499743 ┆ 6.9166437
┆ 158.1499743 ┆ 6.9166437 │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Majuro ┆ 010100000027ef2df6286c65… ┆ 171.3800002 ┆ 7.1030043
┆ 171.3800002 ┆ 7.1030043 │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Funafuti ┆ 0101000000be28e6c5ee6666… ┆ 179.2166471 ┆ -8.516652
┆ 179.2166471 ┆ -8.516652 │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Melekeok ┆ 0101000000749b70af0cd460… ┆ 134.6265485 ┆ 7.4873962
┆ 134.6265485 ┆ 7.4873962 │\n",
+
"├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Bir Lehlou ┆ 0101000000f4d3c963174e23… ┆ -9.6525222 ┆ 26.1191667
┆ -9.6525222 ┆ 26.1191667 │\n",
+
"└──────────────┴───────────────────────────┴─────────────┴─────────────┴─────────────┴─────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "table = catalog.load_table(\"default.cities\")\n",
+ "arrow_table = table.scan().to_arrow()\n",
+ "df = sd.create_data_frame(arrow_table)\n",
+ "df.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "e66a151c-7dda-4c98-9548-f8ae373476c5",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "name: string\n",
+ "geometry_wkb: binary\n",
+ "bbox_xmin: double\n",
+ "bbox_ymin: double\n",
+ "bbox_xmax: double\n",
+ "bbox_ymax: double"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "arrow_table.schema"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7ac7c3c4-0e5c-45e3-b09d-aefa57565e6e",
+ "metadata": {},
+ "source": [
+ "Read the Iceberg table and filter it to only include cities in the
eastern half of North America."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "69c1922d-18b1-427a-b677-f77fed057848",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from pyiceberg.expressions import And, GreaterThanOrEqual,
LessThanOrEqual\n",
+ "\n",
+ "filter_expr = And(\n",
+ " GreaterThanOrEqual(\"bbox_xmax\", -97.0),\n",
+ " LessThanOrEqual(\"bbox_xmin\", -67.0),\n",
+ " GreaterThanOrEqual(\"bbox_ymax\", 25.0),\n",
+ " LessThanOrEqual(\"bbox_ymin\", 50.0),\n",
+ ")\n",
+ "\n",
+ "arrow_table = table.scan(row_filter=filter_expr).to_arrow()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "348fdd14-8c4f-4ddf-809b-59d9b9feb3e9",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌──────────────────┬──────────────────────────────────────────────┐\n",
+ "│ name ┆ geom │\n",
+ "│ utf8 ┆ geometry │\n",
+ "╞══════════════════╪══════════════════════════════════════════════╡\n",
+ "│ Ottawa ┆ POINT(-75.7019612 45.4186427) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Nassau ┆ POINT(-77.3500438 25.0833901) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Houston ┆ POINT(-95.34843625672217 29.741272831862542) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Miami ┆ POINT(-80.2260519 25.7895566) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Atlanta ┆ POINT(-84.36764186571386 33.73945728378348) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Chicago ┆ POINT(-87.63523655322338 41.847961283364114) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Toronto ┆ POINT(-79.38945855491194 43.66464454743429) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Washington, D.C. ┆ POINT(-77.0113644 38.9014952) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ New York ┆ POINT(-73.99571754361698 40.72156174972766) │\n",
+ "└──────────────────┴──────────────────────────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "df = sd.create_data_frame(arrow_table)\n",
+ "\n",
+ "df.to_view(\"us_east_cities\", True)\n",
+ "sd.sql(\"select name, ST_GeomFromWKB(geometry_wkb) as geom from
us_east_cities\").show()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/latest-snapshot/delta-lake/index.html
b/latest-snapshot/iceberg/index.html
similarity index 67%
copy from latest-snapshot/delta-lake/index.html
copy to latest-snapshot/iceberg/index.html
index d6d0453a..84c5f22b 100644
--- a/latest-snapshot/delta-lake/index.html
+++ b/latest-snapshot/iceberg/index.html
@@ -7,10 +7,10 @@
- <link rel="canonical"
href="https://sedona.apache.org/sedonadb/latest/delta-lake/">
+ <link rel="canonical"
href="https://sedona.apache.org/sedonadb/latest/iceberg/">
- <link rel="prev" href="../crs-examples/">
+ <link rel="prev" href="../delta-lake/">
<link rel="next" href="../working-with-parquet-files/">
@@ -24,7 +24,7 @@
- <title>Delta Lake - SedonaDB</title>
+ <title>Iceberg - SedonaDB</title>
@@ -88,7 +88,7 @@
<div data-md-component="skip">
- <a href="#sedonadb-delta-lake" class="md-skip">
+ <a href="#sedonadb-iceberg" class="md-skip">
Skip to content
</a>
@@ -127,7 +127,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
- Delta Lake
+ Iceberg
</span>
</div>
@@ -1018,6 +1018,34 @@
+
+
+ <li class="md-nav__item">
+ <a href="../delta-lake/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Delta Lake
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
@@ -1037,7 +1065,7 @@
<span class="md-ellipsis">
- Delta Lake
+ Iceberg
@@ -1055,7 +1083,7 @@
<span class="md-ellipsis">
- Delta Lake
+ Iceberg
@@ -1081,10 +1109,10 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
- <a href="#create-a-delta-lake-table-with-wkt" class="md-nav__link">
+ <a href="#create-an-iceberg-table-with-geometric-data" class="md-nav__link">
<span class="md-ellipsis">
- Create a Delta Lake table with WKT
+ Create an Iceberg table with geometric data
</span>
</a>
@@ -1092,10 +1120,10 @@
</li>
<li class="md-nav__item">
- <a href="#read-delta-table-into-sedonadb" class="md-nav__link">
+ <a href="#read-the-iceberg-table-into-sedonadb-via-arrow"
class="md-nav__link">
<span class="md-ellipsis">
- Read Delta table into SedonaDB
+ Read the Iceberg table into SedonaDB via Arrow
</span>
</a>
@@ -1103,10 +1131,10 @@
</li>
<li class="md-nav__item">
- <a href="#filter-countries-in-a-particular-geographic-region"
class="md-nav__link">
+ <a href="#future-iceberg-geographygeometry-work" class="md-nav__link">
<span class="md-ellipsis">
- Filter countries in a particular geographic region
+ Future Iceberg geography/geometry work
</span>
</a>
@@ -1114,10 +1142,10 @@
</li>
<li class="md-nav__item">
- <a href="#create-a-delta-lake-table-with-wkb" class="md-nav__link">
+ <a href="#create-an-iceberg-table-with-wkb-and-bbox" class="md-nav__link">
<span class="md-ellipsis">
- Create a Delta Lake table with WKB
+ Create an Iceberg table with WKB and bbox
</span>
</a>
@@ -1367,10 +1395,10 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
- <a href="#create-a-delta-lake-table-with-wkt" class="md-nav__link">
+ <a href="#create-an-iceberg-table-with-geometric-data" class="md-nav__link">
<span class="md-ellipsis">
- Create a Delta Lake table with WKT
+ Create an Iceberg table with geometric data
</span>
</a>
@@ -1378,10 +1406,10 @@
</li>
<li class="md-nav__item">
- <a href="#read-delta-table-into-sedonadb" class="md-nav__link">
+ <a href="#read-the-iceberg-table-into-sedonadb-via-arrow"
class="md-nav__link">
<span class="md-ellipsis">
- Read Delta table into SedonaDB
+ Read the Iceberg table into SedonaDB via Arrow
</span>
</a>
@@ -1389,10 +1417,10 @@
</li>
<li class="md-nav__item">
- <a href="#filter-countries-in-a-particular-geographic-region"
class="md-nav__link">
+ <a href="#future-iceberg-geographygeometry-work" class="md-nav__link">
<span class="md-ellipsis">
- Filter countries in a particular geographic region
+ Future Iceberg geography/geometry work
</span>
</a>
@@ -1400,10 +1428,10 @@
</li>
<li class="md-nav__item">
- <a href="#create-a-delta-lake-table-with-wkb" class="md-nav__link">
+ <a href="#create-an-iceberg-table-with-wkb-and-bbox" class="md-nav__link">
<span class="md-ellipsis">
- Create a Delta Lake table with WKB
+ Create an Iceberg table with WKB and bbox
</span>
</a>
@@ -1427,7 +1455,7 @@
- <a href="https://github.com/apache/sedona-db/blob/main/docs/delta-lake.md"
title="Edit this page" class="md-content__button md-icon" rel="edit">
+ <a href="https://github.com/apache/sedona-db/blob/main/docs/iceberg.md"
title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10
20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0
.3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1
23H12v-2.1l6.1-6.1z"></path></svg>
</a>
@@ -1435,180 +1463,201 @@
-<h1 id="sedonadb-delta-lake">SedonaDB + Delta Lake<a class="headerlink"
href="#sedonadb-delta-lake" title="Permanent link">¶</a></h1>
-<p>This page shows how to read and write Delta Lake tables with SedonaDB.</p>
-<p>Make sure you run <code>pip install deltalake</code> to run the code
snippets below.</p>
-<div class="highlight"><pre><span></span><code><span
class="kn">from</span><span class="w"> </span><span
class="nn">deltalake</span><span class="w"> </span><span
class="kn">import</span> <span class="n">write_deltalake</span><span
class="p">,</span> <span class="n">DeltaTable</span>
+<h1 id="sedonadb-iceberg">SedonaDB + Iceberg<a class="headerlink"
href="#sedonadb-iceberg" title="Permanent link">¶</a></h1>
+<p>This page demonstrates how to store spatial data in Iceberg tables and how
to query them with SedonaDB.</p>
+<p>You will learn how to create an Iceberg table with a well-known text (WKT)
or well-known binary (WKB) column in an Iceberg table and some of the
advantages of storing geometric data in Iceberg.</p>
+<p>Make sure to run <code>pip install pyiceberg</code> to install the required
dependencies for this notebook.</p>
+<p>Let’s start by loading the required dependencies and saving a spatial
dataset in an Iceberg table.</p>
+<div class="highlight"><pre><span></span><code><span
class="kn">from</span><span class="w"> </span><span
class="nn">pyiceberg.catalog</span><span class="w"> </span><span
class="kn">import</span> <span class="n">load_catalog</span>
<span class="kn">import</span><span class="w"> </span><span
class="nn">sedona.db</span>
-<span class="kn">import</span><span class="w"> </span><span
class="nn">pyarrow.compute</span><span class="w"> </span><span
class="k">as</span><span class="w"> </span><span class="nn">pc</span>
-
-<span class="n">sd</span> <span class="o">=</span> <span
class="n">sedona</span><span class="o">.</span><span class="n">db</span><span
class="o">.</span><span class="n">connect</span><span class="p">()</span>
+<span class="kn">import</span><span class="w"> </span><span
class="nn">pyarrow</span><span class="w"> </span><span class="k">as</span><span
class="w"> </span><span class="nn">pa</span>
+<span class="kn">import</span><span class="w"> </span><span
class="nn">os</span>
</code></pre></div>
-<p>Read in a GeoParquet dataset into a SedonaDB DataFrame.</p>
-<div class="highlight"><pre><span></span><code><span
class="n">countries</span> <span class="o">=</span> <span
class="n">sd</span><span class="o">.</span><span
class="n">read_parquet</span><span class="p">(</span>
- <span
class="s2">"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_countries_geo.parquet"</span>
-<span class="p">)</span>
+<h2 id="create-an-iceberg-table-with-geometric-data">Create an Iceberg table
with geometric data<a class="headerlink"
href="#create-an-iceberg-table-with-geometric-data" title="Permanent
link">¶</a></h2>
+<p>Start by creating the Iceberg warehouse:</p>
+<div class="highlight"><pre><span></span><code><span class="n">os</span><span
class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span
class="s2">"/tmp/warehouse"</span><span class="p">,</span> <span
class="n">exist_ok</span><span class="o">=</span><span
class="kc">True</span><span class="p">)</span>
</code></pre></div>
-<h2 id="create-a-delta-lake-table-with-wkt">Create a Delta Lake table with
WKT<a class="headerlink" href="#create-a-delta-lake-table-with-wkt"
title="Permanent link">¶</a></h2>
-<p>Now write the DataFrame to a Delta Lake table. Notice that you must
convert the geometry column to Well-Known Text (WKT) or Well-Known Binary (WKB)
before writing to the Delta table.</p>
-<p>Delta Lake does not support geometry columns.</p>
-<p>This example shows how to create a Delta table with a WKT column. The
section that follows shows how to create a Delta table with a WKB column.</p>
-<div class="highlight"><pre><span></span><code><span
class="n">countries</span><span class="o">.</span><span
class="n">to_view</span><span class="p">(</span><span
class="s2">"countries"</span><span class="p">,</span> <span
class="kc">True</span><span class="p">)</span>
-<span class="n">df</span> <span class="o">=</span> <span
class="n">sd</span><span class="o">.</span><span class="n">sql</span><span
class="p">(</span>
- <span class="s2">"select name, continent, ST_AsText(geometry) as
geometry_wkt from countries"</span>
+<p>Now set up the catalog:</p>
+<div class="highlight"><pre><span></span><code><span
class="n">warehouse_path</span> <span class="o">=</span> <span
class="s2">"/tmp/warehouse"</span>
+<span class="n">catalog</span> <span class="o">=</span> <span
class="n">load_catalog</span><span class="p">(</span>
+ <span class="s2">"default"</span><span class="p">,</span>
+ <span class="o">**</span><span class="p">{</span>
+ <span class="s2">"type"</span><span class="p">:</span> <span
class="s2">"sql"</span><span class="p">,</span>
+ <span class="s2">"uri"</span><span class="p">:</span> <span
class="sa">f</span><span class="s2">"sqlite:///</span><span
class="si">{</span><span class="n">warehouse_path</span><span
class="si">}</span><span class="s2">/pyiceberg_catalog.db"</span><span
class="p">,</span>
+ <span class="s2">"warehouse"</span><span class="p">:</span> <span
class="sa">f</span><span class="s2">"file://</span><span
class="si">{</span><span class="n">warehouse_path</span><span
class="si">}</span><span class="s2">"</span><span class="p">,</span>
+ <span class="p">},</span>
<span class="p">)</span>
-<span class="n">table_path</span> <span class="o">=</span> <span
class="s2">"/tmp/delta_with_wkt"</span>
-<span class="n">write_deltalake</span><span class="p">(</span><span
class="n">table_path</span><span class="p">,</span> <span
class="n">df</span><span class="o">.</span><span
class="n">to_pandas</span><span class="p">(),</span> <span
class="n">mode</span><span class="o">=</span><span
class="s2">"overwrite"</span><span class="p">)</span>
-</code></pre></div>
-<h2 id="read-delta-table-into-sedonadb">Read Delta table into SedonaDB<a
class="headerlink" href="#read-delta-table-into-sedonadb" title="Permanent
link">¶</a></h2>
-<p>Now read the Delta table back into a SedonaDB DataFrame.</p>
-<div class="highlight"><pre><span></span><code><span class="n">dt</span> <span
class="o">=</span> <span class="n">DeltaTable</span><span
class="p">(</span><span class="n">table_path</span><span class="p">)</span>
-<span class="n">arrow_table</span> <span class="o">=</span> <span
class="n">dt</span><span class="o">.</span><span
class="n">to_pyarrow_table</span><span class="p">()</span>
-<span class="n">df</span> <span class="o">=</span> <span
class="n">sd</span><span class="o">.</span><span
class="n">create_data_frame</span><span class="p">(</span><span
class="n">arrow_table</span><span class="p">)</span>
-<span class="n">df</span><span class="o">.</span><span
class="n">show</span><span class="p">()</span>
-</code></pre></div>
-<div
class="codehilite"><pre><span></span><code>┌─────────────────────────────┬───────────────┬────────────────────────────────────────────────────┐
-│ name ┆ continent ┆
geometry_wkt │
-│ utf8 ┆ utf8 ┆ utf8
│
-╞═════════════════════════════╪═══════════════╪════════════════════════════════════════════════════╡
-│ Fiji ┆ Oceania ┆ MULTIPOLYGON(((180
-16.067132663642447,180 -16.55… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ United Republic of Tanzania ┆ Africa ┆ POLYGON((33.90371119710453
-0.9500000000000001,34… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Western Sahara ┆ Africa ┆ POLYGON((-8.665589565454809
27.656425889592356,-8… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Canada ┆ North America ┆
MULTIPOLYGON(((-122.84000000000003 49.00000000000… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ United States of America ┆ North America ┆
MULTIPOLYGON(((-122.84000000000003 49.00000000000… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Kazakhstan ┆ Asia ┆ POLYGON((87.35997033076265
49.21498078062912,86.5… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Uzbekistan ┆ Asia ┆ POLYGON((55.96819135928291
41.30864166926936,55.9… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Papua New Guinea ┆ Oceania ┆
MULTIPOLYGON(((141.00021040259185 -2.600151055515… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Indonesia ┆ Asia ┆
MULTIPOLYGON(((141.00021040259185 -2.600151055515… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Argentina ┆ South America ┆
MULTIPOLYGON(((-68.63401022758323 -52.63637045887… │
-└─────────────────────────────┴───────────────┴────────────────────────────────────────────────────┘
</code></pre></div>
+<p>Use SedonaDB to read a Parquet file containing country data into a
DataFrame.</p>
+<div class="highlight"><pre><span></span><code><span class="n">sd</span> <span
class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span
class="n">db</span><span class="o">.</span><span class="n">connect</span><span
class="p">()</span>
-<p>Notice that the <code>geometry_wkt</code> column is <code>utf8</code>.
It's not a geometry column.</p>
-<p>Let's convert the <code>geometry_wkt</code> column to a geometry column.</p>
-<div class="highlight"><pre><span></span><code><span class="n">df</span><span
class="o">.</span><span class="n">to_view</span><span class="p">(</span><span
class="s2">"my_table"</span><span class="p">,</span> <span
class="kc">True</span><span class="p">)</span>
-<span class="n">res</span> <span class="o">=</span> <span
class="n">sd</span><span class="o">.</span><span class="n">sql</span><span
class="p">(</span><span class="s2">"""</span>
-<span class="s2">SELECT</span>
-<span class="s2"> name,</span>
-<span class="s2"> continent,</span>
-<span class="s2"> ST_GeomFromWKT(geometry_wkt) as geom</span>
-<span class="s2">from my_table</span>
-<span class="s2">"""</span><span class="p">)</span>
-<span class="n">res</span><span class="o">.</span><span
class="n">show</span><span class="p">()</span>
+<span class="n">countries</span> <span class="o">=</span> <span
class="n">sd</span><span class="o">.</span><span
class="n">read_parquet</span><span class="p">(</span>
+ <span
class="s2">"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_countries_geo.parquet"</span>
+<span class="p">)</span>
</code></pre></div>
-<div
class="codehilite"><pre><span></span><code>┌─────────────────────────────┬───────────────┬────────────────────────────────────────────────────┐
-│ name ┆ continent ┆ geom
│
-│ utf8 ┆ utf8 ┆ geometry
│
-╞═════════════════════════════╪═══════════════╪════════════════════════════════════════════════════╡
-│ Fiji ┆ Oceania ┆ MULTIPOLYGON(((180
-16.067132663642447,180 -16.55… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ United Republic of Tanzania ┆ Africa ┆ POLYGON((33.90371119710453
-0.9500000000000001,34… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Western Sahara ┆ Africa ┆ POLYGON((-8.665589565454809
27.656425889592356,-8… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Canada ┆ North America ┆
MULTIPOLYGON(((-122.84000000000003 49.00000000000… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ United States of America ┆ North America ┆
MULTIPOLYGON(((-122.84000000000003 49.00000000000… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Kazakhstan ┆ Asia ┆ POLYGON((87.35997033076265
49.21498078062912,86.5… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Uzbekistan ┆ Asia ┆ POLYGON((55.96819135928291
41.30864166926936,55.9… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Papua New Guinea ┆ Oceania ┆
MULTIPOLYGON(((141.00021040259185 -2.600151055515… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Indonesia ┆ Asia ┆
MULTIPOLYGON(((141.00021040259185 -2.600151055515… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Argentina ┆ South America ┆
MULTIPOLYGON(((-68.63401022758323 -52.63637045887… │
-└─────────────────────────────┴───────────────┴────────────────────────────────────────────────────┘
+<p>Convert all the columns to be plain strings because Iceberg doesn’t support
geometry columns yet:</p>
+<div class="highlight"><pre><span></span><code><span
class="n">countries</span><span class="o">.</span><span
class="n">to_view</span><span class="p">(</span><span
class="s2">"countries"</span><span class="p">,</span> <span
class="kc">True</span><span class="p">)</span>
+<span class="n">df</span> <span class="o">=</span> <span
class="n">sd</span><span class="o">.</span><span class="n">sql</span><span
class="p">(</span><span class="s2">"""</span>
+<span class="s2"> select </span>
+<span class="s2"> ARROW_CAST(name, 'Utf8') as name, </span>
+<span class="s2"> ARROW_CAST(continent, 'Utf8') as continent, </span>
+<span class="s2"> ST_AsText(geometry) as geometry_wkt </span>
+<span class="s2"> from countries</span>
+<span class="s2">"""</span><span class="p">)</span>
</code></pre></div>
-
-<p>Confirm the schema of the DataFrame.</p>
-<div class="highlight"><pre><span></span><code><span class="n">res</span><span
class="o">.</span><span class="n">schema</span>
+<p>The explicit casting with <code>ARROW_CAST</code> is necessary because
PyIceberg doesn't support string views.</p>
+<p>Check out the schema of the DataFrame:</p>
+<div class="highlight"><pre><span></span><code><span class="n">df</span><span
class="o">.</span><span class="n">schema</span>
</code></pre></div>
<div class="codehilite"><pre><span></span><code>SedonaSchema with 3 fields:
name: utf8<Utf8>
continent: utf8<Utf8>
- geom: geometry<Wkb>
+ geometry_wkt: utf8<Utf8>
</code></pre></div>
-<h2 id="filter-countries-in-a-particular-geographic-region">Filter countries
in a particular geographic region<a class="headerlink"
href="#filter-countries-in-a-particular-geographic-region" title="Permanent
link">¶</a></h2>
-<p>Now, let's grab some countries in the western portion of South America
using a polygon region.</p>
-<p>SedonaDB can run these types of queries on geometric data.</p>
-<div class="highlight"><pre><span></span><code><span class="n">res</span>
<span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span
class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
+<p>Now create a new Iceberg table:</p>
+<div class="highlight"><pre><span></span><code><span
class="kn">from</span><span class="w"> </span><span
class="nn">pyiceberg.exceptions</span><span class="w"> </span><span
class="kn">import</span> <span class="n">NamespaceAlreadyExistsError</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">catalog</span><span class="o">.</span><span
class="n">create_namespace</span><span class="p">(</span><span
class="s2">"default"</span><span class="p">)</span>
+<span class="k">except</span> <span
class="n">NamespaceAlreadyExistsError</span><span class="p">:</span>
+ <span class="k">pass</span>
+
+<span class="k">if</span> <span class="n">catalog</span><span
class="o">.</span><span class="n">table_exists</span><span
class="p">(</span><span class="s2">"default.countries"</span><span
class="p">):</span>
+ <span class="n">catalog</span><span class="o">.</span><span
class="n">drop_table</span><span class="p">(</span><span
class="s2">"default.countries"</span><span class="p">)</span>
+
+<span class="n">table</span> <span class="o">=</span> <span
class="n">catalog</span><span class="o">.</span><span
class="n">create_table</span><span class="p">(</span>
+ <span class="s2">"default.countries"</span><span class="p">,</span>
+ <span class="n">schema</span><span class="o">=</span><span
class="n">pa</span><span class="o">.</span><span class="n">schema</span><span
class="p">(</span><span class="n">df</span><span class="o">.</span><span
class="n">schema</span><span class="p">),</span>
+<span class="p">)</span>
+</code></pre></div>
+<p>Append the DataFrame to the table:</p>
+<div class="highlight"><pre><span></span><code><span
class="n">table</span><span class="o">.</span><span
class="n">append</span><span class="p">(</span><span class="n">df</span><span
class="o">.</span><span class="n">to_arrow_table</span><span
class="p">())</span>
+</code></pre></div>
+<p>Now let’s see how to read the data with SedonaDB.</p>
+<h2 id="read-the-iceberg-table-into-sedonadb-via-arrow">Read the Iceberg table
into SedonaDB via Arrow<a class="headerlink"
href="#read-the-iceberg-table-into-sedonadb-via-arrow" title="Permanent
link">¶</a></h2>
+<p>Here’s how to read an Iceberg table into a SedonaDB DataFrame:</p>
+<div class="highlight"><pre><span></span><code><span class="n">table</span>
<span class="o">=</span> <span class="n">catalog</span><span
class="o">.</span><span class="n">load_table</span><span
class="p">(</span><span class="s2">"default.countries"</span><span
class="p">)</span>
+<span class="n">arrow_table</span> <span class="o">=</span> <span
class="n">table</span><span class="o">.</span><span class="n">scan</span><span
class="p">()</span><span class="o">.</span><span class="n">to_arrow</span><span
class="p">()</span>
+<span class="n">df</span> <span class="o">=</span> <span
class="n">sd</span><span class="o">.</span><span
class="n">create_data_frame</span><span class="p">(</span><span
class="n">arrow_table</span><span class="p">)</span>
+</code></pre></div>
+<p>The Iceberg table is first exposed as an arrow table and then read into a
SedonaDB DataFrame.</p>
+<p>Now view the contents of the SedonaDB DataFrame:</p>
+<div class="highlight"><pre><span></span><code><span class="n">df</span><span
class="o">.</span><span class="n">to_view</span><span class="p">(</span><span
class="s2">"my_table"</span><span class="p">,</span> <span
class="kc">True</span><span class="p">)</span>
+<span class="n">res</span> <span class="o">=</span> <span
class="n">sd</span><span class="o">.</span><span class="n">sql</span><span
class="p">(</span><span class="s2">"""</span>
<span class="s2">SELECT</span>
<span class="s2"> name,</span>
<span class="s2"> continent,</span>
<span class="s2"> ST_GeomFromWKT(geometry_wkt) as geom</span>
-<span class="s2">FROM my_table</span>
-<span class="s2">WHERE ST_Intersects(</span>
-<span class="s2"> ST_GeomFromWKT(geometry_wkt),</span>
-<span class="s2"> ST_GeomFromWKT('POLYGON((-81 5, -75 5, -75 -56, -81 -56,
-81 5))')</span>
-<span class="s2">)</span>
+<span class="s2">from my_table</span>
<span class="s2">"""</span><span class="p">)</span>
-<span class="n">res</span><span class="o">.</span><span
class="n">show</span><span class="p">()</span>
+<span class="n">res</span><span class="o">.</span><span
class="n">show</span><span class="p">(</span><span class="mi">3</span><span
class="p">)</span>
</code></pre></div>
-<div
class="codehilite"><pre><span></span><code>┌──────────┬───────────────┬───────────────────────────────────────────────────────────────────────┐
-│ name ┆ continent ┆ geom
│
-│ utf8 ┆ utf8 ┆ geometry
│
-╞══════════╪═══════════════╪═══════════════════════════════════════════════════════════════════════╡
-│ Chile ┆ South America ┆ MULTIPOLYGON(((-68.63401022758323
-52.63637045887449,-68.63335000000… │
-├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Peru ┆ South America ┆ POLYGON((-69.89363521999663
-4.2981869441943275,-70.7947688463023 -4… │
-├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Colombia ┆ South America ┆ POLYGON((-66.87632585312258
1.253360500489336,-67.0650481838525 1.13… │
-├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ Ecuador ┆ South America ┆ POLYGON((-75.37322323271385
-0.1520317521204504,-75.23372270374195 -… │
-└──────────┴───────────────┴───────────────────────────────────────────────────────────────────────┘
+<div
class="codehilite"><pre><span></span><code>┌─────────────────────────────┬───────────┬────────────────────────────────────────────────────────┐
+│ name ┆ continent ┆ geom
│
+│ utf8 ┆ utf8 ┆ geometry
│
+╞═════════════════════════════╪═══════════╪════════════════════════════════════════════════════════╡
+│ Fiji ┆ Oceania ┆ MULTIPOLYGON(((180
-16.067132663642447,180 -16.555216… │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ United Republic of Tanzania ┆ Africa ┆ POLYGON((33.90371119710453
-0.9500000000000001,34.072… │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ Western Sahara ┆ Africa ┆ POLYGON((-8.665589565454809
27.656425889592356,-8.665… │
+└─────────────────────────────┴───────────┴────────────────────────────────────────────────────────┘
</code></pre></div>
-<h2 id="create-a-delta-lake-table-with-wkb">Create a Delta Lake table with
WKB<a class="headerlink" href="#create-a-delta-lake-table-with-wkb"
title="Permanent link">¶</a></h2>
-<p>You can also create a Delta table with WKB.</p>
-<p>WKB is binary, can be compressed more effectively than WKT, and results in
smaller file sizes.</p>
-<p>The following example shows how to store the cities dataset in a Delta
table with the geometry data stored as WKB.</p>
-<p>It also demonstrates how to add a <code>bbox</code> column to the Delta
table, enabling more efficient filtering.</p>
+<p>You can see that the geom column contains the geometry type, which enables
spatial analysis of the data.</p>
+<p>The geometry data is stored as WKT, which isn't as efficient as WKB. The
example that follows demonstrates how to store WKB in Iceberg tables.</p>
+<h2 id="future-iceberg-geographygeometry-work">Future Iceberg
geography/geometry work<a class="headerlink"
href="#future-iceberg-geographygeometry-work" title="Permanent link">¶</a></h2>
+<p>Iceberg added support for geometry and geography columns in the v3 spec.</p>
+<p>The Iceberg v3 implementation has not been released yet, and it the v3 spec
hasn't started in Iceberg Rust. Here is <a
href="https://github.com/apache/iceberg-rust/issues/1884">the open issue</a> to
add geo support to Iceberg Rust.</p>
+<p>It’s best to manually persist the bbox information of files in your Iceberg
table if you’re storing geometric data as WKT or WKB. </p>
+<h2 id="create-an-iceberg-table-with-wkb-and-bbox">Create an Iceberg table
with WKB and bbox<a class="headerlink"
href="#create-an-iceberg-table-with-wkb-and-bbox" title="Permanent
link">¶</a></h2>
+<p>Let’s see how to create an Iceberg table with a WKB and bbox columns to
allow for faster spatial analyses.</p>
+<p>Start by creating the cities DataFrame.</p>
<div class="highlight"><pre><span></span><code><span class="n">cities</span>
<span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span
class="n">read_parquet</span><span class="p">(</span>
<span
class="s2">"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities_geo.parquet"</span>
<span class="p">)</span>
<span class="n">cities</span><span class="o">.</span><span
class="n">to_view</span><span class="p">(</span><span
class="s2">"cities"</span><span class="p">,</span> <span
class="kc">True</span><span class="p">)</span>
</code></pre></div>
+<p>Now write the DataFrame to an Iceberg table with bbox columns:</p>
<div class="highlight"><pre><span></span><code><span class="n">df</span> <span
class="o">=</span> <span class="n">sd</span><span class="o">.</span><span
class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
<span class="s2">select </span>
-<span class="s2"> name, </span>
-<span class="s2"> ST_AsBinary(geometry) as geometry_wkb,</span>
-<span class="s2"> STRUCT(</span>
-<span class="s2"> ST_XMin(geometry) as xmin,</span>
-<span class="s2"> ST_YMin(geometry) as ymin,</span>
-<span class="s2"> ST_XMax(geometry) as xmax,</span>
-<span class="s2"> ST_YMax(geometry) as ymax</span>
-<span class="s2"> ) as bbox</span>
+<span class="s2"> ARROW_CAST(name, 'Utf8') as name, </span>
+<span class="s2"> ARROW_CAST(ST_AsBinary(geometry), 'Binary') as
geometry_wkb,</span>
+<span class="s2"> ST_XMin(geometry) as bbox_xmin,</span>
+<span class="s2"> ST_YMin(geometry) as bbox_ymin,</span>
+<span class="s2"> ST_XMax(geometry) as bbox_xmax,</span>
+<span class="s2"> ST_YMax(geometry) as bbox_ymax</span>
<span class="s2">from cities</span>
<span class="s2">"""</span><span class="p">)</span>
-<span class="n">table_path</span> <span class="o">=</span> <span
class="s2">"/tmp/delta_with_wkb"</span>
-<span class="n">write_deltalake</span><span class="p">(</span><span
class="n">table_path</span><span class="p">,</span> <span
class="n">df</span><span class="o">.</span><span
class="n">to_pandas</span><span class="p">(),</span> <span
class="n">mode</span><span class="o">=</span><span
class="s2">"overwrite"</span><span class="p">,</span> <span
class="n">schema_mode</span><span class="o">=</span><span
class="s2">"overwrite"</span><span class="p">)</span>
</code></pre></div>
-<p>Read the Delta table and filter it to only include cities in the eastern
half of North America.</p>
-<div class="highlight"><pre><span></span><code><span class="n">dt</span> <span
class="o">=</span> <span class="n">DeltaTable</span><span
class="p">(</span><span class="n">table_path</span><span class="p">)</span>
-<span class="n">dataset</span> <span class="o">=</span> <span
class="n">dt</span><span class="o">.</span><span
class="n">to_pyarrow_dataset</span><span class="p">()</span>
-<span class="n">filter_expr</span> <span class="o">=</span> <span
class="p">(</span>
- <span class="p">(</span><span class="n">pc</span><span
class="o">.</span><span class="n">field</span><span class="p">(</span><span
class="s2">"bbox"</span><span class="p">,</span> <span
class="s2">"xmax"</span><span class="p">)</span> <span class="o">>=</span>
<span class="o">-</span><span class="mf">97.0</span><span class="p">)</span>
- <span class="o">&</span> <span class="p">(</span><span
class="n">pc</span><span class="o">.</span><span class="n">field</span><span
class="p">(</span><span class="s2">"bbox"</span><span class="p">,</span> <span
class="s2">"xmin"</span><span class="p">)</span> <span class="o"><=</span>
<span class="o">-</span><span class="mf">67.0</span><span class="p">)</span>
- <span class="o">&</span> <span class="p">(</span><span
class="n">pc</span><span class="o">.</span><span class="n">field</span><span
class="p">(</span><span class="s2">"bbox"</span><span class="p">,</span> <span
class="s2">"ymax"</span><span class="p">)</span> <span class="o">>=</span>
<span class="mf">25.0</span><span class="p">)</span>
- <span class="o">&</span> <span class="p">(</span><span
class="n">pc</span><span class="o">.</span><span class="n">field</span><span
class="p">(</span><span class="s2">"bbox"</span><span class="p">,</span> <span
class="s2">"ymin"</span><span class="p">)</span> <span class="o"><=</span>
<span class="mf">50.0</span><span class="p">)</span>
+<div class="highlight"><pre><span></span><code><span class="k">if</span> <span
class="n">catalog</span><span class="o">.</span><span
class="n">table_exists</span><span class="p">(</span><span
class="s2">"default.cities"</span><span class="p">):</span>
+ <span class="n">catalog</span><span class="o">.</span><span
class="n">drop_table</span><span class="p">(</span><span
class="s2">"default.cities"</span><span class="p">)</span>
+
+<span class="n">table</span> <span class="o">=</span> <span
class="n">catalog</span><span class="o">.</span><span
class="n">create_table</span><span class="p">(</span>
+ <span class="s2">"default.cities"</span><span class="p">,</span>
+ <span class="n">schema</span><span class="o">=</span><span
class="n">pa</span><span class="o">.</span><span class="n">schema</span><span
class="p">(</span><span class="n">df</span><span class="o">.</span><span
class="n">schema</span><span class="p">),</span>
<span class="p">)</span>
-<span class="n">filtered_table</span> <span class="o">=</span> <span
class="n">dataset</span><span class="o">.</span><span
class="n">to_table</span><span class="p">(</span><span
class="nb">filter</span><span class="o">=</span><span
class="n">filter_expr</span><span class="p">)</span>
</code></pre></div>
-<div class="highlight"><pre><span></span><code><span class="n">df</span> <span
class="o">=</span> <span class="n">sd</span><span class="o">.</span><span
class="n">create_data_frame</span><span class="p">(</span><span
class="n">filtered_table</span><span class="o">.</span><span
class="n">to_pandas</span><span class="p">())</span>
+<div class="highlight"><pre><span></span><code><span
class="n">table</span><span class="o">.</span><span
class="n">append</span><span class="p">(</span><span class="n">df</span><span
class="o">.</span><span class="n">to_arrow_table</span><span
class="p">())</span>
+</code></pre></div>
+<p>Load the <code>cities</code> table into a DataFrame with SedonaDB.</p>
+<div class="highlight"><pre><span></span><code><span class="n">table</span>
<span class="o">=</span> <span class="n">catalog</span><span
class="o">.</span><span class="n">load_table</span><span
class="p">(</span><span class="s2">"default.cities"</span><span
class="p">)</span>
+<span class="n">arrow_table</span> <span class="o">=</span> <span
class="n">table</span><span class="o">.</span><span class="n">scan</span><span
class="p">()</span><span class="o">.</span><span class="n">to_arrow</span><span
class="p">()</span>
+<span class="n">df</span> <span class="o">=</span> <span
class="n">sd</span><span class="o">.</span><span
class="n">create_data_frame</span><span class="p">(</span><span
class="n">arrow_table</span><span class="p">)</span>
+<span class="n">df</span><span class="o">.</span><span
class="n">show</span><span class="p">()</span>
+</code></pre></div>
+<div
class="codehilite"><pre><span></span><code>┌──────────────┬───────────────────────────┬─────────────┬─────────────┬─────────────┬─────────────┐
+│ name ┆ geometry_wkb ┆ bbox_xmin ┆ bbox_ymin ┆
bbox_xmax ┆ bbox_ymax │
+│ utf8 ┆ binary ┆ float64 ┆ float64 ┆
float64 ┆ float64 │
+╞══════════════╪═══════════════════════════╪═════════════╪═════════════╪═════════════╪═════════════╡
+│ Vatican City ┆ 010100000054e57b4622e828… ┆ 12.4533865 ┆ 41.9032822 ┆
12.4533865 ┆ 41.9032822 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ San Marino ┆ 0101000000dcb122b42fe228… ┆ 12.4417702 ┆ 43.9360958 ┆
12.4417702 ┆ 43.9360958 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ Vaduz ┆ 01010000006dae9ae7880823… ┆ 9.5166695 ┆ 47.1337238 ┆
9.5166695 ┆ 47.1337238 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ Lobamba ┆ 01010000007bcb8b0233333f… ┆ 31.1999971 ┆ -26.4666675 ┆
31.1999971 ┆ -26.4666675 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ Luxembourg ┆ 0101000000c08d39741f8518… ┆ 6.1300028 ┆ 49.6116604 ┆
6.1300028 ┆ 49.6116604 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ Palikir ┆ 0101000000b237e796ccc463… ┆ 158.1499743 ┆ 6.9166437 ┆
158.1499743 ┆ 6.9166437 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ Majuro ┆ 010100000027ef2df6286c65… ┆ 171.3800002 ┆ 7.1030043 ┆
171.3800002 ┆ 7.1030043 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ Funafuti ┆ 0101000000be28e6c5ee6666… ┆ 179.2166471 ┆ -8.516652 ┆
179.2166471 ┆ -8.516652 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ Melekeok ┆ 0101000000749b70af0cd460… ┆ 134.6265485 ┆ 7.4873962 ┆
134.6265485 ┆ 7.4873962 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
+│ Bir Lehlou ┆ 0101000000f4d3c963174e23… ┆ -9.6525222 ┆ 26.1191667 ┆
-9.6525222 ┆ 26.1191667 │
+└──────────────┴───────────────────────────┴─────────────┴─────────────┴─────────────┴─────────────┘
</code></pre></div>
-<div class="highlight"><pre><span></span><code><span class="n">df</span><span
class="o">.</span><span class="n">to_view</span><span class="p">(</span><span
class="s2">"us_east_cities"</span><span class="p">,</span> <span
class="kc">True</span><span class="p">)</span>
+
+<div class="highlight"><pre><span></span><code><span
class="n">arrow_table</span><span class="o">.</span><span
class="n">schema</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code><span
class="n">name</span><span class="o">:</span><span class="w"> </span><span
class="n">string</span>
+<span class="n">geometry_wkb</span><span class="o">:</span><span class="w">
</span><span class="n">binary</span>
+<span class="n">bbox_xmin</span><span class="o">:</span><span class="w">
</span><span class="n">double</span>
+<span class="n">bbox_ymin</span><span class="o">:</span><span class="w">
</span><span class="n">double</span>
+<span class="n">bbox_xmax</span><span class="o">:</span><span class="w">
</span><span class="n">double</span>
+<span class="n">bbox_ymax</span><span class="o">:</span><span class="w">
</span><span class="n">double</span>
+</code></pre></div>
+
+<p>Read the Iceberg table and filter it to only include cities in the eastern
half of North America.</p>
+<div class="highlight"><pre><span></span><code><span
class="kn">from</span><span class="w"> </span><span
class="nn">pyiceberg.expressions</span><span class="w"> </span><span
class="kn">import</span> <span class="n">And</span><span class="p">,</span>
<span class="n">GreaterThanOrEqual</span><span class="p">,</span> <span
class="n">LessThanOrEqual</span>
+
+<span class="n">filter_expr</span> <span class="o">=</span> <span
class="n">And</span><span class="p">(</span>
+ <span class="n">GreaterThanOrEqual</span><span class="p">(</span><span
class="s2">"bbox_xmax"</span><span class="p">,</span> <span
class="o">-</span><span class="mf">97.0</span><span class="p">),</span>
+ <span class="n">LessThanOrEqual</span><span class="p">(</span><span
class="s2">"bbox_xmin"</span><span class="p">,</span> <span
class="o">-</span><span class="mf">67.0</span><span class="p">),</span>
+ <span class="n">GreaterThanOrEqual</span><span class="p">(</span><span
class="s2">"bbox_ymax"</span><span class="p">,</span> <span
class="mf">25.0</span><span class="p">),</span>
+ <span class="n">LessThanOrEqual</span><span class="p">(</span><span
class="s2">"bbox_ymin"</span><span class="p">,</span> <span
class="mf">50.0</span><span class="p">),</span>
+<span class="p">)</span>
+
+<span class="n">arrow_table</span> <span class="o">=</span> <span
class="n">table</span><span class="o">.</span><span class="n">scan</span><span
class="p">(</span><span class="n">row_filter</span><span
class="o">=</span><span class="n">filter_expr</span><span
class="p">)</span><span class="o">.</span><span class="n">to_arrow</span><span
class="p">()</span>
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="n">df</span> <span
class="o">=</span> <span class="n">sd</span><span class="o">.</span><span
class="n">create_data_frame</span><span class="p">(</span><span
class="n">arrow_table</span><span class="p">)</span>
+
+<span class="n">df</span><span class="o">.</span><span
class="n">to_view</span><span class="p">(</span><span
class="s2">"us_east_cities"</span><span class="p">,</span> <span
class="kc">True</span><span class="p">)</span>
<span class="n">sd</span><span class="o">.</span><span
class="n">sql</span><span class="p">(</span><span class="s2">"select name,
ST_GeomFromWKB(geometry_wkb) as geom from us_east_cities"</span><span
class="p">)</span><span class="o">.</span><span class="n">show</span><span
class="p">()</span>
</code></pre></div>
<div
class="codehilite"><pre><span></span><code>┌──────────────────┬──────────────────────────────────────────────┐
@@ -1654,7 +1703,7 @@
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21
13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6
0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4
2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10
9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1
7.5 7.1 7.9l-.1.2z"></path></svg>
</span>
- <span class="git-revision-date-localized-plugin
git-revision-date-localized-plugin-datetime" title="November 3, 2025 20:16:13
UTC">November 3, 2025 20:16:13</span>
+ <span class="git-revision-date-localized-plugin
git-revision-date-localized-plugin-datetime" title="December 14, 2025 06:02:44
UTC">December 14, 2025 06:02:44</span>
</span>
@@ -1690,7 +1739,7 @@
<nav class="md-footer__inner md-grid" aria-label="Footer">
- <a href="../crs-examples/" class="md-footer__link
md-footer__link--prev" aria-label="Previous: CRS Examples">
+ <a href="../delta-lake/" class="md-footer__link
md-footer__link--prev" aria-label="Previous: Delta Lake">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24
24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8
11z"></path></svg>
@@ -1700,7 +1749,7 @@
Previous
</span>
<div class="md-ellipsis">
- CRS Examples
+ Delta Lake
</div>
</div>
</a>
diff --git a/latest-snapshot/index.html b/latest-snapshot/index.html
index 8549f82b..b82189b3 100644
--- a/latest-snapshot/index.html
+++ b/latest-snapshot/index.html
@@ -1153,6 +1153,34 @@
+ <li class="md-nav__item">
+ <a href="iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="working-with-parquet-files/" class="md-nav__link">
diff --git a/latest-snapshot/overture-examples/index.html
b/latest-snapshot/overture-examples/index.html
index fddee354..8ed3f81d 100644
--- a/latest-snapshot/overture-examples/index.html
+++ b/latest-snapshot/overture-examples/index.html
@@ -1128,6 +1128,34 @@
+ <li class="md-nav__item">
+ <a href="../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../working-with-parquet-files/" class="md-nav__link">
diff --git a/latest-snapshot/programming-guide/index.html
b/latest-snapshot/programming-guide/index.html
index e1c0b8c3..8fa4d536 100644
--- a/latest-snapshot/programming-guide/index.html
+++ b/latest-snapshot/programming-guide/index.html
@@ -1171,6 +1171,34 @@
+ <li class="md-nav__item">
+ <a href="../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../working-with-parquet-files/" class="md-nav__link">
diff --git a/latest-snapshot/quickstart-python/index.html
b/latest-snapshot/quickstart-python/index.html
index b801f9e4..86048d4c 100644
--- a/latest-snapshot/quickstart-python/index.html
+++ b/latest-snapshot/quickstart-python/index.html
@@ -1115,6 +1115,34 @@
+ <li class="md-nav__item">
+ <a href="../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../working-with-parquet-files/" class="md-nav__link">
diff --git
a/latest-snapshot/reference/functions/__pycache__/_matplotlib_defaults.cpython-314.pyc
b/latest-snapshot/reference/functions/__pycache__/_matplotlib_defaults.cpython-314.pyc
index 94fab724..fd815e7b 100644
Binary files
a/latest-snapshot/reference/functions/__pycache__/_matplotlib_defaults.cpython-314.pyc
and
b/latest-snapshot/reference/functions/__pycache__/_matplotlib_defaults.cpython-314.pyc
differ
diff --git
a/latest-snapshot/reference/functions/__pycache__/_render_meta.cpython-314.pyc
b/latest-snapshot/reference/functions/__pycache__/_render_meta.cpython-314.pyc
index fd9a11ca..fe097a1c 100644
Binary files
a/latest-snapshot/reference/functions/__pycache__/_render_meta.cpython-314.pyc
and
b/latest-snapshot/reference/functions/__pycache__/_render_meta.cpython-314.pyc
differ
diff --git a/latest-snapshot/reference/functions/index.html
b/latest-snapshot/reference/functions/index.html
index f1f135fc..4cf4f308 100644
--- a/latest-snapshot/reference/functions/index.html
+++ b/latest-snapshot/reference/functions/index.html
@@ -1029,6 +1029,34 @@
+ <li class="md-nav__item">
+ <a href="../../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../../working-with-parquet-files/" class="md-nav__link">
@@ -1404,7 +1432,7 @@ input geometry is less than or equal to a specified
distance.</p>
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21
13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6
0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4
2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10
9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1
7.5 7.1 7.9l-.1.2z"></path></svg>
</span>
- <span class="git-revision-date-localized-plugin
git-revision-date-localized-plugin-datetime" title="December 14, 2025 01:32:00
UTC">December 14, 2025 01:32:00</span>
+ <span class="git-revision-date-localized-plugin
git-revision-date-localized-plugin-datetime" title="December 14, 2025 06:07:03
UTC">December 14, 2025 06:07:03</span>
</span>
diff --git a/latest-snapshot/reference/functions/st_analyze_agg/index.html
b/latest-snapshot/reference/functions/st_analyze_agg/index.html
index de004a31..f4a7bcc6 100644
--- a/latest-snapshot/reference/functions/st_analyze_agg/index.html
+++ b/latest-snapshot/reference/functions/st_analyze_agg/index.html
@@ -1029,6 +1029,34 @@
+ <li class="md-nav__item">
+ <a href="../../../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../../../working-with-parquet-files/" class="md-nav__link">
@@ -1382,7 +1410,7 @@ geometries. The fields of its struct return type are:</p>
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21
13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6
0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4
2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10
9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1
7.5 7.1 7.9l-.1.2z"></path></svg>
</span>
- <span class="git-revision-date-localized-plugin
git-revision-date-localized-plugin-datetime" title="December 14, 2025 01:32:00
UTC">December 14, 2025 01:32:00</span>
+ <span class="git-revision-date-localized-plugin
git-revision-date-localized-plugin-datetime" title="December 14, 2025 06:07:03
UTC">December 14, 2025 06:07:03</span>
</span>
diff --git a/latest-snapshot/reference/functions/st_buffer/index.html
b/latest-snapshot/reference/functions/st_buffer/index.html
index bc522e14..96694982 100644
--- a/latest-snapshot/reference/functions/st_buffer/index.html
+++ b/latest-snapshot/reference/functions/st_buffer/index.html
@@ -1029,6 +1029,34 @@
+ <li class="md-nav__item">
+ <a href="../../../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../../../working-with-parquet-files/" class="md-nav__link">
@@ -1380,7 +1408,7 @@ input geometry is less than or equal to a specified
distance.</p>
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21
13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6
0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4
2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10
9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1
7.5 7.1 7.9l-.1.2z"></path></svg>
</span>
- <span class="git-revision-date-localized-plugin
git-revision-date-localized-plugin-datetime" title="December 14, 2025 01:32:00
UTC">December 14, 2025 01:32:00</span>
+ <span class="git-revision-date-localized-plugin
git-revision-date-localized-plugin-datetime" title="December 14, 2025 06:07:03
UTC">December 14, 2025 06:07:03</span>
</span>
diff --git a/latest-snapshot/reference/functions/st_intersection/index.html
b/latest-snapshot/reference/functions/st_intersection/index.html
index 31ac0685..79288ffa 100644
--- a/latest-snapshot/reference/functions/st_intersection/index.html
+++ b/latest-snapshot/reference/functions/st_intersection/index.html
@@ -1029,6 +1029,34 @@
+ <li class="md-nav__item">
+ <a href="../../../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../../../working-with-parquet-files/" class="md-nav__link">
@@ -1362,7 +1390,7 @@
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21
13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6
0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4
2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10
9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1
7.5 7.1 7.9l-.1.2z"></path></svg>
</span>
- <span class="git-revision-date-localized-plugin
git-revision-date-localized-plugin-datetime" title="December 14, 2025 01:32:00
UTC">December 14, 2025 01:32:00</span>
+ <span class="git-revision-date-localized-plugin
git-revision-date-localized-plugin-datetime" title="December 14, 2025 06:07:03
UTC">December 14, 2025 06:07:03</span>
</span>
diff --git a/latest-snapshot/reference/python/index.html
b/latest-snapshot/reference/python/index.html
index 105afbc2..2c7183ee 100644
--- a/latest-snapshot/reference/python/index.html
+++ b/latest-snapshot/reference/python/index.html
@@ -1455,6 +1455,34 @@
+ <li class="md-nav__item">
+ <a href="../../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../../working-with-parquet-files/" class="md-nav__link">
diff --git a/latest-snapshot/reference/sql-joins/index.html
b/latest-snapshot/reference/sql-joins/index.html
index d747418d..503d4758 100644
--- a/latest-snapshot/reference/sql-joins/index.html
+++ b/latest-snapshot/reference/sql-joins/index.html
@@ -1179,6 +1179,34 @@
+ <li class="md-nav__item">
+ <a href="../../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../../working-with-parquet-files/" class="md-nav__link">
diff --git a/latest-snapshot/reference/sql/index.html
b/latest-snapshot/reference/sql/index.html
index 33609c76..343c72f0 100644
--- a/latest-snapshot/reference/sql/index.html
+++ b/latest-snapshot/reference/sql/index.html
@@ -2140,6 +2140,34 @@
+ <li class="md-nav__item">
+ <a href="../../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../../working-with-parquet-files/" class="md-nav__link">
diff --git a/latest-snapshot/search/search_index.json
b/latest-snapshot/search/search_index.json
index 6dd43057..8a4dc02d 100644
--- a/latest-snapshot/search/search_index.json
+++ b/latest-snapshot/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Introducing
SedonaDB","text":"<p>SedonaDB is an open-source single-node analytical
database engine with geospatial as a first-class citizen. It aims to deliver
the fastest spatial analytics query speed and the most comprehensive function
coverage available.</p> <p>SedonaDB is perfect for process [...]
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Introducing
SedonaDB","text":"<p>SedonaDB is an open-source single-node analytical
database engine with geospatial as a first-class citizen. It aims to deliver
the fastest spatial analytics query speed and the most comprehensive function
coverage available.</p> <p>SedonaDB is perfect for process [...]
\ No newline at end of file
diff --git a/latest-snapshot/sitemap.xml b/latest-snapshot/sitemap.xml
index 496709b9..edf9b6f9 100644
--- a/latest-snapshot/sitemap.xml
+++ b/latest-snapshot/sitemap.xml
@@ -20,6 +20,10 @@
<loc>https://sedona.apache.org/sedonadb/latest/geopandas-interop/</loc>
<lastmod>2025-12-14</lastmod>
</url>
+ <url>
+ <loc>https://sedona.apache.org/sedonadb/latest/iceberg/</loc>
+ <lastmod>2025-12-14</lastmod>
+ </url>
<url>
<loc>https://sedona.apache.org/sedonadb/latest/overture-examples/</loc>
<lastmod>2025-12-14</lastmod>
diff --git a/latest-snapshot/sitemap.xml.gz b/latest-snapshot/sitemap.xml.gz
index 13cf3084..e5427eb8 100644
Binary files a/latest-snapshot/sitemap.xml.gz and
b/latest-snapshot/sitemap.xml.gz differ
diff --git a/latest-snapshot/working-with-parquet-files/index.html
b/latest-snapshot/working-with-parquet-files/index.html
index d369d490..9c323691 100644
--- a/latest-snapshot/working-with-parquet-files/index.html
+++ b/latest-snapshot/working-with-parquet-files/index.html
@@ -10,7 +10,7 @@
<link rel="canonical"
href="https://sedona.apache.org/sedonadb/latest/working-with-parquet-files/">
- <link rel="prev" href="../delta-lake/">
+ <link rel="prev" href="../iceberg/">
<link rel="next" href="../working-with-sql-sedonadb/">
@@ -1046,6 +1046,34 @@
+
+
+ <li class="md-nav__item">
+ <a href="../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
@@ -1531,7 +1559,7 @@
<nav class="md-footer__inner md-grid" aria-label="Footer">
- <a href="../delta-lake/" class="md-footer__link
md-footer__link--prev" aria-label="Previous: Delta Lake">
+ <a href="../iceberg/" class="md-footer__link md-footer__link--prev"
aria-label="Previous: Iceberg">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24
24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8
11z"></path></svg>
@@ -1541,7 +1569,7 @@
Previous
</span>
<div class="md-ellipsis">
- Delta Lake
+ Iceberg
</div>
</div>
</a>
diff --git a/latest-snapshot/working-with-sql-sedonadb/index.html
b/latest-snapshot/working-with-sql-sedonadb/index.html
index 77dfa238..537b5caa 100644
--- a/latest-snapshot/working-with-sql-sedonadb/index.html
+++ b/latest-snapshot/working-with-sql-sedonadb/index.html
@@ -1048,6 +1048,34 @@
+ <li class="md-nav__item">
+ <a href="../iceberg/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+
+
+ Iceberg
+
+
+
+ </span>
+
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../working-with-parquet-files/" class="md-nav__link">