diff --git a/tradein-mvp/backend/data/sql/263_scrape_schedules_wave2_cian_newbuilding_only_false.sql b/tradein-mvp/backend/data/sql/263_scrape_schedules_wave2_cian_newbuilding_only_false.sql new file mode 100644 index 00000000..5f1078ed --- /dev/null +++ b/tradein-mvp/backend/data/sql/263_scrape_schedules_wave2_cian_newbuilding_only_false.sql @@ -0,0 +1,52 @@ +-- 263_scrape_schedules_wave2_cian_newbuilding_only_false.sql +-- Дописывает "newbuilding_only": false в default_params 40 cian-строк wave 2 (262_). +-- +-- ПОЧЕМУ. Прогон первого включённого города области показал, что sweep отрабатывает +-- «успешно», но не сохраняет НИЧЕГО: +-- +-- cian-sweep run_id=3884 anchor Новоуральск центр: +-- SERP fetched=84 nb_kept=0 dropped_secondary=84 ins=0 upd=0 +-- cian-sweep run_id=3884 done: anchors=1/1 lots=84 (ins=0/upd=0) ... errors=0 +-- +-- 84 лота найдено и все 84 отброшено как вторичка, статус прогона при этом done. +-- +-- Причина: scraper_kit.orchestration.scheduler (_job_cian_city_sweep) читает +-- newbuilding_only=bool(params.get("newbuilding_only", True)) +-- то есть дефолт — True. Сид 179_ (wave 1) ключ проставляет явно (false), а 262_ +-- (wave 2) его потерял. Мера оценивает ВТОРИЧКУ — estimator отбирает аналоги с +-- (listing_segment IS NULL OR listing_segment = 'vtorichka'), — поэтому режим +-- «только новостройки» для этих строк бессмыслен: сбор идёт, данные выбрасываются. +-- +-- ЗАТРАГИВАЕТ ТОЛЬКО cian. У avito/yandex такого параметра нет ни в 179_, ни в 262_ +-- (проверено сравнением default_params wave-1 и wave-2 на проде) — их не трогаем. +-- +-- ПОБОЧНАЯ НАХОДКА: под гейт попадает 41 строка, а не 40. Лишняя — +-- `cian_city_sweep_verkhnyaya_pyshma` из wave 1, ВКЛЮЧЁННАЯ и работающая в проде: +-- 179_ проставил newbuilding_only не всем своим городам. Последствия на живых данных: +-- +-- Верхняя Пышма (ключа нет): cian 184 активных → вторички 3, новостроек 181 +-- Первоуральск (ключ есть): cian 336 активных → вторички 308 +-- +-- То есть по Верхней Пышме Циан давал оценщику 3 пригодных объявления вместо ~300 — +-- сбор шёл, статус зелёный, данные молча выбрасывались. Эта миграция чинит и её. + + +-- +-- Идемпотентность: WHERE-гейт `NOT (default_params ? 'newbuilding_only')` — миграция +-- дописывает ключ только там, где его нет. Повторный прогон — no-op, и она никогда +-- не перезатрёт значение, выставленное позже вручную оператором. +-- +-- ЗАВИСИМОСТИ: 262_ (сами строки), 052_scrape_schedules.sql (таблица). + +BEGIN; + +SET LOCAL lock_timeout = '5s'; + +UPDATE scrape_schedules +SET default_params = default_params || '{"newbuilding_only": false}'::jsonb, + updated_at = NOW() +WHERE source LIKE 'cian\_city\_sweep\_%' + AND default_params ? 'city' + AND NOT (default_params ? 'newbuilding_only'); + +COMMIT; diff --git a/tradein-mvp/backend/data/sql/_manifest_applied.txt b/tradein-mvp/backend/data/sql/_manifest_applied.txt index 4b98c273..483e25df 100644 --- a/tradein-mvp/backend/data/sql/_manifest_applied.txt +++ b/tradein-mvp/backend/data/sql/_manifest_applied.txt @@ -251,3 +251,4 @@ 260_houses_drop_has_panorama.sql 261_listings_search_mv_drop_placeholder_columns.sql 262_scrape_schedules_seed_oblast_city_sweeps_wave2.sql +263_scrape_schedules_wave2_cian_newbuilding_only_false.sql