{"id":29603,"date":"2024-09-13T16:03:27","date_gmt":"2024-09-13T14:03:27","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=29603"},"modified":"2024-09-13T16:40:14","modified_gmt":"2024-09-13T14:40:14","slug":"git-like-dremio-minio-apache-iceberg-e-project-nessie","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/","title":{"rendered":"Gestione git-like nei Data Lakehouse con tecnologie open source"},"content":{"rendered":"\n<p>Nel mondo dello sviluppo, git \u00e8 un elemento imprescindibile che ci permette di gestire il codice in maniera sicura e collaborativa, permettendo di apportare modifiche allo stesso senza causare problemi ad ambienti di produzione. <\/p>\n\n\n\n<p>Il codice principale \u00e8 presente nel branch main. Possiamo creare poi dei branch diversi, a partire dal main, sui quali apportare delle modifiche, che verranno salvate sugli stessi attraverso dei commit. Solitamente il branch main \u00e8 quello collegato ai deployment che avvengono sugli ambienti di produzione. Una volta che le modifiche sono pronte per andare in produzione, a seguito di una fase di review e di una fase di test, sar\u00e0 possibile effettuare una merge request del nuovo branch verso il main. A questo punto le modifiche saranno presenti nel branch main, dal quale possiamo effettuare un nuovo deployment che conterr\u00e0 il codice aggiornato sull\u2019ambiente target.<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"911\" height=\"594\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/prima-immagine-Lorenzo-Pasco.png\" alt=\"\" class=\"wp-image-29604\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/prima-immagine-Lorenzo-Pasco.png 911w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/prima-immagine-Lorenzo-Pasco-300x196.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/prima-immagine-Lorenzo-Pasco-768x501.png 768w\" sizes=\"auto, (max-width: 911px) 100vw, 911px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-approccio-git-like-in-ambito-data\">Approccio Git-like in ambito Data<\/h2>\n\n\n\n<p>Sarebbe interessante portare gli stessi concetti anche in ambito Data: prelevare i dati con la pipeline dalle sorgenti, inserirli in un branch dedicato e a seguito dell&#8217;esecuzione positiva di alcuni test effettuare il merge dei dati aggiornati sul branch principale cos\u00ec da poter essere acceduti in produzione. E se dovessimo accorgerci di alcune incongruenze quando ormai \u00e8 stato fatto il merge? Ci comportiamo come nello sviluppo: con un rollback al commit precedente, o comunque all&#8217;ultimo momento in cui i dati erano corretti.<\/p>\n\n\n\n<p>Proviamo dunque a vedere come raggiungere questo scopo sfruttando soluzioni open source. Come primo tassello occorrer\u00e0 il sistema su cui salvare fisicamente i dati. In questo caso utilizziamo MinIO, un object storage che espone le API di S3 e altamente performante. <\/p>\n\n\n\n<p>Per ottenere le funzionalit\u00e0 git-like occorrer\u00e0 effettuare transazioni ACID sull&#8217;object storage, che di sua natura non offre, e questo viene fornito grazie ad un table format che attraverso la gestione dei metadati consente di garantire questa propriet\u00e0. In questo caso il table format scelto \u00e8 Apache Iceberg, anch&#8217;esso open source. Un table format, tuttavia, mantiene le informazioni sulla singola tabella. Per avere una vera esperienza git-like vorremmo poter gestire pi\u00f9 tabelle contemporaneamente. Questo viene garantito grazie ad un table repository, che riesce ad avere contezza di tutte le tabelle da gestire e che mantiene il puntatore all&#8217;ultima versione dei metadati su cui debbano avvenire scritture o letture. Ecco che corre in nostro soccorso Project Nessie, un table repository open source che offre un&#8217;esperienza git-like sui dati. <\/p>\n\n\n\n<p>Infine, occorre uno strumento con il quale poter accedere i dati presenti nel data lakehouse e dal quale poter creare delle viste utili per gli scopi finali, come ad esempio Dremio. Andiamo dunque a vedere nel dettaglio ogni singolo layer descritto in precedenza che comporr\u00e0 il Data Lakehouse con funzionalit\u00e0 git.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-object-storage\">Object Storage<\/h3>\n\n\n\n<p>L&#8217;object storage \u00e8 il sistema che permette di salvare grandi quantit\u00e0 di dati non strutturati al suo interno. Corrisponde in questo caso al data lake, ed i dati vi sono salvati sottoforma di oggetti. Il data lake offre la possibilit\u00e0 di immagazzinare grandi quantit\u00e0 di dati non strutturati, a differenza del data warehouse nel quale i dati salvati hanno una struttura ben definita. Tuttavia la caratteristica di salvare dati non strutturati pu\u00f2 rivelarsi anche uno svantaggio in quanto le performance di ricerca sono inferiori. Inoltre, l&#8217;object storage non supporta le transazioni ACID che invece sono presenti nei database relazionali tradizionali e che permettono di effettuare delle validazioni sullo schema e sulla consistenza in fase di ingestion dei dati anzich\u00e9 in fase di lettura. Oltre a questo, permettono di garantire la consistenza dei dati quando vi sono pi\u00f9 scrittori\/lettori in contemporanea su una stessa tabella.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-table-format\">Table format<\/h3>\n\n\n\n<p>Per ovviare all&#8217;assenza delle transazioni ACID, e per far diventare il data lake, un data lakehouse, \u00e8 fondamentale il table format. Esso crea un livello di astrazione sopra l&#8217;object storage che migliora le performance ed abilita le transazioni ACID direttamente sul data lake.<\/p>\n\n\n\n<p>Il table format altro non \u00e8 che un metodo per strutturare ed unificare i dati presenti nell&#8217;object storage come un&#8217;unica tabella. Risponde alla domanda &#8220;quali dati ci sono nella tabella?&#8221; e lo fa grazie a come vengono organizzati e gestiti i metadati. Questo permette agli utenti ed ai tool che interagiscono con la tabella, di farlo in maniera pi\u00f9 efficiente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-table-repository\">Table repository<\/h3>\n\n\n\n<p>Il catalogo di Iceberg mantiene il puntatore all&#8217;ultimo metadata file da poter utilizzare per le scritture e per le letture. Esso \u00e8 relativo alla sola tabella di indagine. Il table repository \u00e8 il luogo in cui vengono salvati i cataloghi Iceberg per tutte le tabelle. In questo modo, gli utenti o gli strumenti che interagiscono con le tabelle presenti nel catalogo sanno di leggere o scrivere la versione corretta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-data-access\">Data access<\/h3>\n\n\n\n<p>Il Data Access funge da ponte tra gli utenti e le sorgenti dati presenti nell&#8217;infrastruttura. La sua funzione principale \u00e8 quella di fornire un&#8217;interfaccia unificata per l&#8217;accesso ai dati, spesso utilizzando linguaggi standard come SQL. Questo permette agli utenti di eseguire query e analisi sui dati senza la necessit\u00e0 di conoscere i dettagli di implementazione delle varie sorgenti dati. Infine, il Data Access permette di gestire le autorizzazioni degli utenti in maniera granulare, garantendo l&#8217;accesso ai dati sensibili solo a coloro che hanno i permessi necessari per farlo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tecnologie utilizzate<\/h2>\n\n\n\n<p>Adesso che abbiamo chiarito cosa serve per abilitare l\u2019esperienza git-like nel data lakehouse, descriveremo pi\u00f9 nel dettaglio le tecnologie scelte per ogni singolo layer visto in precedenza.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">MinIO \u2013 Object Storage<\/h3>\n\n\n\n<p>MinIO \u00e8 un object storage che fornisce compatibilit\u00e0 alle API Amazon Web Services S3, e supporta tutte le sue funzionalit\u00e0 core. MinIO \u00e8 nativamente \u00e8 compatibile per l\u2019installazione su Kubernetes, tuttavia pu\u00f2 essere installato qualsiasi modo: reti pubbliche o private, bare metal, in ambienti orchestrati o infrastrutture edge.<\/p>\n\n\n\n<p>Le funzionalit\u00e0 core di MinIO sono:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Scalabilit\u00e0<\/strong>: Minio \u00e8 un sistema distribuito che pu\u00f2 essere scalato orizzontalmente aggiungendo nodi<\/li>\n\n\n\n<li><strong>Disponibilit\u00e0<\/strong>: Al fine di garantire l&#8217;alta affidabilit\u00e0, Minio replica i dati su pi\u00f9 nodi, in modo tale da persistere i dati, anche in caso di perdita di uno o pi\u00f9 nodi<\/li>\n\n\n\n<li><strong>Sicurezza<\/strong>: Vengono offerte una serie di funzionalit\u00e0 sulla sicurezza, tra cui autenticazione, controllo degli accessi e crittografia dei dati salvati<\/li>\n\n\n\n<li><strong>Velocit\u00e0<\/strong>: MinIO \u00e8 molto performante per la lettura e scrittura dei dati su S3<\/li>\n\n\n\n<li><strong>Compatibilit\u00e0<\/strong><strong> con API S3<\/strong>: Viene fornita la compatibilit\u00e0 con il protocollo S3, il che lo rende facile da usare con applicazioni che gi\u00e0 utilizzano questa tipologia di protocollo<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Apache Iceberg \u2013 Table format<\/h3>\n\n\n\n<p>Apache Iceberg \u00e8 un Table Format open source molto performante, che tramite query SQL-like permette l&#8217;analisi di grandi quantit\u00e0 di dati. Permette a pi\u00f9 engine in contemporanea di operare su uno stesso dataset senza creare problemi di consistenza. Tra le caratteristiche principali sono presenti:<\/p>\n\n\n\n<p>&#8211;&nbsp;<strong>Transazioni ACID<\/strong>: attraverso la sua architettura, Apache Iceberg abilita le transazioni ACID garantendo la concorrenza ottimistica in situazioni in cui pi\u00f9 scrittori o lettori vogliono accedere ad una determinata risorsa.<\/p>\n\n\n\n<p>&#8211;&nbsp;<strong>Dinamicit\u00e0 nelle partizioni<\/strong>: nel Data Lake, senza Iceberg, se volevamo cambiare il partizionamento di una tabella, dovevamo riscriverla interamente. Con Iceberg, invece, il partizionamento diventa dinamico e pu\u00f2 cambiare in ogni momento.<\/p>\n\n\n\n<p>&#8211;&nbsp;<strong>Hidden partitioning<\/strong>: Iceberg produce i valori per le partizioni e le utilizza nelle query in maniera trasparente a chi scrive o legge.<\/p>\n\n\n\n<p>&#8211;&nbsp;<strong>Time travel<\/strong>: grazie a degli snapshot immutabili sui dati, \u00e8 possibile effettuare delle query su degli snapshot antecedenti temporalmente, evitando la duplicazione dei dati.<\/p>\n\n\n\n<p>&#8211;&nbsp;<strong>Version rollback<\/strong>: grazie alla propriet\u00e0 citata sopra, \u00e8 possibile anche effettuare un vero e proprio rollback su versioni precedenti dei dati.<\/p>\n\n\n\n<p>&#8211;&nbsp;<strong>Evoluzione dello schema<\/strong>: Iceberg supporta anche i cambiamenti che possono avvenire sullo schema di una tabella.<\/p>\n\n\n\n<p>Utilizzare un Table Format open source permette di non avere lock-in nella scelta delle tecnologie con cui interagisce. Ad esempio, Apache Iceberg \u00e8 supportato da Dremio per la lettura e la scrittura dei metadati su sorgenti di tipo S3, come ad esempio MinIO. Apache Iceberg organizza i metadati in una struttura gerarchica e ci\u00f2 consente agli engine con cui interagisce di apportare modifiche rapide ed efficienti alle tabelle senza ridefinire tutti i file del set di dati, garantendo cos\u00ec prestazioni ottimali quando si lavora su scala di Data Lake.<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"982\" height=\"1024\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/immagine-2-Pasco-982x1024.png\" alt=\"\" class=\"wp-image-29605\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/immagine-2-Pasco-982x1024.png 982w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/immagine-2-Pasco-288x300.png 288w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/immagine-2-Pasco-768x800.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/immagine-2-Pasco.png 1230w\" sizes=\"auto, (max-width: 982px) 100vw, 982px\" \/><figcaption class=\"wp-element-caption\"><strong>Figura 1 &#8211; Struttura di gestione gerarchica di Apache Iceberg<\/strong><\/figcaption><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Come radice dell\u2019albero in figura vi \u00e8 l\u2019Iceberg Catalog, che nel nostro caso \u00e8 Project Nessie come vedremo successivamente, ossia il Table Repository che tiene traccia dell&#8217;attuale puntatore ai metadati. Il metadata layer \u00e8 composto da tre livelli:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Metadata file<\/strong>: include informazioni sullo schema della tabella, informazioni sulle partizioni, sugli snapshot e circa lo snapshot attuale.<\/li>\n\n\n\n<li><strong>Manifest list<\/strong>: contiene una lista di manifest file assieme alle informazioni dei manifest file che hanno effettuato uno snapshot.<\/li>\n\n\n\n<li><strong>Manifest file<\/strong>:&nbsp; tracciano i data file oltre che avere altri dettagli e statistiche per ogni file<\/li>\n<\/ul>\n\n\n\n<p>Il data layer contiene i data files veri e propri. Tutta questa struttura illustrata fino ad ora, dall&#8217;Icebrg Catalog fino al Data Layer pu\u00f2 risiedere su un Object Storage di tipo S3, come MinIO. Inoltre pu\u00f2 interagire senza problemi con Dremio, abilitando di fatto a quello che \u00e8 a tutti gli effetti un Data Lakehouse.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Project Nessie \u2013 Table Repository<\/h3>\n\n\n\n<p>Project Nessie \u00e8 un catalogo transazionale open source utilizzato nei Data Lake. Oltre ad assumere il ruolo di Table Repository per le tabelle Iceberg, come visto nel paragrafo precedente, \u00e8 molto utile perch\u00e8 abilita le funzionalit\u00e0 Git-like nel Data Lake. Per questo motivo abbiamo individuato questa tecnologia come Table Repository, dato che non si limita al solo ruolo di catalogo transazionale. \u00c8 possibile abilitare il versionamento non solo su una tabella alla volta come permetteva Iceberg, ma anche su pi\u00f9 tabelle contemporaneamente. Consente, dunque, la creazione di branch sui quali apportare modifiche, mantenendo consistenti i dati e permettendo di fare un merge quando siamo certi che le modifiche effettuate siano corrette. Project Nessie, quando gestisce pi\u00f9 versioni di una tabella in diversi branch, non applica una copia dei dati ma si limita a gestire i <em>metadata file<\/em> delle tabelle Iceberg. Un altro fattore che ci ha portato a scegliere questa tecnologia, \u00e8 il fatto che \u00e8 supportata da Dremio come Metadata Catalog e come storage supporta Object Storage di tipo S3 come, ad esempio, MinIO.<\/p>\n\n\n\n<p>Alcuni dei concetti fondamentali in Project Nessie sono:<\/p>\n\n\n\n<p>&#8211;&nbsp;<strong>Commit<\/strong>: cambiamento atomico che avviene al set dei dati ed \u00e8 il cambiamento minimo possibile in Nessie. In altre parole, rappresenta uno snapshot dei dati ad un certo punto nel tempo. Nel caso in cui dovessimo effettuare dei rollback baster\u00e0 puntare ad un commit precedente.<\/p>\n\n\n\n<p>&#8211;&nbsp;<strong>Branches<\/strong>: un branch referenzia l&#8217;ultimo commit presente in una catena di commit. Branch diversi possono puntare ad uno stesso commit o a commit diversi, ed \u00e8 in questo modo che Nessie gestisce la concorrenza di job verso uno stesso data set.<\/p>\n\n\n\n<p>&#8211;&nbsp;<strong>Merge<\/strong>: \u00e8 possibile inserire i cambiamenti apportati su un branch verso un altro branch target.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dremio \u2013 Data Access<\/h3>\n\n\n\n<p>Dremio \u00e8 una piattaforma che abilita le analitiche self-service su un data lakehouse. Offre un&#8217;ampia gamma di sorgenti dalle quali attingere dati e grazie alle ottimizzazioni utilizzate (Apache Arrow e Reflections tra le altre) consente di accedere velocemente ai dati presenti nel data lake. Tra le varie sorgenti presenti vi \u00e8 anche proprio Project Nessie ed inoltre supporta la scrittura in Apache Iceberg. <a href=\"https:\/\/seacom.it\/soluzioni\/data-management\/dremio\/\">Dremio<\/a> nella nostra infrastruttura, implementa lo strato di data access. E&#8217; in grado di fornire una modalit\u00e0 unificata per l&#8217;interrogazione e la modellazione dei dati presenti nell&#8217;architettura, tramite linguaggio SQL. Dremio offre la possibilit\u00e0 anche di virtualizzare i dati, in quanto permette l\u2019aggregazione dei dati provenienti da sorgenti diverse.&nbsp; Infine, si integra con diversi tool di BI come ad esempio PowerBI, Superset e Tableau.<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/seacom.it\/videos\/\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Banner-vari-eventi-e-altro-7-1024x300.png\" alt=\"\" class=\"wp-image-29655\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Banner-vari-eventi-e-altro-7-1024x300.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Banner-vari-eventi-e-altro-7-300x88.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Banner-vari-eventi-e-altro-7-768x225.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Banner-vari-eventi-e-altro-7.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Architettura finale<\/h2>\n\n\n\n<p>Riassumendo, Project Nessie sar\u00e0 il catalogo per le tabelle Apache Iceberg, che ovviamente dovranno essere scritte in un data lake, MinIO nel nostro caso. Utilizzando Dremio, \u00e8 possibile promuovere una sorgente Project Nessie con la quale effettuare operazioni <a href=\"https:\/\/seacom.it\/esperienza-git-like-con-i-dati-dremio-minio-apache-iceberg\/\">git-like<\/a> direttamente da interfaccia o tramite query SQL-like.<\/p>\n\n\n\n<p>L\u2019immagine seguente ci aiuta a razionalizzare le diverse tecnologie e ci fa capire la loro interazione:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized has-mobile-text-align-left\"><img loading=\"lazy\" decoding=\"async\" width=\"681\" height=\"1024\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/terza-immagine-Pasco-681x1024.png\" alt=\"\" class=\"wp-image-29606\" style=\"width:636px;height:auto\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/terza-immagine-Pasco-681x1024.png 681w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/terza-immagine-Pasco-200x300.png 200w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/terza-immagine-Pasco-768x1155.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/terza-immagine-Pasco-1022x1536.png 1022w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/terza-immagine-Pasco-1362x2048.png 1362w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/terza-immagine-Pasco.png 1377w\" sizes=\"auto, (max-width: 681px) 100vw, 681px\" \/><figcaption class=\"wp-element-caption\"><strong>Figura 2 &#8211; Open Data Lakehouse<\/strong><\/figcaption><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Specifichiamo che il table format descritto \u00e8 semplificato visto che dal metadata pointer passiamo direttamente al data layer, questo perch\u00e8 l\u2019intento dell\u2019immagine \u00e8 quella di far vedere che diverse tabelle sono gestite dal table repository e che il table format alla fine gestisce dei file raw che vengono salvati sull\u2019object storage.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installazione delle componenti<\/h2>\n\n\n\n<p>L\u2019installazione delle componenti utilizzate per questo tutorial \u00e8 molto semplice. Ad esempio, facciamo riferimento ad una installazione on-prem utilizzando i pacchetti precompilati e un servizio standalone.<\/p>\n\n\n\n<p>Per l\u2019installazione di MinIO per un ambiente di test, \u00e8 possibile effettuarne una Single Node Single Drive, seguendo gli step definiti nella <a href=\"https:\/\/min.io\/docs\/minio\/linux\/operations\/install-deploy-manage\/deploy-minio-single-node-single-drive.html#deploy-single-node-single-drive-minio\" target=\"_blank\" rel=\"noreferrer noopener\"><u>guida ufficiale<\/u><\/a>.<\/p>\n\n\n\n<p>Per quanto riguarda l\u2019installazione di Project Nessie \u00e8 sufficiente scaricare il servizio standalone ed eseguirlo, come specificato nella <a href=\"https:\/\/projectnessie.org\/nessie-latest\/#nessie-server-as-a-standalone-uber-jar\" target=\"_blank\" rel=\"noreferrer noopener\"><u>documentazione ufficiale<\/u><\/a>.<\/p>\n\n\n\n<p>Anche l\u2019installazione di Dremio \u00e8 molto semplice, se utilizziamo una macchina che supporta l\u2019installazione di pacchetti <em>rpm<\/em> basta seguire <a href=\"https:\/\/docs.dremio.com\/current\/get-started\/cluster-deployments\/deployment-models\/standalone\/standalone-rpm#installing-dremio\" target=\"_blank\" rel=\"noreferrer noopener\"><u>questa documentazione<\/u><\/a>, altrimenti \u00e8 possibile utilizzare i <a href=\"https:\/\/docs.dremio.com\/current\/get-started\/cluster-deployments\/deployment-models\/standalone\/standalone-tarball\" target=\"_blank\" rel=\"noreferrer noopener\"><u>Tarball<\/u><\/a>.<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Promuovere una sorgente Project Nessie<\/h2>\n\n\n\n<p>Da interfaccia, cliccando su Sources \u00e8 possibile scegliere la sorgente da utilizzare, in questo caso useremo il Nessie:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-1-1024x447.png\" alt=\"\" class=\"wp-image-29607\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-1-1024x447.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-1-300x131.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-1-768x335.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-1-1536x670.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-1.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Tra le varie configurazioni, dovremmo settare un nome e l\u2019endpoint sul quale \u00e8 in ascolto, oltre un eventuale metodo di autenticazione:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-2-1024x447.png\" alt=\"\" class=\"wp-image-29608\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-2-1024x447.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-2-300x131.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-2-768x335.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-2-1536x670.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-2.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><br>Dovremmo specificare poi lo storage da utilizzare, come anticipato utilizzeremo MinIO per cui dovremmo specificare il bucket, l\u2019access key e la secret key:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/essie-3-1024x447.png\" alt=\"\" class=\"wp-image-29609\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/essie-3-1024x447.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/essie-3-300x131.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/essie-3-768x335.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/essie-3-1536x670.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/essie-3.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Allo stesso modo di come avviene se dovessimo promuovere come sorgente MinIO, dobbiamo specificare anche l\u2019endpoint ed altre propriet\u00e0:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Screenshot-2024-05-03-at-12-36-07-@admin-Dremio-1024x447.png\" alt=\"\" class=\"wp-image-29661\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Screenshot-2024-05-03-at-12-36-07-@admin-Dremio-1024x447.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Screenshot-2024-05-03-at-12-36-07-@admin-Dremio-300x131.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Screenshot-2024-05-03-at-12-36-07-@admin-Dremio-768x335.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Screenshot-2024-05-03-at-12-36-07-@admin-Dremio-1536x670.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Screenshot-2024-05-03-at-12-36-07-@admin-Dremio.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Creazione di una tabella Iceberg<\/h2>\n\n\n\n<p>Vi \u00e8 la possibilit\u00e0 di creare una tabella Iceberg specificando il catalogo creato, il cui nome in questo esempio sar\u00e0 <em>nessie<\/em>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">create<\/span>\u00a0<span class=\"hljs-selector-tag\">table<\/span> <span class=\"hljs-selector-tag\">nessie<\/span><span class=\"hljs-selector-class\">.user_table<\/span> (<span class=\"hljs-selector-tag\">id<\/span> <span class=\"hljs-selector-tag\">integer<\/span>, <span class=\"hljs-selector-tag\">name<\/span> <span class=\"hljs-selector-tag\">varchar<\/span>, <span class=\"hljs-selector-tag\">surname<\/span> <span class=\"hljs-selector-tag\">varchar<\/span>, <span class=\"hljs-selector-tag\">address<\/span> <span class=\"hljs-selector-tag\">varchar<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>A questo punto verr\u00e0 creata una tabella vuota all\u2019interno di Project Nessie ed \u00e8 possibile visualizzare lo schema della stessa:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-5-1024x447.png\" alt=\"\" class=\"wp-image-29611\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-5-1024x447.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-5-300x131.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-5-768x335.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-5-1536x670.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-5.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>A questo punto, dal query engine di Dremio, potremmo inserire dei record all\u2019interno della tabella:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">INSERT INTO nessie.user_table VALUES (<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-string\">'Ned'<\/span>, <span class=\"hljs-string\">'Stark'<\/span>, <span class=\"hljs-string\">'The North'<\/span>);\nINSERT INTO nessie.user_table VALUES (<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-string\">'Robert'<\/span>, <span class=\"hljs-string\">'Baratheon'<\/span>, <span class=\"hljs-string\">'The Stormlands'<\/span>);\nINSERT INTO nessie.user_table VALUES (<span class=\"hljs-number\">3<\/span>, <span class=\"hljs-string\">'Jamie'<\/span>, <span class=\"hljs-string\">'Lannister'<\/span>, <span class=\"hljs-string\">'The Westerlands'<\/span>);\nINSERT INTO nessie.user_table VALUES (<span class=\"hljs-number\">4<\/span>, <span class=\"hljs-string\">'Daenerys'<\/span>, <span class=\"hljs-string\">'Targaryen'<\/span>, <span class=\"hljs-string\">'The Crownlands'<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><br>Possiamo quindi visualizzarli su Dremio:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-6-1024x461.png\" alt=\"\" class=\"wp-image-29612\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-6-1024x461.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-6-300x135.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-6-768x346.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-6-1536x691.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-6.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Creazione di un nuovo branch<\/h3>\n\n\n\n<p>A questo punto, proviamo a creare un nuovo branch con una query SQL-like sempre da Dremio:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">CREATE BRANCH <span class=\"hljs-string\">\"scrittura_user_table\"<\/span> IN nessie;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>E da UI possiamo vedere che effettivamente il branch \u00e8 stato creato correttamente:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-7-1024x447.png\" alt=\"\" class=\"wp-image-29613\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-7-1024x447.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-7-300x131.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-7-768x335.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-7-1536x670.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-7.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><br>Adesso proviamo a scrivere dei nuovi record sul nuovo branch. Il branch pu\u00f2 essere indicato in fase di inserimento delle nuove righe:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">INSERT INTO nessie.user_table AT BRANCH <span class=\"hljs-string\">\"scrittura_user_table\"<\/span> VALUES (<span class=\"hljs-number\">5<\/span>, <span class=\"hljs-string\">'Tony'<\/span>, <span class=\"hljs-string\">'Soprano'<\/span>, <span class=\"hljs-string\">'New Jersey'<\/span>);\nINSERT INTO nessie.user_table AT BRANCH <span class=\"hljs-string\">\"scrittura_user_table\"<\/span> VALUES (<span class=\"hljs-number\">6<\/span>, <span class=\"hljs-string\">'Don'<\/span>, <span class=\"hljs-string\">'Draper'<\/span>, <span class=\"hljs-string\">'New York'<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>A questo punto possiamo notare la differenza tra i due branch:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-8-1024x461.png\" alt=\"\" class=\"wp-image-29614\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-8-1024x461.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-8-300x135.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-8-768x346.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-8-1536x691.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-8.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-9-1024x461.png\" alt=\"\" class=\"wp-image-29615\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-9-1024x461.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-9-300x135.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-9-768x346.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-9-1536x691.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-9.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Operazione di merge in un branch<\/h3>\n\n\n\n<p>Possiamo dunque effettuare una merge del branch creato verso il main:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">MERGE BRANCH <span class=\"hljs-string\">\"scrittura_user_table\"<\/span> INTO <span class=\"hljs-string\">\"main\"<\/span> IN nessie;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>E a questo punto effettuando una query sul main branch vedremo che i risultati sono presenti:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-10-1024x461.png\" alt=\"\" class=\"wp-image-29616\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-10-1024x461.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-10-300x135.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-10-768x346.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-10-1536x691.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-10.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><br>Il branch sorgente non \u00e8 stato eliminato, ed \u00e8 possibile avere una lista di tutti i commit effettuati:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-11-1024x461.png\" alt=\"\" class=\"wp-image-29617\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-11-1024x461.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-11-300x135.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-11-768x346.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-11-1536x691.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-11.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Rollback ad una versione precedente<\/h3>\n\n\n\n<p>A questo punto, ci siamo resi conto che le nuove righe aggiunte non sono consistenti. Possiamo fare dunque rollback alla versione precedente (specificando un commit oppure un istante nel tempo). In questo caso decido di tornare al commit precedente, prendendo l\u2019identificativo direttamente da interfaccia:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">ALTER BRANCH <span class=\"hljs-string\">\"main\"<\/span> ASSIGN COMMIT \n<span class=\"hljs-string\">\"dea98a368953af01c9bc0b42398851e1851966bc791926debae2ff883eeb671f\"<\/span> IN nessie;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><br>Ed effettuando una query \u00e8 possibile notare che siamo tornati alla situazione di partenza:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-12-1024x461.png\" alt=\"\" class=\"wp-image-29618\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-12-1024x461.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-12-300x135.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-12-768x346.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-12-1536x691.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-12.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Rollback Apache Iceberg VS Rollback Project Nessie<\/h3>\n\n\n\n<p>In realt\u00e0, \u00e8 possibile effettuare il rollback anche di una singola tabella Iceberg specificando o uno snapshot ID o un timestamp. Ad esempio, con il comando seguente, saremmo tornati alla versione delle ore 12.50 che non conteneva le nuove righe aggiunte:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">ROLLBACK TABLE nessie.user_table TO TIMESTAMP <span class=\"hljs-string\">'2024-05-03 12:50:00'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Mentre il rollback con Apache Iceberg \u00e8 relativo alle singole tabelle, quello eseguibile con Project Nessie spostando il puntatore ad un commit precedente, \u00e8 relativo a tutte le tabelle presenti nel catalogo, ripristinando quindi il contenuto di tutte le tabelle che avevano sub\u00ecto delle modifiche.<\/p>\n\n\n\n<p>Come descritto anche in precedenza, dunque, la differenza sta nel fatto che con Apache Iceberg \u00e8 possibile gestire il versionamento di una singola tabella, mentre con Project Nessie \u00e8 possibile gestirlo di pi\u00f9 tabelle contemporaneamente.<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Eliminazione di un branch<\/h3>\n\n\n\n<p>Per evitare ulteriori danni, \u00e8 possibile anche eliminare il branch nuovo che avevamo creato:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">DROP BRANCH <span class=\"hljs-string\">\"scrittura_user_table\"<\/span> FORCE IN nessie;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Effettivamente anche da UI non \u00e8 pi\u00f9 presente:<\/p>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-13-1024x461.png\" alt=\"\" class=\"wp-image-29619\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-13-1024x461.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-13-300x135.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-13-768x346.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-13-1536x691.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-13.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Creazione tabella Iceberg a partire da una VDS<\/h3>\n\n\n\n<p>Vi sono molti modi per creare una tabella Iceberg, partendo da un CSV o da un JSON, oppure anche a partire da una VDS. Ad esempio, per creare una tabella Iceberg nel catalogo Nessie a partire da una VDS, nella query dovremmo specificare il catalogo, il nome della tabella e il nome della VDS da cui essa ha origine:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">create table nessie.<span class=\"hljs-string\">\"pd_incidents\"<\/span> <span class=\"hljs-keyword\">as<\/span> select * <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@admin\"<\/span>.<span class=\"hljs-string\">\"police_incidents\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><br>A questo punto \u00e8 disponibile nel catalogo Nessie e pu\u00f2 subire le medesime operazioni viste in precedenza:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-14-1024x461.png\" alt=\"\" class=\"wp-image-29620\" style=\"width:732px;height:auto\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-14-1024x461.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-14-300x135.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-14-768x346.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-14-1536x691.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/Nessie-14.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"background-color:#f2f2f2;color:#32373c\" class=\"wp-block-genesis-blocks-gb-profile-box round gb-has-avatar gb-font-size-18 gb-block-profile gb-profile-columns\"><div class=\"gb-profile-column gb-profile-avatar-wrap\"><div class=\"gb-profile-image-wrap\"><figure class=\"gb-profile-image-square\"><img loading=\"lazy\" decoding=\"async\" width=\"1748\" height=\"1240\" class=\"gb-profile-avatar wp-image-29629\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/template-5.png\" alt=\"\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/template-5.png 1748w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/template-5-300x213.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/template-5-1024x726.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/template-5-768x545.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/template-5-1536x1090.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/template-5-180x128.png 180w\" sizes=\"auto, (max-width: 1748px) 100vw, 1748px\" \/><\/figure><\/div><\/div><div class=\"gb-profile-column gb-profile-content-wrap\"><h2 class=\"gb-profile-name\" style=\"color:#32373c\">Lorenzo Pasco &#8211; Data Engineer @<a href=\"https:\/\/www.linkedin.com\/company\/seacom\">Seac<\/a><a href=\"https:\/\/www.linkedin.com\/company\/seacom\" target=\"_blank\" rel=\"noreferrer noopener\">om<\/a><\/h2><p class=\"gb-profile-title\" style=\"color:#32373c\"><\/p><div class=\"gb-profile-text\">Laureato in&nbsp;Artificial Intelligence and Data Engineering&nbsp;a Pisa, attualmente occupo la posizione di Data Engineer presso Seacom. Fin da giovane, ho alimentato la mia passione per l\u2019informatica e i videogiochi, unendo la tecnologia alla mia vita quotidiana. Al di l\u00e0 del digitale, il mio cuore batte per lo sport, in particolare il calcio, e sperimento la creativit\u00e0 in cucina. La mia vita \u00e8 un connubio di dati, tecnologia, sport e sapore.<\/div><ul class=\"gb-social-links\"><\/ul><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-media-text has-media-on-the-right is-stacked-on-mobile\" style=\"grid-template-columns:auto 29%\"><div class=\"wp-block-media-text__content\">\n<p class=\"has-text-align-left has-larger-font-size\"><a href=\"https:\/\/seacom.it\/?aff=codemotion\" target=\"_blank\" rel=\"noreferrer noopener\">Seacom<\/a> &#8211; Societ\u00e0 Benefit appartenente al gruppo ITWay e co &#8211; fondatore di RIOS (Rete Italiana Open Source), \u00e8 un&#8217;azienda specializzata in consulenza e formazione su prodotti open source per aziende di livello Enterprise, enti e pubbliche amministrazioni.<\/p>\n\n\n\n<p class=\"has-text-align-left has-larger-font-size\"><strong>Scopri di pi\u00f9 su Seacom su<\/strong>: <a href=\"https:\/\/seacom.it\/?aff=codemotion\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/seacom.it<\/a><\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"927\" height=\"900\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/Seacom-logo-ok1-1.png\" alt=\"seacom logo\" class=\"wp-image-29117 size-full\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/Seacom-logo-ok1-1.png 927w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/Seacom-logo-ok1-1-300x291.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/Seacom-logo-ok1-1-768x746.png 768w\" sizes=\"auto, (max-width: 927px) 100vw, 927px\" \/><\/figure><\/div>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Nel mondo dello sviluppo, git \u00e8 un elemento imprescindibile che ci permette di gestire il codice in maniera sicura e collaborativa, permettendo di apportare modifiche allo stesso senza causare problemi ad ambienti di produzione. Il codice principale \u00e8 presente nel branch main. Possiamo creare poi dei branch diversi, a partire dal main, sui quali apportare&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/\">Read more<\/a><\/p>\n","protected":false},"author":271,"featured_media":29638,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10444],"tags":[12559,12553,12550,12555,12557,12561],"collections":[],"class_list":{"0":"post-29603","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-open-source","8":"tag-apache-iceberg","9":"tag-data-lakehouse","10":"tag-data-management","11":"tag-dremio","12":"tag-minio","13":"tag-project-nessie","14":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Gestione Git-like con Dremio e altre tecnologie open source<\/title>\n<meta name=\"description\" content=\"Scopri la gestione Git-like con Dremio, MinIO, Apache Iceberg e Project Nessie in questa guida approfondita.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gestione git-like nei Data Lakehouse con tecnologie open source\" \/>\n<meta property=\"og:description\" content=\"Scopri la gestione Git-like con Dremio, MinIO, Apache Iceberg e Project Nessie in questa guida approfondita.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-13T14:03:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-13T14:40:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1434\" \/>\n\t<meta property=\"og:image:height\" content=\"810\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"RIOS - Seacom\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"RIOS - Seacom\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/\"},\"author\":{\"name\":\"RIOS - Seacom\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/9c994dbb9530c09c8c63180d87c1cac7\"},\"headline\":\"Gestione git-like nei Data Lakehouse con tecnologie open source\",\"datePublished\":\"2024-09-13T14:03:27+00:00\",\"dateModified\":\"2024-09-13T14:40:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/\"},\"wordCount\":2815,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png\",\"keywords\":[\"apache iceberg\",\"data lakehouse\",\"data management\",\"dremio\",\"minio\",\"project nessie\"],\"articleSection\":[\"Open source\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/\",\"name\":\"Gestione Git-like con Dremio e altre tecnologie open source\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png\",\"datePublished\":\"2024-09-13T14:03:27+00:00\",\"dateModified\":\"2024-09-13T14:40:14+00:00\",\"description\":\"Scopri la gestione Git-like con Dremio, MinIO, Apache Iceberg e Project Nessie in questa guida approfondita.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png\",\"width\":1434,\"height\":810},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Open source\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Gestione git-like nei Data Lakehouse con tecnologie open source\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/9c994dbb9530c09c8c63180d87c1cac7\",\"name\":\"RIOS - Seacom\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/Seacom-logo-ok1-1-100x100.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/Seacom-logo-ok1-1-100x100.png\",\"caption\":\"RIOS - Seacom\"},\"sameAs\":[\"https:\/\/seacom.it\/\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/rios-seacom\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Gestione Git-like con Dremio e altre tecnologie open source","description":"Scopri la gestione Git-like con Dremio, MinIO, Apache Iceberg e Project Nessie in questa guida approfondita.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/","og_locale":"en_US","og_type":"article","og_title":"Gestione git-like nei Data Lakehouse con tecnologie open source","og_description":"Scopri la gestione Git-like con Dremio, MinIO, Apache Iceberg e Project Nessie in questa guida approfondita.","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-09-13T14:03:27+00:00","article_modified_time":"2024-09-13T14:40:14+00:00","og_image":[{"width":1434,"height":810,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png","type":"image\/png"}],"author":"RIOS - Seacom","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"RIOS - Seacom","Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/"},"author":{"name":"RIOS - Seacom","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/9c994dbb9530c09c8c63180d87c1cac7"},"headline":"Gestione git-like nei Data Lakehouse con tecnologie open source","datePublished":"2024-09-13T14:03:27+00:00","dateModified":"2024-09-13T14:40:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/"},"wordCount":2815,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png","keywords":["apache iceberg","data lakehouse","data management","dremio","minio","project nessie"],"articleSection":["Open source"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/","name":"Gestione Git-like con Dremio e altre tecnologie open source","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png","datePublished":"2024-09-13T14:03:27+00:00","dateModified":"2024-09-13T14:40:14+00:00","description":"Scopri la gestione Git-like con Dremio, MinIO, Apache Iceberg e Project Nessie in questa guida approfondita.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png","width":1434,"height":810},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/git-like-dremio-minio-apache-iceberg-e-project-nessie\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Open source","item":"https:\/\/www.codemotion.com\/magazine\/it\/open-source\/"},{"@type":"ListItem","position":3,"name":"Gestione git-like nei Data Lakehouse con tecnologie open source"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/9c994dbb9530c09c8c63180d87c1cac7","name":"RIOS - Seacom","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/Seacom-logo-ok1-1-100x100.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/Seacom-logo-ok1-1-100x100.png","caption":"RIOS - Seacom"},"sameAs":["https:\/\/seacom.it\/"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/rios-seacom\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-600x400.png","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-600x600.png","author_info":{"display_name":"RIOS - Seacom","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/rios-seacom\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png",1434,810,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-150x150.png",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-300x169.png",300,169,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-768x434.png",768,434,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-1024x578.png",1024,578,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png",1434,810,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3.png",1434,810,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-100x100.png",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-180x128.png",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-896x504.png",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-400x225.png",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-600x400.png",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/09\/gitlike-3-600x600.png",600,600,true]},"uagb_author_info":{"display_name":"RIOS - Seacom","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/rios-seacom\/"},"uagb_comment_info":0,"uagb_excerpt":"Nel mondo dello sviluppo, git \u00e8 un elemento imprescindibile che ci permette di gestire il codice in maniera sicura e collaborativa, permettendo di apportare modifiche allo stesso senza causare problemi ad ambienti di produzione. Il codice principale \u00e8 presente nel branch main. Possiamo creare poi dei branch diversi, a partire dal main, sui quali apportare&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/29603","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/271"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=29603"}],"version-history":[{"count":4,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/29603\/revisions"}],"predecessor-version":[{"id":29893,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/29603\/revisions\/29893"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/29638"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=29603"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=29603"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=29603"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=29603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}