# MMAP bear interventions > The national register of intervention actions taken on brown bears in Romania — hazing/scaring, capture and relocation, euthanasia, and shooting — published by the Ministry of Environment, Waters and Forests (Ministerul Mediului, Apelor și Pădurilor). One row per (incident, intervention type that actually occurred), reshaped from the source's wide one-row-per-incident register, which keeps a separate date and longitude/latitude pair for every intervention type that could apply. - Dataset id: `mmap-bear-interventions` - Update cadence: daily - Upstream source: https://interventiiurs.mmap.ro/centralizator/ - Tags: wildlife, bears, romania, environment, protected-species, interventions, mmap - Current version: ingest `01M53R6ZBTZMWRZNGR8PGMF19Y`, snapshot 2026-10-17, generated 2026-10-17T01:39:33.834Z ## Licence and attribution - Licence: Romanian official acts and public-interest information — outside copyright (`ro-official-acts-public-domain`) - Licence text: https://legislatie.just.ro/Public/DetaliiDocument/7816 - Required attribution: Date despre intervențiile pe fondul cinegetic cu urși publicate de Ministerul Mediului, Apelor și Pădurilor — interventiiurs.mmap.ro - Notes: Legea 8/1996 privind dreptul de autor, art. 9, excludes from copyright both official texts of an administrative nature and simple facts and data. This centralizer is the ministry's own official register of bear-intervention actions — a record of an administrative act each time a response team intervenes — and the underlying details (county, UAT, method, coordinates, forestry-unit code, report numbers) are bare facts drawn from that register. They are also public-interest information under Legea 544/2001 and re-usable public-sector information under Legea 179/2022, which transposes the EU Open Data Directive. HOWEVER, and a reuser must weigh this: this centralizer page carries no copyright, terms-of-use or licence text, and mmediu.ro's own footer states only "Copyright © 2026 Ministerul Mediului, Apelor și Pădurilor" with no reuse grant of any kind — this was checked directly on both the source page and the parent domain, and no explicit reuse licence exists to cite. This dataset therefore rests on the legal position above rather than on any grant from the Ministerul Mediului, Apelor și Pădurilor, and anyone republishing it should make their own assessment. This dataset is published as a DERIVED work: the source's wide, one-row-per-incident HTML table (31 columns, with four separate longitude/latitude pairs, one per intervention type) has been reshaped into a long, one-row-per-(incident, intervention type) table, republishing the county, UAT, sex, free-text incident description, method, coordinates, forestry-unit code, report and identification numbers, and the responding team — the same underlying facts the source publishes, restructured for querying rather than scraped and republished verbatim. robots.txt on this subdomain (interventiiurs.mmap.ro/robots.txt) restricts only /wp-admin/ and says nothing about /centralizator/, so fetching this page is consistent with the site's own stated crawl policy. Finally, and most importantly: every row here is a record of a PROTECTED-SPECIES intervention, and its coordinates are only as good as the field team that hand-entered them — the source's own coordinate columns mix plain decimal degrees, comma-decimal degrees, degree/minute/second notation, and occasional swapped or out-of-country values (all of the non-decimal and out-of-bounds cases are nulled by this connector rather than guessed at — see the longitude/latitude column descriptions). Do not present this dataset as an authoritative record of where brown bears are or have been; it is a register of intervention actions, not a wildlife-tracking feed, and any single coordinate should be treated with real scepticism. Reproduce the attribution line verbatim anywhere you republish this data. ## Manifest - Start here for how this directory works: https://data.bunnytech.app/llms.txt - This dataset: https://data-directory.fsn1.your-objectstorage.com/public/mmap-bear-interventions/manifest.json - All datasets: https://data-directory.fsn1.your-objectstorage.com/public/index.json - Human page: https://data.bunnytech.app/datasets/mmap-bear-interventions The manifest is the contract: file URLs, row counts, column types, min/max statistics and example queries all live there. Re-read it to discover a new version. ## Fastest path — Parquet exports Immutable, physically sorted snapshot exports. No catalog fetch, best row-group pruning, safe to cache forever. Register one view per table: ```sql INSTALL httpfs; LOAD httpfs; CREATE OR REPLACE VIEW interventions AS SELECT * FROM read_parquet('https://data-directory.fsn1.your-objectstorage.com/public/mmap-bear-interventions/v/01M53R6ZBTZMWRZNGR8PGMF19Y/interventions.parquet'); ``` Example queries: -- Interventions by type in one county, this year: judet and intervention_type are equality filters — both lead the sort. ```sql ATTACH IF NOT EXISTS 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/catalog.ducklake' AS "datadirectory" (READ_ONLY); SELECT intervention_type, count(*) AS n FROM datadirectory.mmap_bear_interventions.interventions WHERE judet = 'Harghita' AND intervention_date >= date_trunc('year', current_date) GROUP BY intervention_type ORDER BY n DESC ``` -- Yearly trend of relocations vs. shootings, nationwide ```sql ATTACH IF NOT EXISTS 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/catalog.ducklake' AS "datadirectory" (READ_ONLY); SELECT date_trunc('year', intervention_date) AS year, intervention_type, count(*) AS n FROM datadirectory.mmap_bear_interventions.interventions WHERE intervention_type IN ('relocare', 'impuscare') AND intervention_date IS NOT NULL GROUP BY 1, 2 ORDER BY 1, 2 ``` ## Live lake — DuckLake catalog with time travel Attach the published catalog read-only over plain https. This works in native DuckDB AND in duckdb-wasm in the browser — the reader catalog resolves its data files through public https URLs, so no credentials and no backend are involved. ```sql INSTALL ducklake; LOAD ducklake; ATTACH 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/mmap-bear-interventions/catalog.ducklake' AS mmap_bear_interventions (READ_ONLY); SELECT * FROM mmap_bear_interventions.main.interventions LIMIT 5; USE mmap_bear_interventions; ``` - Latest catalog: https://data-directory.fsn1.your-objectstorage.com/catalog/mmap-bear-interventions/catalog.ducklake - This exact version: https://data-directory.fsn1.your-objectstorage.com/catalog/mmap-bear-interventions/v/01M53R6ZBTZMWRZNGR8PGMF19Y/catalog.ducklake (sha256 02a1a87adefeb6247c2827bbffdd6eac1b333c0018ed381f4eb5b05808c0e998) - Written by DuckDB v1.5.5 - Time travel: this ingest is snapshot 6 — e.g. `SELECT * FROM mmap_bear_interventions.interventions AT (VERSION => 6)` ## Wholesale — S3 access For bulk downloads, read the bucket prefix directly over S3 with httpfs: ```sql INSTALL httpfs; LOAD httpfs; CREATE SECRET hetzner ( TYPE s3, ENDPOINT 'fsn1.your-objectstorage.com', URL_STYLE 'path', KEY_ID '', SECRET '' ); SELECT * FROM read_parquet('s3://data-directory/public/mmap-bear-interventions/v/01M53R6ZBTZMWRZNGR8PGMF19Y/**/*.parquet'); ``` ## Schema ### interventions One row per (incident, intervention type that occurred): every hazing, relocation, euthanasia or shooting action taken on a brown bear in Romania, reshaped from the source's wide one-row-per-incident register into one row per action actually taken. An incident with more than one recorded action (hazed, then later relocated) produces more than one row here, linked by having the same county, UAT, team and event description. - 3,914 rows · 384 KB · write mode `upsert` - Physically sorted by: `judet`, `intervention_type`, `intervention_date`, `intervention_id` - Primary key: `intervention_id` - Text search columns: `judet`, `uat`, `descriere_eveniment` - Files: 1 - https://data-directory.fsn1.your-objectstorage.com/public/mmap-bear-interventions/v/01M53R6ZBTZMWRZNGR8PGMF19Y/interventions.parquet (3,914 rows) Columns: - `intervention_id` VARCHAR NOT NULL — Deterministic id built from county, UAT, intervention type, the intervention date (or "unknown-date" when the source left it blank or unparseable) and a 1-based ordinal distinguishing rows that would otherwise collide on all four — the source publishes no id of its own. Stable across re-ingests of an unchanged page; the primary key. (range: "alba--alba-iulia--eutanasiere--2024-04-25--001" … "vrancea--vizantea-livezi--impuscare--2026-06-11--001") (~4825 distinct) - `judet` VARCHAR NOT NULL — County (județ) of the incident, exactly as printed by the source. (range: "Alba" … "Vâlcea") - `judet_lc` VARCHAR — judet, accent-folded and lowercased, for case-insensitive search. - `uat` VARCHAR NOT NULL — Administrative unit (UAT — commune, town or city) where the incident happened, exactly as printed by the source (usually upper case). - `uat_lc` VARCHAR — uat, accent-folded and lowercased, for case-insensitive search. - `intervention_type` VARCHAR NOT NULL — Which action this row records: "alungare" (hazing/scaring the bear away), "relocare" (capture and relocation), "eutanasiere" (euthanasia), "impuscare" (shooting), or "altele" — the source logged a team response with no dated, located action at all (e.g. the bear left the area before the team could act). (range: "altele" … "relocare") - `occurrence_ordinal` INTEGER NOT NULL — 1-based position of this row among all rows sharing the same county, UAT, intervention_type and intervention_date. Almost always 1; exists because the source has no id and two distinct incidents can otherwise share every value this key is built from. - `intervention_date` DATE — The day this specific action happened, as printed by the source for this intervention type — the Europe/Bucharest calendar day, with no time-of-day component. Null when the source left the cell blank (or a "-" placeholder) or the value could not be parsed as a date — a garbled date nulls this column, it does not drop the row. (range: "2021-08-02" … "2026-10-15") - `longitude` DOUBLE [degrees] — WGS84 longitude (X) of this intervention, as printed by the source for this type. Null when the source's value was not a plain decimal number, or when the parsed pair fell outside Romania's bounding box (roughly 20.2–29.8°E, 43.5–48.4°N) — both counted as upstream noise rather than dropping the row. These are hand-entered field coordinates, not a survey-grade location: treat any single value with appropriate scepticism. - `latitude` DOUBLE [degrees] — WGS84 latitude (Y) of this intervention, as printed by the source for this type. Nulled together with longitude on the same conditions — see that column. - `fond_cinegetic` VARCHAR — The hunting-ground / wildlife-management-unit code (fond cinegetic) the source recorded for this intervention type, e.g. a relocation's destination unit. - `report_number` VARCHAR — The source's own report reference for this intervention type. Kept as text, not a number: values are often composite, e.g. "6011/11.10.2021". - `identification_number` VARCHAR — Ear-tag / collar / microchip identifier recorded for this intervention, when the source tracked one. Only ever present for relocare, eutanasiere and impuscare — alungare and altele rows are always null here, because hazing does not involve tagging the animal. - `destination_judet` VARCHAR — The county the animal was relocated TO, when it differs from `judet` (the county of the incident itself). Only ever present on intervention_type = "relocare" rows. - `team` VARCHAR — Who responded, as printed by the source ("Echipa de interventie"). - `sex` VARCHAR — Sex of the bear as recorded by the source: typically "Mascul", "Femela" or "Femela cu pui" (female with cubs). Free text, not a fixed enum — the source has not standardised it. - `descriere_eveniment` TEXT — Free-text account of the incident, as written by the field team. The single most informative field in this dataset — everything else here is structured metadata about what this paragraph describes. - `descriere_eveniment_lc` TEXT — descriere_eveniment, accent-folded and lowercased, for case-insensitive free-text search. Query this, not lower(descriere_eveniment) — a function on a column cannot use parquet statistics. - `metoda_interventie` VARCHAR — The source's own overall outcome label for the whole incident row (before this connector split it by type), e.g. "Alungat", "Relocat", "Eutanasiat dupa relocare". Kept alongside intervention_type because it occasionally carries extra nuance a single type code does not, such as a euthanasia that followed a failed relocation. - `added_by` VARCHAR — Name of the person who entered this row into the source system. - `first_seen_date` DATE NOT NULL — The first run day (UTC) on which we observed this exact intervention_id. Maintained automatically by the upsert loader — never overwritten, only widened. - `last_seen_date` DATE NOT NULL — The most recent run day (UTC) on which the source still carried this intervention_id. ## Performance notes - There are no indexes in a lakehouse. The physical sort order plus Parquet row-group min/max statistics ARE the index. Predicates on the leading sort columns prune whole row groups; everything else is a full column scan. - `interventions` prunes on `judet` → `intervention_type` → `intervention_date` → `intervention_id`. - `ILIKE '%needle%'` cannot prune: it decompresses that whole column. Prefer prefix predicates on the lowercased search companion columns where they exist. - Every file URL under `/v//` is immutable. Cache it as aggressively as you like. - Files are never rewritten in place — a new ingest writes a new version path. Re-read the manifest to pick up updates rather than polling the file URLs. - Pull only the columns you need. Parquet is columnar and the reader range-GETs what it reads. ## Do not - Do not scrape https://data.bunnytech.app HTML. Every number on those pages comes from the manifest above. - Do not hit the upstream source (https://interventiiurs.mmap.ro/centralizator/) in bulk. This mirror exists so you do not have to. - Do not read DuckLake internal data files with a plain Parquet reader. They come with positional delete files, and ignoring those silently returns deleted rows. Use the ducklake extension, or use the published exports above. - Do not republish without the attribution line, and do not imply endorsement.