SmartQueryTools

Convert Arrow to TSV Online

Convert Arrow files to TSV format directly in your browser. No upload required — your data never leaves your device.

About converting Arrow to TSV

Feather became popular as a fast way to pass data frames between Python and R. When a collaborator uses neither, or the next step is a shell script, tab-separated text is the lowest common denominator. Arrow to TSV is common in scientific and bioinformatics work, where results computed in pyarrow, Polars or R feed tools that read tab-delimited tables: R read.delim, Galaxy workflows, awk, cut and Unix join.

Tabs also avoid the quoting that CSV forces on free-text columns such as gene descriptions, addresses or comments, because those rarely contain a tab. The first line holds the Arrow field names. When a value does contain a tab, a line break or a double quote, it is wrapped in double quotes CSV-style rather than escaped with a backslash.

Numeric detail is the main thing to watch. Arrow files from NumPy-based code often use float32, and those values are printed with the extra digits of their 64-bit form. Columns with NaN, which Polars and NumPy treat as a number rather than a missing value, contain the text NaN rather than an empty field. R reads that back as NaN, and most other tools read it as text.

Worked example

A small sample file, converted with the default settings.

Input (Arrow)

Arrow IPC file (binary, columnar) — shown as a table with its schema

sensor_idsiteread_attemp_cok
101Dock A2026-03-02 09:15:00.1234.25true
102Dock A2026-03-02 09:15:00.1254.5true
205Cold Room 22026-03-02 09:15:01-18.75true
311Loading Bay2026-03-02 09:15:01.004NULLfalse

Schema: sensor_id INTEGER, site VARCHAR, read_at TIMESTAMP_NS, temp_c DOUBLE, ok BOOLEAN

Output (TSV)

sensor_id	site	read_at	temp_c	ok
101	Dock A	2026-03-02 09:15:00.123	4.25	true
102	Dock A	2026-03-02 09:15:00.125	4.5	true
205	Cold Room 2	2026-03-02 09:15:01	-18.75	true
311	Loading Bay	2026-03-02 09:15:01.004		false

What changes when you convert Arrow to TSV

  • Each Arrow field becomes one tab-separated column, headed by its name.
  • A float32 value stored as 0.1 is written as 0.10000000149011612. float64 values print as expected.
  • NaN is written as NaN, while a true null becomes an empty field, like temp_c for sensor 311.
  • R factors and pandas categories, stored as Arrow dictionaries, are written as their labels. The level order is not recorded.
  • Timestamps print as 2026-03-02 09:15:00.123, cut to milliseconds. Nested struct, list and map values are written as compact JSON text in a single field.

Your file is processed locally in your browser and is never uploaded. The free limit is 50 MB per file; larger files work if your device has the memory for them.

Frequently Asked Questions

How do I read the TSV in R?

readr::read_tsv("file.tsv") handles the header and any quoted fields. With base R use read.delim("file.tsv", na.strings = "") so empty fields become NA rather than empty strings.

Will my R factor levels survive the round trip?

The labels do, the level order does not. TSV has no way to record it. After reading, set the levels again with factor(x, levels = c(...)).

Why does 0.1 show up as 0.10000000149011612?

The column is float32 in the Arrow file. 0.1 cannot be stored exactly in 32 bits, and printing the value at 64-bit precision shows the difference. Cast the column to DOUBLE and round it in the SQL Query tool if you want short numbers.

What is TSV format?

TSV (Tab-Separated Values) is similar to CSV but uses tab characters as delimiters — useful when data values contain commas.

Related Tools