В одном архиве могут лежать части таблицы, разные справочники и описание полей. Объясняем, как определить состав выгрузки и избежать неверного объединения файлов.
Один скачанный файл скрывает несколько задач
Представим условную выгрузку интернет-магазина. Сотрудник получает один ZIP-архив и ожидает открыть таблицу заказов. Внутри обнаруживаются несколько файлов с похожими названиями, справочник товаров и текстовое описание. Успешное скачивание ещё не объясняет, какие из этих частей нужно включить в отчёт и как они связаны.
Архив — упаковка для хранения и передачи файлов. Таблица — набор записей с определёнными столбцами и смыслом значений. Эти уровни полезно разделять с самого начала: сначала понять состав посылки, затем правила чтения каждого содержимого, после — способ получить нужный набор данных.
Что обещает формат ZIP
Спецификация PKWARE допускает несколько файлов в одном ZIP. Сжатие необязательно: часть содержимого может храниться без уменьшения размера. Внутри также могут находиться вложенные архивы. Поэтому расширение упаковки не сообщает, сколько таблиц передано и каким способом записаны их значения.
Разделим два вопроса. Первый: все ли ожидаемые файлы получены? Второй: правильно ли поняты записи внутри них? Проверка упаковки не определит за нас, в рублях или копейках указана сумма заказа. Чтобы ответить, нужно описание поставщика, а при его отсутствии — уточнение до использования выгрузки.
Одинаковые колонки или разные сущности
Допустим, первый и второй файлы содержат заказы за разные дни с одинаковым составом полей. Возможно, их строки нужно собрать вместе. Но похожие названия могут также обозначать полную копию и отдельные исправления. Если добавить исправленную копию как новые продажи, прежние записи окажутся посчитаны повторно. Одного сходства столбцов недостаточно.
Теперь представим другой набор: файл заказов и справочник товаров. Это разные сущности. У товара есть номер и название; в заказе указан номер товара, количество и сумма. Складывать их строки в общую таблицу бессмысленно. Нужна связь по согласованному признаку, причём важно понимать, однозначно ли справочник объясняет каждый номер.
Зачем нужно описание полей и связей
В модели табличных данных W3C различаются таблицы, столбцы, строки и метаданные — описание самих сведений. Модель учитывает идентификаторы строк и связи между таблицами. Это полезная основа для вопросов к выгрузке, хотя не каждый отправитель использует именно этот стандарт.
Для нашего условного магазина предложим записать рядом с архивом: период данных, назначение каждого файла, смысл одной строки, единицы суммы и признак связи со справочником. Ещё один вопрос — как обозначено отсутствующее значение. Пустая ячейка, неизвестный товар и нулевое количество могут означать разные ситуации; смешивать их без объяснения нельзя.
Как проверить состав до подготовки отчёта
Сначала сопоставьте перечень полученного с описанием поставки. Если обещаны сведения за семь дней, а видны лишь шесть дневных частей, нужен ответ о недостающем периоде. Название файла — подсказка, но дату содержимого лучше подтвердить по самим данным или документированному правилу источника. Служебное описание и резервную копию не стоит автоматически включать в продажи.
Затем выберите несколько понятных записей и проследите их путь: где найден заказ, откуда взято название товара, как определён период. Это предлагаемый порядок смысловой проверки, а не универсальный стандарт для всех архивов. Конкретные контрольные числа и правила исправлений необходимо согласовать с источником. Если описание противоречит содержимому, лучше остановить подготовку результата и зафиксировать расхождение.
От посылки к проверенным данным
Отдельная тема — получение всех страниц из API, если выгрузка поступает порциями через сервис. После разбора файлов нужна сверка исходника и отчёта. Эти проверки дополняют понимание состава архива, но не заменяют его.
Учиться получать, связывать и проверять сведения можно на программе Data Engineer для начинающих. Для первого самостоятельного разбора достаточно объяснить словами роль каждого файла и показать, почему выбранный способ объединения соответствует задаче.


