{"id":4331,"date":"2026-07-17T12:10:36","date_gmt":"2026-07-17T09:10:36","guid":{"rendered":"https:\/\/webanalyst.ro\/?p=4331"},"modified":"2026-07-17T12:16:35","modified_gmt":"2026-07-17T09:16:35","slug":"ggsql-gramatica-graficii-in-sql","status":"publish","type":"post","link":"https:\/\/webanalyst.ro\/blog\/2026\/ggsql-gramatica-graficii-in-sql\/","title":{"rendered":"GGSQL: Gramatica Graficii \u00een SQL"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Gramatica Graficii<\/strong> (\u00een englez\u0103 <em>The Grammar of Graphics<\/em>) este un cadru teoretizat de statisticianul Leland Wilkinson \u00een 1999 care abordeaz\u0103 crearea graficelor de date \u00eentr-un mod similar cu cel \u00een care func\u021bioneaz\u0103 gramatica unei limbi vorbite.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00cen trecut <a href=\"https:\/\/webanalyst.ro\/blog\/tag\/ggplot2\/\" target=\"_blank\" rel=\"noreferrer noopener\">am scris<\/a> despre gramatica graficii \u00een limbajul <strong>R<\/strong>, primul care a adoptat-o prin libr\u0103ria <em>ggplot2<\/em>, care a tradus teoria lui Wilkinson \u00een cod. Ulterior, gramatica graficii a fost adoptat\u0103 \u0219i \u00een alte limbaje care lucreaz\u0103 cu date, precum <strong>Python<\/strong> (prin <em>plotline<\/em> sau <em>altair<\/em>), <strong>JavaScript<\/strong> (prin <em>Vega<\/em> \u0219i <em>Vega-Lite<\/em> sau chiar <em>G2<\/em> de la Alibaba) sau <strong>Julia<\/strong> (prin <em>Gadfly.jl<\/em>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e2n\u0103 nu demult, SQL-ul tradi\u021bional era considerat un limbaj rigid, destinat exclusiv manipul\u0103rii \u0219i interog\u0103rii tabelelor de date. Dac\u0103 voiai un grafic, trebuia s\u0103 extragi datele din baza de date \u0219i s\u0103 le mu\u021bi \u00een <a href=\"https:\/\/webanalyst.ro\/blog\/tag\/r\/\" target=\"_blank\" rel=\"noreferrer noopener\">R<\/a>, <a href=\"https:\/\/webanalyst.ro\/blog\/tag\/python\/\" target=\"_blank\" rel=\"noreferrer noopener\">Python<\/a> sau un instrument de raportare \u0219i vizualizare a datelor, precum <a href=\"https:\/\/webanalyst.ro\/blog\/tag\/power-bi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Power BI<\/a> sau <a href=\"https:\/\/webanalyst.ro\/blog\/sectiune\/google-data-studio\/\" target=\"_blank\" rel=\"noreferrer noopener\">Data Studio<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recent, aceast\u0103 barier\u0103 a fost spart\u0103 prin apari\u021bia unor extensii \u0219i dialecte SQL moderne care integreaz\u0103 Gramatica Graficii direct \u00een interog\u0103rile SQL. Unul dintre acestea este <strong>Malloy<\/strong>, dezvoltat ini\u021bial \u00een cadrul Google ca o alternativ\u0103 la SQL, dar care are o totu\u0219i sintax\u0103 diferit\u0103 de SQL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pentru a dezvolta vizualiz\u0103ri de date folosind un cod c\u00e2t mai apropiat de sintaxa SQL a ap\u0103rut recent <strong>ggsql<\/strong>, dezvoltat de echipa din spatele <em>ggplot2<\/em>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">ggsql &#8211; vizualiz\u0103ri din sintaxa SQL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Lansat oficial ca proiect open-source de c\u0103tre compania <strong>Posit<\/strong> (creatorii ecosistemului <em>tidyverse<\/em>, din care face parte \u0219i <em>ggplot2<\/em>, dar \u0219i ai IDE-urilor RStudio \u0219i Positron), <strong>ggsql<\/strong> este un instrument revolu\u021bionar scris \u00een <strong>Rust<\/strong>. Acesta permite combinarea interog\u0103rilor SQL cu vizualizarea declarativ\u0103 de date direct \u00een acela\u0219i script.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00cen loc s\u0103 aduc\u0103 toate datele brute \u00een memoria calculatorului t\u0103u, <strong>ggsql<\/strong> trimite agreg\u0103rile direct \u00een baza de date. Din acest motiv, este nevoie de unul dintre motoarele suportate nativ, precum <strong>DuckDB<\/strong> pentru analiz\u0103 local\u0103, <strong>PostgreSQL<\/strong> sau sau platforme mari de date ca <strong>Snowflake<\/strong> sau orice baz\u0103 de date compatibil\u0103 ODBC (<em>Open Database Connectivity<\/em>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pentru a accesa ggsql este nevoie \u0219i de un mediu de execu\u021bie (IDE), dar este bine de \u0219tiut c\u0103 editoarele moderne deja \u00eel suport\u0103:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>VS Code<\/strong> sau noul editor <strong>Positron<\/strong> (creat tot de Posit), prin instalarea extensiei oficiale <code>ggsql<\/code><\/li>\n\n\n\n<li><strong>Jupyter Notebooks<\/strong> &#8211; <code>ggsql<\/code> vine cu un kernel dedicat pentru Jupyter<\/li>\n\n\n\n<li>Alte IDE-uri care folosesc <strong>Quarto \/ R Markdown<\/strong> pentru publicarea codului sau generarea de rapoarte automate \u00een format PDF sau HTML<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"400\" src=\"https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2026\/06\/ggsql-visualization.png\" alt=\"\" class=\"wp-image-4333\" srcset=\"https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2026\/06\/ggsql-visualization.png 601w, https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2026\/06\/ggsql-visualization-300x200.png 300w, https:\/\/webanalyst.ro\/blog\/wp-content\/uploads\/2026\/06\/ggsql-visualization-150x100.png 150w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Principalele comenzi ggsql<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sintaxa <strong>ggsql<\/strong> este construit\u0103 logic sub form\u0103 de blocuri de comenzi declarative. Dup\u0103 ce ai scris interogarea SQL standard, folose\u0219ti cuv\u00e2ntul cheie <code>VISUALISE<\/code> (sau <code>VISUALIZE<\/code>), urmat de o serie de comenzi specifice Gramaticii Graficii.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Iat\u0103 cele mai importante comenzi din <code>ggsql<\/code>, grupate pe rolul lor \u00een construc\u021bia graficului:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>MAPPING<\/code> pentru definirea leg\u0103turilor<\/li>\n\n\n\n<li><code>DRAW<\/code> pentru desenarea geometriilor<\/li>\n\n\n\n<li><code>SCALE<\/code> pentru modificarea axelor \u0219i culorilor<\/li>\n\n\n\n<li><code>LABEL<\/code> penru ad\u0103ugarea de text \u0219i etichete<\/li>\n\n\n\n<li><code>FACET<\/code> pentru \u00eemp\u0103r\u021birea \u00een sub-grafice<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">ggsql 0.4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Recent, s-au lansat versiunile 0.4.0 \u0219i 0.4.1. Principalele actualiz\u0103ri aduse de acestea sunt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>vizualiz\u0103ri spa\u021biale \u0219i h\u0103r\u021bi<\/strong>, printr-un nou strat nativ numit <code>spatial<\/code>, ad\u0103ugarea setului de date \u00eencorporat <code>ggsql:world<\/code> (care con\u021bine grani\u021bele \u021b\u0103rilor la o rezolu\u021bie de 1:110m), dar \u0219i suport \u00een clauza <code>PROJECT TO<\/code> pentru proiec\u021bii de h\u0103r\u021bi (cum ar fi <code>mollweide<\/code> sau <code>orthographic<\/code>)<\/li>\n\n\n\n<li>agregare \u00een interiorul straturilor (<em><strong>in-layer aggregation<\/strong><\/em>)<\/li>\n\n\n\n<li>ad\u0103ugarea <strong>graficelor de tip radar<\/strong> \u0219i a decora\u021biunilor pentru <strong>circuite polare<\/strong><\/li>\n\n\n\n<li><strong>implementarea cititorului ADBC <\/strong>(<em>Arrow Database Connectivity<\/em>), <code>AdbcReader<\/code> <\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Motive s\u0103 utiliz\u0103m ggsql<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Principalul motiv de a folosi ggsql este eliminarea fragment\u0103rii. Datele \u0219i codul vizualiz\u0103rii tr\u0103iesc \u00een <strong>aceea\u0219i interogare<\/strong>. Dac\u0103 modifici o coloan\u0103 \u00een <code>SELECT<\/code>, graficul de mai jos se actualizeaz\u0103 instantaneu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De asemenea, este o tehnologie prietenoas\u0103 cu AI-ul, mai exact este <em>LLM-Friendly<\/em>, iar reproductibilitatea este excelent\u0103.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ggsql<\/strong> a fost anun\u021bat \u00een aceast\u0103 prim\u0103var\u0103, dar \u00eentre timp a primit c\u00e2teva actualiz\u0103ri. Ini\u021bial, este \u00een faz\u0103 alfa, dar avem toate motivele s\u0103 a\u0219tept\u0103m \u0219i urm\u0103toarele nout\u0103\u021bi de la cei care se ocup\u0103 de acesta.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gramatica Graficii (\u00een englez\u0103 The Grammar of Graphics) este un cadru teoretizat de statisticianul Leland Wilkinson \u00een 1999 care abordeaz\u0103 crearea graficelor de date \u00eentr-un mod similar cu cel \u00een care func\u021bioneaz\u0103 gramatica unei limbi vorbite. \u00cen trecut am scris despre gramatica graficii \u00een limbajul R, primul care a adoptat-o prin libr\u0103ria ggplot2, care a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4332,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,11],"tags":[922,850,992],"class_list":["post-4331","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","category-noutati","tag-dataviz","tag-ggplot2","tag-sql"],"_links":{"self":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts\/4331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/comments?post=4331"}],"version-history":[{"count":4,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts\/4331\/revisions"}],"predecessor-version":[{"id":4394,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/posts\/4331\/revisions\/4394"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/media\/4332"}],"wp:attachment":[{"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/media?parent=4331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/categories?post=4331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webanalyst.ro\/blog\/wp-json\/wp\/v2\/tags?post=4331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}