Index regional municipality feature lookup
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-16 00:53:37 +02:00
parent 3b94dbc9c7
commit 54e8488c7d
4 changed files with 44 additions and 1 deletions
@@ -0,0 +1,22 @@
"""Index partitioned vector features by dataset and municipality."""
from alembic import op
import sqlalchemy as sa
revision = "202607160001"
down_revision = "202607150001"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.create_index(
"ix_vector_features_dataset_municipality",
"vector_features",
["dataset_id", sa.text("(properties_json ->> 'municipality')")],
)
def downgrade() -> None:
op.drop_index("ix_vector_features_dataset_municipality", table_name="vector_features")
+6 -1
View File
@@ -4,7 +4,7 @@ import uuid
from datetime import datetime from datetime import datetime
from geoalchemy2 import Geometry from geoalchemy2 import Geometry
from sqlalchemy import CheckConstraint, DateTime, ForeignKey, Float, Index, JSON, String, Text, UniqueConstraint, func from sqlalchemy import CheckConstraint, DateTime, ForeignKey, Float, Index, JSON, String, Text, UniqueConstraint, func, text
from sqlalchemy.sql.sqltypes import Integer from sqlalchemy.sql.sqltypes import Integer
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
@@ -140,6 +140,11 @@ class VectorFeature(Base):
Index("ix_vector_features_dataset_id", "dataset_id"), Index("ix_vector_features_dataset_id", "dataset_id"),
Index("ix_vector_features_geometry", "geometry", postgresql_using="gist"), Index("ix_vector_features_geometry", "geometry", postgresql_using="gist"),
Index("ix_vector_features_dataset_source_feature", "dataset_id", "source_feature_id"), Index("ix_vector_features_dataset_source_feature", "dataset_id", "source_feature_id"),
Index(
"ix_vector_features_dataset_municipality",
"dataset_id",
text("(properties_json ->> 'municipality')"),
),
) )
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
@@ -237,12 +237,19 @@ def test_regional_operator_is_packaged_release_checked_and_exact_area_is_preferr
service = (ROOT / "backend/app/services/vector_feature_service.py").read_text(encoding="utf-8") service = (ROOT / "backend/app/services/vector_feature_service.py").read_text(encoding="utf-8")
workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8") workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
catalog = (ROOT / "frontend/src/components/datasets/SourceCatalogPanel.tsx").read_text(encoding="utf-8") catalog = (ROOT / "frontend/src/components/datasets/SourceCatalogPanel.tsx").read_text(encoding="utf-8")
model = (ROOT / "backend/app/models/entities.py").read_text(encoding="utf-8")
migration = (
ROOT / "backend/alembic/versions/202607160001_vector_feature_municipality_index.py"
).read_text(encoding="utf-8")
assert "COPY scripts/provision_regional_bwk_natura2000.py" in dockerfile assert "COPY scripts/provision_regional_bwk_natura2000.py" in dockerfile
assert "py_compile scripts/provision_regional_bwk_natura2000.py" in readiness assert "py_compile scripts/provision_regional_bwk_natura2000.py" in readiness
assert '"provision_regional_bwk_natura2000.py"' in service assert '"provision_regional_bwk_natura2000.py"' in service
assert "dataset.area_id === selectedAreaId ? 10_000_000" in workspace assert "dataset.area_id === selectedAreaId ? 10_000_000" in workspace
assert "largestBwkSnapshot" in catalog assert "largestBwkSnapshot" in catalog
assert "ix_vector_features_dataset_municipality" in model
assert "ix_vector_features_dataset_municipality" in migration
assert 'down_revision = "202607150001"' in migration
def test_regional_bwk_uses_only_canonical_preclipped_municipality_partitions() -> None: def test_regional_bwk_uses_only_canonical_preclipped_municipality_partitions() -> None:
+9
View File
@@ -306,3 +306,12 @@ Their `provenance_metadata` records 28-partition identity, combined output
checksum and retained raw-response status. Municipality-clipped source ids are checksum and retained raw-response status. Municipality-clipped source ids are
partition-suffixed for uniqueness, while `identity_stable=false` prohibits partition-suffixed for uniqueness, while `identity_stable=false` prohibits
object-lineage interpretation. No partition or temporal shadow table is added. object-lineage interpretation. No partition or temporal shadow table is added.
### Partitioned vector feature lookup index
Regional operator Datasets retain their municipality partition identity in
`vector_features.properties_json.municipality`. Migration `202607160001` adds
the composite expression index
`ix_vector_features_dataset_municipality(dataset_id, properties_json->>'municipality')`.
It supports exact preclipped municipality selection without changing the
canonical `vector_features` schema or introducing operator-specific tables.
Free rectangle queries continue to use the geometry GiST index.