Eseguire query su una cartella di file Parquet tramite SQL
Parquet ha un proprio schema, quindi non c'è nulla da indovinare. Puntando Query Streams alla cartella, ogni file diventa una tabella SQL con gli stessi nomi di colonna e tipi già dichiarati dai file stessi: niente Spark, niente Python, niente caricamenti.
SOMMA(importo_netto)
Da ordini
RAGGRUPPARE PER paese;
Query Streams è una piattaforma di integrazione di database sicura e in tempo reale, e il suo connettore per cartelle Parquet trasforma una cartella di file .parquet in un'unica tabella SQL interattiva che è possibile interrogare da Microsoft Excel, Fogli Google, Airtable e dal proprio assistente AI. Per saperne di più, visita QueryStreams.com e iscriviti gratuitamente per interrogare la tua prima cartella Parquet in pochi minuti.
Qualcuno ti ha dato una cartella di file Parquet
Arriva attraverso una delle poche rotte più battute. Un'esportazione di data lake atterra su una quota di poche centinaia parte-00000. file. Un job dbt o Spark scrive il suo output da qualche parte e quel "qualche parte" si rivela essere una cartella di rete. Un team di analisi consegna un estratto. Una tabella del data warehouse viene archiviata su disco quando il rinnovo della licenza sembra troppo costoso e diciotto mesi dopo qualcuno vuole sapere cosa conteneva.
La parte scomoda è che Parquet non è leggibile dall'uomo. Facendo doppio clic su .parquet Il file non serve a nulla. Aprendolo con un editor di testo si ottiene una schermata piena di dati binari. Quando si chiede come fare, le risposte che si ricevono sono "avvia Spark" o "scrivi un po' di codice Python", ma nessuna delle due è una risposta seria per chi, come te, deve semplicemente presentare un numero al direttore finanziario il giovedì.
IL Connettori per cartelle Parquet Questa è la via più breve. Basta indicare all'agente Query Streams la cartella e ogni file corrispondente diventa parte di un'unica tabella SQL. Non viene effettuato alcun cambio di file, né un'unione in un nuovo file, né alcun caricamento: i file rimangono esattamente dove si trovano e le query vengono eseguite direttamente lì.
Lo schema è già all'interno del file
Questo è l'aspetto che distingue Parquet da qualsiasi altro tipo di cartella, ed è importante comprenderlo perché spiega perché questo connettore sia così semplice da utilizzare.
Ogni file Parquet termina con un piè di pagina: un blocco di metadati che indica i nomi delle colonne, i loro tipi di dati esatti, se ogni colonna ammette valori nulli e il numero di righe contenute nel file. Questo piè di pagina viene scritto da chi ha prodotto il file ed è autorevole. Non è un suggerimento o una convenzione, bensì la dichiarazione del file stesso sul suo contenuto.
Quindi, quando il connettore campiona la cartella, non ispeziona i valori dei dati e non ne trae conclusioni. Chiede a ciascun file campionato di descriversi, legge la risposta e la fissa come definizione della tabella. I tipi sono dichiarato piuttosto che dedotto, il che significa che non c'è alcuna dimensione del campione di cui preoccuparsi e nessuna possibilità che la diecimillesima riga contraddica quanto implicito nelle prime cento.
Anche i tipi vengono trasportati intatti. A DECIMALE(18,2) la colonna nel file è una colonna decimale nella tabella, non un'approssimazione in virgola mobile di uno, perché il valore non passa mai attraverso una stringa durante il suo ingresso. Tutto il resto in questa famiglia — la scansione della cartella, il registro dei file, la cache locale crittografata, le tabelle di gestione — funziona esattamente come descritto in come funzionano i connettori dei set di fileQuello che segue è solo ciò che distingue Parquet.
Ciò di cui non dovrai mai discutere
Il modo più chiaro per vedere il vantaggio è confrontarlo con il CSV, che è lo stesso lavoro senza il piè di pagina. Tutto un Connettore per cartelle CSV Deve rilevare, concordare e difendere, come viene semplicemente affermato in anticipo in Parquet.
| La domanda | Cartella CSV | Cartella Parquet |
|---|---|---|
| Che tipo di codifica dei caratteri è questa? | Rilevato per ogni file, e le codifiche miste comportano un rifiuto. | Non si presenta questo problema: il testo viene memorizzato come UTF-8 nel formato stesso. |
| Virgola, punto e virgola, tabulazione o barra verticale? | È stato annusato e deve essere identico in tutta la cartella. | Non si presenta: il parquet non è un testo delimitato. |
| La prima riga è un'intestazione? | Un'opzione, con colonne posizionali in caso contrario. | I nomi delle colonne si trovano nel piè di pagina. |
| Questa colonna contiene numeri o testo? | Dedotto dai valori campionati. | Dichiarato dal file. |
| Il denaro rimarrà invariato? | Sì, ma solo perché il connettore si impegna a individuare le colonne decimali e a impostarle come esatte. | Un numero decimale nel file corrisponde a un numero decimale nella tabella. Non c'è nulla da notare. |
È 03/04/2026 Marzo o aprile? |
Potrebbe essere necessario un esplicito formato data. |
Le date vengono memorizzate come date, non come testo. |
| Quante righe ci sono in questo file? | Possibile saperlo solo leggendolo. | Nel piè di pagina, gratis. |
Di conseguenza, le opzioni da impostare sono poche. Un connettore per cartelle CSV include un delimitatore, un carattere di virgoletta, un'opzione per l'intestazione, una codifica, stringhe nulle, un formato data e una modalità di layout, perché tutti questi elementi sono effettivamente incerti in un file di testo. Un connettore per cartelle Parquet non ha nessuna di queste opzioni, perché il file ha già risposto: le impostazioni disponibili sono elencate più avanti.
Colonne che solo alcuni file hanno
Le cartelle di file Parquet raramente vengono scritte tutte in una volta. Una pipeline riceve un nuovo campo a marzo, quindi i file da marzo in poi hanno una colonna che quelli di gennaio non hanno. Questa è l'unica vera decisione che il connettore deve prendere, e la prende in un modo specifico.
La tabella appuntata è la unione delle colonne trovate nei file campionati, non la loro intersezione. Una colonna che appare solo in alcuni di essi si unisce comunque alla tabella: è semplicemente contrassegnata come nullable e si legge come NULL per i file precedenti. In questo modo, si mantengono tutte le colonne della cartella anziché perdere quelle aggiunte successivamente.
Una colonna è mancante è tollerato. Una colonna avente una diverso tipo non lo è. Se ID ordine Se un file contiene un intero a 64 bit e un altro testo, il connettore si rifiuta categoricamente di stabilire una corrispondenza e identifica con precisione la discrepanza: in quale colonna, in quale tipo e in quali due file si trova l'errore. Non sceglierà un vincitore e non convertirà automaticamente un tipo nell'altro per far coincidere i numeri.
.parquet estensione su qualcos'altro: viene registrata con il motivo e il campione continua con i file rimanenti. Solo se nessuno Se i file campionati sono leggibili, il connettore li rifiuta e quindi elenca gli errori riscontrati in ciascuno di essi.
Annusare costa poco, perché non si legge nulla
Campioni di Query Streams fino a 64 file quando si connette per la prima volta a una cartella. Per i file CSV, ciò significa aprire e analizzare 64 file. Per i file Parquet, significa posizionarsi alla fine di 64 file e leggere un blocco di metadati, un'operazione banale anche quando i file sono di centinaia di megabyte ciascuno.
Lo stesso trucco funziona anche durante la sincronizzazione. Il conteggio delle righe di ciascun file viene estratto dal piè di pagina senza modificare i dati, quindi il connettore sa in anticipo se un file supererà il limite di righe per file e se la sincronizzazione nel suo complesso sta per superare il suo budget di righe. Può rifiutare e specificare il limite Prima Il file problematico viene scritto nella tabella, anziché scoprire il problema a metà del processo e lasciarti con un caricamento parziale.
| Parapetto | Predefinito | Massimo |
|---|---|---|
| File per connettore | 100,000 | 2,000,000 |
| Profondità della cartella | 8 livelli | 64 livelli |
| Dimensione di un singolo file | 512 MB | 4GB |
| Righe da un file qualsiasi | 2,000,000 | 50,000,000 |
| Righe per sincronizzazione | 10,000,000 | 100,000,000 |
| budget di tempo per la scansione | 300 secondi | 3.600 secondi |
Prima di trasferire un singolo byte, viene innanzitutto verificata la dimensione del file. Un file che supera il limite di dimensione viene rifiutato e il resto della cartella viene sincronizzato di conseguenza.
Ogni riga conosce la sua posizione nel suo file
Come con ogni connettore File Set, ogni riga contiene un _source_file colonna che indica il file da cui proviene e un _row_id che è unico su tutta la tabella. In una cartella Parquet, _row_id è meglio di così: i lettori di Parquet rivelano un vero numero di riga del file, quindi l'identificativo è costruito a partire dal nome del file più la posizione ordinale reale di quella riga all'interno del file, con l'aggiunta di zeri fino a raggiungere dodici cifre.
L'imbottitura è il punto. Ordinamento per _row_id Il formato CSV dispone le righe nell'ordine del file anziché nell'ordine 1, 10, 100, 2, e dodici cifre sono sufficienti a mantenere la validità per un trilione di righe in un singolo file, superando agevolmente qualsiasi limite si possa imporre. Il formato CSV non ha un concetto equivalente a cui fare riferimento, quindi questo è un caso in cui il formato a colonne offre qualcosa in più, oltre a semplificare le cose.
SELECT _source_file, COUNT(*) AS row_count, SUM(net_amount) AS net_amount FROM orders GROUP BY _source_file ORDER BY net_amount DESC;
E poiché l'identificativo di riga è ordinato, è possibile visualizzare l'inizio di un file specifico senza dover leggere l'intera cartella, il che è utile quando una partizione sembra sospetta e si desidera vedere cosa contiene effettivamente.
SELECT _row_id, order_id, order_date, net_amount FROM orders WHERE _source_file = 'part-00042.parquet' ORDER BY _row_id LIMIT 20;
Quando un file smette di corrispondere al PIN
Una volta che la forma è fissata, ogni file viene controllato rispetto ad essa all'ingresso — e ancora una volta, quel controllo è una lettura del piè di pagina, non una lettura dei dati, quindi è abbastanza economico da farlo su ogni file ogni volta. Un file che non è più in accordo è parcheggiato: le sue righe restano fuori dalla tabella, il motivo viene registrato e il resto della cartella si sincronizza normalmente.
Quattro sono i punti che costituiscono un disaccordo, ed è importante conoscerli singolarmente perché il terzo sorprende le persone.
- Un tipo è cambiato. La colonna esiste, ma il piè di pagina ora la dichiara con un nome diverso da quello che era stato fissato.
- Una colonna obbligatoria è scomparsa. Nel file manca la colonna contrassegnata come non nullable.
- Un file ha eliminato una colonna che prima conteneva. Anche quando la colonna bloccata è nullable, un file che fatto Quella colonna viene mantenuta quando la cartella è stata campionata e da allora ha smesso di essere mantenuta; viene quindi parcheggiata anziché letta come nulla. Leggerla come nulla annullerebbe silenziosamente ogni somma costruita su quella colonna, e un totale errato è peggio di un file mancante.
- È apparsa una colonna completamente nuova. Una colonna che il pin non ha mai visto e che non hai escluso, parcheggia il file anziché eliminarlo silenziosamente.
La rilettura di un file sostituisce le sue righe anziché aggiungervi dati. Tutto ciò che il file aveva precedentemente inserito viene rimosso e il suo contenuto attuale viene inserito in un'unica transazione, quindi una partizione riscritta non può generare duplicati o una tabella parzialmente aggiornata in caso di errore durante il processo.
Ogni impostazione di Parquet e quando modificarla
La cosa più utile da dire su questa carta è cosa è non su di esso. Un connettore per cartelle Parquet non ha impostazioni specifiche per il formato. Una cartella CSV ha un delimitatore, un carattere di virgoletta, una codifica, stringhe nulle e un formato data. Una cartella Excel ha un elenco di fogli. Una cartella JSONL ha una profondità di appiattimento. Parquet non ha nessuno di questi elementi, e il motivo è il piè di pagina: lo schema è dichiarato all'interno di ogni file, quindi non c'è nulla da comunicare al connettore e nulla che questo possa dedurre. L'intera categoria "quale opzione ho sbagliato?" non esiste in questo caso.
Ciò che rimane è un breve elenco. Tutto il resto che vedi su Connessione scheda — cartelle radice, sottocartelle di scansione e profondità massima, modelli di esclusione, collegamenti simbolici successivi, modello di analisi del nome file, nomi dei token delle cartelle, intervallo di scansione, hashing del contenuto, politica di eliminazione, conservazione del registro eventi e binari di protezione della scansione — si comporta in modo identico su ogni tipo di cartella ed è documentato una volta, per intero, in Guida al connettore File SetQuesta sezione tratta esclusivamente gli aspetti specifici di una cartella contenente file Parquet.
Nome della tabella
Necessario. Parquet è un driver a tabella singola: ogni file che include pattern corrisponde alle unioni in una tabella, ed è così che quella tabella viene chiamata in SQL — ordini, eventi, viaggiQualunque cosa contenga effettivamente la cartella. Solo lettere, cifre e trattini bassi, e non può iniziare con una cifra; qualsiasi altro carattere viene rifiutato al momento del salvataggio anziché durante la sincronizzazione.
Sceglietelo deliberatamente, perché è il nome che useranno tutte le query salvate, tutte le domande di Nova e tutti gli aggiornamenti dei fogli di calcolo. Rinominarlo in seguito non è distruttivo, ma significa dover rivedere tutto ciò che avete già costruito sopra di esso. Una cartella di file di parti chiamata parte-00000. Non fornisce alcuna informazione sul contenuto delle righe, quindi il nome della tabella è solitamente l'unica etichetta leggibile dai dati.
Includi modelli
Predefinito: **/*.parquet — Preimpostato automaticamente quando si seleziona la scheda Cartella Parquet. Modelli glob, uno per riga, che determinano quali file nelle cartelle radice sono inclusi. Se lasciato invariato, seleziona tutti i file Parquet nell'albero, che è ciò che si desidera la prima volta che si avvia un'esportazione.
Restringere questo spazio è la leva principale a tua disposizione, ed è quasi sempre la mossa migliore rispetto ad alzare il limite massimo. Le esportazioni dal data lake sono partizionate, quindi la struttura delle cartelle include già il filtro desiderato. Se una scansione viene rifiutata perché la condivisione contiene più file del limite consentito, è consigliabile limitare il pattern alle partizioni effettivamente interrogate anziché puntare al limite di file: un connettore che legge quattromila file è più veloce da scansionare, più veloce da sincronizzare e molto più facile da gestire rispetto a uno che ne legge quattrocentomila e applica i filtri in seguito.
**/*.parquet ogni file Parquet nell'albero (il valore predefinito) anno=2026/**/*.parquet un anno di un lago partizionato da Hive **/part-*.parquet File di parte Spark, saltando gli ordini extra inseriti manualmente/**/*.parquet un dataset da una condivisione contenente diversi
Una regola in particolare mette in difficoltà le persone, e il mago la enuncia direttamente sul campo di gioco: Una cartella mista contiene due connettori sulla stessa radice, uno per ogni driver. Se \\lago\esportazioni contiene file CSV insieme a Parquet, ampliando questo modello per **/*.* non ti dà entrambi: i due formati non possono condividere una forma bloccata. Crea un connettore Cartella Parquet e un Connettore per cartelle CSV puntavano allo stesso percorso, ognuno con il proprio schema di inclusione e il proprio nome di tabella.
Sovrascritture del manifesto (JSON)
Nascosto dietro Mostra le opzioni avanzatee più utile su Parquet che altrove. In tutti gli altri casi di questa famiglia, gli override sono un modo per correggere qualcosa che il connettore ha indovinato. Qui non viene indovinato nulla, quindi un override è un modo per correggere qualcosa che il connettore ha indovinato. conduttura E così è stato, ed è proprio in questi casi che non è possibile semplicemente riparare i file.
Tre scenari coprono quasi ogni utilizzo reale. Un job Spark denominato una colonna col_14 o amt_net_x E nessuno vuole scriverlo in un report. Una colonna contiene informazioni riservate e non dovrebbe proprio essere presente nella tabella. Oppure una colonna numerica necessita di una precisione maggiore nella tabella rispetto a quella dichiarata nei file. In questo caso, si tratta di modifiche di una sola riga, applicate quando la struttura viene bloccata, in modo da diventare parte integrante della definizione della tabella anziché doverle riapplicare in ogni query.
{ "rinomina": { "quantità": "quantità" }, "riscrive": { "prezzo": "DECIMAL(18,4)" }, "escludi": [ "note_interne" ] }
- rinomina — dai un nome migliore alla colonna. Non puoi rinominarla
_source_fileo_row_ide non è possibile rinominare due colonne con lo stesso nome. - riscrivere — Forza il tipo di una colonna. Il tipo impostato qui è un'istruzione esplicita, quindi viene applicato senza il controllo rigoroso del piè di pagina che altrimenti bloccherebbe il file. Solo nomi di tipo semplici con precisione opzionale:
DECIMALE(18,4),VARCHAR,GRANDE,DATA. - escludere — escludere completamente alcune colonne dalla tabella. È importante sapere che una colonna esclusa è anche una colonna che il controllo di deriva smette di considerare, quindi questo è il modo più pulito per ignorare un campo che una pipeline continua a modificare.
Il campo deve contenere un oggetto JSON o essere vuoto: i JSON non validi vengono rifiutati al momento del salvataggio, non ignorati silenziosamente. Svuotare la scatola cancella le tue impostazioni e riporta la tabella alla forma dichiarata dai piè di pagina, che è il modo previsto per annullare una sovrascrittura anziché eliminare e ricostruire il connettore.
Perché non è disponibile un'opzione di layout a tabella?
Le cartelle CSV, Excel e JSONL offrono un Disposizione della tabella La scelta è tra un layout fisso o una tabella per layout, perché questi sono i formati che gli esseri umani assemblano manualmente e una cartella contenente questi formati accumula effettivamente diversi set di colonne nel corso degli anni. Parquet non ha questa impostazione, volutamente. Parquet è per definizione un formato generato automaticamente: qualcosa ha prodotto quei file in modo programmatico e, se quel qualcosa genera diverse forme in una cartella, dividerle in tabelle separate non farebbe altro che mascherare un problema di flusso di lavoro anziché metterlo in evidenza.
Quindi una cartella Parquet ottiene una tabella e il disaccordo viene segnalato anziché gestito. Le colonne mancanti vengono assorbite nell'unione e contrassegnate come nullabili; in conflitto tipi sono un rifiuto denominato. Se effettivamente si mantengono diversi set di dati non correlati su una condivisione, la risposta è un connettore per set di dati, con ambito definito con Includi modelli — il che è comunque più chiaro, perché ognuno ottiene poi un proprio nome di tabella.
Limiti di assunzione e di scansione
I quattro limiti di ingestione (righe e byte, per file e per sincronizzazione) e i limiti di scansione (file per scansione, profondità, budget di tempo, parallelismo per radice) sono condivisi tra ogni tipo di cartella, in tempo reale Mostra le opzioni avanzatee segui una regola che vale la pena ripetere: lascia una casella vuota per accettare l'impostazione predefinita, perché zero non significa mai illimitato e viene rifiutato categoricamente. I loro valori e le ragioni per sollevare ciascuno di essi sono nel Guida al connettore del set di file; quelli che più spesso sono importanti per una cartella Parquet sono elencati nella tabella dei riferimenti sopra.
Parquet presenta un vantaggio in questo caso, descritto in precedenza: poiché il conteggio delle righe si trova nel piè di pagina, il limite di righe per file viene controllato prima che vengano letti i dati del file, quindi una violazione si traduce in un rifiuto denominato anziché in un caricamento che fallisce a metà. Aumentare il limite rimane comunque la seconda migliore soluzione. Prima di tutto, restringete il pattern di inclusione.
Importare dati Parquet in Microsoft Excel
La richiesta principale di convertire i file Parquet in Excel è quella di utilizzare un componente aggiuntivo, ma la risposta onesta è che non è necessario farlo. Una volta che la cartella funge da connettore, il componente aggiuntivo Query Streams per Microsoft Excel esegue una query salvata e inserisce le righe nel foglio di calcolo, aggiornandolo ogni volta che lo si richiede. In questo modo si ottiene il formato Parquet in Excel senza bisogno di conversioni, senza un cluster Spark e senza che una copia dei dati rimanga inutilizzata nella cartella Download di qualcuno. La stessa query funziona senza modifiche anche in Fogli Google.
È necessario un account Query Streams e l'agente di rete in esecuzione su una macchina in grado di visualizzare la cartella: un server, una workstation con la condivisione mappata o il proprio laptop. I connettori per cartelle Parquet richiedono Agente di rete 2.6 o versioni successive.
- Installa l'agente da pagina di download se non è già in esecuzione.
- Nel portale, aggiungi un connettore dati e scegli Cartella Parquet.
- Inserisci il percorso della cartella così come lo vede il computer dell'agente e assegna un nome alla tabella: questo campo è obbligatorio perché tutti i dati presenti nella cartella vengono uniti in un'unica tabella.
- Lascia attivo il modello di inclusione
**/*.parqueta meno che la cartella non contenga più elementi di quelli che desideri visualizzare nella tabella, nel qual caso riducila.**/part-*.parquet, o una singola partizione comeanno=2026/**/*.. - Salva. L'agente legge i piè di pagina di un massimo di 64 file, blocca lo schema e segnala le colonne e i tipi trovati.
- Apri il generatore di query, seleziona il connettore e scrivi il codice SQL, oppure chiedi a Nova AI di scriverlo per te.
- Salva la query, quindi eseguila dal componente aggiuntivo di Microsoft Excel o Fogli Google ogni volta che hai bisogno dei numeri.
\\lago\esportazioni\ordinioppure un percorso locale sul computer dell'agente, e verificare che l'account con cui viene eseguito l'agente abbia i permessi di lettura. Le esportazioni del data lake si trovano spesso in una struttura di cartelle con partizioni di data, quindi lasciare invariata l'impostazione della profondità a meno che la struttura non sia effettivamente più profonda di otto livelli.
Da lì, la cartella si comporta come qualsiasi altra origine dati. Si collega a Microsoft SQL Server, PostgreSQL, MySQL, BigQuery e altri, nonché a connettori API come Stripe o Shopify, in modo che una tabella di data warehouse archiviata su una condivisione di file possa essere collegata ai dati di produzione in tempo reale con una singola istruzione di sola lettura, senza dover prima caricare nulla in un data warehouse.
Domande frequenti
Come posso leggere i file Parquet senza Spark? +
Posso aprire file Parquet in Microsoft Excel? +
Devo specificare a Query Streams i tipi di colonna? +
DECIMALE(18,2) Il valore nel file arriva nella tabella come un decimale esatto, mai come un numero in virgola mobile.
Tutti i file Parquet devono avere colonne identiche? +
NULL per i file che ne sono sprovvisti. Una colonna con un tipo diverso in file diversi viene invece considerata un rifiuto denominato: il connettore indica la colonna ed entrambi i tipi anziché convertirne uno nell'altro.
La mia pipeline ha aggiunto una colonna. La cartella funzionerà ancora? +
Perché uno dei miei file Parquet è stato parcheggiato? +
file_eventi con il nome del file e la specifica discrepanza, e tutti gli altri file continuano a sincronizzarsi.
Quanti file Parquet può leggere un singolo connettore? +
Posso sapere da quale file proviene una riga? +
_source_file nominando il suo file e _row_id identificandolo in modo univoco attraverso la tabella. Per Parquet l'identificatore è costruito dalla posizione ordinale reale della riga all'interno del suo file, riempito con zeri in modo che l'ordinamento per _row_id ordina effettivamente le righe nell'ordine del file. Raggruppamento per _source_file Di solito è il modo più rapido per trovare la partizione responsabile di una cifra che sembra errata.
Cosa succede quando la pipeline scrive nuovi file di parte? +
file_eventi.
I miei dati Parquet sono stati caricati o modificati? +
SELEZIONARE, CON, PRAGMA, DESCRIVERE o SPIEGARE istruzione — qualsiasi cosa possa scrivere viene rifiutata prima dell'esecuzione.
Iniziare
Guarda all'interno di quella cartella di file Parquet
Punta l'agente alla cartella e interroga ogni file parziale come se fosse un'unica tabella SQL, utilizzando esattamente i nomi e i tipi di colonna dichiarati dai file stessi. Niente Spark, niente Python e niente esce dalla tua rete.
Guide correlate: Come interrogare una cartella di file con SQL | Unire più file CSV in un'unica tabella | Scarica l'agente Query Streams | Tutte le guide di File Set Connector
Categoria: Connettori per set di file
Tag: da parquet a excel, interrogare file parquet, leggere parquet senza spark, cartella parquet, parquet in excel, connettore per cartelle parquet, sql su parquet, esportazione da data lake
Meta Description: Interroga una cartella di file Parquet come un'unica tabella SQL e importa i dati in Microsoft Excel. Senza Spark, senza caricamenti.

