Seven Formats, One Query
CSV, Excel, JSON, XML, YAML, Avro and Parquet. Normally each of those is a different tool, or at least a different import. Load them together and they are just seven tables, joinable in one SELECT.
What Each Format Becomes
| Format | How it becomes a table |
|---|---|
| CSV / TSV / TXT | Header row becomes the columns. Delimiter, quote character, record delimiter and skipped rows are all adjustable per file, on its row in the File Select panel. |
| Excel (.xlsx, .xls) | One sheet becomes one table; pick the sheet in the Sheet column. The first row is treated as the header unless you say otherwise. |
| JSON / JSON Lines | An array of objects becomes rows. Nested objects flatten to dot-path columns, so address.city is its own column. |
| XML | Repeated elements become rows; attributes and child elements become columns, flattened the same way. |
| YAML | A top-level list of mappings becomes rows. Same flattening rules. |
| Avro | Records become rows using the file's own embedded schema, so types come through rather than being guessed. |
| Parquet | Read with a WebAssembly build of the Arrow and Parquet libraries, entirely in the tab. See the Parquet guide. |
Joining Across Formats
Seven files loaded together: budget.xlsx, departments.avro, events.json, orders.xml, regions.parquet, sales.csv and services.yaml. Their aliases come out as B, D, E, O, R, S and — because S is taken — A for the YAML file.
A comma-separated file joined to a columnar binary file, on region:
SELECT S.region, R.manager, R.office, COUNT(*) AS sales, ROUND(SUM(S.amount)) AS revenue FROM S JOIN R ON S.region = R.region GROUP BY S.region, R.manager, R.office ORDER BY revenue DESC
Nothing in that query says which file is which format, because at that point it does not matter. The formats stop being formats the moment they are loaded.
Drop in whatever shape your data arrived in.
Open the tool →Asking in English Instead
The plain-English box does not care about formats either. With the same files loaded, total amount by region gives:
SELECT region, SUM(amount) AS total_amount FROM S GROUP BY region
and total planned by department, which lands on the Excel workbook:
SELECT department, SUM(planned) AS total_planned FROM B GROUP BY department
Exporting Into Any of Them
The Export menu writes the current result set as CSV, Excel, JSON or Parquet. Combined with loading, that makes this a conversion tool as a side effect: load XML, export Parquet; load Parquet, export Excel for a colleague who will only open spreadsheets.
What you export is the result, not the input — so you can convert only the rows and columns you actually need by putting a WHERE and a column list in front of it.
What Does Not Survive
Being clear about this is more useful than a longer feature list:
- Excel formulas come through as their computed values, not as formulas. Formatting, colours and charts are not imported at all.
- Deeply nested structures flatten rather than staying nested. A repeated field produces one row per element with the parent values repeated alongside, which is usually what you want and occasionally is not.
- XML mixed content — text and child elements interleaved in the same node — has no clean table shape and is best avoided.
- Encrypted Parquet and very unusual encodings are not supported. A file that cannot be read raises an error rather than loading silently wrong data.
- Types from CSV are inferred, because CSV carries none. Avro and Parquet carry real schemas, so their types are exact.
Reasonable Questions
Can I load two sheets from the same workbook?
Add the file twice and choose a different sheet on each row. They become two tables with two aliases.
My JSON is one big object, not an array.
An array of objects is the shape that maps onto rows. A single object gives you a single row. If the array you want is nested inside the object, the flattened dot-path columns will get you to it.
Does the YAML need a particular shape?
A top-level list of mappings works directly. A mapping of mappings will load as one row.
How do I see the column names a format produced?
Run SELECT * FROM X LIMIT 1 and read the result headers. For flattened formats that is the quickest way to see the dot-paths.
Is the file size limit the same for all of them?
50 MB per file and a million rows, whatever the format. Because Parquet and Avro are compressed, a 50 MB file of either holds considerably more data than a 50 MB CSV.