mikaio.dev/freetools

Конвертер Parquet в CSV

Откройте файл Apache Parquet и превратите его в CSV, ничего не устанавливая. Файл разбирается прямо во вкладке браузера — он не покидает ваш компьютер, поэтому инструмент работает и без интернета.

Файл читается локально: без загрузки, без сервера, без слежки.

Что делает этот конвертер

Apache Parquet — формат, который сегодня пишет почти любой конвейер данных: колоночный, сжатый, двоичный, рассчитанный на аналитические движки. Машине он удобен, человеческому глазу бесполезен. Его не открыть в текстовом редакторе, не отправить коллеге, который живёт в таблицах, не вставить в тикет. CSV — полная противоположность: неуклюжий для аналитики и читаемый везде.

Эта страница соединяет две стороны максимально прямо. Вы выбираете файл .parquet на диске, страница его разбирает, сообщает, сколько нашла строк и столбцов, показывает предпросмотр и отдаёт CSV на скачивание. Ни аккаунта, ни очереди, ни полосы загрузки — потому что сервера в этой цепочке нет вообще.

Именно ради этого инструмент и сделан. Большинство онлайн-конвертеров Parquet — это форма, которая отправляет ваш файл на бэкенд. Если в файле лежат данные клиентов, зарплаты, медицинские идентификаторы или что угодно ещё под действием политики обработки данных, отправка и есть главная проблема. Здесь преобразование — это JavaScript, работающий в вашей вкладке и читающий байты, которые браузер уже передал странице в момент выбора файла.

Как пользоваться: четыре шага

  1. Выберите файл .parquet в поле выбора. До этого ничего не происходит.
  2. Выберите разделитель. По умолчанию запятая; точка с запятой подходит для таблиц в локалях, где запятая служит десятичным знаком, — это как раз русская раскладка Excel; табуляция даёт TSV, который аккуратно вставляется почти в любой табличный редактор.
  3. Решите, нужна ли строка с названиями столбцов. Флажок заголовка включён по умолчанию, и его переключение мгновенно перестраивает результат без повторного чтения файла.
  4. Просмотрите предпросмотр и нажмите Скачать CSV. В предпросмотре показаны первые 200 строк, чтобы страница оставалась отзывчивой; в скачанном файле всегда все строки исходного Parquet.

Смена разделителя или заголовка после конвертации не читает диск заново. Разобранная таблица хранится в памяти вкладки, поэтому переключения мгновенны даже на сотнях тысяч строк.

Как Parquet хранит таблицу и почему конвертация нетривиальна

CSV — это поток строк. Parquet устроен наоборот: он хранит каждый столбец отдельно, в блоках row group, а внутри row group столбец лежит в чанке из страниц. Каждая страница может быть сжата, а значения внутри — закодированы несколькими разными способами.

Поэтому чтение означает разворачивание нескольких слоёв:

Пока всё работает, эти детали не важны. Они важны, когда что-то не работает: раз декодер понимает каждый слой, неподдерживаемый файл даёт конкретное сообщение о сжатии, кодировке или вложенности, а не тихо испорченный CSV.

Разобранный пример: какие значения вы увидите

У трёх типов Parquet нет прямого аналога в CSV, поэтому стоит знать, что именно записывается.

Столбец с датой. Тип DATE хранит обычный 32-битный счётчик дней с 1 января 1970 года. Если записано число 19723, то 19723 дня после эпохи — это 1 января 2024 года, и в ячейке CSV окажется 2024-01-01. Никакой часовой пояс не применяется: у даты нет времени, которое можно было бы сдвинуть.

Метка времени в микросекундах. Столбец TIMESTAMP с микросекундной точностью хранит 64-битный счётчик микросекунд с эпохи. Возьмём значение 1704112215123456. Делим на 1 000 000 — получаем 1704112215 целых секунд, то есть 1 января 2024 года 12:30:15 UTC, и остаётся 123456 микросекунд. В ячейке будет 2024-01-01 12:30:15.123456. Нули в конце дробной части отбрасываются, поэтому метка, попавшая ровно в секунду, пишется без десятичной части.

Столбец decimal. Столбец DECIMAL(12,2) хранится как целое число плюс масштаб. Целое 1230 с масштабом 2 означает 12,30 и записывается буквально как 12.30. Именно поэтому финансовый столбец нельзя прогонять через число с плавающей точкой: текст сохраняет и точное значение, и точное количество знаков, обещанное схемой.

Логические значения пишутся как true и false, пустые значения превращаются в пустые поля, а двоичные столбцы, не являющиеся корректным UTF-8, записываются в base64, чтобы сырые байты не сломали структуру CSV.

Где офлайновый конвертер действительно нужен

Очевидный случай — конфиденциальность: выгрузка пользовательских записей, которую нужно быстро просмотреть до того, как она окажется рядом с общим диском. Ничего не покидает ноутбук, значит, ни одно правило не нарушено.

Второй случай — трение. Коллега прислал выгрузку в Parquet, вам нужно проверить три столбца, а ставить Python вместе с PyArrow ради файла, который вы удалите через пять минут, — абсурдная цена. Открыть вкладку — нет.

Третий случай — машина, которую вы не вправе настраивать: закрытый корпоративный ноутбук, компьютер клиента, лабораторный стенд без установки пакетов. Браузер там уже есть.

Четвёртый случай — обучение. Когда одна и та же таблица сначала выглядит непрозрачным двоичным куском, а потом простым текстом, разница между колоночным и построчным хранением становится осязаемой так, как редко удаётся схеме.

Частые ошибки и как их избежать

CSV открывается в редакторе таблиц одним огромным столбцом. Программа ждёт разделитель своей локали. Сформируйте файл заново с точкой с запятой или воспользуйтесь диалогом импорта и укажите разделитель явно.

Длинные числовые идентификаторы превращаются в экспоненциальную запись. Это поведение табличного редактора, а не CSV. В файле лежат цифры; программа решила показать их как число с плавающей точкой. Импортируйте столбец как текст.

Ожидание местного времени. Метки времени пишутся в UTC. Parquet обычно хранит их как момент времени, и перевод в тот пояс, где случайно оказалась ваша машина, тихо изменил бы все значения. Если нужно местное время, сдвиньте их позже и осознанно.

Подача вложенной выгрузки. Файл со столбцами struct, list или map отклоняется. Сначала разверните вложенность через pandas.json_normalize, unnest в Polars или запрос DuckDB, выбирающий листовые поля, запишите плоский Parquet и конвертируйте его.

Ограничения: когда инструмент не подходит

Он читает файл целиком в память, поэтому очень крупные выгрузки — от нескольких сотен мегабайт — разумнее обрабатывать в DuckDB или скриптом, который проходит row group за row group. Сжатие Zstd, Brotli и LZ4 отклоняется, а не разбирается наполовину; перезапишите такие файлы со Snappy или Gzip. Зашифрованные файлы Parquet не поддерживаются осознанно. Вложенные схемы тоже вне области применения: свернуть столбец-список в одну ячейку CSV — это решение о ваших данных, которое универсальный конвертер не должен принимать молча.

Приватность

На странице нет кода загрузки, нет аналитики по вашему файлу и нет ни одного сетевого запроса во время конвертации. Файл читается штатным файловым API браузера и разбирается во вкладке. Если нужна проверка, а не обещание: загрузите страницу, отключите сеть и конвертируйте файл. Результат будет тем же, потому что на другом конце провода никогда никого не было.

Вопросы о конвертации Parquet в CSV

Данные действительно никуда не отправляются?
Именно так. Конвертер — это обычный JavaScript: он читает байты выбранного файла и разбирает их прямо на странице. Нет ни загрузки, ни обращений к API, ни аналитики по вашим данным. После загрузки страницы можно отключить сеть — инструмент продолжит работать, и это самый простой способ убедиться самому.
Какие файлы Parquet поддерживаются?
Плоские таблицы, записанные привычными инструментами: pandas, PyArrow, Polars, DuckDB, Spark. Разбираются страницы без сжатия, со Snappy и с Gzip, а также кодировки PLAIN, словарная, RLE, delta и byte-stream-split, в страницах данных v1 и v2. Zstd, Brotli, LZ4 и зашифрованные файлы отклоняются с понятным сообщением, а не дают неверный результат.
Что происходит с вложенными столбцами?
Они намеренно отклоняются. У столбца типа struct, list или map нет единственного очевидного вида в CSV, и молча выбрать один вариант значило бы испортить данные. Сначала разверните вложенность в pandas, Polars или DuckDB, запишите плоский Parquet, а потом конвертируйте его здесь.
Как записываются даты, метки времени и decimal?
Даты выводятся как ГГГГ-ММ-ДД. Метки времени выводятся как ГГГГ-ММ-ДД ЧЧ:ММ:СС в UTC с сохранением миллисекунд, микросекунд или наносекунд, если они есть в столбце. Столбцы decimal сохраняют точный масштаб в виде текста, поэтому 12.30 остаётся 12.30 и не превращается в округлённое число с плавающей точкой. Пустые значения становятся пустыми полями.