OmniSelect FileSQL

Guides
← Back to App
HomeGuides › Files as SQL tables

Turn Any File Into a SQL Table

The whole mental model is one sentence: one file becomes one table, and its alias letter is the table name. Once that clicks, everything else is just SQL you already know.

File in, table out

Drop a file on the File Select panel and it is parsed into rows and columns in memory, exactly as if you had loaded it into a database — except there is no database, no CREATE TABLE, and no import step. It is queryable the moment it appears.

This works identically for every supported format:

FormatExtensionsBecomes
Delimited text.csv, .tsv, .txtOne table, columns from the header row
Excel.xlsx, .xls, .xlsmOne table per selected sheet
JSON.jsonOne table, nesting flattened to dot-paths
XML.xmlOne table, repeated elements become rows
YAML.yaml, .ymlOne table, nesting flattened
Avro.avroOne table, read via WebAssembly
Parquet.parquetOne table, read via WebAssembly

How the table gets its name

Each file is given a single-letter alias, shown in the Alias column. The letter comes from the start of the filename, so orders.csv becomes O and customers.csv becomes C. When two files would claim the same letter, the second is given another free one.

⚠ Do not assume the first file is A. It is derived from the name, not the load order. Guessing is the single most common reason a first query fails with an unknown-table error. The Alias column is the authority — and the letter is editable, so type whatever you prefer.

Seeing the schema

There is no separate schema browser; one query does the job:

SELECT * FROM O LIMIT 1

The result headers give you the full column list. For nested formats, each header shows the short name on top with the full dot-path underneath, so you can see where a flattened field came from.

How columns are named

💡 That last protection covers column names, not aliases you invent. SELECT COUNT(*) AS total fails because total is reserved; AS total_rows is fine.

Up to 26 tables at once

Load as many files as you have letters for — A to Z. They can be different formats, and they are all queryable in the same statement.

SELECT O.order_id, C.name, P.category
        FROM O
        JOIN C ON O.customer_id = C.customer_id
        JOIN P ON O.product_id = P.product_id

That joins a CSV, an Excel sheet and a Parquet file together, and the query does not care which was which.

Load a file and it is a table. That is the whole setup.

Open the tool →

Stacking files instead of joining them

Monthly extracts with identical columns are a common case. Use UNION ALL to treat them as one table:

SELECT * FROM J
        UNION ALL
        SELECT * FROM F
        UNION ALL
        SELECT * FROM M

Use UNION instead of UNION ALL if you want duplicate rows removed.

Limits worth knowing

LimitValue
Files at once26 (one per alias letter)
File size50 MB each
Rows per file1,000,000 — a safety backstop, and truncation is always reported
Results paging1,000 rows per page

Past those, you want a real database, and that is the honest answer rather than a grudging one.

Related Guides