OmniSelect FileSQL

Guides
← Back to App
HomeGuides › Seven formats, one query

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

FormatHow it becomes a table
CSV / TSV / TXTHeader 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 LinesAn array of objects becomes rows. Nested objects flatten to dot-path columns, so address.city is its own column.
XMLRepeated elements become rows; attributes and child elements become columns, flattened the same way.
YAMLA top-level list of mappings becomes rows. Same flattening rules.
AvroRecords become rows using the file's own embedded schema, so types come through rather than being guessed.
ParquetRead with a WebAssembly build of the Arrow and Parquet libraries, entirely in the tab. See the Parquet guide.
💡 Every one of these is decoded in the browser. There is no conversion service and no temporary upload — a 40 MB Parquet file produces exactly as many network requests as a 2 KB CSV: none.

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:

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.

Related Guides