Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумСбор данных

Остатки: как сверять выгрузки между прогонами

Оксана В.
Оксана В.
Участник
сообщений 350
с дек
22 апреля, 17:27первое сообщение

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

Нужен способ получать на выходе три вещи: что появилось, что пропало, что поменялось. Причём пропало интересует больше всего, потому что именно там прячутся обрывы обхода.

Чем такое делают, кроме как руками в таблице?

mnogoruk
mnogoruk
Ветеран
сообщений 2050
с мар
1 сентября, 08:44#2

Руками такое не делают вовсе, тут работы на полчаса один раз.

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

Дальше складываете рядом две выгрузки и считаете по ключу три множества. Появившиеся ключи, пропавшие ключи, общие ключи с разошедшимися значениями. Для третьего удобно держать хеш значимых полей, тогда сравнение сводится к сравнению двух коротких строк вместо обхода по колонкам.

awk -F';' 'NR>1{print $1";"$3";"$4}' vchera.csv | sort > a
awk -F';' 'NR>1{print $1";"$3";"$4}' segodnya.csv | sort > b
comm -23 a b > propalo.txt
comm -13 a b > poyavilos.txt
wc -l propalo.txt poyavilos.txt

Теперь про то, ради чего всё затевается. Голое число пропавших само по себе ничего не говорит, смотреть надо на долю и на её обычный размах. У поставщика с живым складом за полсуток пропадает процент позиций, иногда два. Увидели пятнадцать, значит обход не дошёл до части разделов, склад тут ни при чём.

Поэтому порог ставится по наблюдению. Первую неделю просто пишите долю в журнал, ничего не останавливая. Через семь дней у вас будет обычный размах, и порог берётся с запасом сверху. У меня по одному поставщику стоп идёт на семи процентах, по второму на трёх, потому что там каталог почти неподвижный.

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

Алина Т.
Алина Т.
Новичок
сообщений 190
с апр, второй сезон
8 февраля, 11:01#3

а если поставщик поменял свои коды разом? тогда же всё пропало и всё появилось одновременно

kvadrat_ru
kvadrat_ru
Участник
сообщений 855
с июл
15 июля, 14:18#4

Тогда сработает та же проверка, Алина, и это её лучшая сторона. Доля пропавших под сотню и доля появившихся под сотню одновременно означают смену ключей. Заливать такое вслепую нельзя ни в коем случае, иначе получите полный дубль каталога.

mnogoruk: пропавшие позиции лучше не удалять сразу

Вот это ключевое во всей схеме. Карантин снимает почти все ложные тревоги: обрывы обхода, минутные отказы поставщика, товар, который на пару часов ушёл с витрины и вернулся.

Сверку я гоняю прямо в базе, отдельным запросом по временной таблице. Быстрее, чем возиться с файлами, и сразу видно, какие строки поменялись по каким полям.

Оксана В.
Оксана В.
Участник
сообщений 350
с дек
22 декабря, 17:35#5

Собрала за вечер. Ключ у обоих поставщиков нашёлся, у первого свой код, у второго пришлось склеить код с размером.

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

Карантин на сутки сделала сразу, с ним витрина перестала моргать.