Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions datasources.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -612,8 +612,7 @@ domains:
format: json
extract_params:
maxResult: 10000
startPeriod: "2009-01-01"
endPeriod: "2025-10-01"
TIME_PERIOD: 2022
GEO: ["COM","DEP","REG"]
RP_MEASURE: ["POP","SUP"]
OCS: "_T"
Expand Down
37 changes: 34 additions & 3 deletions dbt_odis/models/bronze/_odis_bronze__models.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3702,6 +3702,7 @@ models:

- name: presentation_page_population_communes

# Population
- name: population_categorie_socio_pro
description: Extraction du JSON source CSP par population
columns:
Expand Down Expand Up @@ -3729,8 +3730,6 @@ models:
description: nombre mesuré du type d'habitation = appartement par zone géographique et par année
data_type: text

# Population

- name: population_by_age
description: Répartition de la population par tranches d'âge
columns:
Expand Down Expand Up @@ -3812,7 +3811,7 @@ models:
- name: nivgeo
description: |-
Niveau de granularité géographique.
Pour ce dateset, une seul valeur possible :
Pour ce dateset, une seule valeur possible :
COM = Commune
data_type: text
- name: codgeo
Expand All @@ -3832,3 +3831,35 @@ models:
- name: nb
description: TBD
data_type: float

- name: population_population_superficie
description: |-
Extraction de fichiers JSON avec données historiques population et superficie des territoires.
columns:
- name: id
description: index
data_type: integer
- name: geo
description: |-
Union année code - type de code - code géographique.
e.g. 2025-COM-01001.
L'année correspond à l'année de définition du code géographique par l'insee.
data_type: text
- name: ocs
description: |-
Catégorie du logement (seulement "_T", pour total).
data_type: text
- name: freq
description: Intervalle de temps séparant deux observations.
data_type: integer
- name: rp_measure
description: Indicateur d'intérêt.
data_type: text
- name: time_period
description: |-
Période ou point dans le temps auquel l'observation se réfère effectivement.
data_type: text
- name: measure_value
description: |-
Valeur de l'indicateur d'intérêt.
data_type: text
4 changes: 4 additions & 0 deletions dbt_odis/models/bronze/_odis_bronze__sources.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,10 @@ sources:
description: Source CSV
loaded_at_field: created_at

- name: population_population_superficie
description: Source JSON, superficie et population associées aux codes geo (COM, DEP, REG) et années de mesure.
loaded_at_field: created_at

- name: population_taux_pauvrete_communes_filo2021_disp_pauvres_com
description: Source CSV, taux de pauvrete au niveau de la commune par seuil
loaded_at_field: created_at
Expand Down
21 changes: 21 additions & 0 deletions dbt_odis/models/bronze/population_population_superficie.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{{ config(
tags = ['bronze', 'population'],
alias = 'vw_population_population_superficie'
) }}

with population_superficie as
(
select
id,
(data::jsonb)->'dimensions'->>'GEO'::text as geo,
(data::jsonb)->'dimensions'->>'OCS'::text as ocs,
(data::jsonb)->'dimensions'->>'FREQ'::text as freq,
(data::jsonb)->'dimensions'->>'RP_MEASURE'::text as rp_measure,
(data::jsonb)->'dimensions'->>'TIME_PERIOD'::text as time_period,
(data::jsonb)->'measures'->'OBS_VALUE_NIVEAU'->>'value'::text as measure_value

from {{ source('bronze', 'population_population_superficie') }}

)

select * from population_superficie
14 changes: 14 additions & 0 deletions dbt_odis/models/gold/_odis_gold__models.yml
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,7 @@ models:
- name: f90p
description: population de femmes de 90 ou plus
data_type: numeric

- name: gold_services
description: Table recensant les nombres de services identifiés d'une zone géographique identifiée
columns:
Expand Down Expand Up @@ -503,3 +504,16 @@ models:
description: Nombre de restaurants ou restauration rapide dans la zone géographique identifiée
data_type: double precision
quote: true

- name: vw_population_densite
description: Densité de population associée aux codes géographiques (communes, départements, régions), par année.
columns:
- name: codegeo
description: code géographique (seulement COM, DEP, REGION).
data_type: text
- name: year
description: année de la dernière mesure.
data_type: text
- name: densite
description: densité de population, nombre d'habitants au kilomètre carré.
data_type: numeric
4 changes: 4 additions & 0 deletions dbt_odis/models/gold/_odis_gold__sources.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,7 @@ sources:
description: Table contenant
loaded_at_field: created_at

- name: vw_population_population_superficie_stg
description: Table contenant population et superficie par code géographique et année.
loaded_at_field: created_at

19 changes: 19 additions & 0 deletions dbt_odis/models/gold/gold_population_densite.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{{ config(
tags=['gold', 'population'],
alias='vw_population_densite'
) }}

with densite as (
select
-- ajout du prefix 'reg' pour les régions, pour les differencier des DEP
case
when codegeo_type = 'REG' then concat('reg', codegeo) else codegeo end
as codegeo,
"year",
-- densite au km2, mais superficie exprimee en hectares
cast(round(population / nullif(superficie * 1e-2, 0), 0) as int) as densite
from {{ ref('stg_population_population_superficie') }}
where "year" = '2022'
)

select * from densite
22 changes: 22 additions & 0 deletions dbt_odis/models/silver/_odis_silver__models.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1054,6 +1054,7 @@ models:
- name: places
description: nombre de places dans la structure d'accueil
data_type: integer

- name: silver_services
description: nombre de services totaux par zone géographique, granularité fine au niveau du code INSEE, les indicateurs ne concernent que certains types de services
columns:
Expand Down Expand Up @@ -1084,3 +1085,24 @@ models:
- name: code_geo
description: Code INSEE officiel pour les 3 niveaux géographiques
data_type: text

- name: vw_population_population_superficie_stg
description: population et superficie par codegeo et année
columns:
- name: codegeo_year
description: Année d'établissement du codegeo.
data_type: text
- name: codegeo_type
description: Type de code géographique ("COM", "DEP" ou "REG").
data_type: text
- name: codegeo
description: Code géographique.
data_type: text
- name: year
description: Année de la mesure.
data_type: text
- name: population
description: Population en nombre d'habitants.
data_type: integer
- name: superficie
description: Superficie en hectares.
8 changes: 5 additions & 3 deletions dbt_odis/models/silver/_odis_silver__sources.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,10 @@ sources:
description: View contenant
loaded_at_field: created_at



- name: vw_population_categorie_socio_pro
description: View contenant les informations de références des communes
loaded_at_field: created_at
loaded_at_field: created_at

- name: vw_population_population_superficie
description: Vue contenant une mesure de recensement (superficie ou population) associée aux codes géographiques.
loaded_at_field: created_at
28 changes: 28 additions & 0 deletions dbt_odis/models/silver/stg_population_population_superficie.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{{ config(
tags=['silver', 'population'],
alias='vw_population_population_superficie_stg',
materialized='view'
) }}

with pivot_pop_sup as
(
select
split_part("geo", '-', 1) as codegeo_year,
split_part("geo", '-', 2) as codegeo_type, -- REG, COM, DEP, etc.
split_part("geo", '-', 3) as codegeo,
time_period as "year",
-- pivot population et superficie
cast(max(case when rp_measure = 'POP' then split_part(measure_value, '.', 1) end) as int) as population,
cast(max(case when rp_measure = 'SUP' then split_part(measure_value, '.', 1) end) as int) as superficie
from {{ ref('population_population_superficie') }}
-- filtres presents dans datasource.yml, mais explicites ici pour clarte
where split_part("geo", '-', 2) in ('COM', 'REG', 'DEP')
and ocs = '_T'
group by
split_part(geo, '-', 1),
split_part(geo, '-', 2),
split_part(geo, '-', 3),
time_period
)

select * from pivot_pop_sup
Loading