Skip to content

Commit

Permalink
inserita modifica su gestione date
Browse files Browse the repository at this point in the history
  • Loading branch information
aborruso committed Feb 16, 2024
1 parent 99e4166 commit 14722fa
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 14 deletions.
2 changes: 1 addition & 1 deletion docs/blog.html
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ <h5 class="quarto-listing-category-title">Categorie</h5><div class="quarto-listi

<div class="quarto-listing quarto-listing-container-default" id="listing-listing">
<div class="list quarto-listing-default">
<div class="quarto-post image-right" data-index="0" data-categories="duckdb,csv,cli" data-listing-date-sort="1707951600000" data-listing-file-modified-sort="1708032267519" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="7" data-listing-word-count-sort="1354">
<div class="quarto-post image-right" data-index="0" data-categories="duckdb,csv,cli" data-listing-date-sort="1707951600000" data-listing-file-modified-sort="1708096016721" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="7" data-listing-word-count-sort="1396">
<div class="thumbnail">
<p><a href="./posts/csv-ventitre-gigabyte-senza-affanno/index.html" class="no-external"></a></p><a href="./posts/csv-ventitre-gigabyte-senza-affanno/index.html" class="no-external">
<p><img src="./posts/csv-ventitre-gigabyte-senza-affanno/opencup.png" class="thumbnail-image"></p>
Expand Down
11 changes: 6 additions & 5 deletions docs/blog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ font-style: inherit;">head</span></span></code></pre></div>
<div id="fig-head" class="lightbox quarto-figure quarto-figure-center quarto-float anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-head-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<a href="immagini/head.png" class="lightbox" data-glightbox="description: .lightbox-desc-1" data-gallery="quarto-lightbox-gallery-1"><img src="https://aborruso.github.io/posts/csv-ventitre-gigabyte-senza-affanno/immagini/head.png" class="img-fluid figure-img"></a>
<a href="immagini/head.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1" data-glightbox="description: .lightbox-desc-1"><img src="https://aborruso.github.io/posts/csv-ventitre-gigabyte-senza-affanno/immagini/head.png" class="img-fluid figure-img"></a>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-head-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figura&nbsp;2: Le prime righe del file con i progetti
Expand Down Expand Up @@ -126,7 +126,7 @@ font-style: inherit;">&gt;</span> campione.csv</span></code></pre></div>
<div id="fig-vd" class="lightbox quarto-figure quarto-figure-center quarto-float anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-vd-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<a href="immagini/vd.png" class="lightbox" data-glightbox="description: .lightbox-desc-2" data-gallery="quarto-lightbox-gallery-2"><img src="https://aborruso.github.io/posts/csv-ventitre-gigabyte-senza-affanno/immagini/vd.png" class="img-fluid figure-img"></a>
<a href="immagini/vd.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2" data-glightbox="description: .lightbox-desc-2"><img src="https://aborruso.github.io/posts/csv-ventitre-gigabyte-senza-affanno/immagini/vd.png" class="img-fluid figure-img"></a>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-vd-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figura&nbsp;3: Esplorazione dei dati campione con VisiData
Expand Down Expand Up @@ -264,8 +264,9 @@ font-style: inherit;">duckdb</span> OpenCUP.db <span class="at" style="color: #6
background-color: null;
font-style: inherit;">-c</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"CREATE TABLE OpenCUP AS SELECT * FROM read_csv_auto('TOTALEfix.csv',delim='|',parallel=FALSE);"</span></span></code></pre></div>
<p>Il file DuckDB risultante, a fronte di un CSV di 23.946.237.777 byte, è 4.466.159.616 byte, con una riduzione a circa 1/6, merito del formato binario contro quello ASCII.</p>
font-style: inherit;">"CREATE TABLE OpenCUP AS SELECT * FROM read_csv_auto('TOTALEfix.csv',delim='|',dateformat='%d-%b-%y',parallel=FALSE);"</span></span></code></pre></div>
<p>Notare che è stato necessario esplicitare il formato per la data, in modo che duckdb converta correttamente i campi relativi, che sono del tipo 01-JAN-15. Questo permette sia una migliore gestione dei dati, che una rappresentazione più efficiente in termini di spazio su disco.</p>
<p>Il file DuckDB risultante, a fronte di un CSV di 23.946.237.777 byte, è 4.431.294.464 byte, con una riduzione a circa 1/6, merito del formato binario contro quello ASCII.</p>
<section id="prestazioni-del-formato-duckdb" class="level3">
<h3 class="anchored" data-anchor-id="prestazioni-del-formato-duckdb">Prestazioni del formato DuckDB</h3>
<p>Una query di esempio</p>
Expand Down Expand Up @@ -299,7 +300,7 @@ background-color: null;
font-style: inherit;">-c</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"COPY (SELECT * FROM OpenCUP) TO 'OpenCUP.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');</span></span></code></pre></div>
<p>si ottiene un file Parquet di 2.299.910.076 byte, con una riduzione di circa 1/2 rispetto al formato nativo DuckDB.</p>
<p>si ottiene un file Parquet di 2.296.193.848 byte, con una riduzione di circa 1/2 rispetto al formato nativo DuckDB.</p>
<p>Se con questo comando si hanno problemi di memoria si può provare a impostare <code>SET preserve_insertion_order=false</code>:</p>
<div class="sourceCode" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb10-1"><span class="ex" style="color: null;
background-color: null;
Expand Down
13 changes: 7 additions & 6 deletions docs/posts/csv-ventitre-gigabyte-senza-affanno/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ <h2 class="anchored" data-anchor-id="la-prima-lettura">La prima lettura</h2>
<div id="fig-head" class="lightbox quarto-figure quarto-figure-center quarto-float anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-head-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<a href="immagini/head.png" class="lightbox" data-glightbox="description: .lightbox-desc-1" data-gallery="quarto-lightbox-gallery-1"><img src="immagini/head.png" class="img-fluid figure-img"></a>
<a href="immagini/head.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1" data-glightbox="description: .lightbox-desc-1"><img src="immagini/head.png" class="img-fluid figure-img"></a>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-head-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figura&nbsp;2: Le prime righe del file con i progetti
Expand All @@ -329,7 +329,7 @@ <h2 class="anchored" data-anchor-id="estrazione-di-un-campione">Estrazione di un
<div id="fig-vd" class="lightbox quarto-figure quarto-figure-center quarto-float anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-vd-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<a href="immagini/vd.png" class="lightbox" data-glightbox="description: .lightbox-desc-2" data-gallery="quarto-lightbox-gallery-2"><img src="immagini/vd.png" class="img-fluid figure-img"></a>
<a href="immagini/vd.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2" data-glightbox="description: .lightbox-desc-2"><img src="immagini/vd.png" class="img-fluid figure-img"></a>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-vd-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figura&nbsp;3: Esplorazione dei dati campione con VisiData
Expand Down Expand Up @@ -375,8 +375,9 @@ <h2 class="anchored" data-anchor-id="importazione-dellintero-file">Importazione
<p>È possibile importare il file in un DB in formato DuckDB con i seguenti comandi (occorre avere il file CSV su disco per limitare l’occupazione di RAM):</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="fu">unzip</span> <span class="st">"OpenData Complessivo.zip"</span></span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a><span class="fu">awk</span> <span class="at">-F\|</span> <span class="st">'{if (NF-1 == 90) { print } }'</span> <span class="op">&lt;</span> TOTALE.csv <span class="op">&gt;</span> TOTALEfix.csv</span>
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a><span class="ex">duckdb</span> OpenCUP.db <span class="at">-c</span> <span class="st">"CREATE TABLE OpenCUP AS SELECT * FROM read_csv_auto('TOTALEfix.csv',delim='|',parallel=FALSE);"</span></span></code><button title="Copia negli appunti" class="code-copy-button"><i class="bi"></i></button></pre></div>
<p>Il file DuckDB risultante, a fronte di un CSV di 23.946.237.777 byte, è 4.466.159.616 byte, con una riduzione a circa 1/6, merito del formato binario contro quello ASCII.</p>
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a><span class="ex">duckdb</span> OpenCUP.db <span class="at">-c</span> <span class="st">"CREATE TABLE OpenCUP AS SELECT * FROM read_csv_auto('TOTALEfix.csv',delim='|',dateformat='%d-%b-%y',parallel=FALSE);"</span></span></code><button title="Copia negli appunti" class="code-copy-button"><i class="bi"></i></button></pre></div>
<p>Notare che è stato necessario esplicitare il formato per la data, in modo che duckdb converta correttamente i campi relativi, che sono del tipo 01-JAN-15. Questo permette sia una migliore gestione dei dati, che una rappresentazione più efficiente in termini di spazio su disco.</p>
<p>Il file DuckDB risultante, a fronte di un CSV di 23.946.237.777 byte, è 4.431.294.464 byte, con una riduzione a circa 1/6, merito del formato binario contro quello ASCII.</p>
<section id="prestazioni-del-formato-duckdb" class="level3">
<h3 class="anchored" data-anchor-id="prestazioni-del-formato-duckdb">Prestazioni del formato DuckDB</h3>
<p>Una query di esempio</p>
Expand All @@ -390,7 +391,7 @@ <h3 class="anchored" data-anchor-id="prestazioni-del-formato-duckdb">Prestazioni
<h3 class="anchored" data-anchor-id="conversione-nel-formato-parquet">Conversione nel formato Parquet</h3>
<p>Con il comando</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="ex">duckdb</span> OpenCUP.db <span class="at">-c</span> <span class="st">"COPY (SELECT * FROM OpenCUP) TO 'OpenCUP.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');</span></span></code><button title="Copia negli appunti" class="code-copy-button"><i class="bi"></i></button></pre></div>
<p>si ottiene un file Parquet di 2.299.910.076 byte, con una riduzione di circa 1/2 rispetto al formato nativo DuckDB.</p>
<p>si ottiene un file Parquet di 2.296.193.848 byte, con una riduzione di circa 1/2 rispetto al formato nativo DuckDB.</p>
<p>Se con questo comando si hanno problemi di memoria si può provare a impostare <code>SET preserve_insertion_order=false</code>:</p>
<div class="sourceCode" id="cb10"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="ex">duckdb</span> OpenCUP.db <span class="at">-c</span> <span class="st">"SET preserve_insertion_order=false;COPY (SELECT * FROM OpenCUP) TO 'OpenCUP.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');</span></span></code><button title="Copia negli appunti" class="code-copy-button"><i class="bi"></i></button></pre></div>
<p>Le prestazioni del formato Parquet sono notevoli</p>
Expand Down Expand Up @@ -733,7 +734,7 @@ <h2 class="anchored" data-anchor-id="note-finali">Note finali</h2>
</div>
</div>
</footer>
<script>var lightboxQuarto = GLightbox({"openEffect":"zoom","selector":".lightbox","closeEffect":"zoom","loop":false,"descPosition":"bottom"});
<script>var lightboxQuarto = GLightbox({"openEffect":"zoom","closeEffect":"zoom","selector":".lightbox","loop":false,"descPosition":"bottom"});
window.onload = () => {
lightboxQuarto.on('slide_before_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
Expand Down
2 changes: 1 addition & 1 deletion docs/search.json
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@
"href": "posts/csv-ventitre-gigabyte-senza-affanno/index.html#importazione-dellintero-file",
"title": "Lavorare con grandi file CSV compressi",
"section": "Importazione dell’intero file",
"text": "Importazione dell’intero file\nIl file CSV completo ha, alla data di oggi (15 Febbraio 2024) un problema a 2 righe (su 17.065.848), che hanno un numero errato di colonne (91 anziché 90). Per poterlo importare occorre filtrare solo le linee che hanno un numero di colonne corretto.\nÈ possibile importare il file in un DB in formato DuckDB con i seguenti comandi (occorre avere il file CSV su disco per limitare l’occupazione di RAM):\nunzip \"OpenData Complessivo.zip\"\nawk -F\\| '{if (NF-1 == 90) { print } }' &lt; TOTALE.csv &gt; TOTALEfix.csv\nduckdb OpenCUP.db -c \"CREATE TABLE OpenCUP AS SELECT * FROM read_csv_auto('TOTALEfix.csv',delim='|',parallel=FALSE);\"\nIl file DuckDB risultante, a fronte di un CSV di 23.946.237.777 byte, è 4.466.159.616 byte, con una riduzione a circa 1/6, merito del formato binario contro quello ASCII.\n\nPrestazioni del formato DuckDB\nUna query di esempio\ntime duckdb OpenCUP.db -c \"SELECT ANNO_DECISIONE, COUNT(*) FROM OpenCUP GROUP BY ANNO_DECISIONE\" &gt; /dev/null\n\nreal 0m0,039s\nuser 0m0,156s\nsys 0m0,063s\n\n\nConversione nel formato Parquet\nCon il comando\nduckdb OpenCUP.db -c \"COPY (SELECT * FROM OpenCUP) TO 'OpenCUP.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');\nsi ottiene un file Parquet di 2.299.910.076 byte, con una riduzione di circa 1/2 rispetto al formato nativo DuckDB.\nSe con questo comando si hanno problemi di memoria si può provare a impostare SET preserve_insertion_order=false:\nduckdb OpenCUP.db -c \"SET preserve_insertion_order=false;COPY (SELECT * FROM OpenCUP) TO 'OpenCUP.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');\nLe prestazioni del formato Parquet sono notevoli\ntime duckdb -s 'SELECT ANNO_DECISIONE, COUNT (*) FROM read_parquet(\"OpenCUP.parquet\") GROUP BY ANNO_DECISIONE;' &gt; /dev/null\n\nreal 0m0,074s\nuser 0m0,372s\nsys 0m0,043s"
"text": "Importazione dell’intero file\nIl file CSV completo ha, alla data di oggi (15 Febbraio 2024) un problema a 2 righe (su 17.065.848), che hanno un numero errato di colonne (91 anziché 90). Per poterlo importare occorre filtrare solo le linee che hanno un numero di colonne corretto.\nÈ possibile importare il file in un DB in formato DuckDB con i seguenti comandi (occorre avere il file CSV su disco per limitare l’occupazione di RAM):\nunzip \"OpenData Complessivo.zip\"\nawk -F\\| '{if (NF-1 == 90) { print } }' &lt; TOTALE.csv &gt; TOTALEfix.csv\nduckdb OpenCUP.db -c \"CREATE TABLE OpenCUP AS SELECT * FROM read_csv_auto('TOTALEfix.csv',delim='|',dateformat='%d-%b-%y',parallel=FALSE);\"\nNotare che è stato necessario esplicitare il formato per la data, in modo che duckdb converta correttamente i campi relativi, che sono del tipo 01-JAN-15. Questo permette sia una migliore gestione dei dati, che una rappresentazione più efficiente in termini di spazio su disco.\nIl file DuckDB risultante, a fronte di un CSV di 23.946.237.777 byte, è 4.431.294.464 byte, con una riduzione a circa 1/6, merito del formato binario contro quello ASCII.\n\nPrestazioni del formato DuckDB\nUna query di esempio\ntime duckdb OpenCUP.db -c \"SELECT ANNO_DECISIONE, COUNT(*) FROM OpenCUP GROUP BY ANNO_DECISIONE\" &gt; /dev/null\n\nreal 0m0,039s\nuser 0m0,156s\nsys 0m0,063s\n\n\nConversione nel formato Parquet\nCon il comando\nduckdb OpenCUP.db -c \"COPY (SELECT * FROM OpenCUP) TO 'OpenCUP.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');\nsi ottiene un file Parquet di 2.296.193.848 byte, con una riduzione di circa 1/2 rispetto al formato nativo DuckDB.\nSe con questo comando si hanno problemi di memoria si può provare a impostare SET preserve_insertion_order=false:\nduckdb OpenCUP.db -c \"SET preserve_insertion_order=false;COPY (SELECT * FROM OpenCUP) TO 'OpenCUP.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');\nLe prestazioni del formato Parquet sono notevoli\ntime duckdb -s 'SELECT ANNO_DECISIONE, COUNT (*) FROM read_parquet(\"OpenCUP.parquet\") GROUP BY ANNO_DECISIONE;' &gt; /dev/null\n\nreal 0m0,074s\nuser 0m0,372s\nsys 0m0,043s"
},
{
"objectID": "posts/csv-ventitre-gigabyte-senza-affanno/index.html#note-finali",
Expand Down
2 changes: 1 addition & 1 deletion docs/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
</url>
<url>
<loc>https://aborruso.github.io/posts/csv-ventitre-gigabyte-senza-affanno/index.html</loc>
<lastmod>2024-02-15T21:24:27.519Z</lastmod>
<lastmod>2024-02-16T15:06:56.721Z</lastmod>
</url>
<url>
<loc>https://aborruso.github.io/posts/duckdb-intro-csv/index.html</loc>
Expand Down

0 comments on commit 14722fa

Please sign in to comment.