Objectif

Actualiser les lots de données suivants dans la base de données PostgreSQL de la plate-forme SIGLoire :

  • n_commune_ign_r52
  • n_departement_ign_r52
  • n_epci_zsup_r52 ?
  • n_region_ign_r52

Chargement des librairies

library(datalibaba)
library(yaml)

Configuration

Chargement des variables

À faire impérativement : configurer ou vérifier les paramètres du fichier config.yml avant chargement.

Les paramètres suivants sont ensuite récupérés :

  • chemin d’accès du fichier GPKG source
  • base de données de travail : chargement des tables dans les bases referentiels et si_eau
  • schéma de travail
  • clé primaire
  • rôle de connexion
  • emprise des des lots de données : ici région Pays de la Loire
# Charger le fichier YAML
config <- yaml::read_yaml("../config.yml")

# Récupérer les variables
database <- config$database
schema_name <- config$schema_name
role <- config$role
emprise <- config$emprise

Édition du millésime

Récupération du mois et de l’année de l’édition d’ADMIN EXPRESS téléchargée à partir du nom du fichier GPKG :

# Extraire la date après '-ED' dans le nom de fichier
date_part <- sub(".*-ED([0-9]{4}-[0-9]{2}-[0-9]{2})\\.gpkg$", "\\1", 
                 basename(fichier_gpkg))

# Définir la date
date <- lubridate::ymd(date_part)

# Extraire le mois et l'année
edition <- format(date, "%B %Y")

Chargement des lots de données régionaux

# Liste des entités concernées
entities <- c("commune", "departement", "epci", "region")

# Liste pour stocker les dataframes
tables_list <- list()

for (entity in entities) {
  table_name <- paste0("n_", entity, "_exp_", emprise)
  nom_var <- paste0("n_", entity, "_exp_", emprise)
  
  tryCatch({
    # Filtrage dynamique avec .data[[...]] et affectation dans l'environnement global
    df <- datalibaba::importer_data(
      table = table_name,
      schema = schema_name,
      db = database,
      user = role)
    
    # Stockage dans la liste sous le nom final
    tables_list[[nom_var]] <- df
    # Création en objet dans l’environnement global
    assign(nom_var, df, envir = .GlobalEnv)
    
    message(sprintf("DataFrame créé : %s", nom_var))
  },
  error = function(e) {
    message(sprintf("Erreur lors du chargement ou filtrage de la table '%s' : %s", 
                    table_name, e$message))
  })
}

Publication dans la base de données de SIGLoire

@todo : - utiliser l’option truncate du package datalibaba pour mettre à jour les données sans toucher à la structure des tables - ajouter une étape intermédiaire pour adapter les données de la base DREAL (ADMIN EXPRESS v4)