dbplyr este un pachet extrem de puternic din ecosistemul tidyverse al limbajului R. Acesta permite folosirea sintaxei dplyr direct pe baze de date. Utilizatorul poate să scrie codul în limbajul R (filter, select, mutate, group_by, summarise etc.), iar dbplyr îl traduce automat în SQL și îl rulează în baza de date, fără să încarci datele în memorie.
Inițial, tidyverse a avut un singur pachet pentru manipularea și curățarea datelor, numir dplyr, dar în iunie 2017 s-a lansat dbplyr pentru cei care utilizează baze de date SQL. Anul acesta am scris un alt articol despre istoria și noutățile din dplyr.
Înapoi la pachetul folosit pentru SQL, acesta și-a lansat recent ultima versiune, dbplyr 2.6.0, care aduce noi tipuri de conexiuni prin ADBC și JDBC, suport complet pentru IBM DB2 și noi funcții SQL. le vom detalia pe toate în continuarea acestui articol.
R sau SQL
Utilizatorul scrie codul exclusiv în R, dar dbplyr îți oferă flexibilitatea totală de a combina și cu SQL, dacă acesta are nevoie.
Dacă se optează pentru interogări în SQL, dbplyr și pachetul părinte DBI îți permit să faci acest lucru în două moduri:
- Sintaxă mixtă (Funcții SQL în R): Poți folosi funcții native din SQL direct în interiorul codului tău de R. Dacă baza ta de date are o funcție specială numită
CONCAT_WS, o poți scrie direct în R, iardbplyro va trimite exact așa către server:date_baza %>% mutate(nume_complet = CONCAT_WS("-", nume, prenume)) - Interogare SQL pură: Poți folosi funcția
dbGetQuery()sautbl(conexiune, sql("SELECT * FROM..."))pentru a rula direct o interogare SQL clasică scrisă de la zero de către utilizator.
Scurt istoric al dbplyr
Istoria pachetului dbplyr este povestea modului în care comunitatea R a reușit să unifice analiza de date locale cu cea de pe servere masive.
Să vedem cele mai importante etape din istoria pachetului SQL în R:
- Iunie 2017 –
dbplyreste lansat ca pachet de sine stătător, cu versiunea 1.0.0; prin această schimbare, pachetul principal (dplyr) a devenit mai ușor și mai simplu de întreținut, iar ambele pachete au putut fi dezvoltate mai rapid. Filozofia din spatele ecosistemuluitidyverseeste ca fiecare pachet să facă un singur lucru, dar să îl facă perfect. - 2018 și 2019 – s-au lansat versiunile dbplyr 1.2.0 și 1.4.0, care au pus accentul pe corectitudinea traducerii din R în SQL; de asemenea, a fost îmbunătățit comportamentul funcției
window functions(cum ar filead(),lag(),cumsum()) pentru a genera clauze SQL de tipulOVER (PARTITION BY...)extrem de precise. - Noiembrie 2020 – optimizatorul SQL a fost rescris în versiunea 2.0.0; astfel, pachetul a devenit mult mai inteligent în a evita interogările imbricate inutile (subqueries), iar codul SQL generat a devenit curat, scurt și lizibil.
- Ianuarie 2023 – apare versiunea 2.3.0, cu suport pentru argumentul
.by(grupare din mers), o preluare a uneia dintre cele mai mari noutăți dindplyr 1.1.0; aceeași versiune a introdus clauzele CTE (Common Table Expressions), ca să nu mai fie nevoie să scrie subqueries în subqueries, a început să folosească mult mai des structuri de tipulWITH tabela_temporara AS (...); nu în ultimul rând, versiunea 2.3.0 a adăugat traduceri native pentru manipularea avansată a datelor calendaristice și a timpului pentru pachetulclock. - Octombrie 2023 – versiunea 2.4.0 s-a concetrat pe optimizarea funcției
copy_to()și a tabelelor temporare, mai bune pentru funcțiile de text din pachetulsringrși pe suport complet pentru reordonarea coloanelor. - Aprilie 2024 – apare versiunea 2.5.0, care a introdus standardul simplu:
tbl(con, I("schema.tabel")), undeI()îi spune pachetului să trateze string-ul exact așa cum este scris. - Iunie 2026 – apare 2.6.0, cea mai recentă versiune de
dbplyr, care se concentrează pe interfețe moderne de date și stabilitate, după cum vom vedea în continuare.
Noi tipuri de conexiuni: ADBC și JDBC
Până acum, standardul de aur pentru conectarea la baze de date în R prin dbplyr era pachetul odbc. Versiunea 2.6.0 adaugă suport nativ pentru:
- ADBC (Arrow Database Connectivity): O tehnologie extrem de rapidă bazată pe Apache Arrow, care eficientizează masiv transferul de date masive (bulk data transfer) între server și R.
- JDBC (Java Database Connectivity): Oferă o flexibilitate mai mare pentru sistemele care folosesc drivere bazate pe Java.
Suport complet pentru IBM DB2
Datorită contribuțiilor comunității, dbplyr include acum un strat complet de traducere dedicat pentru IBM DB2.
Acesta traduce corect funcțiile de concatenare (paste() devine ||), cast-urile specifice DB2, generarea de numere aleatorii (runif()), funcțiile de timp/dată (pachetul clock) și agregatele statistice complexe.
Funcția nouă last_sql()
De multe ori, când rulai o comandă precum collect() sau compute() și primeai o eroare direct din baza de date, era greu să vezi ce anume a generat acea eroare fără să rescrii codul pentru show_query().
Noua funcție last_sql() îți returnează instant textul ultimei interogări SQL generate de dbplyr, făcând debugging-ul mult mai simplu și rapid.
Opțiunea copy = "inline"
În mod normal, dacă voiai să faci un join între un tabel mic local (din memoria R) și un tabel uriaș de pe server, dbplyr trebuia să creeze un tabel temporar direct pe server.
Cu noua opțiune copy = "inline", dbplyr poate injecta datele locale direct în textul interogării SQL (folosind clauze de tip VALUES), fără a mai fi nevoie să ai drepturi de scriere pentru a crea tabele temporare pe serverul bazei de date.
Decuplare mai bună a dialectelor SQL
S-a introdus o nouă componentă internă numită sql_dialect(), care separă logica conexiunii fizice de dialectul SQL folosit. Acest lucru permite dezvoltatorilor de pachete R să creeze mult mai ușor extensii adaptate pentru baze de date personalizate sau mai puțin populare.
Aceeași funcție facilitează integrarea cu noile conexiuni ultra-rapide bazate pe Apache Arrow (ADBC). Driverul Arrow doar transportă datele, iar sql_dialect() se asigură că interogările transmise sunt scrise în limba corectă a bazei de date țintă.
dbplyr 2.6.0 a venit cu multe funcționalități noi pentru utilizatori și pentru că multe bug-uri istorice din versiunile anteroiare ale pachetului au fost curățate rapid în această versiune cu ajutorul instrumentelor de inteligență artificială pentru cod.


