R SQL ACCESS : jointures, update

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Jérémy Jachacz
Messages : 153
Enregistré le : 15 Avr 2014, 12:56

R SQL ACCESS : jointures, update

Messagepar Jérémy Jachacz » 18 Juil 2019, 05:55

Bonjour,

Je travaille sur une base ACCESS en local je cherche à faire du nettoyage, en créant un code réutilisable sur cette "base".

Oui, "base" car le fichier access contient qu'une seule table de 36K lignes et une centaine de colonnes, autrement dit c'est un tableau excel dans access. Tout ceci est en cours d'amélioration, pour le moment je dois faire avec ça...

Pas de problème pour me connecter la base, l'importer dans R, nettoyer les colonnes qui existent puis traduire en SQL pour update la base directement. (étant en phase de test je travaille sur une copie)

Le problème c'est que j'ai un champ à corriger qui nécessite de croiser la base avec d'autres tableaux..
Je fais ma tambouille avec R (data.table etc.. ) et ensuite je converti en SQL mais pour update un nouveau champ qui ne dépend pas uniquement de ma base c'est pas simple, on peut pas mettre à jour par colonne...

J'ai testé donc plusieurs solutions (toutes à partir de R uniquement) :

1. faire mon nettoyage/correction dans R et réexporter ma table en fichier Access en gardant les infos de la base telle que les description des champs..

2. Ajouter une table temporaire dans le fichier access et pouvoir faire une jointure pour avoir ma base + nouvelles colonnes, je ne suis pas sur de pouvoir garder les metadonnées d’access en faisant ça..

3. Créer via Alter table cette nouvelle colonne initialisée NA dans Access, puis via un update...

4. Pouvoir update ma table en faisant une jointure avec un DF (sens variable de R)

Si vous avez d’autres idées/solutions ?
Merci
--
Statisticien (69)

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: R SQL ACCESS : jointures, update

Messagepar Serge Rapenne » 18 Juil 2019, 07:28

Bonjour,

Juste une piste à creuser ! A priori, le package dbplyr permet de "monter" une table de base de données en temps que table R et sauf erreur de ma part, les modifications sur cette table virtuelle sont traduites en action sur la table de la base, dbplyr s'occupant de traduire les commandes R en requête SQL de manière transparente. Je n'ai jamais testé cela mais je pense que ça pourrait être une solution, les commandes comme merge ou les "join" de dplyr devrait alors pourvoir faire ce que tu souhaites.

Serge

Jérémy Jachacz
Messages : 153
Enregistré le : 15 Avr 2014, 12:56

Re: R SQL ACCESS : jointures, update

Messagepar Jérémy Jachacz » 18 Juil 2019, 08:06

Bonjour,

Merci pour cette piste, j'ai avancé de mon côté aussi mais c'est pas encore ça...

Je vais creuser ce package !

Bonne journée
Jérémy
Statisticien (69)

Jérémy Jachacz
Messages : 153
Enregistré le : 15 Avr 2014, 12:56

Re: R SQL ACCESS : jointures, update

Messagepar Jérémy Jachacz » 18 Juil 2019, 14:03

Si quelqu'un à le même souci, voici la solution (que je pense pas optimale) que j'ai trouvé

comme le SQL ne permet pas de mettre à jour une colonne comme on pourrait le faire dans R,
j'ai itéré sur les levels du factor de ma colonne à mettre à jour :

Code : Tout sélectionner


 ## nb de modalité dans TYPE_SURV
loop_len <- length(unique(dfR$TYPE_ZONE_reel))

for(i in 1:loop_len){
                # modalite_A_update = modalite mise à jour
               modalite_A_update <-  unique(dfR$TYPE_ZONE_reel)[i]
               
                # on recupere les numéros de ligne qui necessitent une MAJ
                ID_ligne_a_update <- dfR[TYPE_ZONE_reel==modalite_A_update,'ID_auto']
               
                # on les mets au format (x,x,x) pour WHERE... IN ()
                ID_ligne_a_update <- paste0("(",paste(as.numeric(unlist(ID_ligne_a_update)), collapse = ","),")")
               
                # si modalite est NA on mets pas à jour               
                if(is.na(modalite_A_update)){next}
               
                sql <- paste0("UPDATE table
                         SET TYPE_ZONE_reel = '",modalite_A_update,"'
                                  WHERE table.ID_auto IN ",ID_ligne_a_update,";")

                resultset <- sqlQuery(channel,sql)
                print(i)
               
              }

Statisticien (69)

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: R SQL ACCESS : jointures, update

Messagepar Mickael Canouil » 22 Juil 2019, 11:00

Bonjour,

R studio a une page plutôt complète sur les base de données et R : https://db.rstudio.com/

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron