Overview
OmniSelect FileSQL is a fully client-side SQL query tool. Your files are never uploaded to any server — all parsing and querying happens entirely in your browser. Load one or more files, write SQL, and get results instantly.
Step 1 — Select Files
Click anywhere in the File Select panel, or drag and drop files directly onto it. You can load multiple files at once to join them with SQL.
Supported File Types
| Format | Extensions | Notes |
|---|---|---|
| CSV / TSV / TXT | .csv, .tsv, .txt | Configurable delimiter, quote, record separator |
| Excel | .xlsx, .xls, .xlsm | Choose sheet, skip rows, header row supported |
| JSON | .json | Nested objects/arrays are flattened with dot-path columns |
| XML | .xml | Nested elements flattened to dot-path columns |
| YAML | .yaml, .yml | Nested structures flattened |
| Avro | .avro | Parsed via WebAssembly |
| Parquet | .parquet | Parsed via WebAssembly + Apache Arrow |
File Row Options
| Option | Applies To | Description |
|---|---|---|
| Alias | All | Single letter (A–Z) used as the table name in SQL. It is taken from the start of the filename, so orders.csv becomes O and you query it with SELECT * FROM O. If two files would claim the same letter, the second gets another free one. Editable — type whichever letter you prefer. |
| Sheet | Excel | Select which worksheet to load |
| Column Delimiter | CSV/TSV/TXT | Comma, Tab, Pipe, or custom character |
| Quote Character | CSV/TSV/TXT | Character used to wrap quoted fields |
| Record Delimiter | CSV/TSV/TXT | LF, CR, or CRLF line endings |
| Skip Rows | CSV/TSV/TXT/Excel | Number of rows to skip from the top before reading data |
| Header Row | CSV/TSV/TXT/Excel | When checked, first (non-skipped) row is used as column names |
first name becomes first_name in SQL."42", "3.14") are automatically coerced to numbers so you can write WHERE age = 30 instead of WHERE age = '30'.Step 2 — Write SQL
Use the SQL Editor to write standard SQL queries. The editor supports syntax highlighting. Each loaded file is available as a table using its alias letter.
Basic Examples
-- Select all rows from file A SELECT * FROM A -- Filter with a number column SELECT * FROM A WHERE age > 25 -- Filter with a text column SELECT * FROM A WHERE city = 'New York' -- Select specific columns SELECT first_name, last_name, salary FROM A WHERE salary > 50000 -- Order results SELECT * FROM A ORDER BY last_name ASC -- Aggregate SELECT department, COUNT(*) as total, AVG(salary) as avg_salary FROM A GROUP BY department
Joining Multiple Files
Load two files — they get aliases A and B (or whatever letters are assigned). Then join them:
-- Inner join SELECT A.order_id, A.amount, B.customer_name FROM A JOIN B ON A.customer_id = B.id -- Left join SELECT A.*, B.region FROM A LEFT JOIN B ON A.region_code = B.code
A.column_name) to avoid ambiguity.Nested JSON/XML/YAML Columns
Nested structures are flattened using dot-path names. For example, a JSON field address.city becomes a column. In the results table, the short alias is shown on top with the full path below it.
-- Query a nested field SELECT name, address_city FROM A WHERE address_city = 'Austin'
SQL Functions Supported
OmniSelect uses AlaSQL under the hood. Commonly supported functions include:
| Category | Functions |
|---|---|
| Aggregate | COUNT, SUM, AVG, MIN, MAX |
| String | UPPER, LOWER, TRIM, SUBSTRING, CONCAT |
| Conditional | CASE WHEN … THEN … ELSE … END, COALESCE, ISNULL |
| Filtering | LIKE, IN, BETWEEN, IS NULL, IS NOT NULL |
| Clauses | WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET |
Step 3 — Run the Query
Click the Run Query button. Results appear in the Query Results panel below. Large result sets are paginated at 1,000 rows per page — use the Previous / Next buttons to navigate.
Step 4 — Export Results
Click the Export button in the Query Results panel to download results in your preferred format:
| Format | Description |
|---|---|
| CSV | Comma-separated values, opens in Excel or any text editor |
| JSON | Array of objects, useful for APIs or further processing |
| Excel | .xlsx file with results on a single sheet |
| Parquet | Columnar .parquet file — numeric columns stay numeric, everything else is written as text |
Tips & Tricks
- You can reload a file with updated data using the ↻ (reload) button on each file row — no need to remove and re-add it.
- Use the X button to remove a file from the session.
- You can load up to 26 files simultaneously (one per alias letter A–Z).
- Drag and drop multiple files at once onto the File Select panel.
- String comparisons use single quotes:
WHERE name = 'Alice' - For columns that look like reserved SQL words (e.g.
key,value,date), the app automatically bracket-quotes them so your query still works.
Privacy
All processing is done entirely in your browser. No data is sent to any server. Files remain on your machine at all times.