Migrate from QuestDB
Keep your Line Protocol pipeline, bulk-load your history, and translate your queries to standard SQL. The same dataset lands in 13.8 GiB of portable Parquet instead of QuestDB's 67.9 GiB, with the full analytical SQL surface on top.
Every command in the guide was tested against QuestDB 9.4.3 and Arc 26.06.3.
Why teams move
QuestDB is fast at high-frequency ingestion. Where teams outgrow it is analytical depth and storage cost, and both are a smooth migration, not a rewrite.
Storage cost
4.9x smaller, and you own it
The ClickBench dataset fills 67.9 GiB in QuestDB and 13.8 GiB of Apache Parquet in Arc. On object storage that's roughly five times the bytes you pay for every month, and Arc's Parquet is queryable in place by any tool, so there's no export step if you leave.
Query engine
Full standard SQL
Arc runs a vectorized analytical engine with the complete standard-SQL surface. Window functions, CTEs, and complex joins run without a penalty. QuestDB's SAMPLE BY and LATEST ON have direct, tested equivalents.
Ingestion
Line Protocol on both sides
Both accept InfluxDB Line Protocol, so your Telegraf and ILP writers re-point with a URL change. Arc also speaks a MessagePack columnar protocol for high-throughput ingest, plus bulk CSV and Parquet import.
Migration in three steps
Re-point live writes, bulk-load history, translate queries. Here's the shape of each. The full walkthrough is in the docs.
Re-point live ingestion
Arc exposes an InfluxDB 1.x-compatible /write endpoint. Send the exact line protocol you send QuestDB; only the URL and token change.
curl -X POST "http://localhost:8000/write?db=metrics&precision=ns" \
-H "Authorization: Bearer $ARC_TOKEN" \
--data-binary 'cpu,host=server01 usage_idle=95.0 1700000000000000000'Bulk-load your history
Export each table from QuestDB's /exp endpoint to CSV, then import it into Arc. Arc auto-detects QuestDB's RFC 3339 timestamps.
curl -G "http://localhost:9000/exp" \
--data-urlencode "query=SELECT * FROM cpu" -o cpu.csv
curl -X POST "http://localhost:8000/api/v1/import/csv?measurement=cpu&time_column=timestamp" \
-H "Authorization: Bearer $ARC_TOKEN" -H "X-Arc-Database: metrics" \
-F "file=@cpu.csv"Translate your queries
QuestDB's time-series extensions map to standard SQL. The results match exactly.
-- QuestDB: SELECT timestamp, avg(usage_idle) FROM cpu SAMPLE BY 1h
-- Arc (send header X-Arc-Database: metrics and keep bare table names):
SELECT time_bucket(INTERVAL '1 hour', time) AS bucket, avg(usage_idle)
FROM cpu GROUP BY 1 ORDER BY 1;QuestDB SQL → Arc SQL
Every QuestDB extension has a direct standard-SQL equivalent that returns identical results.
| QuestDB | Arc (standard SQL) |
|---|---|
SAMPLE BY 1h | time_bucket(INTERVAL '1 hour', time) |
LATEST ON ts PARTITION BY sym | DISTINCT ON (sym) … ORDER BY sym, time DESC |
Designated timestamp (implicit) | Explicit WHERE time >= … ORDER BY time |
dateadd('d', -7, now()) | now() - INTERVAL '7 days' |
to_timezone(ts, 'UTC') | time AT TIME ZONE 'UTC' |
Frequently Asked Questions
Do I have to rewrite my ingestion pipeline to move from QuestDB to Arc?
No. QuestDB and Arc both accept InfluxDB Line Protocol, so any Telegraf pipeline or ILP client keeps its exact payload. You change the destination URL and add an Arc token. Arc exposes an InfluxDB 1.x-compatible /write endpoint that ingests the same line protocol QuestDB does.
How do I move my historical QuestDB data into Arc?
Export each QuestDB table to CSV through its /exp REST endpoint, then bulk-import the file into Arc with POST /api/v1/import/csv. Arc auto-detects the RFC 3339 timestamps QuestDB produces and renames the timestamp column to Arc's time column. This round-trip is documented and tested at docs.basekick.net/arc/migration/questdb.
What replaces QuestDB SAMPLE BY and LATEST ON in Arc?
Arc runs standard SQL. SAMPLE BY maps to time_bucket(INTERVAL '1 hour', time) with GROUP BY; LATEST ON maps to DISTINCT ON or a ROW_NUMBER() window function. Both produce identical results to their QuestDB equivalents, and you also get the full analytical SQL surface: CTEs, window functions, and complex joins.
Does Arc really store the same data in less space than QuestDB?
Yes. On the ClickBench dataset (99.9M rows), QuestDB stores 67.9 GiB while Arc stores the same data in 13.8 GiB of Apache Parquet, 4.9x less. Arc's Parquet is queryable in place by any Parquet-compatible tool with no export step.
See the tested, step-by-step guide at docs.basekick.net, or compare the two head-to-head in Arc vs QuestDB. Benchmark methodology on benchmark.clickhouse.com.
Ready to handle billion-record workloads?
Deploy Arc in minutes. Own your data in open files on your storage. Use for analytics, observability, AI, IoT, or data warehousing.