SQL on CSV
Run SQL on a CSV file in your browser
Free SQL on CSV, no signup, no database, nothing uploaded. Drop a CSV, Parquet, JSON or JSONL file up to 1.5 GB, type a SELECT, get up to 1,000,000 rows back from DuckDB running in a Web Worker inside your tab, and export them as CSV, Parquet, JSON, JSONL or Markdown.
No file handy? Open CO2 emissions by country and year (50k rows, 14 MB).
Your file is the table named data
Open a file and run SELECT country, max(co2) AS peak FROM data GROUP BY 1 ORDER BY 2 DESC LIMIT 10. Column names come from the header; quote them with double quotes if they contain spaces, like "Total revenue". Anything typed into the bar that starts with SELECT, WITH or FROM runs as SQL; anything else is treated as a filter.
It is full DuckDB SQL: CTEs, window functions, GROUP BY ALL, QUALIFY, regex functions, date arithmetic, UNNEST for nested JSON, PIVOT. The same dialect you'd use in the DuckDB CLI, so a query that works here works in a script later.
No SQL needed for the easy questions
The same bar takes a filter language: country:NL, amount:>500, year:2010..2020, -status:ok, sku:AB*, free words that search every text column, OR and parentheses. Click a header to sort, shift-click for a second key, hide columns, and the column panel shows non-null counts, distinct values, min, max and the top values.
Press the SQL toggle and the current filter, sort and visible columns are rewritten as a SELECT you can keep editing. It is the fastest way to learn what a filter compiles to.
Limits that matter
One file per page, up to 1.5 GB, read into the memory of your tab. Above that a CSV loads partially and a note says how many rows made it. Results are capped at 1,000,000 rows and a badge says first 1M when the cap hits; aggregate or LIMIT to stay under it.
There is one table, data, so joins across two files aren't possible here. Self-joins, subqueries and CTEs over that table are fine. Queries run in a Web Worker, so a slow GROUP BY doesn't freeze the page.
Export and share the result
Export writes the query result: CSV with a header, Parquet with zstd compression, a JSON array, JSONL, or a Markdown table of the first 1,000 rows. The CO2 sample is 13.7 MB as CSV and 4.3 MB as Parquet.
Press Share to upload the file once. On the hosted page the query, sort and visible columns live in the URL after #, so the link you copy opens on the same result for whoever gets it. Anonymous links take files up to 100 MB and are deleted 7 days after creation; a free account keeps 10.
When to use DuckDB on your machine instead
Files over 1.5 GB, joins across several files, or writing results back to disk: install DuckDB and run duckdb -c "SELECT count(*) FROM read_csv('data.csv')". It is the same engine and the same SQL, minus the browser's memory ceiling.
For a dataset that updates every night, push it instead: curl -T data.csv https://rows.page, then push again to the same link and the page shows how many rows are new, gone or changed, with the same SQL bar on top.
Limits for SQL on CSV in the browser
| What | Limit or price |
|---|---|
| Price | $0, no account, nothing to install |
| File size | Up to 1.5 GB per file: CSV, TSV, JSON, JSONL or Parquet |
| Engine | DuckDB-WASM 1.33, queries run in a Web Worker inside your tab |
| Result rows | The first 1,000,000 rows are shown and exported |
| Tables | One file per page, available as the table data |
| Export | CSV, Parquet (zstd), JSON, JSONL, Markdown (first 1,000 rows) |
| Share a link without an account | $0, files up to 100 MB, link deleted 7 days after creation |
| Free account | $0, 10 datasets kept, last 3 versions |
| Pro | $12/month, 100 datasets, files up to 500 MB, private links |
| Max | $39/month, 1,000 datasets, files up to 2 GB, private links |
Questions
Is my file uploaded to run the query?
No. Opening a file reads it inside your browser tab. It only leaves your machine if you share it or push it with curl.
Which SQL dialect is it?
DuckDB, which is close to PostgreSQL. SELECT ... FROM data with CTEs, window functions, GROUP BY ALL, QUALIFY, string and date functions, and list and struct functions for nested JSON.
Can I join two CSV files?
Not in the browser; there is one table per page. Open DuckDB locally and query both files with read_csv, or combine them first and drop the result here.
How big can the file be?
1.5 GB per file. The 7.4 million row NYC taxi Parquet sample queries fine. A CSV over 1.5 GB loads partially with a note saying how many rows made it.
Can I save the query?
On a shared link, yes: the query is in the URL after #, so the URL you copy opens on the same result. For a local file the query goes when the tab closes, so share the file first if you want to keep it.
More tools
- CSV viewerOnline CSV viewer for big files
- Parquet viewerParquet viewer, no Python needed
- JSONL viewerJSONL viewer for logs, evals and traces
- JSON to tableJSON to table, nested fields included
- Past Excel's row limitExcel stops at 1,048,576 rows. Open the rest here.
- CSV to ParquetConvert CSV to Parquet in your browser
- Parquet to CSVConvert Parquet to CSV in your browser
- JSON to CSVConvert JSON to CSV, nested objects included
- CSV to JSONConvert CSV to JSON or JSON Lines
- JSONL to CSVConvert JSONL to CSV in your browser
- TSV to CSVConvert TSV to CSV in your browser
- CSV to MarkdownTurn a CSV into a Markdown table
- Share a CSVShare a CSV as a link, not an attachment
- Version control for CSVVersion control for CSV files, without git
Pushing data from a script or agent? Read the docs.