# Eurostat statistics > European official statistics from Eurostat, whole-office scope: each data product the EU statistical office disseminates becomes its own DuckDB table, named after its Eurostat code, with that dataset's own dimensions (geo, unit, age, sex, na_item, coicop, siec…) as real columns — so `SELECT geo, period, value FROM tps00001` reads like the indicator it is about instead of decoding a series key. The office publishes 7,570 of them and the `catalogue` table carries a row for every one; how many a deployment actually fetches is bounded by its `maxCells` parameter, and `catalogue.loaded` is the column that says which products have a table here. Each table is described from Eurostat's own catalogue metadata: title, theme path, product type, covered period range and cube size. Two companions come with them: `catalogue`, the complete Eurostat table of contents with update dates, coverage and ready-made browser and API links, and `geographies`, decoding every reporting geo code (countries, candidates, EFTA, EU and euro-area aggregates) into English names. Periods keep Eurostat's own coding alongside a sortable start date, values keep Eurostat's revision flags, and figures are merged in place on every run because Eurostat revises what it has published. - Dataset id: `eurostat` - Update cadence: daily - Upstream source: https://ec.europa.eu/eurostat/web/main - Tags: eurostat, europe, eu, statistics, catalogue, economy, demography, inflation, labour - Current version: ingest `01M1KKH2CDPTKF23E29A33KP5R`, snapshot 2026-09-03, generated 2026-09-03T12:22:33.613Z ## Licence and attribution - Licence: Creative Commons Attribution 4.0 International (`CC-BY-4.0`) - Licence text: https://ec.europa.eu/eurostat/web/main/help/copyright-notice - Required attribution: Source of data: Eurostat (https://ec.europa.eu/eurostat) - Notes: Eurostat authorises reuse of its statistical data and metadata for commercial and non-commercial purposes provided the source is acknowledged (Commission Decision 2011/833/EU; site content licensed CC BY 4.0). Everything this connector republishes is Eurostat-produced statistics and metadata disseminated through its own public API (source agency ESTAT); Eurostat's general permission does not extend to material it identifies as belonging to third parties, which this connector does not republish. Values are republished as retrieved, with Eurostat's own revision flags in the status column of each dataset table; modified representations of the data must be identified as such to end users. Cite a dataset by its Eurostat code: the code names both the lake table here and the source dataset, and catalogue.dataset_url links its landing page on Eurostat's site, from which Eurostat's own DOI for it is reachable. 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/eurostat/manifest.json - All datasets: https://data-directory.fsn1.your-objectstorage.com/public/index.json - Human page: https://data.bunnytech.app/datasets/eurostat 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 This dataset publishes 5426 tables — too many to inline one export URL per table here. The exports exist, and they are as immutable and as sorted as any other dataset's; their URLs are listed under `tables[].files[].url` in `manifest.json`: https://data-directory.fsn1.your-objectstorage.com/public/eurostat/manifest.json That file is large, so do not fetch it just to run a query. The DuckLake catalog below reads exactly the same data with one ATTACH, no manifest download and no file list. Example queries: -- Population of Romania on 1 January, every year Eurostat covers: One Eurostat dataset, one table: tps00001 is "Population on 1 January", and its own dimensions (freq, indic_de, geo) are columns. geo leads the sort order, so this predicate prunes to a contiguous run of row groups; period_start is what date ranges filter on. ```sql ATTACH IF NOT EXISTS 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/catalog.ducklake' AS "datadirectory" (READ_ONLY); SELECT geo, indic_de, period, value AS population FROM datadirectory.eurostat.tps00001 WHERE geo = 'RO' ORDER BY period_start ``` -- Inflation across the EU: Romania vs Germany vs the euro area: teicp000 is the short-term indicator table "HICP - all items", and it carries a rolling window of roughly the last twelve months for every reporting country, not the full history. Its unit codes are I25 (the index), PCH_M1 (month on month), PCH_M12 (annual rate of change, selected here) and PCH_MV12 (12-month moving average rate). Its dimensions are freq, coicop18, unit, geo, and its sort order is geo then period_start, so this geo predicate prunes to a contiguous run of row groups. ```sql ATTACH IF NOT EXISTS 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/catalog.ducklake' AS "datadirectory" (READ_ONLY); SELECT period, geo, value AS inflation_pct, status FROM datadirectory.eurostat.teicp000 WHERE geo IN ('RO', 'DE', 'EA') AND unit = 'PCH_M12' ORDER BY period_start, geo ``` ## 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/eurostat/catalog.ducklake' AS eurostat (READ_ONLY); SELECT * FROM eurostat.main.aact_ali01 LIMIT 5; USE eurostat; ``` - Latest catalog: https://data-directory.fsn1.your-objectstorage.com/catalog/eurostat/catalog.ducklake - This exact version: https://data-directory.fsn1.your-objectstorage.com/catalog/eurostat/v/01M1KKH2CDPTKF23E29A33KP5R/catalog.ducklake (sha256 dd2ee3f3121ec35129e4c1d186f698a4188e83d497f81b6d7cc911123d8f1fa2) - Written by DuckDB v1.5.5 - Time travel: this ingest is snapshot 5428 — e.g. `SELECT * FROM eurostat.aact_ali01 AT (VERSION => 5428)` ## 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/eurostat/v/01M1KKH2CDPTKF23E29A33KP5R/**/*.parquet'); ``` ## Schema This dataset publishes 5426 tables. The full column-level schema is too large to inline here; it lives in full in `manifest.json` at https://data-directory.fsn1.your-objectstorage.com/public/eurostat/manifest.json. A table's columns can be discovered live with DuckDB instead. Which name a table answers to depends on which catalog you attached — both routes, in full: ```sql -- Route 1: the unified catalog (see `/llms.txt`). Every dataset is a schema inside it. DESCRIBE datadirectory.eurostat.; SELECT table_name, column_name, data_type FROM information_schema.columns WHERE table_schema = 'eurostat'; ``` ```sql -- Route 2: this dataset's own catalog. Its tables live in schema `main` of the alias -- you attach it under — there is no `datadirectory` schema on this route. ATTACH 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/eurostat/catalog.ducklake' AS eurostat (READ_ONLY); DESCRIBE eurostat.main.
; SELECT table_name, column_name, data_type FROM information_schema.columns WHERE table_catalog = 'eurostat' AND table_schema = 'main'; ``` Tables (name — row count): - `aact_ali01` — 3,945 rows - `aact_ali01_r` — 2,181 rows - `aact_ali02` — 11.8K rows - `aact_ali02_r` — 1,874 rows - `aact_eaa06` — 17K rows - `aact_uv01` — 95.6K rows - `aact_uv02` — 98.6K rows - `aact_uv03` — 47.2K rows - `acf_d_eq` — 31.7K rows - `acf_d_eq1` — 5,760 rows - `acf_d_lo` — 17.3K rows - `acf_d_lo1` — 20.2K rows - `acf_d_oth` — 31.7K rows - `acf_d_rea` — 6,720 rows - `acf_p_ch` — 17.3K rows - `acf_p_fa` — 8,640 rows - `acf_p_fi` — 1,440 rows - `acf_p_ne` — 480 rows - `acf_p_pu` — 3,360 rows - `acf_p_so` — 6,720 rows - `acf_s_inf` — 2,880 rows - `acf_s_ne` — 960 rows - `acf_s_own` — 7,200 rows - `acf_s_ty` — 5,760 rows - `aei_ef_ir` — 2,763 rows - `aei_ef_ls` — 8,703 rows - `aei_ef_lu` — 5,548 rows - `aei_fm_ms` — 31.7K rows - `aei_fm_salpest09` — 37.7K rows - `aei_fm_usefert` — 5,184 rows - `aei_hri` — 516 rows - `aei_pestsal_rsk` — 2,069 rows - `aei_pr_gnb` — 63.7K rows - `aei_ps_inp` — 38.5K rows - `agr_r_milkpr` — 11.6K rows - `apri_aip_en` — 180 rows - `apri_aip_fs` — 426 rows - `apri_aip_ft` — 334 rows - `apri_ap_anouta` — 20.4K rows - `apri_ap_crpouta` — 52.7K rows - `apri_ap_haouta` — 26.9K rows - `apri_ap_hcouta` — 56.5K rows - `apri_ap_hia` — 29.1K rows - `apri_ap_ina` — 30.3K rows - `apri_lprc` — 16.9K rows - `apri_lprc_h` — 1,362 rows - `apri_lrnt` — 12.2K rows - `apri_lrnt_h` — 1,098 rows - `apri_pi95_proda` — 51.4K rows - `apri_pi95_purcha` — 39.7K rows - `apri_pi95_vwia` — 723 rows - `apri_pi95_vwpa` — 835 rows - `apro_cbs_cer` — 11.1K rows - `apro_cbs_oil` — 6,736 rows - `apro_ec_eggcon` — 278 rows - `apro_ec_egghen` — 1,448 rows - `apro_ec_eggorg` — 470 rows - `apro_ec_lshen` — 681 rows - `apro_ec_poula` — 48K rows - `apro_ec_strhen` — 39K rows - `apro_ec_strpoul` — 41.9K rows - `apro_mk_cola` — 9,502 rows - `apro_mk_farm` — 39K rows - `apro_mk_fatprot` — 2,287 rows - `apro_mk_strbt` — 3,592 rows - `apro_mk_strcc` — 3,603 rows - `apro_mk_strch` — 3,620 rows - `apro_mk_strdm` — 3,455 rows - `apro_mk_strfp` — 3,735 rows - `apro_mk_strmk` — 4,699 rows - `apro_mk_strmt` — 4,495 rows - `apro_mk_strpd` — 2,542 rows - `apro_mt_lsavch_r` — 534 rows - `apro_mt_lscatl` — 46.3K rows - `apro_mt_lsequi` — 1,057 rows - `apro_mt_lsgoat` — 3,935 rows - `apro_mt_lspig` — 34.4K rows - `apro_mt_lssheep` — 4,763 rows - `apro_mt_pann` — 96.1K rows - `apro_mt_pcatlhs` — 13.3K rows - `apro_mt_porg` — 1,652 rows - `apro_mt_ppighq` — 3,575 rows - `apro_mt_pslothm` — 61.2K rows - `apro_mt_sloth` — 15.9K rows - `apro_mt_strcatl` — 25.6K rows - `apro_mt_strgoat` — 2,759 rows - `apro_mt_strpig` — 21.4K rows - `apro_mt_strshe` — 6,147 rows - `avia_ec_emp_arp` — 2,178 rows - `avia_ec_emp_ent` — 450 rows - `avia_ec_enterp` — 234 rows - `avia_eq_arc_age` — 5,574 rows - `avia_eq_arc_agereg` — 5,580 rows - `avia_eq_arc_typ` — 9,290 rows - `avia_eq_arc_typreg` — 9,300 rows - `avia_gor_ba` — 6,071 rows - `avia_gor_bg` — 50.6K rows - `avia_gor_cy` — 60.1K rows - `avia_gor_ee` — 31.2K rows - `avia_gor_hr` — 37.3K rows - `avia_gor_hu` — 86.6K rows - `avia_gor_ie` — 98.8K rows - `avia_gor_is` — 59K rows - `avia_gor_lt` — 41.3K rows - `avia_gor_lv` — 60.8K rows - `avia_gor_me` — 2,920 rows - `avia_gor_mk` — 10.1K rows - `avia_gor_mt` — 50.5K rows - `avia_gor_ro` — 90.6K rows - `avia_gor_rs` — 27.3K rows - `avia_gor_si` — 34.2K rows - `avia_gor_sk` — 13.8K rows - `avia_gor_tr` — 57.7K rows - `avia_if_arp` — 3,431 rows - `avia_if_arp_co` — 2,780 rows - `avia_if_typ` — 20.4K rows - `avia_par_ba` — 15.2K rows - `avia_par_ee` — 99.3K rows - `avia_par_me` — 36.8K rows - `avia_par_mk` — 64.4K rows - `avia_par_rs` — 95.3K rows - `avia_par_si` — 74.8K rows - `avia_tf_cm` — 38.7K rows - `avia_tpgo` — 2,108 rows - `avia_tppa` — 2,108 rows - `bd_9c_l_form` — 68.3K rows - `bd_9g_l_form` — 39.1K rows - `bd_9h_size_cl` — 48.7K rows - `bop_exms6_q` — 24.1K rows - `bop_fdi6_ind` — 13K rows - `bop_its_str` — 1,408 rows - `bs_bs1_00` — 24 rows - `bs_bs1_01` — 6,922 rows - `bs_bs1_03` — 3,389 rows - `bs_bs1_04` — 7,599 rows - `bs_bs1_05` — 849 rows - `bs_bs1_06` — 412 rows - `bs_bs1_07` — 471 rows - `bs_bs10_00` — 96 rows - `bs_bs10_04` — 1,542 rows - `bs_bs11_00` — 48 rows - `bs_bs11_04` — 1,542 rows - `bs_bs12_04` — 32.3K rows - `bs_bs13_04` — 96 rows - `bs_bs14_04` — 13 rows - `bs_bs16_04` — 13 rows - `bs_bs2_00` — 113 rows - `bs_bs3_01` — 2,063 rows - `bs_bs3_03` — 4,014 rows - `bs_bs3_04` — 1,705 rows - `bs_bs4_01` — 1,565 rows - `bs_bs4_03` — 4,229 rows - `bs_bs4_04` — 4,120 rows - `bs_bs4_05` — 480 rows - `bs_bs4_06` — 236 rows - `bs_bs4_07` — 240 rows - `bs_bs5_00` — 189 rows - `bs_bs5_01` — 6,685 rows - `bs_bs5_04` — 135 rows - `bs_bs6_00` — 152 rows - `bs_bs6_01` — 3,891 rows - `bs_bs6_04` — 270 rows - `bs_bs7_00` — 150 rows - `bs_bs7_04` — 270 rows - `bs_bs8_00` — 117 rows - `bs_bs8_04` — 5,670 rows - `bs_bs8ace_r2` — 18.9K rows - `bs_bs8bdf_r2` — 11.9K rows - `bs_bs8cpa2_1` — 14.7K rows - `bs_bs9_00` — 92 rows - `bs_bs9_04` — 771 rows - `catalogue` — 7,573 rows - `cei_cie011` — 1,098 rows - `cei_cie012` — 2,196 rows - `cei_cie020` — 1,430 rows - `cei_gsr010` — 21.4K rows - `cei_gsr011` — 632 rows - `cei_gsr020` — 315 rows - `cei_gsr030` — 893 rows - `cei_pc020` — 578 rows - `cei_pc030` — 2,590 rows - `cei_pc031` — 867 rows - `cei_pc032` — 342 rows - `cei_pc034` — 359 rows - `cei_pc035` — 118 rows - `cei_pc040` — 649 rows - `cei_pc050` — 649 rows - `cei_srm010` — 116 rows - `cei_srm020` — 49.6K rows - `cei_srm030` — 426 rows - `cei_srm040` — 3,384 rows - `cei_wm010` — 153 rows - `cei_wm011` — 808 rows - `cei_wm020` — 3,873 rows - `cei_wm060` — 516 rows - `cens_01naagchi` — 69.3K rows - `cens_01nactz` — 8,020 rows - `cens_01nadisco` — 61.2K rows - `cens_01naind` — 4,211 rows - `cens_01naisco` — 44.3K rows - `cens_01nanac` — 62.4K rows - `cens_01napop` — 32.2K rows - `cens_01nawtime` — 6,371 rows - `cens_01ndbuild` — 435 rows - `cens_01ndcomf` — 117 rows - `cens_01ndhh` — 2,076 rows - `cens_01ndnbown` — 2,974 rows - `cens_01ndpercons` — 1,277 rows - `cens_01ndquart_hd` — 140 rows - `cens_01ndquart_lq` — 166 rows - `cens_01ndquart_oc` — 146 rows - `cens_01neisco` — 52.7K rows - `cens_01news` — 23.6K rows - `cens_01nhctzcomp` — 966 rows - `cens_01nheco` — 3,683 rows - `cens_01nhfst` — 30.8K rows - `cens_01nhfstctz` — 7,278 rows - `cens_01nhhst` — 2,769 rows - `cens_01nhsize` — 25.4K rows - `cens_01nhtype` — 77.3K rows - `cens_01ractz` — 82.2K rows - `cens_01rdbuild` — 4,667 rows - `cens_01rdhh` — 28.2K rows - `cens_01rhagchi` — 29.2K rows - `cens_01rheco` — 59.6K rows - `cens_01rsctz` — 77.6K rows - `cens_11dwob_r3` — 52K rows - `cens_11hou_r2` — 77K rows - `cens_11htts_r2` — 57.1K rows - `cens_21ah` — 47.3K rows - `cens_21dwbo_r2` — 18.8K rows - `cens_21dwob_r3` — 47.2K rows - `cens_21dwop_r3` — 67.4K rows - `cens_21m` — 96K rows - `cens_21mh` — 7,512 rows - `cens_21ua_a` — 1,842 rows - `cens_21ua_a5` — 859 rows - `cens_21ua_a5r3` — 19.7K rows - `cens_21ua_ar3` — 51.3K rows - `cens_21ua_ms` — 1,863 rows - `cens_21ua_msr3` — 31.7K rows - `cens_21ua_yae` — 2,842 rows - `cens_21urb01` — 10.5K rows - `cens_21urb02` — 630 rows - `cens_91aage` — 3,753 rows - `cens_91actz` — 22.9K rows - `cens_91aenace` — 547 rows - `cens_91aepisco` — 857 rows - `cens_91amsta` — 1,449 rows - `cens_91annwctz` — 9,350 rows - `cens_91awsta` — 4,175 rows - `cens_91dame` — 411 rows - `cens_91down` — 193 rows - `cens_91dper` — 380 rows - `cens_91eact` — 3,804 rows - `cens_91einact` — 4,046 rows - `cens_91hnnch` — 148 rows - `cens_91hpnper` — 168 rows - `cens_91hpwstan` — 1,766 rows - `cens_91sbirth` — 7,936 rows - `cens_91sctz` — 64.1K rows - `cens_91smsta` — 32.9K rows - `cens_91typb` — 32 rows - `cens_91typl` — 63 rows - `cens_hnaisco` — 1,216 rows - `cens_hncas` — 10.6K rows - `cens_hnctz` — 10.6K rows - `cens_hndwnr` — 432 rows - `cens_hndwsize` — 353 rows - `cens_hnelev` — 9,678 rows - `cens_hnmga` — 3,870 rows - `cli_gge_foot` — 11K rows - `cli_iad_loss` — 5,087 rows - `crim_crt_case` — 9,054 rows - `crim_crt_case22` — 1,794 rows - `crim_crt_per` — 2,000 rows - `crim_gen` — 3,532 rows - `crim_hist` — 1,014 rows - `crim_hom_city` — 474 rows - `crim_hom_ocit` — 923 rows - `crim_hom_soff` — 35.7K rows - `crim_hom_vage` — 22K rows - `crim_hom_vcit` — 711 rows - `crim_hom_vrel` — 5,350 rows - `crim_just_age` — 9,608 rows - `crim_just_bri` — 3,754 rows - `crim_just_ctz` — 7,801 rows - `crim_just_job` — 11.5K rows - `crim_just_sex` — 9,162 rows - `crim_off_cat` — 21K rows - `crim_plce` — 447 rows - `crim_pris_age` — 11.2K rows - `crim_pris_cap` — 2,406 rows - `crim_pris_ctz` — 3,682 rows - `crim_pris_off` — 8,927 rows - `crim_pris_pop` — 532 rows - `crim_pris_tri` — 3,008 rows - `crim_smu_sctz` — 1,113 rows - `crim_smu_sex` — 4,164 rows - `crim_thb_expsxa` — 9,554 rows - `crim_thb_sex` — 7,298 rows - `crim_thb_vctz` — 2,335 rows - `crim_thb_vctzsex` — 2,478 rows - `crim_thb_vexp` — 2,470 rows - `crim_thb_vsage` — 2,798 rows - `cult_emp_age` — 7,070 rows - `cult_emp_art` — 532 rows - `cult_emp_artpc` — 6,240 rows - `cult_emp_edu` — 4,172 rows - `cult_emp_n2` — 5,362 rows - `cult_emp_reg` — 8,950 rows - `cult_emp_sex` — 3,204 rows - `cult_emp_wsta` — 12.5K rows - `cult_ent_num` — 13.4K rows - `cult_ent_val` — 25.1K rows - `cult_pcs_bka` — 3,688 rows - `cult_pcs_bke` — 1,799 rows - `cult_pcs_caa` — 12.3K rows - `cult_pcs_cae` — 5,941 rows - `cult_pcs_hbs` — 1,517 rows - `cult_pcs_nwa` — 1,977 rows - `cult_pcs_nwe` — 965 rows - `cult_pcs_nws` — 781 rows - `cult_pcs_qnt` — 527 rows - `demo_divcb` — 6,613 rows - `demo_divcz` — 14.2K rows - `demo_fabort` — 8,150 rows - `demo_fabortind` — 536 rows - `demo_fabortord` — 25.3K rows - `demo_faeduc` — 85.2K rows - `demo_faemplc` — 55.3K rows - `demo_find` — 17.9K rows - `demo_fmonth` — 30.7K rows - `demo_frate` — 92.5K rows - `demo_fweight` — 65.3K rows - `demo_gind` — 65.9K rows - `demo_marcb` — 9,575 rows - `demo_marcz` — 17.7K rows - `demo_mexrt` — 2,393 rows - `demo_mfoet` — 5,529 rows - `demo_minf` — 11.4K rows - `demo_minfedu` — 2,620 rows - `demo_minfind` — 11.1K rows - `demo_minfs` — 12.5K rows - `demo_mmonth` — 29.9K rows - `demo_ndivdur` — 52.4K rows - `demo_ndivind` — 7,467 rows - `demo_nind` — 13.4K rows - `demo_nmsta` — 17.7K rows - `demo_nmsta2` — 11.2K rows - `demo_pjanbroad` — 39.3K rows - `demo_popep` — 50 rows - `demo_popmdctb` — 2,838 rows - `demo_popmdctz` — 2,884 rows - `demo_poppcctb` — 76.9K rows - `demo_poppcctz` — 77.4K rows - `demo_r_births` — 60.7K rows - `demo_r_d3area` — 70.8K rows - `demo_r_d3dens` — 57.1K rows - `demo_r_deaths` — 60.6K rows - `demo_r_find2` — 40.9K rows - `demo_r_find3` — 65.1K rows - `demo_r_minf` — 12.7K rows - `demo_r_minfind` — 13.6K rows - `demo_urespop` — 357 rows - `dsb_icteg01` — 726 rows - `dsb_icteg02` — 607 rows - `dsb_icteg03` — 656 rows - `dsb_icteg04` — 737 rows - `dsb_icteg05` — 686 rows - `dsb_ictiu01` — 757 rows - `dsb_ictiu02` — 753 rows - `dsb_ictiu03` — 656 rows - `dsb_ictiu04` — 740 rows - `dsb_ictiu05` — 713 rows - `dsb_ictiu06` — 733 rows - `dsb_ictiu07` — 722 rows - `dsb_ictiu08` — 728 rows - `dsb_ictiu09` — 660 rows - `dsb_sprex01` — 20.6K rows - `dsb_sprex02` — 19.8K rows - `dsb_sprex03` — 22.7K rows - `dsb_sprpb01` — 1,096 rows - `dsb_sprpb02` — 1,317 rows - `dt_cpa_3d50` — 1,936 rows - `dt_cpa_3d51_03` — 39.6K rows - `dt_cpa_3d51_98` — 6,608 rows - `dt_cpa_3d52` — 41.5K rows - `dt_cpa_n45_r2` — 4,033 rows - `dt_cpa_n47_r2` — 20.5K rows - `dt_oth_3d51_03` — 906 rows - `dt_oth_3d52_03` — 3,317 rows - `dt_oth_3d52_spa` — 8,704 rows - `dt_oth_n47_r2` — 1,890 rows - `dt_turn_n45_r2` — 1,465 rows - `dt_turn_n46_r2` — 11.1K rows - `dt_turn_n47_r2` — 5,808 rows - `earn_gr_empisco` — 8,704 rows - `earn_gr_empnac2` — 28.6K rows - `earn_gr_empnace` — 24.4K rows - `earn_gr_goeg` — 93 rows - `earn_gr_gpg` — 1,503 rows - `earn_gr_gpgr2` — 10.3K rows - `earn_gr_gpgr2ag` — 2,791 rows - `earn_gr_gpgr2ct` — 902 rows - `earn_gr_gpgr2wt` — 805 rows - `earn_gr_hgpg` — 412 rows - `earn_gr_isco` — 26.3K rows - `earn_gr_nace` — 78K rows - `earn_gr_nace2` — 86.6K rows - `earn_mw_avgr1` — 263 rows - `earn_mw_avgr2` — 1,202 rows - `earn_mw_cur` — 4,573 rows - `earn_nt_lowwtrp` — 1,558 rows - `earn_nt_netft` — 3,261 rows - `earn_nt_taxrate` — 11.4K rows - `earn_nt_taxwedge` — 892 rows - `earn_nt_unemtrp` — 838 rows - `earn_ses_actrl` — 64 rows - `earn_ses_adeci` — 136 rows - `earn_ses_agt01` — 41.6K rows - `earn_ses_agt02` — 10.9K rows - `earn_ses_agt03` — 7,775 rows - `earn_ses_agt04` — 9,191 rows - `earn_ses_agt05` — 12.5K rows - `earn_ses_agt06` — 5,825 rows - `earn_ses_agt12` — 39K rows - `earn_ses_agt13` — 51.3K rows - `earn_ses_agt14` — 36.3K rows - `earn_ses_agt15` — 33.2K rows - `earn_ses_agt16` — 44.9K rows - `earn_ses_agt17` — 60.9K rows - `earn_ses_agt18` — 38.9K rows - `earn_ses_agt19` — 60.8K rows - `earn_ses_agt20` — 82.4K rows - `earn_ses_agt21` — 54.9K rows - `earn_ses_agt22` — 52.4K rows - `earn_ses_agt23` — 68.6K rows - `earn_ses_agt24` — 94.8K rows - `earn_ses_agt25` — 58.5K rows - `earn_ses_agt26` — 37.9K rows - `earn_ses_agt27` — 51.9K rows - `earn_ses_agt28` — 34.5K rows - `earn_ses_agt29` — 32.5K rows - `earn_ses_agt30` — 42.9K rows - `earn_ses_agt31` — 59.7K rows - `earn_ses_agt32` — 37K rows - `earn_ses_agt33` — 25.1K rows - `earn_ses_agt34` — 32.6K rows - `earn_ses_agt35` — 21.6K rows - `earn_ses_agt36` — 21K rows - `earn_ses_agt37` — 27.6K rows - `earn_ses_agt38` — 37.6K rows - `earn_ses_agt39` — 23.3K rows - `earn_ses_agt40` — 8,521 rows - `earn_ses_agt41` — 10.7K rows - `earn_ses_agt42` — 7,086 rows - `earn_ses_agt43` — 6,983 rows - `earn_ses_agt44` — 9,221 rows - `earn_ses_agt45` — 12.5K rows - `earn_ses_agt46` — 7,627 rows - `earn_ses_hftpt` — 312 rows - `earn_ses_mctrl` — 66 rows - `earn_ses_mdeci` — 243 rows - `earn_ses_pub1a` — 766 rows - `earn_ses_pub1i` — 751 rows - `earn_ses_pub1n` — 2,727 rows - `earn_ses_pub1s` — 561 rows - `earn_ses_pub1t` — 564 rows - `earn_ses_pub2a` — 2,294 rows - `earn_ses_pub2i` — 2,257 rows - `earn_ses_pub2n` — 8,123 rows - `earn_ses_pub2s` — 1,677 rows - `earn_ses_pub2t` — 1,686 rows - `earn_ses06_01` — 16.4K rows - `earn_ses06_02` — 18K rows - `earn_ses06_03` — 11.2K rows - `earn_ses06_04` — 19.2K rows - `earn_ses06_05` — 23.4K rows - `earn_ses06_12` — 65.2K rows - `earn_ses06_13` — 93.5K rows - `earn_ses06_14` — 54.4K rows - `earn_ses06_15` — 51.8K rows - `earn_ses06_16` — 97.3K rows - `earn_ses06_18` — 33.5K rows - `earn_ses06_21` — 81.3K rows - `earn_ses06_22` — 80K rows - `earn_ses06_25` — 50.5K rows - `earn_ses06_26` — 69.4K rows - `earn_ses06_27` — 90.2K rows - `earn_ses06_28` — 51.3K rows - `earn_ses06_29` — 50K rows - `earn_ses06_30` — 96.8K rows - `earn_ses06_32` — 31.8K rows - `earn_ses06_33` — 41.3K rows - `earn_ses06_34` — 53.9K rows - `earn_ses06_35` — 30.7K rows - `earn_ses06_36` — 29.8K rows - `earn_ses06_37` — 57.8K rows - `earn_ses06_38` — 70.3K rows … and 4,926 more — see manifest.json ## 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. - `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://ec.europa.eu/eurostat/web/main) 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.