CSV или Parquet для отчёта после ИИ: что удобнее проверять и хранить
Команда получила от ИИ скрипт, который собирает отчёт из выгрузки заказов. На маленьком файле всё выглядит верно: столбцы читаются, итог совпадает. Через месяц к нему добавили данные из другого региона, и часть идентификаторов заказов потеряла ведущие нули, а даты стали сравниваться как строки. Часто в этой истории обвиняют модель. Иногда она действительно написала ошибку. Но даже правильный скрипт легко сломать неудачным форматом передачи данных. Выбор между CSV и Parquet не сделает отчёт истинным, зато определит, какие ошибки заметить проще и какие типы данных переживут следующий шаг обработки.
В двух словах о различии
CSV — текст с разделителями: его можно открыть практически в любом редакторе и увидеть отдельные строки. При этом формат сам по себе не говорит, что колонка «00124» является кодом, а не числом, и не фиксирует тип даты. Разные программы заново угадывают разделитель, кодировку и смысл столбца. Parquet — бинарный столбцовый формат для аналитики. В нём хранится схема с типами; при чтении нескольких нужных столбцов программа может обойтись без полной загрузки всех остальных. Такой файл удобен для повторяемых аналитических запросов, но невозможно просто открыть его в текстовом редакторе и глазами увидеть подозрительную строку.
Значит ли это, что для ИИ всегда нужен Parquet? Нет. Чат-сервису обычно передают небольшой текстовый фрагмент, структуру таблицы или агрегаты, а не сам большой бинарный файл. Кроме того, каждый формат может содержать неверные значения. Если в источник попала дата рождения вместо даты заказа, сохранённый тип даты не защитит от смысловой ошибки. Мы сравниваем форматы как часть проверяемого рабочего процесса, а не как способ «вылечить» галлюцинации модели.
Сценарий, где выигрывает CSV
У редактора есть 80 строк обезличенных результатов классификации отзывов. Нужно показать коллегам пять спорных случаев, вручную исправить метки и отправить файл человеку без аналитического ПО. CSV удобен: его можно прочитать, приложить к письму и сравнить версии обычными средствами. Для этой задачи важнее не сжатие и скорость, а понятность. Но даже здесь нужно явно договориться о кодировке UTF-8, разделителе, кавычках вокруг текста с запятыми и языке десятичного знака. Иначе «простота» проявится только у автора файла, а получатель увидит сдвинутые колонки.
Особенно опасно открывать CSV в программе, которая автоматически преобразует похожие на числа коды. Индекс «00057» может стать 57; длинный идентификатор — округлиться; дата в неоднозначном формате — интерпретироваться как другой день. Зафиксируйте в сопроводительном описании, какие поля являются строками. Сохраните исходный файл неизменным. После открытия и обратного экспорта сравните несколько контрольных значений, особенно первые нули, кавычки и окончания строк. Если ИИ строит формулы поверх этих данных, проверьте их на контрольных строках.
Сценарий, где выигрывает Parquet
Аналитик каждый день объединяет миллионы записей, но для проверки отчёта ему нужны только дата, код филиала, категория и сумма. Здесь текстовый CSV заставляет заново разбирать много строк и угадывать типы, а столбцовый Parquet позволяет рабочему инструменту прочитать нужные колонки и использовать сохранённую схему. В документации DuckDB описаны чтение Parquet напрямую и продвижение фильтров в сканирование файла. Это полезно для локального аудита: можно проверить количество строк по дням и долю пустых значений, не импортируя весь набор в облачный чат. Документация Apache Arrow описывает формат как стандартный столбцовый контейнер с вариантами сжатия и кодирования.
Но Parquet добавляет требования к процессу. Получателю нужен совместимый инструмент; при передаче между системами важны версии типов и схема полей. Если сегодня сумма хранится как число с фиксированной точностью, а завтра её внезапно записали строкой, данные могут перестать объединяться либо потребуют явного преобразования. Не считайте файл безопасным только потому, что он бинарный: если в нём персональные сведения, правила доступа и передачи остаются теми же. Для просмотра отдельных примеров делайте маленькую обезличенную выгрузку в CSV, не отправляйте весь архив наружу.
Что проверить независимо от формата
Сделайте инварианты, которые не зависят от инструмента: число строк до и после преобразования, уникальность ключа заказа, минимальную и максимальную дату, число пустых полей, сумму по контролируемой группе. Отдельно возьмите несколько записей с крайними значениями: пустая сумма, возврат, отрицательное количество, код с ведущими нулями. Эти случаи нужно рассматривать как реальные тесты, а не как иллюстрации для красивого отчёта. После конвертации снова посчитайте показатели и сохраните результат рядом с версией исходника.
Если нейросеть предложила скрипт перехода из CSV в Parquet, попросите её объяснить предполагаемые типы столбцов, но окончательное решение принимайте по данным и бизнес-правилам. Пусть ответ включает, что она делает с некорректными датами и пустыми значениями. Затем запустите скрипт на небольшой копии и сравните её с исходной таблицей. В разборе локальной очистки OpenRefine показано, как находить разные написания одного значения до конвертации. Смена формата сама по себе такие варианты не устранит.
Практическое решение
Для небольшой совместной проверки, ручной редакции и обмена примерами берите CSV, но явно описывайте схему и защищайте исходник от автоматического переосмысления столбцов. Для повторяемого анализа больших таблиц берите Parquet там, где команда умеет читать его и поддерживает версионирование схемы. Часто разумны оба: Parquet как рабочая аналитическая копия и небольшой CSV как проверяемая выдержка для людей. Запрещать один формат ради другого не нужно; нужно знать, на каком шаге данные могут исказиться.
FAQ
Parquet гарантирует, что числа в отчёте правильные?
Нет. Он сохраняет схему и помогает эффективнее читать данные, но не проверяет, верно ли ИИ классифицировал запись или правильно ли составлена формула.
Можно ли передать Parquet прямо в чат-бот?
Это зависит от конкретного сервиса. Для проверки обычно лучше подготовить обезличенную выборку, схему столбцов и контрольные показатели, не загружая весь массив.
Почему CSV меняет код товара после открытия?
Программа может автоматически распознать поле как число и убрать ведущие нули. При импорте задайте столбцу текстовый тип и сравните экспорт с оригиналом.
Нужно ли удалять CSV после конвертации?
Нет, если он является первичной выгрузкой. Сохраните исходник отдельно, а Parquet используйте как производный файл с описанной версией преобразования.