(Acest articol a fost publicat pentru prima dată pe Boyd Tarlintonși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
R oferă facilități excelente pentru a lucra interactiv cu bazele de date SQL pe un server la distanță. Devine mai dificil să faceți acest lucru într-un document de quarto de sine stătător, mai ales dacă doriți să îl puteți reda fără a intra în erori. Din fericire, există modalități în jurul acestor provocări.
Primul pas este stabilirea unei conexiuni SSH cu serverul de la distanță pe care se execută baza de date, permițându -vă să interacționați cu baza de date ca și cum ar fi funcționat pe propriul dispozitiv. Într -o sesiune interactivă puteți utiliza următorul cod pentru a stabili o conexiune SSH și a deschide un tunel. ssh_tunnel Funcția va rula la nesfârșit, lăsându -vă incapabil să executați un alt cod, dar puteți deschide o a doua sesiune R și puteți comunica cu baza de date în acea a doua sesiune.
```{r}
session <- ssh::ssh_connect("(email protected)")
ssh::ssh_tunnel(session, port = 3305,
target = "localhost:3306")
```
În exemplul de mai sus, cartizăm portul 3306 pe serverul de la distanță (portul implicit pentru MySQL) către portul 3305 pe mașina noastră locală. De multe ori veți dori să utilizați același port pe mașina locală, dar consider că este mai ușor să urmăriți exemple în care se folosesc valori diferite.
Într -un document quarto, va trebui să rulați tunelul SSH în fundal. Acest lucru este ușor cu callr pachet. Exemplul de mai jos va rula tunelul SSH într -un proces de fundal separat.
```{r}
rbg <- callr::r_bg(() {
session <- ssh::ssh_connect("(email protected)")
ssh::ssh_tunnel(session, port = 3305,
target = "localhost:3306")
})
```
Acum puteți deschide o conexiune la baza de date ca și cum ar fi funcționat pe mașina dvs. locală pe portul 3305. Având în vedere că tunelul SSH este deschis într -un proces separat, de multe ori constat că dacă încercați să vă conectați la baza de date
Imediat după deschiderea tunelului, veți întâlni o eroare. Pentru a preveni acest lucru, folosesc Sys.sleep() Pentru a adăuga o întârziere și a permite tunelului SSH să termine conectarea înainte de a stabili conexiunea la baza de date.
Este cel mai ușor și cel mai sigur să gestionați conexiunile bazei de date cu un fișier de configurare. De obicei, acestea sunt stocate într-un director de utilizator, dar prefer să le creez pe bază de proiect.
(groupname) database="mydatabase" host="localhost" port="3305" user="username" password="mypassword"
Puteți utiliza configurarea fișierului A Conf ca mai sus pentru a vă conecta la baza de date.
```{r}
con <- DBI::dbConnect(RMySQL::MySQL(),
group = "groupname",
default.file = ".my.cnf")
```
Acum puteți accesa baza de date folosind DBI În R.
Dacă sunteți deja un utilizator SQL experimentat, puteți scrie SQL direct în Quarto folosind conexiunea stabilită. Capacitatea de a comuta între R, Python și chiar Julia este comercializată destul de puternic de către echipa Posit, în timp ce această funcționalitate SQL pare mult mai obscură.
```{sql}
#| connection: "con"
select * from mytable;
```
Puteți chiar ieși dintr -o interogare SQL către un obiect R, în acest exemplu numit dfpermițându -vă să integrați perfect interogările SQL și codul R.
```{sql}
#| connection: "con"
#| output.var: "df"
select * from mytable;
```
Acum ar trebui să fiți setat să întrebați cu încredere.
