Полученный файл может быть только частью поставки. Разбираем список ожидаемых частей, сигнал готовности и проверку комплекта перед обработкой.
Первый файл ещё не означает готовую поставку
Представим условную сеть из трёх магазинов. Каждый передаёт файл продаж, а получатель собирает общий отчёт. Утром в папке появился первый файл. Он открывается, строки читаются, ошибок нет. Но два магазина ещё не закончили передачу. Если начать итоговый расчёт сразу, отчёт будет отражать только часть сети, хотя чтение доступного файла прошло успешно.
Поэтому нужно различать готовность отдельного файла и готовность всей партии. Партия — согласованный комплект для определённого периода или запуска. Важен не только ответ «что уже лежит в папке», но и другой вопрос: какие части должны были поступить? Без описания ожидаемого состава получатель не знает, является ли увиденное полным результатом или началом передачи.
Список ожидаемых частей задаёт границу
В документации Amazon Redshift описан манифест — список точных файлов, которые нужно загрузить. Для отдельных частей предусмотрено указание обязательности: отсутствие обязательного файла может завершить загрузку ошибкой. Это пример поведения конкретного инструмента. Смысл списка шире: явно назвать состав, вместо предположения, что все похожие имена относятся к одной партии.
Для нашей условной сети предложим передавать обозначение партии, период, перечень трёх магазинов и точные версии их файлов. Если одна часть не требуется, это должно быть объяснено в договорённости. Не стоит молча уменьшать ожидаемое количество до числа уже полученных файлов. Тогда проверка полноты потеряет свой смысл именно в момент задержки источника.
Готовность файла и комплекта проверяются отдельно
В руководстве Spark 4.0.1 о файловом источнике есть требование размещать файл в наблюдаемой области атомарно: обработчик должен видеть его как готовое целое. Это требование к появлению одного файла. Из него не следует, что несколько файлов одной партии автоматически появятся одновременно и будут распознаны как полный комплект.
Для нашего обмена предложим отдельный сигнал завершения поставки, который отправитель создаёт после подготовки всех согласованных частей. Получатель сопоставляет этот сигнал с обозначением партии и списком. Само слово «готово» не заменяет проверку: файлы должны быть доступны и соответствовать указанным версиям. Конкретный способ публикации сигнала выбирается под возможности хранилища и процесса.
Количество без состава может обмануть
Допустим, в папке три файла. По числу они совпадают с ожиданием, но два относятся к одному магазину, а третий — ко второму. Третьего магазина нет. Это условный пример того, почему нужно проверять перечень частей, а не только количество. Также важно исключить вчерашний файл с похожим названием и повторную версию уже полученной части.
Полезно сохранить результат проверки партии: какие части подтверждены, какие отсутствуют и какие лишние. Если один магазин не работал, пустая поставка может быть допустимой, но её нужно отличать от отсутствующего ответа. В нашем примере это оформляется явным подтверждением источника по согласованным правилам. Получатель не должен угадывать отсутствие продаж по тишине.
Целостность содержимого — другой вопрос
Даже полный список не доказывает, что каждый файл передан без изменения байтов. Для этого используются отдельные проверки, например сравнение контрольной суммы. Она помогает проверить содержимое конкретного файла, но сама по себе не сообщает, сколько файлов должно быть в поставке. Две проверки дополняют друг друга, отвечая на разные вопросы.
После подтверждения готовности для нашего отчёта ещё нужна сверка источника и результата: правильно ли учтены период, суммы и исключения? Полный комплект способен содержать ошибочные исходные сведения. Поэтому сигнал завершения означает готовность согласованной поставки к следующему этапу, а не автоматическое подтверждение достоверности всех показателей.
Договоритесь о задержке и повторе
Если часть не поступила, заранее согласуйте, кто выясняет причину и допустим ли явно помеченный предварительный результат. При повторной передаче важно понимать, заменяется ли прежняя партия и как избежать повторного учёта. Для дальнейшего изучения таких процессов посмотрите программу Data Engineer для начинающих. Начать можно с описания одной партии обычными словами: состав, готовность, исключения и ответственное лицо.


