Convert Between CSV, JSON, Excel and Parquet
Most format conversion happens because somebody downstream cannot open what you have. The usual fix is an online converter that wants your file uploaded. Here is the same job done locally — and because SQL sits in the middle, you can convert a filtered subset rather than the whole thing.
What converts to what
Anything readable can be written to any of the four export formats:
| Read | Write |
|---|---|
| CSV, TSV, TXT, Excel (.xlsx/.xls/.xlsm), JSON, XML, YAML, Avro, Parquet | CSV, JSON, Excel, Parquet |
So JSON→Excel, Parquet→CSV, XML→JSON, Avro→Parquet, YAML→Excel and every other pairing are all the same three steps.
The three steps
- Drag the source file onto the File Select panel in the tool. Note its alias letter —
events.jsonbecomesE. - Run
SELECT * FROM E. - Click Export and pick the target format.
The output is generated inside your browser and saved to your downloads folder. Nothing is uploaded at any point.
Convert a file without handing it to a stranger's server.
Open the tool →Convert less than everything
This is the part a plain converter cannot do. Instead of SELECT *, convert exactly what the recipient needs:
-- Only this year, only the columns they asked for
SELECT order_id, customer_name, amount, order_date
FROM E
WHERE order_date >= '2025-01-01'
ORDER BY order_date
That keeps their spreadsheet a workable size and avoids sending columns nobody needs — which is both a courtesy and, when the file contains personal data, a sensible habit.
What survives the trip
| Concern | Behaviour |
|---|---|
| Nested structures | JSON, XML and YAML nesting is flattened to dot-path columns on read. Exporting to CSV or Excel keeps that flat shape — the nesting is not rebuilt. This is usually the point of the conversion. |
| Repeated elements | An array produces one row per element, with parent values repeated alongside. A 10-order JSON file with 3 items each becomes 30 rows. |
| Numeric types | Numeric-looking values are treated as numbers, so 250.00 exports as 250. Trailing zeros are presentation, not data. |
| Leading zeros | Preserved. 00042 stays text precisely so conversion does not corrupt it. |
| Parquet export types | Numeric columns stay numeric; everything else is written as text. Predictable, but it means a round-trip is not guaranteed to reproduce every original column type. Keep the original if you need a faithful copy. |
| Excel export | One sheet containing the result set. Formatting, formulas and multiple sheets are not carried across. |
Notes on particular conversions
JSON to Excel
The common frustration is that Excel cannot open nested JSON at all. Flattening solves it: customer.address.city becomes its own column, so the spreadsheet is usable. Check the headers with SELECT * FROM E LIMIT 1 before exporting — deeply nested files can produce a lot of columns, and selecting the ones you want is usually better than taking all of them.
CSV to Parquet
Useful for shrinking a large extract before sending it, or feeding a data pipeline that expects Parquet. Numeric columns are detected automatically, so filters still work on the far side. Compression means the output is typically far smaller than the CSV.
Parquet to CSV or Excel
The everyday case: a colleague sent a .parquet from a warehouse and cannot open it. See opening a Parquet file offline for the full walkthrough.
XML or YAML to anything
Both flatten the same way as JSON. See querying XML, YAML and Avro.
Combining files while converting
Because SQL is in the middle, the input does not have to be one file. Join a Parquet extract to a CSV lookup and export the enriched result as Excel in a single pass:
SELECT S.order_id, S.amount, R.region_name
FROM S
JOIN R ON S.region_code = R.code