Convert Avro to Parquet — Free, Private, In-Browser
Avro is a row-oriented binary format with a rich schema embedded in the file header — the format you reach for at the ingest edge, where Kafka topics, Hadoop landing zones, and streaming pipelines value cheap appends and painless schema evolution. Parquet is its analytics counterpart: columnar, block-compressed, and splittable, built to be scanned rather than streamed. Converting Avro to Parquet is the classic "land in Avro, serve in Parquet" step. Because both formats are binary and strongly typed, this is one of the good conversions — the schema survives the trip. You are reshaping the same typed data from rows into columns, not flattening it down to untyped text and throwing the types away, so nothing here degrades to strings the way a CSV export would.
There is no type sniffing, unlike a CSV read — Avro declares its schema in the header, so DuckDB reads the types directly. Avro logical types map onto Parquet's own annotations: a decimal (backed by bytes or fixed) stays a fixed-point DECIMAL at its declared precision and scale, date, timestamp-millis and timestamp-micros become DATE and TIMESTAMP, and uuid is preserved rather than collapsing to a plain string. Nested shapes carry over natively — records become STRUCTs, arrays become LISTs, maps become MAPs. Unions are the one nuance: the ubiquitous ["null","T"] union collapses to a nullable column of T, while a genuine multi-branch union like ["int","string"] maps to a DuckDB UNION, which lands in Parquet as a tagged struct.
The payoff is the row-to-columnar reshape. Parquet stores each column contiguously and encodes it independently — dictionary and run-length encoding, then a block compressor like zstd or snappy — so low-cardinality and sorted columns collapse in a way Avro's row framing can't touch. Expect the Parquet to be meaningfully smaller and far cheaper to query: readers can project just the columns they need and skip whole row groups using per-block min/max statistics. One honest caveat: reading Avro pulls DuckDB's avro extension once from extensions.duckdb.org, so this specific conversion needs a network connection the first time (a fully air-gapped machine can't do it). Only that extension binary is fetched — your Avro file itself never leaves the browser; the conversion runs locally in DuckDB-WASM and is never uploaded.
Drop a file or click to browse
Drop a Avro file — processed locally, never uploaded
Frequently asked questions
- How are Avro union types handled?
- The common nullable pattern — a ["null","T"] union — collapses to an ordinary nullable column of type T. A genuine multi-branch union like ["int","string"] maps to a DuckDB UNION, which is physically a tagged struct (a discriminator plus one field per branch), and that's how it serializes into the Parquet file.
- Do Avro logical types survive the conversion?
- Yes. Because Parquet has its own logical-type annotations, the semantics carry across instead of being lost: a decimal stays an exact fixed-point DECIMAL at its declared precision and scale, date and timestamp-millis/micros become DATE and TIMESTAMP, and uuid is preserved. Nothing silently degrades to a float or a string the way it would in a CSV export.
- Does the Avro read work fully offline?
- Not the first time. Avro isn't bundled the way Parquet, CSV and JSON are — DuckDB fetches its avro extension once from extensions.duckdb.org, then caches it, so a truly air-gapped browser can't read Avro. That network call only pulls the extension binary; your data file is still read entirely in the browser and never leaves your machine.
- Is my file uploaded anywhere?
- No. The Avro→Parquet conversion runs entirely in your browser via DuckDB-WASM. Your file never leaves your device.
- How large a file can I convert?
- It's bounded by your browser's available memory rather than any server limit — files in the hundreds of MB are routine. DuckDB runs single-threaded here, so very large files just take a little longer.
- Do I need an account?
- No — it's free and requires no sign-up.
Do more with your Avro file
- Parquet InspectorRead a Parquet file's schema, row groups, compression & column stats.
- Warehouse DDLGenerate Snowflake/BigQuery/Redshift CREATE TABLE & load commands.
- dbt generatorGenerate a dbt sources.yml, staging model & schema.yml from a schema.
- Data profilePer-column null %, distinct counts, min/max & median.