feat(etl): read tradein data via market.v_* contract views (#2138 step 2/3) #2148
1 changed files with 8 additions and 3 deletions
|
|
@ -1,9 +1,12 @@
|
||||||
"""Cross-load ETL: tradein.houses → gendesign.newbuilding_listings (#976 950-E5).
|
"""Cross-load ETL: tradein.houses → gendesign.newbuilding_listings (#976 950-E5).
|
||||||
|
|
||||||
Читает houses + house_sources из tradein-БД (gendesign_reader role),
|
Читает market.v_houses + market.v_house_sources из tradein-БД (gendesign_reader role),
|
||||||
UPSERT-ит в gendesign newbuilding_listings по (source, ext_house_id).
|
UPSERT-ит в gendesign newbuilding_listings по (source, ext_house_id).
|
||||||
Соединение к tradein через psycopg v3 (прямой коннект, НЕ SQLAlchemy).
|
Соединение к tradein через psycopg v3 (прямой коннект, НЕ SQLAlchemy).
|
||||||
|
|
||||||
|
Источник — contract-view market.v_* (#2138), а не сырые public.*-таблицы: явный
|
||||||
|
column-контракт, устойчивый к scraper-driven ALTER TABLE на стороне tradein.
|
||||||
|
|
||||||
Запускается:
|
Запускается:
|
||||||
- ночью Celery beat (03:30 МСК, tasks/etl_newbuilding_crossload.py)
|
- ночью Celery beat (03:30 МСК, tasks/etl_newbuilding_crossload.py)
|
||||||
- вручную через POST /api/v1/admin/scrape/newbuilding-crossload
|
- вручную через POST /api/v1/admin/scrape/newbuilding-crossload
|
||||||
|
|
@ -54,8 +57,10 @@ SELECT
|
||||||
h.last_scraped_at,
|
h.last_scraped_at,
|
||||||
-- yandex_jk_id из house_sources (LEFT JOIN — может отсутствовать)
|
-- yandex_jk_id из house_sources (LEFT JOIN — может отсутствовать)
|
||||||
hs_y.ext_id AS yandex_jk_id
|
hs_y.ext_id AS yandex_jk_id
|
||||||
FROM houses h
|
-- Читаем через contract-view market.v_* (#2138 step 2/3), НЕ сырые public.* —
|
||||||
LEFT JOIN house_sources hs_y
|
-- стабильный явный column-контракт, не ломается на scraper-driven ALTER TABLE.
|
||||||
|
FROM market.v_houses h
|
||||||
|
LEFT JOIN market.v_house_sources hs_y
|
||||||
ON hs_y.house_id = h.id
|
ON hs_y.house_id = h.id
|
||||||
AND hs_y.ext_source = 'yandex'
|
AND hs_y.ext_source = 'yandex'
|
||||||
WHERE h.lat IS NOT NULL
|
WHERE h.lat IS NOT NULL
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue