Arrow, Feather and Avro viewer: see the rows of a data file
Drop an Apache Arrow file (IPC file or stream), a Feather v2 file or an Avro container file to see its schema with every column's type and whether it can be null, the row count, the number of record batches or Avro blocks, and the rows in a table. Nested records become dotted columns such as address.city; lists and maps show as JSON. Save it all as CSV or JSON.
The file is read on your device. It is never uploaded.
What it shows
- Schema: every column with its type as the file states it (
Int64,Utf8,Timestamp<MICROSECOND>,Dictionary<Int32, Utf8>for Arrow;long,string,timestamp-millis,decimal(10,2),enum Colourfor Avro) and whether it may be null. For Avro the writer's full JSON schema is shown too, with itsdoctext. - Counts: rows, columns, and the number of Arrow record batches or Avro blocks. An Avro file's row count is added up from its block headers, so it appears before a single record is decoded.
- Rows: in a table that draws only what is on screen. Timestamps and dates show in UTC ISO form (2024-01-31T09:30:00Z), decimals as exact text, 64-bit integers without rounding, binary values as a byte count. Click a cell to see a long value in full.
- Nested data: a struct (Arrow) or record (Avro) is split into one column per field, named with dots: a
customerrecord holding anaddressrecord givescustomer.address.city. A list, a map or a union of several record types stays in one cell as JSON text, for example["red","blue"]. - Export: CSV (flattened, one column per leaf field, UTF-8) or JSON (an array of records with the nesting kept). Both are built in this tab, one record batch or Avro block at a time.
Formats and compression it reads
| File | How it is recognised | Opened? |
|---|---|---|
| Arrow IPC file (.arrow) | starts and ends with ARROW1; a footer lists every record batch | yes |
| Arrow IPC stream (.arrows) | no magic: each message starts with FF FF FF FF and a length, the first one a schema | yes |
| Feather v2 (.feather) | the Arrow IPC file format under another name (pyarrow 0.17 and later) | yes |
| Arrow body compression | LZ4 frame or Zstandard per buffer | yes, both |
| Avro container (.avro) | starts with Obj and byte 01, then the JSON schema | yes |
| Avro codecs | the avro.codec header entry | null, deflate and snappy (with its CRC-32 check); not zstandard, bzip2 or xz |
| Feather v1 | FEA1 | no, named only |
| Apache ORC | ORC | no, named only |
Compression matters more than it looks: pandas.DataFrame.to_feather() writes LZ4-compressed Feather by default, and Spark writes Avro with snappy unless told otherwise, so a viewer without those decoders fails on the most common files. Arrow is read by apache-arrow 21.2.0 (Apache-2.0), with Zstandard from fzstd 0.1.1 (MIT); the LZ4 frame decoder and the whole Avro reader are viewhack's own code, written from the format specifications. All of it is served from this site.
A worked example
Apache Avro's own test file weather.avro is 358 bytes. Its header says codec null and holds the schema test.Weather ("A weather reading.") with three fields: station (string), time (long) and temp (int). One block follows, holding 5 records. The first row reads 011990-99999, -619524000000, 0. The time is a plain long with no timestamp-millis logical type, so it is shown as the number the file stores. Read as milliseconds since 1970 it is 1950-05-15 14:00 UTC, but only the writer's documentation can tell you that. Its siblings weather-deflate.avro and weather-snappy.avro hold the same five rows and open the same way.
What it cannot do
- ORC files are recognised and named, not opened. pyarrow (
pyarrow.orc.read_table) or DuckDB reads them, and either can save the data as Parquet, which opens on the Parquet page. - Feather v1 (files starting
FEA1, written before 2020) is not read. Loading it in pandas and saving it again withto_feather()gives v2. - Avro with zstandard, bzip2 or xz: the schema is shown, the rows are not.
avro-tools recodeccan rewrite the file with deflate or snappy. - Large Arrow files are read into memory whole. Arrow is meant to be memory-mapped, and a browser tab cannot do that. A few hundred MB is usually fine on a laptop; a phone may run out of memory well before that. Avro files are read from disk one block at a time, so their size matters much less.
- Exports are held in memory until you save them. A CSV of a multi-GB file may not fit.
- No reader schema or schema evolution: an Avro file is shown with the schema it was written with. Schema Registry wire-format messages (a magic byte and a schema ID in front of each record, as in Kafka) are not container files and do not open here.
- No sorting, filtering or SQL. Rows appear in file order.
- Newer Arrow column types (string and binary views, list views, run-end encoding) and extension types depend on what apache-arrow 21.2.0 supports. A column it cannot read stops the file from opening, and the error is shown.
- Timestamps are shown in UTC. An Arrow timestamp's time-zone name is part of its type in the schema, not applied to the values. Nanosecond precision is cut to milliseconds in the table.