เดนเดพเดฏเต, เดเดพเตป เดฆเดฟเดฎเดฟเดคเตเดฐเดฟ เดฒเตเดเตโเดตเดฟเดจเตเดเตเดเต - เดตเตเดธเตเดฑเตเดฑเต เดเตเดฐเตเดชเตเดชเต เดเดซเต เดเดฎเตเดชเดจเดฟเดเดณเตเดเต เด เดจเดฒเดฟเดฑเตเดฑเดฟเดเตโเดธเต เดกเดฟเดชเตเดชเดพเตผเดเตเดเตโเดฎเตเดจเตเดฑเดฟเดจเตเดฑเต เดกเดพเดฑเตเดฑเดพ เดเดเตเดเดฟเดจเตเดฏเตผ.
ETL เดชเตเดฐเดเตเดฐเดฟเดฏเดเตพ เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฐเต เด เดคเตเดญเตเดคเดเดฐเดฎเดพเดฏ เดเดชเดเดฐเดฃเดคเตเดคเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดพเตป เดจเดฟเดเตเดเดณเตเดเต เดชเดฑเดฏเตเด - เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต. เดเดจเตเดจเดพเตฝ เดเดฏเตผเดซเตเดฒเต เดตเดณเดฐเต เดตเตเดตเดฟเดงเตเดฏเดฎเดพเตผเดจเตเดจเดคเตเด เดฌเดนเตเดฎเตเดเดตเตเดฎเดพเดฃเต, เดจเดฟเดเตเดเตพ เดกเดพเดฑเตเดฑเดพ เดซเตเดฒเตเดเดณเดฟเตฝ เดเตผเดชเตเดชเตเดเตเดเดฟเดเตเดเดฟเดฒเตเดฒเตเดเตเดเดฟเดฒเตเด เดจเดฟเดเตเดเตพ เด เดคเต เดธเตเดเตเดทเตเดฎเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดฃเด, เดเดจเตเดจเดพเตฝ เดเดคเตเดเตเดเดฟเดฒเตเด เดชเตเดฐเดเตเดฐเดฟเดฏเดเตพ เดเดเดฏเตเดเตเดเดฟเดเต เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเตเดเดฏเตเด เด เดตเดฏเตเดเต เดจเดฟเตผเดตเตเดตเดนเดฃเด เดจเดฟเดฐเตเดเตเดทเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดฃเตเดเดคเต เดเดตเดถเตเดฏเดฎเดพเดฃเต.
เด เดคเต, เดเดพเตป เดชเดฑเดฏเตเด เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดเดพเดฃเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด: เดชเตเดฐเตเดเตเดฐเดพเดฎเดฟเดจเต เดงเดพเดฐเดพเดณเด เดเตเดกเตเดเดณเตเด เดธเตเดเตเดฐเตเตปเดทเตเดเตเดเตเดเดณเตเด เดถเตเดชเดพเตผเดถเดเดณเตเด เดเดฃเตเดเต.
เดเดฏเตผเดซเตเดฒเต / เดตเดฟเดเตเดเดฟเดฎเตเดกเดฟเดฏ เดเตเดฎเตบเดธเต เดเดจเตเดจ เดตเดพเดเตเดเต เดเตเดเดฟเตพ เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ เดจเดฟเดเตเดเตพ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดเดพเดฃเตเดจเตเดจเดคเต
เดเดณเตเดณเดเดเตเด เดชเดเตเดเดฟเด
เดเดฎเตเดเด เดชเตเดฐเดงเดพเดจ เดญเดพเดเด, เดชเตเดฐเดพเดฏเตเดเดฟเดเด (เด เดฒเตเดชเด เดธเตเดฆเตเดงเดพเดจเตเดคเดฟเดเดตเตเด) เดเดจเตเดคเตเดเตเดฃเตเดเดพเดฃเต เดเดเตเดเตพ (เดจเดฟเดเตเดเดณเตเด) เดเตเดฒเดธเตเดฑเตเดฑเตผ เดเตเดเตเดเดฟเดเตเดเตเตผเดเตเดเตเดจเตเดจเต เด เดเดฟเดธเตเดฅเดพเดจ เดเดถเดฏเดเตเดเตพ เดเดเตเดเตพ เดเดพเดธเตเดเตเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต เดชเตเดทเตเดชเดคเตเดคเตเดเตเดเตเดฑเดฟเดเตเดเต เดเตเดฑเดเตเดเต เดเดเตเดเตพ เด เดฃเตเดเตผเดฒเตเดกเดกเต เดฒเตเดกเต เดเตเดฏเตเดฏเตเดจเตเดจเต เดเดฃเดเตเดทเดจเตเดเตพ, เดนเตเดเตเดเตเดเตพ, เดฎเดฑเตเดฑเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ เดเดทเตโเดเดพเดจเตเดธเตเดค เดเดชเตเดชเดฑเตเดฑเตเดฑเดฑเต เดชเดพเดดเตโเดธเต เดเตเดฏเตเดฏเตเดจเตเดจเต เดจเต เดเดดเดฟเดเตเดเดพเตป เดชเตเดตเตเดเดฏเดพเดฃเต? เดธเดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเต
เดญเดพเดเด เด เดจเตเดคเดฟเดฎเดตเตเด เดฑเดซเดฑเตปเดธเตเด เดตเดฟเดตเดฐเดเตเดเดณเตเด เดฑเตเดซเดฑเตปเดธเตเดเตพ
เดเดฎเตเดเด
เดเดพเดเตเดเต เดชเตเดฒเตเดฏเดพเดฃเต เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต:
- เดชเตเดคเตเดคเดฃเดฟเตฝ เดเดดเตเดคเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต
- เดเดฐเต เดตเดฒเดฟเดฏ เด เดกเตเดฎเดฟเตป เดชเดพเดจเตฝ เดเดฃเตเดเต,
- เด เดจเดฟเดถเตเดเดฟเดคเดฎเดพเดฏเดฟ เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเดพเดตเตเดจเตเดจ
- เดจเดฒเตเดฒเดคเต เดฎเดพเดคเตเดฐเด, เดเดคเต เดคเดฟเดเดเตเดเตเด เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏ เดเดฆเตเดฆเตเดถเตเดฏเดเตเดเตพเดเตเดเดพเดฏเดฟ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดคเดพเดฃเต, เด เดคเดพเดฏเดคเต (เดเดพเดฑเตเดฑเดฟเดจเต เดฎเตเดฎเตเดชเต เดเดดเตเดคเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเตเดชเตเดฒเต):
- เดชเดฐเดฟเดงเดฟเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เดฎเตเดทเตเดจเตเดเดณเดฟเตฝ เดเดพเดธเตโเดเตเดเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเตเด เดจเดฟเดฐเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเดคเตเด (เดจเดฟเดฐเดตเดงเดฟ เดธเตเดฒเดฑเดฟ / เดเตเดฌเตผเดจเตเดฑเตเดฑเตเดเดณเตเด เดจเดฟเดเตเดเดณเตเดเต เดฎเดจเดธเตเดธเดพเดเตเดทเดฟเดฏเตเด เดจเดฟเดเตเดเดณเต เด เดจเตเดตเดฆเดฟเดเตเดเตเด)
- เดชเตเดคเตเดคเตบ เดเตเดกเต เดเดดเตเดคเดพเดจเตเด เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเดพเดจเตเด เดตเดณเดฐเต เดเดณเตเดชเตเดชเดฎเตเดณเตเดณ เดกเตเดจเดพเดฎเดฟเดเต เดตเตผเดเตเดเตเดซเตเดฒเต เดเดจเดฑเตเดทเตป
- เดเตเดเดพเดคเต เดฑเตเดกเดฟเดฎเตเดฏเตเดกเต เดเดเดเดเตเดเดณเตเด เดนเตเด-เดฎเตเดฏเตเดกเต เดชเตเดฒเดเดฟเดจเตเดเดณเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเดคเตเดเตเดเดฟเดฒเตเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเตเดเดณเตเด API-เดเดณเตเด เดชเดฐเดธเตเดชเดฐเด เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดพเดจเตเดณเตเดณ เดเดดเดฟเดตเต (เด เดคเต เดตเดณเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฃเต).
เดเดเตเดเตพ เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเต เดเดคเตเดชเตเดฒเตเดฏเดพเดฃเต:
- DWH-เดฒเตเด ODS-เดฒเตเด (เดเดเตเดเตพเดเตเดเต เดตเตเตผเดเตเดเดฟเดเตเดเดฏเตเด เดเตเดฒเดฟเดเตเดเตเดนเตเดธเตเด เดเดฃเตเดเต) เดตเดฟเดตเดฟเดง เดเดฑเดตเดฟเดเดเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต (เดจเดฟเดฐเดตเดงเดฟ SQL เดธเตเตผเดตเตผ, PostgreSQL เดธเดเดญเดตเดเตเดเตพ, เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดฎเตเดเตเดฐเดฟเดเตเดเตเดเดณเตเดณเตเดณ เดตเดฟเดตเดฟเดง API-เดเตพ, 1C เดชเตเดฒเตเด) เดเดเตเดเตพ เดกเดพเดฑเตเดฑ เดถเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต.
- เดเดคเตเดฐ เดชเตเดฐเตเดเดฎเดฟเดเตเดเต
cron
, เดเดคเต ODS-เตฝ เดกเดพเดฑเตเดฑ เดเดเตเดเดฐเดฃ เดชเตเดฐเดเตเดฐเดฟเดฏเดเตพ เดเดฐเดเดญเดฟเดเตเดเตเดเดฏเตเด เด เดตเดฏเตเดเต เดชเดฐเดฟเดชเดพเดฒเดจเด เดจเดฟเดฐเตเดเตเดทเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
เด เดเตเดคเตเดค เดเดพเดฒเด เดตเดฐเต, เดเดเตเดเดณเตเดเต เดเดตเดถเตเดฏเดเตเดเตพ 32 เดเตเดฑเตเดเดณเตเด 50 GB เดฑเดพเดฎเตเด เดเดณเตเดณ เดเดฐเต เดเตเดฑเดฟเดฏ เดธเตเตผเดตเดฑเดพเดฃเต. เดเดฏเตผเดซเตเดฒเตเดฏเดฟเตฝ, เดเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต:
- ะฑะพะปะตะต 200 เดฆเดฟเดตเดธเด (เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดตเตผเดเตเดเตเดซเตเดฒเตเดเตพ, เด เดคเดฟเตฝ เดเดเตเดเตพ เดเตเดฒเดฟเดเตพ เดธเตเดฑเตเดฑเดซเต เดเตเดฏเตเดฏเตเดจเตเดจเต)
- เดเดฐเตเดจเตเดจเดฟเดฒเตเด เดถเดฐเดพเดถเดฐเดฟ 70 เดเตเดฒเดฟเดเตพ,
- เด เดจเดจเตเดฎ เดเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเต (เดถเดฐเดพเดถเดฐเดฟเดฏเดฟเดฒเตเด) เดฎเดฃเดฟเดเตเดเตเดฑเดฟเตฝ เดเดฐเดฟเดเตเดเตฝ.
เดเดเตเดเตพ เดเดเตเดเดจเต เดตเดฟเดชเตเดฒเตเดเดฐเดฟเดเตเดเต เดเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต, เดเดพเตป เดเตเดตเดเต เดเดดเตเดคเดพเด, เดเดจเตเดจเดพเตฝ เดเดชเตเดชเตเตพ เดจเดฎเตเดฎเตพ เดชเดฐเดฟเดนเดฐเดฟเดเตเดเตเดจเตเดจ เดเดฌเตผ-เดชเตเดฐเดถเตเดจเด เดจเดฟเตผเดตเดเดฟเดเตเดเดพเด:
เดฎเตเดจเตเดจเต เดฏเดฅเดพเตผเดคเตเดฅ SQL เดธเตเตผเดตเดฑเตเดเตพ เดเดฃเตเดเต, เดเดฐเตเดจเตเดจเดฟเดจเตเด 50 เดกเดพเดฑเตเดฑเดพเดฌเตเดธเตเดเตพ เดเดฃเตเดเต - เดฏเดฅเดพเดเตเดฐเดฎเด เดเดฐเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเดฟเดจเตเดฑเต เดเดฆเดพเดนเดฐเดฃเดเตเดเตพ, เด เดตเดฏเตเดเตเดเต เดเดฐเต เดเดเดจเดฏเตเดฃเตเดเต (เดเดคเดพเดฃเตเดเต เดเดฒเตเดฒเดพเดฏเดฟเดเดคเตเดคเตเด, mua-ha-ha), เด เดคเดพเดฏเดคเต เดเดฐเตเดจเตเดจเดฟเดจเตเด เดเดฐเต เดเตผเดกเตผ เดชเดเตเดเดฟเดเดฏเตเดฃเตเดเต (เดญเดพเดเตเดฏเดตเดถเดพเตฝ, เด เดคเดฟเดจเตเดณเตเดณ เดเดฐเต เดชเดเตเดเดฟเด เดเดคเต เดฌเดฟเดธเดฟเดจเดธเตเดธเดฟเดฒเตเดเตเดเตเด เดชเตเดฐเต เดคเดณเตเดณเดพเด). เดธเตเดตเดจ เดซเตเตฝเดกเตเดเตพ (เดเดฑเดตเดฟเด เดธเตเตผเดตเตผ, เดเดฑเดตเดฟเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต, ETL เดเดพเดธเตโเดเต เดเดกเดฟ) เดเตเตผเดคเตเดคเต เดเดเตเดเตพ เดกเดพเดฑเตเดฑ เดเดเตเดเตเดเตเดเดฏเตเด เดจเดฟเดทเตโเดเดณเดเตเดเดฎเดพเดฏเดฟ เดตเตเตผเดเตเดเดฟเดเตเดเดฏเดฟเดฒเตเดเตเดเต เดเดฑเดฟเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
เดชเตเดเดพเด!
เดชเตเดฐเดงเดพเดจ เดญเดพเดเด, เดชเตเดฐเดพเดฏเตเดเดฟเดเด (เด เดฒเตเดชเด เดธเตเดฆเตเดงเดพเดจเตเดคเดฟเดเดตเตเด)
เดเดจเตเดคเตเดเตเดฃเตเดเดพเดฃเต เดเดเตเดเตพ (เดจเดฟเดเตเดเดณเตเด)
เดฎเดฐเดเตเดเตพ เดตเดฒเตเดคเดพเดฏเดฟเดฐเตเดจเตเดจเดชเตเดชเตเตพ เดเดพเตป เดฒเดณเดฟเดคเดฏเดพเดฏเดฟเดฐเตเดจเตเดจเต SQL
เดเดฐเต เดฑเดทเตเดฏเตป เดฑเตเดเตเดเตเดฏเดฟเดฒเดฟเตฝ -schik, เดเดเตเดเตพเดเตเดเต เดฒเดญเตเดฏเดฎเดพเดฏ เดฐเดฃเตเดเต เดเตเดณเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดเตเดเตพ ETL เดชเตเดฐเดเตเดฐเดฟเดฏเดเตพ เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ เดกเดพเดฑเตเดฑเดพ เดซเตเดฒเตเดเตพ เดคเดเตเดเดฟเดชเตเดชเต เดจเดเดคเตเดคเดฟ:
- เดเตปเดซเตเตผเดฎเดพเดฑเตเดฑเดฟเดเตเด เดชเดตเตผ เดธเตเดจเตเดฑเตผ - เด
เดคเดฟเดจเตเดฑเตเดคเดพเดฏ เดนเดพเตผเดกเตโเดตเตเดฏเดฑเตเด เดธเตเดตเดจเตเดคเด เดชเดคเดฟเดชเตเดชเตเด เดเดณเตเดณ, เด
เดเตเดเตเดฏเดฑเตเดฑเด เดตเตเดฏเดพเดชเดฟเดเตเดเตเดจเตเดจ, เด
เดคเตเดฏเดงเดฟเดเด เดเตฝเดชเตเดชเดพเดฆเดจเดเตเดทเดฎเดคเดฏเตเดณเตเดณ เดเดฐเต เดธเดฟเดธเตเดฑเตเดฑเด. เด
เดคเดฟเดจเตเดฑเต เดเดดเดฟเดตเดฟเดจเตเดฑเต 1% เดฆเตเดตเด เดตเดฟเดฒเดเตเดเตเดจเตเดจเตเดตเตเดจเตเดจเต เดเดพเตป เดเดชเดฏเตเดเดฟเดเตเดเต. เดเดจเตเดคเตเดเตเดฃเตเดเต? เดถเดฐเดฟ, เดเดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, เด เดเดจเตเดฑเตผเดซเตเดธเต, 380-เดเดณเดฟเตฝ เดเดตเดฟเดเตเดฏเต, เดฎเดพเดจเดธเดฟเดเดฎเดพเดฏเดฟ เดเดเตเดเดณเต เดธเดฎเตเดฎเตผเดฆเตเดฆเดคเตเดคเดฟเดฒเดพเดเตเดเดฟ. เดฐเดฃเตเดเดพเดฎเดคเดพเดฏเดฟ, เด เดเตเตบเดเตเดฐเดพเดชเตเดทเตป เดตเดณเดฐเต เดซเดพเตปเดธเดฟ เดชเตเดฐเดเตเดฐเดฟเดฏเดเตพ, เดเดเตเดฐเดฎเดพเดฏ เดเดเดเดคเตเดคเดฟเดจเตเดฑเต เดชเตเดจเดฐเตเดชเดฏเตเดเด, เดฎเดฑเตเดฑเต เดตเดณเดฐเต เดชเตเดฐเดงเดพเดจเดชเตเดชเตเดเตเด-เดเดจเตเดฑเตผเดชเตเดฐเตเดธเต-เดคเดจเตเดคเตเดฐเดเตเดเตพ เดเดจเตเดจเดฟเดตเดฏเตเดเตเดเดพเดฏเดฟ เดฐเตเดชเดเตฝเดชเตเดชเดจ เดเตเดฏเตเดคเดฟเดเตเดเตเดณเตเดณเดคเดพเดฃเต. เดชเตเดฐเดคเดฟเดตเตผเดทเด เดเดฏเตผเดฌเดธเต เด XNUMX เดจเตเดฑเต เดเดฟเดฑเดเต เดชเตเดฒเต เดเดคเดฟเดจเต เดเดฟเดฒเดตเดพเดเตเด เดเดจเตเดจ เดตเดธเตเดคเตเดคเดฏเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดเตเดเตพ เดเดจเตเดจเตเด เดชเดฑเดฏเดฟเดฒเตเดฒ.
เดธเตเดเตเดทเดฟเดเตเดเตเด, เดเดฐเต เดธเตเดเตเดฐเตเตปเดทเตเดเตเดเต 30 เดตเดฏเดธเตเดธเดฟเดจเต เดคเดพเดดเตเดฏเตเดณเตเดณเดตเดฐเต เด เตฝเดชเตเดชเด เดตเตเดฆเดจเดฟเดชเตเดชเดฟเดเตเดเตเด
- SQL เดธเตเตผเดตเตผ เดเดจเตเดฑเดเตเดฐเตเดทเตป เดธเตเตผเดตเตผ - เดเดเตเดเดณเตเดเต เดเตปเดเตเดฐเดพ เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดซเตเดฒเตเดเดณเดฟเตฝ เดเดเตเดเตพ เด เดธเดเดพเดตเดฟเดจเต เดเดชเดฏเตเดเดฟเดเตเดเต. เดถเดฐเดฟ, เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ: เดเดเตเดเตพ เดเดคเดฟเดจเดเด เดคเดจเตเดจเต SQL เดธเตเตผเดตเตผ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เด
เดคเดฟเดจเตเดฑเต ETL เดเดชเดเดฐเดฃเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดพเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเต เดเดเตเดเดจเตเดฏเตเดเตเดเดฟเดฒเตเด เดฏเตเดเตเดคเดฟเดฐเดนเดฟเดคเดฎเดพเดฃเต. เดเดคเดฟเดฒเต เดเดฒเตเดฒเดพเด เดจเดฒเตเดฒเดคเดพเดฃเต: เดฐเดฃเตเดเต เดเดจเตเดฑเตผเดซเตเดธเตเด เดฎเดจเตเดนเดฐเดฎเดพเดฃเต, เดเตเดเดพเดคเต เดชเตเดฐเตเดเดคเดฟ เดฑเดฟเดชเตเดชเตเตผเดเตเดเตเดเดณเตเด ... เดเดจเตเดจเดพเตฝ เดเดเตเดเตพ เดธเตเดซเตเดฑเตเดฑเตโเดตเตเดฏเตผ เดเตฝเดชเตเดชเดจเตเดจเดเตเดเดณเต เดเดทเตเดเดชเตเดชเตเดเตเดจเตเดจเดคเต เด
เดคเตเดเตเดฃเตเดเดฒเตเดฒ, เด, เดเดคเดฟเดจเดฒเตเดฒ. เด
เดคเดฟเดจเตเดฑเต เดชเดคเดฟเดชเตเดชเต
dtsx
(เดธเดเดฐเดเตเดทเดฟเดเตเดเตเดฎเตเดชเตเตพ เดจเตเดกเตเดเตพ เดทเดซเดฟเตพ เดเตเดฏเตเดค XML เดเดฃเต) เดจเดฎเตเดเตเดเต เดเดดเดฟเดฏเตเด, เดเดจเตเดจเดพเตฝ เดเดจเตเดคเดพเดฃเต เดเดพเดฐเตเดฏเด? เดเดฐเต เดธเตเตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดฑเตเดฑเตเดจเตเดจเดฟเดฒเตเดเตเดเต เดจเตเดฑเตเดเดฃเดเตเดเดฟเดจเต เดเตเดฌเดฟเดณเตเดเตพ เดตเดฒเดฟเดเตเดเดฟเดเตเดจเตเดจ เดเดฐเต เดเดพเดธเตโเดเต เดชเดพเดเตเดเตเดเต เดเดเตเดเดจเต เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดพเด? เด เดคเต, เดเดจเตเดคเต เดจเตเดฑเต, เดจเดฟเดเตเดเดณเตเดเต เดเตเดฃเตเดเต เดตเดฟเดฐเตฝ เดเดฐเตเดชเดคเต เดเดทเดฃเดเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดดเตเด, เดฎเตเดธเต เดฌเดเตเดเดฃเดฟเตฝ เดเตเดฒเดฟเดเตเดเต เดเตเดฏเตเดฏเตเด. เดเดจเตเดจเดพเตฝ เดเดคเต เดคเตเตผเดเตเดเดฏเดพเดฏเตเด เดเตเดเตเดคเตฝ เดซเดพเดทเดจเดพเดฏเดฟ เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต:
เดคเตเตผเดเตเดเดฏเดพเดฏเตเด เดเดเตเดเตพ เด เดคเดฟเดจเตเดณเตเดณ เดตเดดเดฟเดเตพ เดคเตเดเดฟ. เดเตเดธเต เดชเตเดฒเตเด เดเดคเดพเดฃเตเดเต เดธเตเดตเดฏเด เดเดดเตเดคเดฟเดฏ SSIS เดชเดพเดเตเดเตเดเต เดเดจเดฑเตเดฑเตเดฑเดฑเดฟเดฒเตเดเตเดเต เดตเดจเตเดจเต ...
โฆเดชเดฟเดจเตเดจเต เดเดฐเต เดชเตเดคเดฟเดฏ เดเตเดฒเดฟ เดเดจเตเดจเต เดเดฃเตเดเตเดคเตเดคเดฟ. เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต เดเดจเตเดจเต เด เดคเดฟเตฝ เดฎเดฑเดฟเดเดเดจเตเดจเต.
ETL เดชเตเดฐเตเดธเดธเตเดธเต เดตเดฟเดตเดฐเดฃเดเตเดเตพ เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเตเดคเตเดคเตบ เดเตเดกเดพเดฃเตเดจเตเดจเต เดเดฃเตเดเตเดคเตเดคเดฟเดฏเดชเตเดชเตเตพ, เดเดพเตป เดธเดจเตเดคเตเดทเดคเตเดคเดฟเดจเดพเดฏเดฟ เดจเตเดคเตเดคเด เดเตเดฏเตเดคเดฟเดฒเตเดฒ. เดเดเตเดเดจเตเดฏเดพเดฃเต เดกเดพเดฑเตเดฑเดพ เดธเตเดเตเดฐเตเดฎเตเดเตพ เดชเดคเดฟเดชเตเดชเดฟเดเตเดเตเดเดฏเตเด เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดคเดคเต, เดจเตเดฑเตเดเดฃเดเตเดเดฟเดจเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเตเดฑเตเดฑ เดเดเดจเดฏเตเดณเตเดณ เดชเดเตเดเดฟเดเดเตพ เดเดฐเต เดฒเดเตเดทเตเดฏเดคเตเดคเดฟเดฒเตเดเตเดเต เดชเดเดฐเตเดจเตเดจเดคเต เดเดจเตเดจเดฐเดฏเต เดฐเดฃเตเดเต 13 โเดธเตโเดเตเดฐเตเดจเตเดเดณเดฟเดฒเต เดชเตเดคเตเดคเตบ เดเตเดกเดฟเดจเตเดฑเต เดเดพเดฐเตเดฏเดฎเดพเดฏเดฟ เดฎเดพเดฑเดฟ.
เดเตเดฒเดธเตเดฑเตเดฑเตผ เดเตเดเตเดเดฟเดเตเดเตเตผเดเตเดเตเดจเตเดจเต
เดจเดฎเตเดเตเดเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เดเดฟเดจเตเดฑเตผเดเดพเตผเดเตเดเตป เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเดฐเตเดคเต, เดเดฏเตผเดซเตเดฒเต, เดจเดฟเดเตเดเตพ เดคเดฟเดฐเดเตเดเตเดเตเดคเตเดค เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต, เดธเตเดฒเดฑเดฟ, เดกเตเดเตเดเตเดเดณเดฟเตฝ เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดฎเดฑเตเดฑเต เดเตเดธเตเดเตพ เดเดจเตเดจเดฟเดต เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเตเดจเตเดจเดคเต เดชเตเดฒเตเดฏเตเดณเตเดณ เดตเตเดฏเดเตเดคเดฎเดพเดฏ เดเดพเดฐเตเดฏเดเตเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดตเดฟเดเต เดธเดเดธเดพเดฐเดฟเดเตเดเดฐเตเดคเต.
เด
เดคเดฟเดจเดพเตฝ เดจเดฎเตเดเตเดเต เดเดเตป เดคเดจเตเดจเต เดชเดฐเตเดเตเดทเดฃเดเตเดเตพ เดเดฐเดเดญเดฟเดเตเดเดพเด, เดเดพเตป เดธเตเดเตเดเตเดเต เดเตเดฏเตเดคเต docker-compose.yml
เด
เดคเดฟเตฝ:
- เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดเดฏเตผเดคเตเดคเดพเด เดตเดพเดฏเต เดชเตเดฐเดตเดพเดนเด: เดทเตเดกเตเดฏเตเดณเตผ, เดตเตเดฌเตโเดธเตเตผเดตเตผ. เดธเตเดฒเดฑเดฟ เดเดพเดธเตโเดเตเดเตเดเตพ เดจเดฟเดฐเตเดเตเดทเดฟเดเตเดเดพเตป เดซเตเดฒเดตเดฑเตเด เด
เดตเดฟเดเต เดเดฑเดเตเดเตเด (เดเดพเดฐเดฃเด เดเดคเต เดเดคเดฟเดจเดเด เดคเดจเตเดจเต เดคเดณเตเดณเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต
apache/airflow:1.10.10-python3.7
, เดชเดเตเดทเต เดเดเตเดเตพ เดเดพเดฐเตเดฏเดฎเดพเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ) - PostgreSQL เดเดจเตเดจเต, เด เดคเดฟเตฝ เดเดฏเตผเดซเตเดฒเต เด เดคเดฟเดจเตเดฑเต เดธเตเดตเดจ เดตเดฟเดตเดฐเดเตเดเตพ (เดทเตเดกเตเดฏเตเดณเตผ เดกเดพเดฑเตเดฑ, เดเดเตเดธเดฟเดเตเดฏเตเดทเตป เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเดธเตเดฑเตเดฑเดฟเดเตเดธเต เดฎเตเดคเดฒเดพเดฏเดต) เดเดดเตเดคเตเดเดฏเตเด เดธเตเดฒเดฑเดฟ เดชเตเตผเดคเตเดคเดฟเดฏเดพเดเตเดเดฟเดฏ เดเตเดฒเดฟเดเตพ เด เดเดฏเดพเดณเดชเตเดชเตเดเตเดคเตเดคเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด;
- เดฐเตเดฆเดฟเดธเต, เดเดคเต เดธเตเดฒเดฑเดฟเดฏเตเดเต เดเดฐเต เดเดพเดธเตโเดเต เดฌเตเดฐเตเดเตเดเดฑเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเด;
- เดธเตเดฒเดฑเดฟ เดคเตเดดเดฟเดฒเดพเดณเดฟ, เดเดพเดธเตเดเตเดเตเดเดณเตเดเต เดจเตเดฐเดฟเดเตเดเตเดณเตเดณ เดจเดฟเตผเดตเตเดตเดนเดฃเดคเตเดคเดฟเตฝ เดเตผเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเด.
- เดซเตเตพเดกเดฑเดฟเดฒเตเดเตเดเต
./dags
เดกเดพเดเตเดเดณเตเดเต เดตเดฟเดตเดฐเดฃเดคเตเดคเตเดเตเดชเตเดชเด เดเดเตเดเตพ เดเดเตเดเดณเตเดเต เดซเดฏเดฒเตเดเตพ เดเตเตผเดเตเดเตเด. เดเดเตเดเดฏเดฟเตฝ เด เดต เดเดเตเดเตเดเดชเตเดชเตเดเตเด, เด เดคเดฟเดจเดพเตฝ เดเดฐเต เดคเตเดฎเตเดฎเดฒเดฟเดจเต เดถเตเดทเดตเตเด เดฎเตเดดเตเดตเตป เดธเตเดฑเตเดฑเดพเดเตเดเตเด เดเดฌเดณเดฟเดชเตเดชเดฟเดเตเดเตเดฃเตเด เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ.
เดเดฟเดฒ เดธเตเดฅเดฒเดเตเดเดณเดฟเตฝ, เดเดฆเดพเดนเดฐเดฃเดเตเดเดณเดฟเดฒเต เดเตเดกเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเดฟ เดเดพเดฃเดฟเดเตเดเดฟเดเตเดเดฟเดฒเตเดฒ (เด เดคเดฟเดจเดพเตฝ เดตเดพเดเดเด เด เดฒเดเตเดเตเดฒเดชเตเดชเตเดเตเดคเตเดคเดพเดคเดฟเดฐเดฟเดเตเดเดพเตป), เดเดจเตเดจเดพเตฝ เดเดตเดฟเดเตเดฏเตเดเตเดเดฟเดฒเตเด เด เดคเต เดชเตเดฐเดเตเดฐเดฟเดฏเดฏเดฟเตฝ เดชเดฐเดฟเดทเตเดเตเดเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดชเตเตผเดฃเตเดฃเดฎเดพเดฏ เดตเตผเดเตเดเดฟเดเดเต เดเตเดกเต เดเดฆเดพเดนเดฐเดฃเดเตเดเตพ เดฑเดฟเดชเตเดชเตเดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เดเดพเดฃเดพเด
https://github.com/dm-logv/airflow-tutorial .
docker-compose.yml
version: '3.4'
x-airflow-config: &airflow-config
AIRFLOW__CORE__DAGS_FOLDER: /dags
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
AIRFLOW__CORE__FERNET_KEY: MJNz36Q8222VOQhBOmBROFrmeSxNOgTCMaVp2_HOtE0=
AIRFLOW__CORE__HOSTNAME_CALLABLE: airflow.utils.net:get_host_ip_address
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgres+psycopg2://airflow:airflow@airflow-db:5432/airflow
AIRFLOW__CORE__PARALLELISM: 128
AIRFLOW__CORE__DAG_CONCURRENCY: 16
AIRFLOW__CORE__MAX_ACTIVE_RUNS_PER_DAG: 4
AIRFLOW__CORE__LOAD_EXAMPLES: 'False'
AIRFLOW__CORE__LOAD_DEFAULT_CONNECTIONS: 'False'
AIRFLOW__EMAIL__DEFAULT_EMAIL_ON_RETRY: 'False'
AIRFLOW__EMAIL__DEFAULT_EMAIL_ON_FAILURE: 'False'
AIRFLOW__CELERY__BROKER_URL: redis://broker:6379/0
AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@airflow-db/airflow
x-airflow-base: &airflow-base
image: apache/airflow:1.10.10-python3.7
entrypoint: /bin/bash
restart: always
volumes:
- ./dags:/dags
- ./requirements.txt:/requirements.txt
services:
# Redis as a Celery broker
broker:
image: redis:6.0.5-alpine
# DB for the Airflow metadata
airflow-db:
image: postgres:10.13-alpine
environment:
- POSTGRES_USER=airflow
- POSTGRES_PASSWORD=airflow
- POSTGRES_DB=airflow
volumes:
- ./db:/var/lib/postgresql/data
# Main container with Airflow Webserver, Scheduler, Celery Flower
airflow:
<<: *airflow-base
environment:
<<: *airflow-config
AIRFLOW__SCHEDULER__DAG_DIR_LIST_INTERVAL: 30
AIRFLOW__SCHEDULER__CATCHUP_BY_DEFAULT: 'False'
AIRFLOW__SCHEDULER__MAX_THREADS: 8
AIRFLOW__WEBSERVER__LOG_FETCH_TIMEOUT_SEC: 10
depends_on:
- airflow-db
- broker
command: >
-c " sleep 10 &&
pip install --user -r /requirements.txt &&
/entrypoint initdb &&
(/entrypoint webserver &) &&
(/entrypoint flower &) &&
/entrypoint scheduler"
ports:
# Celery Flower
- 5555:5555
# Airflow Webserver
- 8080:8080
# Celery worker, will be scaled using `--scale=n`
worker:
<<: *airflow-base
environment:
<<: *airflow-config
command: >
-c " sleep 10 &&
pip install --user -r /requirements.txt &&
/entrypoint worker"
depends_on:
- airflow
- airflow-db
- broker
เดเตเดฑเดฟเดชเตเดชเตเดเตพ:
- เดเตเดฎเตเดชเตเดธเดฟเดทเดจเตเดฑเต เด
เดธเดเดฌเตเดฒเดฟเดฏเดฟเตฝ, เดเดพเตป เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด เด
เดฑเดฟเดฏเดชเตเดชเตเดเตเดจเตเดจ เดเดฟเดคเตเดฐเดคเตเดคเต เดเดถเตเดฐเดฏเดฟเดเตเดเต
puckel/docker-airflow - เด เดคเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดจเตเดจเดคเต เดเดฑเดชเตเดชเดพเดเตเดเตเด. เดเดฐเตเดชเดเตเดทเต เดจเดฟเดเตเดเดณเตเดเต เดเตเดตเดฟเดคเดคเตเดคเดฟเตฝ เดฎเดฑเตเดฑเตเดจเตเดจเตเด เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ. - เดตเดดเดฟ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เดเดฒเตเดฒเดพ เดเดฏเตผเดซเตเดฒเต เดเตเดฐเดฎเตเดเดฐเดฃเดเตเดเดณเตเด เดฒเดญเตเดฏเดฎเดพเดฃเต
airflow.cfg
, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ เดตเดดเดฟเดฏเตเด (เดกเตเดตเดฒเดชเตเดชเตผเดฎเดพเตผเดเตเดเต เดจเดจเตเดฆเดฟ), เดเดพเตป เด เดคเต เดฆเตเดฐเตเดฆเตเดฆเตเดถเตเดฏเดคเตเดคเตเดเต เดชเตเดฐเดฏเตเดเดจเดชเตเดชเตเดเตเดคเตเดคเดฟ. - เดธเตเดตเดพเดญเดพเดตเดฟเดเดฎเดพเดฏเตเด, เดเดคเต เดเตฝโเดชเดพเดฆเดจเดคเตเดคเดฟเดจเต เดคเดฏเตเดฏเดพเดฑเดฒเตเดฒ: เดเดพเตป เดฎเดจเดเดชเตเตผเดตเด เดเดฃเตเดเตเดฏเตโเดจเดฑเตเดเดณเดฟเตฝ เดนเตเดฆเดฏเดฎเดฟเดเดฟเดชเตเดชเต เดเดเตเดเดฟเดฒเตเดฒ, เดธเตเดฐเดเตเดทเดฏเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดพเตป เดตเดฟเดทเดฎเดฟเดเตเดเดฟเดฒเตเดฒ. เดเดจเตเดจเดพเตฝ เดเดเตเดเดณเตเดเต เดชเดฐเตเดเตเดทเดฃเดเตเดเดพเตผเดเตเดเต เดเดฑเตเดฑเดตเตเด เด เดจเตเดฏเตเดเตเดฏเดฎเดพเดฏเดคเต เดเดพเตป เดเตเดฏเตเดคเต.
- เด
เดคเดฒเตเดฒ:
- เดกเดพเดเต เดซเตเตพเดกเตผ เดทเตเดกเตเดฏเตเดณเตผเดเตเดเตเด เดคเตเดดเดฟเดฒเดพเดณเดฟเดเตพเดเตเดเตเด เดเดเตเดธเดธเต เดเตเดฏเตเดฏเดพเดตเตเดจเตเดจเดคเดพเดฏเดฟเดฐเดฟเดเตเดเดฃเด.
- เดเดฒเตเดฒเดพ เดฎเตเดจเตเดจเดพเด เดเดเตเดทเดฟ เดฒเตเดฌเตเดฐเดฑเดฟเดเตพเดเตเดเตเด เดเดคเต เดฌเดพเดงเดเดฎเดพเดฃเต - เด เดตเดฏเตเดฒเตเดฒเดพเด เดเดฐเต เดทเตเดกเตเดฏเตเดณเดฑเตเด เดคเตเดดเดฟเดฒเดพเดณเดฟเดเดณเตเด เดเดณเตเดณ เดฎเตเดทเตเดจเตเดเดณเดฟเตฝ เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดคเดฟเดฐเดฟเดเตเดเดฃเด.
เดถเดฐเดฟ, เดเดชเตเดชเตเตพ เดเดคเต เดฒเดณเดฟเดคเดฎเดพเดฃเต:
$ docker-compose up --scale worker=3
เดเดฒเตเดฒเดพเด เดเดฏเตผเดจเตเดจเดคเดฟเดจเต เดถเตเดทเด, เดจเดฟเดเตเดเตพเดเตเดเต เดตเตเดฌเต เดเดจเตเดฑเตผเดซเตเดธเตเดเตพ เดจเตเดเตเดเดพเด:
- เดตเดพเดฏเต เดชเตเดฐเดตเดพเดนเด:
http://127.0.0.1:8080/admin/ - เดชเตเดทเตเดชเด:
http://127.0.0.1:5555/dashboard
เด เดเดฟเดธเตเดฅเดพเดจ เดเดถเดฏเดเตเดเตพ
เด "เดกเดพเดเตเดเดณเดฟเตฝ" เดจเดฟเดเตเดเตพเดเตเดเต เดเดจเตเดจเตเด เดฎเดจเดธเตเดธเดฟเดฒเดพเดฏเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดเดคเดพ เดเดฐเต เดเตเดฑเดฟเดฏ เดจเดฟเดเดฃเตเดเต:
- เดทเตเดกเตเดฏเตเดณเตผ - เดเดฏเตผเดซเตเดฒเตเดฏเดฟเดฒเต เดเดฑเตเดฑเดตเตเด เดชเตเดฐเดงเดพเดจเดชเตเดชเตเดเตเด เด
เดฎเตเดฎเดพเดตเตป, เดฑเตเดฌเตเดเตเดเตเดเตพ เดเด เดฟเดจเดพเดงเตเดตเดพเดจเด เดเตเดฏเตเดฏเตเดจเตเดจเตเดตเตเดจเตเดจเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดเตเดเตเดจเตเดจเต, เดเดฐเต เดตเตเดฏเดเตเดคเดฟเดฏเดฒเตเดฒ: เดทเตเดกเตเดฏเตเตพ เดจเดฟเดฐเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเต, เดกเดพเดเตเดเตพ เด
เดชเตเดกเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดจเตเดจเต, เดเดพเดธเตเดเตเดเตเดเตพ เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเต.
เดชเตเดคเตเดตเต, เดชเดดเดฏ เดชเดคเดฟเดชเตเดชเตเดเดณเดฟเตฝ, เด เดฆเตเดฆเตเดนเดคเตเดคเดฟเดจเต เดฎเตเดฎเตเดฎเดฑเดฟเดฏเดฟเตฝ เดชเตเดฐเดถเตเดจเดเตเดเดณเตเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต (เดเดฒเตเดฒ, เดเตผเดฎเตเดฎเดเตเดเตเดฑเดตเดฒเตเดฒ, เดเตเตผเดเตเด) เดเตเดเดพเดคเต เดฒเตเดเดธเดฟ เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเตผ เดเตเตบเดซเดฟเดเดฑเตเดเดณเดฟเตฝ เดชเตเดฒเตเด เดคเตเดเตผเดจเตเดจเต.
run_duration
- เด เดคเดฟเดจเตเดฑเต เดชเตเดจเดฐเดพเดฐเดเดญเดฟเดเตเดเตฝ เดเดเดตเตเดณ. เดเดจเตเดจเดพเตฝ เดเดชเตเดชเตเตพ เดเดฒเตเดฒเดพเด เดถเดฐเดฟเดฏเดพเดฃเต. - DAG (เด
เดคเดพเดฏเดคเต "เดกเดพเดเต") - "เดกเดฏเดฑเดเตเดเตเดกเต เด
เดธเตเดเตเดฒเดฟเดเต เดเตเดฐเดพเดซเต", เดเดจเตเดจเดพเตฝ เด
เดคเตเดคเดฐเดฎเตเดฐเต เดจเดฟเตผเดตเดเดจเด เดเตเดฑเดเตเดเต เดเดณเตเดเดณเตเดเต เดชเดฑเดฏเตเด, เดเดจเตเดจเดพเตฝ เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ เดเดคเต เดชเดฐเดธเตเดชเดฐเด เดเดเดชเดดเดเตเดจเตเดจ เดเตเดฒเดฟเดเตพเดเตเดเดพเดฏเตเดณเตเดณ เดเดฐเต เดเดฃเตเดเตเดฏเตเดจเดฑเดพเดฃเต (เดเตเดตเดเต เดเดพเดฃเตเด) เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ SSIS-เดฒเต เดชเดพเดเตเดเตเดเดฟเดจเตเดฑเตเดฏเตเด เดเตปเดซเตเตผเดฎเดพเดฑเตเดฑเดฟเดเตเดเดฏเดฟเดฒเต เดตเตผเดเตเดเตเดซเตเดฒเตเดฏเตเดเตเดฏเตเด เด
เดจเดฒเตเดเต .
เดกเดพเดเตเดเตพเดเตเดเต เดชเตเดฑเดฎเต, เดเดชเตเดชเตเดดเตเด เดธเดฌเตเดกเดพเดเตเดเตพ เดเดฃเตเดเดพเดเดพเด, เดชเดเตเดทเต เดจเดฎเตเดเตเดเต เด เดต เดฒเดญเดฟเดเตเดเดฟเดฒเตเดฒ.
- DAG เดฑเตบ - เดเดจเตเดทเตเดฏเดฒเตเดธเต เดเตเดฏเตเดค เดกเดพเดเต, เด
เดคเต เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เดจเดฟเดฏเตเดเตเดคเดฎเดพเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต
execution_date
. เดเดฐเต เดกเดพเดเดฟเดจเตเดฑเต เดกเดพเดเตเดฐเตปเดธเดฟเดจเต เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด (เดจเดฟเดเตเดเตพ เดจเดฟเดเตเดเดณเตเดเต เดเตเดฒเดฟเดเตพ เดจเดฟเดทเตโเดเดณเดเตเดเดฎเดพเดเตเดเดฟเดฏเตเดเตเดเดฟเตฝ, เดคเตเตผเดเตเดเดฏเดพเดฏเตเด). - เดเดชเตเดชเดฑเตเดฑเตเดฑเตผ เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโเด เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดจเดเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดเดณเดพเดฏ เดเตเดกเดฟเดจเตเดฑเต เดเดทเดฃเดเตเดเดณเดพเดฃเต. เดฎเตเดจเตเดจเต เดคเดฐเด เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดฎเดพเดฐเตเดฃเตเดเต:
- เดจเดเดชเดเดฟเดจเดฎเตเดฎเตเดเต เดชเตเดฐเดฟเดฏเดชเตเดชเตเดเตเด เดชเตเดฒเต
PythonOperator
, เดเดคเต (เดธเดพเดงเตเดตเดพเดฏ) เดชเตเดคเตเดคเตบ เดเตเดกเตเด เดเดเตเดธเดฟเดเตเดฏเตเดเตเดเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด; - เดเตเดฎเดพเดฑเตเดฑเด เดเตเดฏเตเดฏเตเด, เดเดคเต เดธเตเดฅเดฒเดคเตเดคเตเดจเดฟเดจเตเดจเตเด เดฎเดฑเตเดฑเตเดฐเดฟเดเดคเตเดคเตเดเตเดเต เดกเดพเดฑเตเดฑ เดเตเดฃเตเดเตเดชเตเดเตเดจเตเดจเต, เดชเดฑเดฏเตเด,
MsSqlToHiveTransfer
; - เดธเตเตปเดธเตผ เดฎเดฑเตเดตเดถเดคเตเดคเต, เดเดฐเต เดเดตเดจเตเดฑเต เดธเดเดญเดตเดฟเดเตเดเตเดจเตเดจเดคเต เดตเดฐเต เดกเดพเดเดฟเดจเตเดฑเต เดคเตเดเตผเดจเตเดจเตเดณเตเดณ เดจเดฟเตผเดตเตเดตเดนเดฃเดคเตเดคเต เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเดพเดจเต เดฎเดจเตเดฆเดเดคเดฟเดฏเดฟเดฒเดพเดเตเดเดพเดจเต เดเดคเต เดจเดฟเดเตเดเดณเต เด
เดจเตเดตเดฆเดฟเดเตเดเตเด.
HttpSensor
เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เด เดตเดธเดพเดจ เดชเตเดฏเดฟเดจเตเดฑเต เดตเดฒเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด, เดเดตเดถเตเดฏเดฎเตเดณเตเดณ เดชเตเดฐเดคเดฟเดเดฐเดฃเด เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดเตเดฎเดพเดฑเตเดฑเด เดเดฐเดเดญเดฟเดเตเดเตเดGoogleCloudStorageToS3Operator
. เด เดจเตเดตเตเดทเดฃเดพเดคเตเดฎเด เดฎเดจเดธเตเดธเต เดเตเดฆเดฟเดเตเดเตเด: "เดเดจเตเดคเตเดเตเดฃเตเดเต? เดเดฒเตเดฒเดพเดคเตเดคเดฟเดจเตเดฎเตเดชเดฐเดฟ, เดจเดฟเดเตเดเตพเดเตเดเต เดเดชเตเดชเดฑเตเดฑเตเดฑเดฑเดฟเตฝ เดคเดจเตเดจเต เดเดตเตผเดคเตเดคเดจเดเตเดเตพ เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด! เดคเตเดเตผเดจเตเดจเต, เดธเดธเตเดชเตเตปเดกเต เดเตเดฏเตเดค เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดฎเดพเดฐเตเดฎเดพเดฏเตเดณเตเดณ เดเดพเดธเตเดเตเดเตเดเดณเตเดเต เดชเตเตพ เดคเดเดธเตเดธเดชเตเดชเตเดเตเดคเตเดคเดพเดคเดฟเดฐเดฟเดเตเดเดพเตป. เด เดเตเดคเตเดค เดถเตเดฐเดฎเดคเตเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดธเตเตปเดธเตผ เดเดฐเดเดญเดฟเดเตเดเตเดเดฏเตเด เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดเดฏเตเด เดฎเดฐเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
- เดจเดเดชเดเดฟเดจเดฎเตเดฎเตเดเต เดชเตเดฐเดฟเดฏเดชเตเดชเตเดเตเด เดชเตเดฒเต
- เดเดพเดธเตเดเต - เดชเตเดฐเดเตเดฏเดพเดชเดฟเดค เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดฎเดพเดฐเต, เดคเดฐเด เดชเดฐเดฟเดเดฃเดฟเดเตเดเดพเดคเต, เดกเดพเดเดฟเตฝ เดเดเดฟเดชเตเดชเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดตเดฐเต เดเตเดฎเดคเดฒเดฏเตเดเต เดฑเดพเดเตเดเดฟเดฒเตเดเตเดเต เดธเตเดฅเดพเดจเดเตเดเดฏเดฑเตเดฑเด เดจเตฝเดเตเดจเตเดจเต.
- เดเดพเดธเตเดเต เดเดฆเดพเดนเดฐเดฃเด - เดชเตเตผเดซเตเดฎเตผ-เดตเตผเดเตเดเตผเดฎเดพเดฐเตเดฎเดพเดฏเดฟ เดฏเตเดฆเตเดงเดคเตเดคเดฟเดฒเตเดเตเดเต เดเดพเดธเตโเดเตเดเตเดเตพ เด
เดฏเดฏเตโเดเตเดเตเดฃเตเด เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเตเดจเตเดจเต เดเดจเดฑเตฝ เดชเตเดฒเดพเดจเตผ เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเดชเตเดชเตเตพ (เดเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดธเตเดฅเดฒเดคเตเดคเตเดคเดจเตเดจเต.
LocalExecutor
เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดเตเดธเดฟเตฝ เดเดฐเต เดฑเดฟเดฎเตเดเตเดเต เดจเตเดกเดฟเดฒเตเดเตเดเตCeleryExecutor
), เด เดคเต เด เดตเตผเดเตเดเต เดเดฐเต เดธเดจเตเดฆเตผเดญเด เดจเตฝเดเตเดจเตเดจเต (เด เดคเดพเดฏเดคเต, เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเดณเตเดเต เดเดฐเต เดเตเดเตเดเด - เดเดเตเดธเดฟเดเตเดฏเตเดทเตป เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ), เดเดฎเดพเตปเดกเต เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เด เดจเตเดตเตเดทเดฃ เดเตเดเดชเตเดฒเตเดฑเตเดฑเตเดเตพ เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเดเดฏเตเด เด เดตเดฏเต เดชเตเตพ เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
เดเดเตเดเตพ เดเดพเดธเตเดเตเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต
เดเดฆเตเดฏเด, เดจเดฎเตเดฎเตเดเต เดกเตเดเดฟเดจเตเดฑเต เดชเตเดคเตเดตเดพเดฏ เดธเตเดเตเดฎเดฟเดจเตเดฑเต เดฐเตเดชเดฐเตเด เดจเตเดเตเดเดพเด, เดคเตเดเตผเดจเตเดจเต เดเดเตเดเตพ เดเตเดเตเดคเตฝ เดเตเดเตเดคเตฝ เดตเดฟเดถเดฆเดพเดเดถเดเตเดเดณเดฟเดฒเตเดเตเดเต เดเดเดเตเดเตเด, เดเดพเดฐเดฃเด เดเดเตเดเตพ เดเดฟเดฒ เดจเดฟเดธเตเดธเดพเดฐ เดชเดฐเดฟเดนเดพเดฐเดเตเดเตพ เดชเตเดฐเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต.
เด เดคเดฟเดจเดพเตฝ, เด เดคเดฟเดจเตเดฑเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฐเตเดชเดคเตเดคเดฟเตฝ, เด เดคเตเดคเดฐเดฎเตเดฐเต เดกเดพเดเต เดเดคเตเดชเตเดฒเต เดเดพเดฃเดชเตเดชเตเดเตเด:
from datetime import timedelta, datetime
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from commons.datasources import sql_server_ds
dag = DAG('orders',
schedule_interval=timedelta(hours=6),
start_date=datetime(2020, 7, 8, 0))
def workflow(**context):
print(context)
for conn_id, schema in sql_server_ds:
PythonOperator(
task_id=schema,
python_callable=workflow,
provide_context=True,
dag=dag)
เดจเดฎเตเดเตเดเต เด เดคเต เดเดฃเตเดเตเดชเดฟเดเดฟเดเตเดเดพเด:
- เดเดฆเตเดฏเด, เดเดเตเดเตพ เดเดตเดถเตเดฏเดฎเดพเดฏ เดฒเดฟเดฌเตเดเตพ เดเดฑเดเตเดเตเดฎเดคเดฟ เดเตเดฏเตเดฏเตเดจเตเดจเต เดตเตเดฑเต เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด;
sql_server_ds
เดเดฃเตList[namedtuple[str, str]]
เดเดฏเตผเดซเตเดฒเต เดเดฃเดเตเดทเดจเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเดฃเดเตเดทเดจเตเดเดณเตเดเต เดชเตเดฐเตเดเดณเตเด เดเดเตเดเดณเตเดเต เดชเตเดฒเตเดฑเตเดฑเต เดเดเตเดเตเดเตเดจเตเดจ เดกเดพเดฑเตเดฑเดพเดฌเตเดธเตเดเดณเตเด;dag
- เดเดเตเดเดณเตเดเต เดกเดพเดเดฟเดจเตเดฑเต เด เดฑเดฟเดฏเดฟเดชเตเดชเต, เด เดคเต เดจเดฟเตผเดฌเดจเตเดงเดฎเดพเดฏเตเด เดเดฃเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเดฃเดglobals()
, เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดเดฏเตผเดซเตเดฒเต เด เดคเต เดเดฃเตเดเตเดคเตเดคเตเดเดฏเดฟเดฒเตเดฒ. เดกเตเดเตเด เดชเดฑเดฏเตเดฃเตเดเดคเตเดฃเตเดเต:- เด
เดตเดจเตเดฑเต เดชเตเดฐเตเดจเตเดคเดพเดฃเต?
orders
- เด เดชเตเดฐเต เดชเดฟเดจเตเดจเตเดเต เดตเตเดฌเต เดเดจเตเดฑเตผเดซเตเดธเดฟเตฝ เดฆเตเดถเตเดฏเดฎเดพเดเตเด, - เดเตเดฒเต เดเดเตเดเดพเด เดคเตเดฏเดคเดฟ เด เตผเดฆเตเดงเดฐเดพเดคเตเดฐเดฟ เดฎเตเดคเตฝ เดคเดพเตป เดเตเดฒเดฟ เดเตเดฏเตเดฏเตเดฎเตเดจเตเดจเต,
- เดเดคเต เดเดเดฆเตเดถเด เดเดฐเต 6 เดฎเดฃเดฟเดเตเดเตเดฑเดฟเดฒเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดฃเด (เดเดตเดฟเดเต เดฌเตเดฆเตเดงเดฟเดฎเตเดเตเดเตเดณเตเดณ เดเดณเตเดเตพเดเตเดเต เดชเดเดฐเด
timedelta()
เดธเตเดตเตเดเดพเดฐเตเดฏเดฎเดพเดฏcron
-เดฒเตเตป0 0 0/6 ? * * *
, เดเตเดฑเดเตเด เดคเดฃเตเดชเตเดชเดฟเดจเต - เดชเตเดฒเตเดฏเตเดณเตเดณ เดเดฐเต เดชเดฆเดชเตเดฐเดฏเตเดเด@daily
);
- เด
เดตเดจเตเดฑเต เดชเตเดฐเตเดจเตเดคเดพเดฃเต?
workflow()
เดชเตเดฐเดงเดพเดจ เดเตเดฒเดฟ เดเตเดฏเตเดฏเตเด, เดชเดเตเดทเต เดเดชเตเดชเตเตพ เด เดฒเตเดฒ. เดเดชเตเดชเตเตพ, เดเดเตเดเตพ เดเดเตเดเดณเตเดเต เดธเดจเตเดฆเตผเดญเด เดฒเตเดเดฟเดฒเตเดเตเดเต เดกเดเดชเต เดเตเดฏเตเดฏเตเด.- เดเดชเตเดชเตเตพ เดเดพเดธเตเดเตเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฒเดณเดฟเดคเดฎเดพเดฏ เดฎเดพเดเดฟเดเต:
- เดเดเตเดเตพ เดเดเตเดเดณเตเดเต เดเดฑเดตเดฟเดเดเตเดเดณเดฟเดฒเตเดเต เดเดเตเดจเตเดจเต;
- เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเตเด
PythonOperator
, เด เดคเต เดจเดฎเตเดฎเตเดเต เดกเดฎเตเดฎเดฟเดฏเต เดจเดฟเตผเดตเตเดตเดนเดฟเดเตเดเตเดworkflow()
. เดเดพเดธเตโเดเตเดเดฟเดจเตเดฑเต เดเดฐเต เด เดฆเตเดตเดฟเดคเตเดฏ (เดกเดพเดเดฟเดจเตเดณเตเดณเดฟเตฝ) เดชเตเดฐเต เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดพเดจเตเด เดกเดพเดเต เดคเดจเตเดจเต เดเตเดเตเดเดพเดจเตเด เดฎเดฑเดเตเดเดฐเตเดคเต. เดชเดคเดพเดprovide_context
เด เดคเดพเดเดเตเดเต, เดซเดเดเตเดทเดจเดฟเดฒเตเดเตเดเต เด เดงเดฟเด เดเตผเดเตเดฏเตเดฎเตเดจเตเดฑเตเดเตพ เดชเดเดฐเตเด, เด เดคเต เดเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดถเตเดฐเดฆเตเดงเดพเดชเตเตผเดตเตเดตเด เดถเตเดเดฐเดฟเดเตเดเตเด**context
.
เดคเตฝเดเตเดเดพเดฒเด เด เดคเตเดฐเดฎเดพเดคเตเดฐเด. เดเดเตเดเตพเดเตเดเต เดฒเดญเดฟเดเตเดเดคเต:
- เดตเตเดฌเต เดเดจเตเดฑเตผเดซเตเดธเดฟเตฝ เดชเตเดคเดฟเดฏ เดกเดพเดเต,
- เดเดจเตเดจเดฐเดจเตเดฑเต เดเตเดฒเดฟเดเตพ เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดฟ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเด (เดเดฏเตผเดซเตเดฒเต, เดธเตเดฒเดฑเดฟ เดเตเดฐเดฎเตเดเดฐเดฃเดเตเดเตพ, เดธเตเตผเดตเตผ เดถเตเดทเดฟ เดเดจเตเดจเดฟเดต เด เดจเตเดตเดฆเดฟเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ).
เดถเดฐเดฟ, เดเดเดฆเตเดถเด เดฎเดจเดธเตเดธเดฟเดฒเดพเดฏเดฟ.
เดเดฐเดพเดฃเต เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพ เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเตเด?
เดเดคเต เดฎเตเดดเตเดตเตป เดฒเดณเดฟเดคเดฎเดพเดเตเดเดพเตป, เดเดพเตป เดธเตเดเตเดฐเต เดเตเดฏเตเดคเต docker-compose.yml
เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเต requirements.txt
เดเดฒเตเดฒเดพ เดจเตเดกเตเดเดณเดฟเดฒเตเด.
เดเดชเตเดชเตเตพ เดเดคเดพ:
เดทเตเดกเตเดฏเตเดณเตผ เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเดจเตเดจ เดเดพเดธเตโเดเต เดเตปเดธเตโเดฑเตเดฑเตปเดธเตเดเดณเดพเดฃเต เดเตเดฐเต เดธเตโเดเตเดตเดฏเดฑเตเดเตพ.
เดเดเตเดเตพ เด เตฝเดชเตเดชเด เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เดเตเดฒเดฟเดเตเดเดพเตผ เดเตเดฒเดฟเดเตพ เดธเตเดจเดพเดชเตเดชเต เดเตเดฏเตเดฏเตเดจเตเดจเต:
เดชเดเตเดเดฏเดพเดฏเดตเตผ เดคเตเตผเดเตเดเดฏเดพเดฏเตเด เด เดตเดฐเตเดเต เดเตเดฒเดฟ เดตเดฟเดเดฏเดเดฐเดฎเดพเดฏเดฟ เดชเตเตผเดคเตเดคเดฟเดฏเดพเดเตเดเดฟ. เดเตเดตเดชเตเดชเต เดตเดณเดฐเต เดตเดฟเดเดฏเดเดฐเดฎเดฒเตเดฒ.
เดตเดดเดฟเดฏเดฟเตฝ, เดเดเตเดเดณเตเดเต เดเตฝเดชเตเดชเดจเตเดจเดคเตเดคเดฟเตฝ เดเดฐเต เดซเตเตพเดกเดฑเตเด เดเดฒเตเดฒ
./dags
, เดฎเตเดทเตเดจเตเดเตพเดเตเดเดฟเดเดฏเดฟเตฝ เดธเดฟเตปเดเตเดฐเตเดฃเตเดธเตเดทเตป เดเดฒเตเดฒ - เดเดฒเตเดฒเดพ เดกเดพเดเตเดเดณเตเด เดเดฟเดเดเตเดเตเดจเตเดจเตgit
เดเดเตเดเดณเตเดเต Gitlab-เตฝ, เดเดชเตเดชเด Gitlab CI, เดฒเดฏเดฟเดชเตเดชเดฟเดเตเดเตเดฎเตเดชเตเตพ เดฎเตเดทเตเดจเตเดเดณเดฟเดฒเตเดเตเดเต เด เดชเตโเดกเตเดฑเตเดฑเตเดเตพ เดตเดฟเดคเดฐเดฃเด เดเตเดฏเตเดฏเตเดจเตเดจเตmaster
.
เดชเตเดทเตเดชเดคเตเดคเตเดเตเดเตเดฑเดฟเดเตเดเต เดเตเดฑเดเตเดเต
เดคเตเดดเดฟเดฒเดพเดณเดฟเดเตพ เดจเดฎเตเดฎเตเดเต เดชเดธเดฟเดซเดฏเดฑเตเดเตพ เดคเดฒเตเดฒเดฟเดเตเดเตเดฒเตเดฒเตเดฎเตเดชเตเตพ, เดจเดฎเตเดเตเดเต เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดเดพเดฃเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเดจเตเดจ เดฎเดฑเตเดฑเตเดฐเต เดเดชเดเดฐเดฃเด เดเตผเดเตเดเดพเด - เดชเตเดทเตเดชเด.
เดตเตผเดเตเดเตผ เดจเตเดกเตเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดธเดเดเตเดฐเดน เดตเดฟเดตเดฐเดเตเดเดณเตเดณเตเดณ เดเดฆเตเดฏ เดชเตเดเต:
เดเตเดฒเดฟเดเตเดเต เดชเตเดฏ เดเดพเดธเตเดเตเดเตเดเดณเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด เดคเตเดตเตเดฐเดฎเดพเดฏ เดชเตเดเต:
เดเดเตเดเดณเตเดเต เดฌเตเดฐเตเดเตเดเดฑเตเดเต เดชเดฆเดตเดฟเดฏเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด เดตเดฟเดฐเดธเดฎเดพเดฏ เดชเตเดเต:
เดเดพเดธเตโเดเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดธเต เดเตเดฐเดพเดซเตเดเดณเตเด เด เดตเดฏเตเดเต เดจเดฟเตผเดตเตเดตเดนเดฃ เดธเดฎเดฏเดตเตเดฎเดพเดฃเต เดเดฑเตเดฑเดตเตเด เดคเดฟเดณเดเตเดเดฎเตเดณเตเดณ เดชเตเดเต:
เดเดเตเดเตพ เด เดฃเตเดเตผเดฒเตเดกเดกเต เดฒเตเดกเต เดเตเดฏเตเดฏเตเดจเตเดจเต
เด เดคเดฟเดจเดพเตฝ, เดเดฒเตเดฒเดพ เดเตเดฒเดฟเดเดณเตเด เดชเตเตผเดคเตเดคเดฟเดฏเดพเดฏเดฟ, เดจเดฟเดเตเดเตพเดเตเดเต เดชเดฐเดฟเดเตเดเตเดฑเตเดฑเดตเดฐเต เดเตเดฃเตเดเตเดชเตเดเดพเตป เดเดดเดฟเดฏเตเด.
เดเตเดเดพเดคเต เดจเดฟเดฐเดตเดงเดฟ เดชเตเตผเดเตเดเต เดชเดฐเดฟเดเตเดเตเดฑเตเดฑเต - เดเดฐเต เดเดพเดฐเดฃเดคเตเดคเดพเดฒเต เดฎเดฑเตเดฑเตเดฐเต เดเดพเดฐเดฃเดคเตเดคเดพเดฒเต. เดเดฏเตผเดซเตเดฒเตเดฏเตเดเต เดถเดฐเดฟเดฏเดพเดฏ เดเดชเดฏเตเดเดคเตเดคเดฟเดจเตเดฑเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดกเดพเดฑเตเดฑ เดคเตเตผเดเตเดเดฏเดพเดฏเตเด เดเดคเตเดคเดฟเดฏเดฟเดเตเดเดฟเดฒเตเดฒเตเดจเตเดจเต เดเดคเต เดธเตเดเตเดตเดฏเดฑเตเดเตพ เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต.
เดจเดฟเดเตเดเตพ เดฒเตเดเต เดเดพเดฃเตเดเดฏเตเด เดตเตเดฃเตเดชเตเดฏ เดเดพเดธเตโเดเต เดธเดจเตเดฆเตผเดญเดเตเดเตพ เดชเตเดจเดฐเดพเดฐเดเดญเดฟเดเตเดเตเดเดฏเตเด เดตเตเดฃเด.
เดเดคเตเดเตเดเดฟเดฒเตเด เดเดคเตเดฐเดคเตเดคเดฟเตฝ เดเตเดฒเดฟเดเตเดเตเดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเตเดเต, เดเดเตเดเตพเดเตเดเต เดฒเดญเตเดฏเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเตพ เดเดเตเดเตพ เดเดพเดฃเตเด:
เดจเดฟเดเตเดเตพเดเตเดเต เดเดเตเดคเตเดคเต เดตเตเดฃเดคเต เดเตเดฒเดฟเดฏเตผ เดเตเดฏเตเดฏเดพเด. เด เดคเดพเดฏเดคเต, เด เดตเดฟเดเต เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดชเดฐเดพเดเดฏเดชเตเดชเตเดเตเดเตเดตเตเดจเตเดจเต เดเดเตเดเตพ เดฎเดฑเดเตเดเตเดจเตเดจเต, เด เดคเต เดเตปเดธเตโเดฑเตเดฑเตปเดธเต เดเดพเดธเตโเดเต เดทเตเดกเตเดฏเตเดณเดฑเดฟเดฒเตเดเตเดเต เดชเตเดเตเด.
เดเดฒเตเดฒเดพ เดเตเดตเดจเตเดจ เดเดคเตเดฐเดเตเดเดณเตเดฎเตเดณเตเดณ เดฎเตเดธเต เดเดชเดฏเตเดเดฟเดเตเดเต เดเดคเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเต เดตเดณเดฐเต เดฎเดพเดจเตเดทเดฟเดเดฎเดฒเตเดฒเตเดจเตเดจเต เดตเตเดฏเดเตเดคเดฎเดพเดฃเต - เดเดคเต เดเดฏเตผเดซเตเดฒเตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดเตเดเตพ เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ. เดธเตเดตเดพเดญเดพเดตเดฟเดเดฎเดพเดฏเตเด, เดจเดฎเตเดเตเดเต เดเตเดเตเด เดจเดถเตเดเดฐเดฃ เดเดฏเตเดงเดเตเดเดณเตเดฃเตเดเต: Browse/Task Instances
เดจเดฎเตเดเตเดเต เดเดฒเตเดฒเดพเด เดเดฑเตเดฑเดฏเดเดฟเดเตเดเต เดคเดฟเดฐเดเตเดเตเดเตเดคเตเดคเต เดชเตเดเตเดฏเดคเตเดคเดฟเดฒเตเดเตเดเต เดชเตเดจเดเดธเดเตเดเดฎเดพเดเตเดเดพเด, เดถเดฐเดฟเดฏเดพเดฏ เดเดจเดคเตเดคเดฟเตฝ เดเตเดฒเดฟเดเตเดเตเดเตเดฏเตเดฏเตเด:
เดตเตเดคเตเดคเดฟเดฏเดพเดเตเดเดฟเดฏ เดถเตเดทเด, เดเดเตเดเดณเตเดเต เดเดพเดเตเดธเดฟเดเตพ เดเดคเตเดชเตเดฒเต เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต (เด เดตเตผ เดทเตเดกเตเดฏเตเดณเตผ เดทเตเดกเตเดฏเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเตเดเดฏเดพเดฃเต):
เดเดฃเดเตเดทเดจเตเดเตพ, เดนเตเดเตเดเตเดเตพ, เดฎเดฑเตเดฑเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ
เด
เดเตเดคเตเดค DAG เดจเตเดเตเดเดพเดจเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเต, update_reports.py
:
from collections import namedtuple
from datetime import datetime, timedelta
from textwrap import dedent
from airflow import DAG
from airflow.contrib.operators.vertica_operator import VerticaOperator
from airflow.operators.email_operator import EmailOperator
from airflow.utils.trigger_rule import TriggerRule
from commons.operators import TelegramBotSendMessage
dag = DAG('update_reports',
start_date=datetime(2020, 6, 7, 6),
schedule_interval=timedelta(days=1),
default_args={'retries': 3, 'retry_delay': timedelta(seconds=10)})
Report = namedtuple('Report', 'source target')
reports = [Report(f'{table}_view', table) for table in [
'reports.city_orders',
'reports.client_calls',
'reports.client_rates',
'reports.daily_orders',
'reports.order_duration']]
email = EmailOperator(
task_id='email_success', dag=dag,
to='{{ var.value.all_the_kings_men }}',
subject='DWH Reports updated',
html_content=dedent("""ะะพัะฟะพะดะฐ ั
ะพัะพัะธะต, ะพััะตัั ะพะฑะฝะพะฒะปะตะฝั"""),
trigger_rule=TriggerRule.ALL_SUCCESS)
tg = TelegramBotSendMessage(
task_id='telegram_fail', dag=dag,
tg_bot_conn_id='tg_main',
chat_id='{{ var.value.failures_chat }}',
message=dedent("""
ะะฐัะฐั, ะฟัะพััะฟะฐะนัั, ะผั {{ dag.dag_id }} ััะพะฝะธะปะธ
"""),
trigger_rule=TriggerRule.ONE_FAILED)
for source, target in reports:
queries = [f"TRUNCATE TABLE {target}",
f"INSERT INTO {target} SELECT * FROM {source}"]
report_update = VerticaOperator(
task_id=target.replace('reports.', ''),
sql=queries, vertica_conn_id='dwh',
task_concurrency=1, dag=dag)
report_update >> [email, tg]
เดเดฒเตเดฒเดพเดตเดฐเตเด เดเดชเตเดชเตเดดเตเดเตเดเดฟเดฒเตเด เดเดฐเต เดฑเดฟเดชเตเดชเตเตผเดเตเดเต เด เดชเตเดกเตเดฑเตเดฑเต เดเตเดฏเตเดคเดฟเดเตเดเตเดฃเตเดเต? เดเดคเต เดตเตเดฃเตเดเตเด เด เดตเดณเดพเดฃเต: เดกเดพเดฑเตเดฑ เดเดตเดฟเดเต เดจเดฟเดจเตเดจเต เดฒเดญเดฟเดเตเดเตเด เดเดจเตเดจเดคเดฟเดจเตเดฑเต เดเดฑเดตเดฟเดเดเตเดเดณเตเดเต เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดเดฃเตเดเต; เดเดตเดฟเดเต เดตเดฏเตเดเตเดเดฃเดฎเตเดจเตเดจเต เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดเดฃเตเดเต; เดเดฒเตเดฒเดพเด เดธเดเดญเดตเดฟเดเตเดเตเดฎเตเดชเตเดดเต เดคเดเดฐเตเดฎเตเดชเตเดดเต เดนเตเตบ เดเตเดฏเตเดฏเดพเตป เดฎเดฑเดเตเดเดฐเตเดคเต (เดถเดฐเดฟ, เดเดคเต เดเดเตเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเดฒเตเดฒ, เดเดฒเตเดฒ).
เดจเดฎเตเดเตเดเต เดตเตเดฃเตเดเตเด เดซเดฏเดฒเดฟเดฒเตเดเต เดชเตเดฏเดฟ เดชเตเดคเดฟเดฏ เด เดตเตเดฏเดเตเดคเดฎเดพเดฏ เดเดพเดฐเตเดฏเดเตเดเตพ เดจเตเดเตเดเดพเด:
from commons.operators import TelegramBotSendMessage
- เด เตบเดฌเตเดฒเตเดเตเดเต เดเตเดฏเตเดคเดคเดฟเดฒเตเดเตเดเต เดธเดจเตเดฆเตเดถเดเตเดเตพ เด เดฏเดฏเตโเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดฐเต เดเตเดฑเดฟเดฏ เดฑเดพเดชเตเดชเตผ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดเตเดฃเตเดเต เดเดเตเดเตพ เดชเตเดฐเดฏเตเดเดจเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏ เดเดเตเดเดณเตเดเต เดธเตเดตเดจเตเดคเด เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดฎเดพเดฐเต เดเดฃเตเดเดพเดเตเดเตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดจเตเดจเตเด เดเดเตเดเดณเต เดคเดเดฏเตเดจเตเดจเดฟเดฒเตเดฒ. (เด เดเดชเตเดชเดฑเตเดฑเตเดฑเดฑเต เดเตเดฑเดฟเดเตเดเต เดเดเตเดเตพ เดคเดพเดดเต เดธเดเดธเดพเดฐเดฟเดเตเดเตเด);default_args={}
- dag-เดจเต เด เดคเดฟเดจเตเดฑเต เดเดฒเตเดฒเดพ เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดฎเดพเตผเดเตเดเตเด เดเดฐเต เดเตผเดเตเดฏเตเดฎเตเดจเตเดฑเตเดเตพ เดตเดฟเดคเดฐเดฃเด เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด;to='{{ var.value.all_the_kings_men }}'
- เดซเตเตฝเดกเตto
เดเดเตเดเตพ เดนเดพเตผเดกเตโเดเตเดกเต เดเตเดฏเตเดฏเดฟเดฒเตเดฒ, เดชเดเตเดทเต เดเดฟเตปเดเดฏเตเด เดเดฎเตเดฏเดฟเดฒเตเดเดณเตเดเต เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดเดณเตเดณ เดเดฐเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฒเดจเดพเดคเตเดฎเดเดฎเดพเดฏเดฟ เดเดจเดฑเตเดฑเตเดฑเต เดเตเดฏเตโเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เด เดคเต เดเดพเตป เดถเตเดฐเดฆเตเดงเดพเดชเตเตผเดตเตเดตเด เดเดเตเดเตAdmin/Variables
;trigger_rule=TriggerRule.ALL_SUCCESS
- เดเดชเตเดชเดฑเตเดฑเตเดฑเตผ เดเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดตเตเดฏเดตเดธเตเดฅ. เดเดเตเดเดณเตเดเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเดฒเตเดฒเดพ เดเดถเตเดฐเดฟเดคเดคเตเดตเดเตเดเดณเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตฝ เดฎเดพเดคเตเดฐเดฎเต เดเดคเตเดคเต เดฎเตเดฒเดงเดฟเดเดพเดฐเดฟเดเตพเดเตเดเต เดชเดฑเดเตเดเตเด เดตเดฟเดเดฏเดเดฐเดฎเดพเดฏเดฟ;tg_bot_conn_id='tg_main'
- เดตเดพเดฆเดเตเดเตพconn_id
เดเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจ เดเดฃเดเตเดทเตป เดเดกเดฟเดเตพ เดธเตเดตเตเดเดฐเดฟเดเตเดเตเดAdmin/Connections
;trigger_rule=TriggerRule.ONE_FAILED
- เดตเตเดฃเตเดชเตเดฏ เดเดพเดธเตโเดเตเดเตเดเตพ เดเดฃเตเดเตเดเตเดเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต เดเตเดฒเดฟเดเตเดฐเดพเดฎเดฟเดฒเต เดธเดจเตเดฆเตเดถเดเตเดเตพ เดชเดฑเดจเตเดจเตเดชเตเดเต;task_concurrency=1
- เดเดฐเต เดเดพเดธเตโเดเตเดเดฟเดจเตเดฑเต เดจเดฟเดฐเดตเดงเดฟ เดเดพเดธเตโเดเต เดธเดจเตเดฆเตผเดญเดเตเดเตพ เดเดฐเตเดธเดฎเดฏเด เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเดคเต เดเดเตเดเตพ เดจเดฟเดฐเตเดงเดฟเดเตเดเตเดจเตเดจเต. เด เดฒเตเดฒเดพเดคเตเดคเดชเดเตเดทเด, เดจเดฎเตเดเตเดเต เดชเดฒเดคเดฟเดจเตเดฑเตเดฏเตเด เดเดฐเตเดธเดฎเดฏเด เดฒเตเดเตเดเต เดฒเดญเดฟเดเตเดเตเดVerticaOperator
(เดเดฐเต เดฎเตเดถเดฏเดฟเดฒเตเดเตเดเต เดจเตเดเตเดเตเดจเตเดจเต);report_update >> [email, tg]
- เดเดฒเตเดฒเดพเดVerticaOperator
เดเดคเตเดชเตเดฒเตเดณเตเดณ เด เดเตเดทเดฐเดเตเดเดณเตเด เดธเดจเตเดฆเตเดถเดเตเดเดณเตเด เด เดฏเดฏเตเดเตเดเตเดจเตเดจเดคเดฟเตฝ เดเดคเตเดคเตเดเตเดฐเตเด:
เดเดจเตเดจเดพเตฝ เดจเตเดเตเดเดฟเดซเดฏเตผ เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดฎเดพเตผเดเตเดเต เดตเตเดฏเดคเตเดฏเดธเตโเดค เดฒเตเดเตเดเต เดตเตเดฏเดตเดธเตเดฅเดเตพ เดเดณเตเดณเดคเดฟเดจเดพเตฝ, เดเดฐเตเดฃเตเดฃเด เดฎเดพเดคเตเดฐเดฎเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเต. เดเตเดฐเต เดตเตเดฏเตเดตเดฟเตฝ, เดเดฒเตเดฒเดพเด เดเตเดฑเดเตเดเตเดเตเดเดฟ เดฆเตเดถเตเดฏเดชเดฐเดฎเดพเดฏเดฟ เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต:
เดเดพเตป เดเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต เดเตเดฑเดเตเดเต เดตเดพเดเตเดเตเดเตพ เดชเดฑเดฏเตเด เดฎเดพเดเตเดฐเตเดเตพ เด เดตเดฐเตเดเต เดธเตเดนเตเดคเตเดคเตเดเตเดเดณเตเด - เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ.
เดตเดฟเดตเดฟเดง เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดฏ เดตเดฟเดตเดฐเดเตเดเตพ เดเดชเตเดชเดฑเตเดฑเตเดฑเตผ เดเตผเดเตเดฏเตเดฎเตเดจเตเดฑเตเดเดณเดฟเดฒเตเดเตเดเต เดชเดเดฐเดพเตป เดเดดเดฟเดฏเตเดจเตเดจ เดเดฟเดเตเด เดชเตเดฒเตเดฏเตโเดธเตโเดนเตเตพเดกเดฑเตเดเดณเดพเดฃเต เดฎเดพเดเตเดฐเตเดเตพ. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเดคเตเดชเตเดฒเต:
SELECT
id,
payment_dtm,
payment_type,
client_id
FROM orders.payments
WHERE
payment_dtm::DATE = '{{ ds }}'::DATE
{{ ds }}
เดธเดจเตเดฆเตผเดญ เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเตเดฑเต เดเดณเตเดณเดเดเตเดเดเตเดเดณเดฟเดฒเตเดเตเดเต เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเด execution_date
เดซเตเตผเดฎเดพเดฑเตเดฑเดฟเตฝ YYYY-MM-DD
: 2020-07-14
. เดธเดจเตเดฆเตผเดญ เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโเด เดเดพเดธเตโเดเต เดเตปเดธเตโเดฑเตเดฑเตปเดธเดฟเดฒเตเดเตเดเต (เดเตเดฐเต เดตเตเดฏเตเดตเดฟเดฒเต เดเดฐเต เดธเตโเดเตเดตเดฏเตผ) เดจเตเดฏเดฟเตฝ เดเตเดฏเตโเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต เดเดจเตเดจเดคเดพเดฃเต เดเดฑเตเดฑเดตเตเด เดจเดฒเตเดฒ เดญเดพเดเด, เดชเตเดจเดฐเดพเดฐเดเดญเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดชเตเดฒเตเดฏเตโเดธเตโเดนเตเตพเดกเดฑเตเดเตพ เด
เดคเต เดฎเตเดฒเตเดฏเดเตเดเดณเดฟเดฒเตเดเตเดเต เดตเดฟเดเดธเดฟเดเตเดเตเด.
เดเดฐเต เดเดพเดธเตโเดเต เดเตปเดธเตโเดฑเตเดฑเตปเดธเดฟเดฒเตเด เดฑเตเตปเดกเตผ เดเตเดฏเตโเดค เดฌเดเตเดเตบ เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฟเดฏเตเดเตเดค เดฎเตเดฒเตเดฏเดเตเดเตพ เดเดพเดฃเดพเตป เดเดดเดฟเดฏเตเด. เดเดฐเต เดเดคเตเดคเต เด เดฏเดฏเตเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเตเดฎเดคเดฒ เดเดเตเดเดจเตเดฏเดพเดฃเต:
เด เดเตเดเดจเต เดเดฐเต เดธเดจเตเดฆเตเดถเด เด เดฏเดเตเดเตเดจเตเดจ เดเตเดฎเดคเดฒเดฏเดฟเตฝ:
เดฒเดญเตเดฏเดฎเดพเดฏ เดเดฑเตเดฑเดตเตเด เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเดจเดพเดฏเตเดณเตเดณ เดฌเดฟเตฝเดฑเตเดฑเต-เดเตป เดฎเดพเดเตเดฐเตเดเดณเตเดเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏ เดฒเดฟเดธเตเดฑเตเดฑเต เดเดตเดฟเดเต เดฒเดญเตเดฏเดฎเดพเดฃเต:
เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดชเตเดฒเดเดฟเดจเตเดเดณเตเดเต เดธเดนเดพเดฏเดคเตเดคเตเดเต, เดจเดฎเตเดเตเดเต เดจเดฎเตเดฎเตเดเต เดธเตเดตเดจเตเดคเด เดฎเดพเดเตเดฐเตเดเตพ เดชเตเดฐเดเตเดฏเดพเดชเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด, เดชเดเตเดทเต เด เดคเต เดฎเดฑเตเดฑเตเดฐเต เดเดฅเดฏเดพเดฃเต.
เดฎเตเตปเดเตเดเตเดเดฟ เดจเดฟเดถเตเดเดฏเดฟเดเตเด เดเดพเดฐเตเดฏเดเตเดเตพเดเตเดเต เดชเตเดฑเดฎเต, เดจเดฎเตเดเตเดเต เดจเดฎเตเดฎเตเดเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเดณเตเดเต เดฎเตเดฒเตเดฏเดเตเดเตพ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดเตเดเดพเด (เดฎเตเดเดณเดฟเดฒเตเดณเตเดณ เดเตเดกเดฟเตฝ เดเดพเตป เดเดคเต เดเดคเดฟเดจเดเด เดเดชเดฏเตเดเดฟเดเตเดเต). เดจเดฎเตเดเตเดเต เดธเตเดทเตเดเดฟเดเตเดเดพเด Admin/Variables
เดเดจเตเดจเตเดฐเดฃเตเดเต เดเดพเดฐเตเดฏเดเตเดเตพ:
เดจเดฟเดเตเดเตพเดเตเดเต เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเดจเตเดจ เดเดฒเตเดฒเดพเด:
TelegramBotSendMessage(chat_id='{{ var.value.failures_chat }}')
เดฎเตเดฒเตเดฏเด เดเดฐเต เดธเตเดเตเดฏเดฟเดฒเตผ เดเดเดพเด, เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เด เดคเต JSON เดเดเดพเด. JSON-เดจเตเดฑเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ:
bot_config
{
"bot": {
"token": 881hskdfASDA16641,
"name": "Verter"
},
"service": "TG"
}
เดเดตเดถเตเดฏเดฎเตเดณเตเดณ เดเตเดฏเดฟเดฒเตเดเตเดเตเดณเตเดณ เดชเดพเดค เดเดชเดฏเตเดเดฟเดเตเดเตเด: {{ var.json.bot_config.bot.token }}
.
เดเดพเตป เด
เดเตเดทเดฐเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดเดฐเต เดตเดพเดเตเดเต เดชเดฑเดฏเตเดเดฏเตเด เดเดฐเต เดธเตเดเตเดฐเตเตปเดทเตเดเตเดเต เดเดพเดฃเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด ัะพะตะดะธะฝะตะฝะธั. เดเดฒเตเดฒเดพเด เดเดตเดฟเดเต เดชเตเดฐเดพเดฅเดฎเดฟเดเดฎเดพเดฃเต: เดชเตเดเดฟเตฝ Admin/Connections
เดเดเตเดเตพ เดเดฐเต เดเดฃเดเตเดทเตป เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต, เด
เดตเดฟเดเต เดเดเตเดเดณเตเดเต เดฒเตเดเดฟเดจเตเดเตพ / เดชเดพเดธเตโเดตเตเดกเตเดเตพ, เดเตเดเตเดคเตฝ เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ เดเดจเตเดจเดฟเดต เดเตเตผเดเตเดเตเด. เดเดคเตเดชเตเดพเดฒเต:
เดชเดพเดธเตโเดตเตเดกเตเดเตพ เดเตปเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด (เดกเดฟเดซเตเตพเดเตเดเดฟเดจเตเดเตเดเดพเตพ เดเตเดเตเดคเตฝ เดจเดจเตเดจเดพเดฏเดฟ), เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ เดจเดฟเดเตเดเตพเดเตเดเต เดเดฃเดเตเดทเตป เดคเดฐเด เดเดชเตเดเตเดทเดฟเดเตเดเดพเด (เดเดพเตป เดเตเดฏเตเดคเดคเตเดชเตเดฒเต tg_main
) - เดเดฏเตผเดซเตเดฒเต เดฎเตเดกเดฒเตเดเดณเดฟเตฝ เดคเดฐเดเตเดเดณเตเดเต เดฒเดฟเดธเตเดฑเตเดฑเต เดนเดพเตผเดกเต เดตเดฏเตผเดกเต เดเดฏเดคเดฟเดจเดพเตฝ เดธเตเดดเตเดธเต เดเตเดกเตเดเดณเดฟเดฒเตเดเตเดเต เดเดเดเตเดเดพเดคเต เดตเดฟเดชเตเดฒเตเดเดฐเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ เดเดจเตเดจเดคเดพเดฃเต เดตเดธเตเดคเตเดค (เดเดพเตป เดชเตเดเตเดเตเดจเตเดจเต เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดเตเดเดฟเตพ เดเตเดฏเตเดคเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดฆเดฏเดตเดพเดฏเดฟ เดเดจเตเดจเต เดถเดฐเดฟเดฏเดพเดเตเดเตเด), เดเดจเตเดจเดพเตฝ เดเตเดฐเตเดกเดฟเดฑเตเดฑเตเดเตพ เดฒเดญเดฟเดเตเดเตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดจเตเดจเตเด เดเดเตเดเดณเต เดคเดเดฏเดฟเดฒเตเดฒ เดชเตเดฐเต.
เดจเดฟเดเตเดเตพเดเตเดเต เดเดฐเต เดชเตเดฐเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดเดฃเดเตเดทเดจเตเดเตพ เดเดฃเตเดเดพเดเตเดเดพเด: เด เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดฐเตเดคเดฟ BaseHook.get_connection()
, เดจเดฎเตเดเตเดเต เดชเตเดฐเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฃเดเตเดทเดจเตเดเตพ เดฒเดญเดฟเดเตเดเตเดจเตเดจเดคเต, เดคเดฐเตเด เดเตเดฐเดฎเดฐเดนเดฟเดคเดฎเดพเดฏ เดจเดฟเดฐเดตเดงเดฟ เดชเตเดฐเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต (เดฑเตเดฃเตเดเต เดฑเตเดฌเดฟเตป เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเดคเต เดเตเดเตเดคเตฝ เดฏเตเดเตเดคเดฟเดธเดนเดฎเดพเดฏเดฟเดฐเดฟเดเตเดเตเด, เดชเดเตเดทเต เดจเดฎเตเดเตเดเต เด
เดคเต เดเดฏเตผเดซเตเดฒเต เดกเตเดตเดฒเดชเตเดชเตผเดฎเดพเดฐเตเดเต เดฎเดจเดธเตเดธเดพเดเตเดทเดฟเดเตเดเต เดตเดฟเดเดพเด).
เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเดณเตเด เดเดฃเดเตเดทเดจเตเดเดณเตเด เดคเตเตผเดเตเดเดฏเดพเดฏเตเด เดฐเดธเดเดฐเดฎเดพเดฏ เดเดชเดเดฐเดฃเดเตเดเดณเดพเดฃเต, เดเดจเตเดจเดพเตฝ เดฌเดพเดฒเตปเดธเต เดจเดทเตโเดเดชเตเดชเตเดเดพเดคเดฟเดฐเดฟเดเตเดเตเดฃเตเดเดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต: เดจเดฟเดเตเดเดณเตเดเต เดซเตเดฒเตเดเดณเตเดเต เดเดคเตเดเตเดเต เดญเดพเดเดเตเดเตพ เดเตเดกเดฟเตฝ เดคเดจเตเดจเต เดธเดเดญเดฐเดฟเดเตเดเตเดจเตเดจเต, เดธเดเดญเดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เดเดฏเตผเดซเตเดฒเตเดฏเตโเดเตเดเต เดเดคเตเดเตเดเต เดญเดพเดเดเตเดเตพ เดจเตฝเดเตเดจเตเดจเต. เดเดฐเต เดตเดถเดคเตเดคเต, เดฎเตเดฒเตเดฏเด เดตเตเดเดคเตเดคเดฟเตฝ เดฎเดพเดฑเตเดฑเตเดจเตเดจเดคเต เดธเตเดเดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏเดฟเดฐเดฟเดเตเดเตเด, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเดฐเต เดฎเตเดฏเดฟเดฒเดฟเดเดเต เดฌเตเดเตเดธเต, เดฏเตเด เดตเดดเดฟ. เดฎเดฑเตเดตเดถเดคเตเดคเต, เดเดคเต เดเดชเตเดชเตเดดเตเด เดฎเตเดธเต เดเตเดฒเดฟเดเตเดเดฟเดฒเตเดเตเดเตเดณเตเดณ เดฎเดเดเตเดเดฎเดพเดฃเต, เด เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดเตเดเตพ (เดเดพเตป) เดฐเดเตเดทเดชเตเดชเตเดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเต.
เดเดฃเดเตเดทเดจเตเดเตพเดเตเดเตเดชเตเดชเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเต เดเตเดฎเดคเดฒเดเดณเดฟเตฝ เดเดจเตเดจเดพเดฃเต เดเตเดณเตเดคเตเดคเตเดเตพ. เดชเตเดคเตเดตเต, เดเดฏเตผเดซเตเดฒเต เดนเตเดเตเดเตเดเตพ เดฎเตเดจเตเดจเดพเด เดเดเตเดทเดฟ เดธเตเดตเดจเดเตเดเดณเดฟเดฒเตเดเตเดเตเด เดฒเตเดฌเตเดฐเดฑเดฟเดเดณเดฟเดฒเตเดเตเดเตเด เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฏเดฟเดจเตเดฑเตเดเดณเดพเดฃเต. เดเดฆเดพ, JiraHook
เดเดฟเดฑเดฏเตเดฎเดพเดฏเดฟ เดเดเดชเดดเดเดพเตป เดเดเตเดเตพเดเตเดเต เดเดฐเต เดเตเดฒเดฏเดจเตเดฑเต เดคเตเดฑเดเตเดเตเด (เดจเดฟเดเตเดเตพเดเตเดเต เดเดพเดธเตโเดเตเดเตเดเตพ เด
เดเตเดเตเดเตเดเตเด เดเดเตเดเตเดเตเดเตเด เดจเตเดเตเดเดพเตป เดเดดเดฟเดฏเตเด), เดเตเดเดพเดคเต SambaHook
เดจเดฟเดเตเดเตพเดเตเดเต เดเดฐเต เดฒเตเดเตเดเตฝ เดซเดฏเตฝ เดชเตเดทเต เดเตเดฏเตเดฏเดพเด smb
-เดชเตเดฏเดฟเดจเตเดฑเต.
เดเดทเตโเดเดพเดจเตเดธเตเดค เดเดชเตเดชเดฑเตเดฑเตเดฑเดฑเต เดชเดพเดดเตโเดธเต เดเตเดฏเตเดฏเตเดจเตเดจเต
เด
เดคเต เดเดเตเดเดจเต เดเดฃเตเดเดพเดเตเดเตเดจเตเดจเต เดเดจเตเดจเต เดจเตเดเตเดเดพเตป เดเดเตเดเตพ เด
เดเตเดคเตเดคเต TelegramBotSendMessage
เดเตเดพเดกเต commons/operators.py
เดฏเดฅเดพเตผเดคเตเดฅ เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดเตเดเตเดชเตเดชเด:
from typing import Union
from airflow.operators import BaseOperator
from commons.hooks import TelegramBotHook, TelegramBot
class TelegramBotSendMessage(BaseOperator):
"""Send message to chat_id using TelegramBotHook
Example:
>>> TelegramBotSendMessage(
... task_id='telegram_fail', dag=dag,
... tg_bot_conn_id='tg_bot_default',
... chat_id='{{ var.value.all_the_young_dudes_chat }}',
... message='{{ dag.dag_id }} failed :(',
... trigger_rule=TriggerRule.ONE_FAILED)
"""
template_fields = ['chat_id', 'message']
def __init__(self,
chat_id: Union[int, str],
message: str,
tg_bot_conn_id: str = 'tg_bot_default',
*args, **kwargs):
super().__init__(*args, **kwargs)
self._hook = TelegramBotHook(tg_bot_conn_id)
self.client: TelegramBot = self._hook.client
self.chat_id = chat_id
self.message = message
def execute(self, context):
print(f'Send "{self.message}" to the chat {self.chat_id}')
self.client.send_message(chat_id=self.chat_id,
message=self.message)
เดเดตเดฟเดเต, เดเดฏเตผเดซเตเดฒเตเดฏเดฟเดฒเต เดฎเดฑเตเดฑเตเดฒเตเดฒเดพ เดเดพเดฐเตเดฏเดเตเดเดณเตเด เดชเตเดฒเต, เดเดฒเตเดฒเดพเด เดตเดณเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฃเต:
- เดชเดพเดฐเดฎเตเดชเดฐเตเดฏเดฎเดพเดฏเดฟ เดฒเดญเดฟเดเตเดเดคเต
BaseOperator
, เดเดคเต เดเตเดฑเดเตเดเต เดเดฏเตผเดซเตเดฒเต-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดเดพเดฐเตเดฏเดเตเดเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเดจเตเดจเต (เดจเดฟเดเตเดเดณเตเดเต เดเดดเดฟเดตเตเดธเดฎเดฏเด เดจเตเดเตเดเตเด) - เดชเตเดฐเดเตเดฏเดพเดชเดฟเดค เดซเตเตฝเดกเตเดเตพ
template_fields
, เด เดคเดฟเตฝ เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเดพเตป เดเดฟเตปเด เดฎเดพเดเตเดฐเตเดเตพ เดจเตเดเตเดเตเด. - เดถเดฐเดฟเดฏเดพเดฏ เดตเดพเดฆเดเตเดเตพ เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเต
__init__()
, เดเดตเดถเตเดฏเดฎเตเดณเตเดณเดฟเดเดคเตเดคเต เดกเดฟเดซเตเตพเดเตเดเตเดเตพ เดธเดเตเดเดฎเดพเดเตเดเตเด. - เดชเตเตผเดตเตเดตเดฟเดเดจเตเดฑเต เดคเตเดเดเตเดเดคเตเดคเตเดเตเดเตเดฑเดฟเดเตเดเตเด เดเดเตเดเตพ เดฎเดฑเดจเตเดจเดฟเดฒเตเดฒ.
- เด
เดจเตเดฌเดจเตเดง เดนเตเดเตเดเต เดคเตเดฑเดจเตเดจเต
TelegramBotHook
เด เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเต เดเตเดฒเดฏเดจเตเดฑเต เดเดฌเตเดเดเตเดฑเตเดฑเต เดฒเดญเดฟเดเตเดเต. - เด
เดธเดพเดงเตเดตเดพเดเตเดเดชเตเดชเตเดเตเด (เดชเตเดจเตผเดจเดฟเตผเดตเดเดฟเดเตเดเดชเตเดชเตเดเตเด) เดฐเตเดคเดฟ
BaseOperator.execute()
, เดเดชเตเดชเดฑเตเดฑเตเดฑเตผ เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดธเดฎเดฏเด เดตเดฐเตเดฎเตเดชเตเตพ เดเดคเต เดเดฏเตผเดซเต เดตเดฒเดฟเดเตเดเตเด - เด เดคเดฟเตฝ เดเดเตเดเตพ เดฒเตเดเดฟเตป เดเตเดฏเตเดฏเดพเตป เดฎเดฑเดจเตเดจเต เดชเตเดฐเดงเดพเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเด. (เดเดเตเดเตพ เดจเตเดฐเดฟเดเตเดเต เดฒเตเดเดฟเตป เดเตเดฏเตเดฏเตเดจเตเดจเตstdout
ะธstderr
- เดตเดพเดฏเตเดชเตเดฐเดตเดพเดนเด เดเดฒเตเดฒเดพเด เดคเดเดธเตเดธเดชเตเดชเตเดเตเดคเตเดคเตเดเดฏเตเด เดฎเดจเตเดนเดฐเดฎเดพเดฏเดฟ เดชเตเดคเดฟเดฏเตเดเดฏเตเด เดเดตเดถเตเดฏเดฎเตเดณเตเดณเดฟเดเดคเตเดคเต เดตเดฟเดเดเดฟเดชเตเดชเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด.)
เดจเดฎเตเดเตเดเต เดเดจเตเดคเดพเดฃเต เดเดณเตเดณเดคเตเดจเตเดจเต เดจเตเดเตเดเดพเด commons/hooks.py
. เดซเดฏเดฒเดฟเดจเตเดฑเต เดเดฆเตเดฏ เดญเดพเดเด, เดนเตเดเตเดเต เดคเดจเตเดจเต:
from typing import Union
from airflow.hooks.base_hook import BaseHook
from requests_toolbelt.sessions import BaseUrlSession
class TelegramBotHook(BaseHook):
"""Telegram Bot API hook
Note: add a connection with empty Conn Type and don't forget
to fill Extra:
{"bot_token": "YOuRAwEsomeBOtToKen"}
"""
def __init__(self,
tg_bot_conn_id='tg_bot_default'):
super().__init__(tg_bot_conn_id)
self.tg_bot_conn_id = tg_bot_conn_id
self.tg_bot_token = None
self.client = None
self.get_conn()
def get_conn(self):
extra = self.get_connection(self.tg_bot_conn_id).extra_dejson
self.tg_bot_token = extra['bot_token']
self.client = TelegramBot(self.tg_bot_token)
return self.client
เดเดตเดฟเดเต เดเดจเตเดคเดพเดฃเต เดตเดฟเดถเดฆเตเดเดฐเดฟเดเตเดเตเดฃเตเดเดคเตเดจเตเดจเต เดเดจเดฟเดเตเดเดฑเดฟเดฏเดฟเดฒเตเดฒ, เดชเตเดฐเดงเดพเดจเดชเตเดชเตเดเตเด เดเดพเดฐเตเดฏเดเตเดเตพ เดเดพเตป เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเด:
- เดเดเตเดเตพเดเตเดเต เด
เดตเดเดพเดถเดฎเตเดฃเตเดเต, เดตเดพเดฆเดเตเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดฟเดจเตเดคเดฟเดเตเดเตเด - เดฎเดฟเดเตเด เดเตเดธเตเดเดณเดฟเดฒเตเด เดเดคเต เดเดจเตเดจเดพเดฏเดฟเดฐเดฟเดเตเดเตเด:
conn_id
; - เดธเตเดฑเตเดฑเดพเตปเดกเตเตผเดกเต เดฐเตเดคเดฟเดเตพ เดฎเดฑเดฟเดเดเดเตเดเตเดจเตเดจเต: เดเดพเตป เดเดจเตเดจเตเดคเตเดคเดจเตเดจเต เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเตเดเตเดคเตเดคเดฟ
get_conn()
, เด เดคเดฟเตฝ เดเดจเดฟเดเตเดเต เดเดฃเดเตเดทเตป เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ เดชเตเดฐเต เดชเตเดฐเดเดพเดฐเด เดฒเดญเดฟเดเตเดเตเดเดฏเตเด เดตเดฟเดญเดพเดเด เดจเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเตextra
(เดเดคเตเดฐเต JSON เดซเตเตฝเดกเดพเดฃเต), เด เดคเดฟเตฝ เดเดพเตป (เดเดจเตเดฑเต เดธเตเดตเดจเตเดคเด เดจเดฟเตผเดฆเตเดฆเตเดถเดเตเดเตพ เด เดจเตเดธเดฐเดฟเดเตเดเต!) เดเตเดฒเดฟเดเตเดฐเดพเด เดฌเตเดเตเดเต เดเตเดเตเดเตบ เดเดเตเดเต:{"bot_token": "YOuRAwEsomeBOtToKen"}
. - เดเดพเตป เดเดเตเดเดณเตเดเต เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต
TelegramBot
, เด เดคเดฟเดจเต เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดเตเดเตเดเตบ เดจเตฝเดเตเดจเตเดจเต.
เด
เดคเตเดฐเดฏเตเดฏเตเดณเตเดณเต. เดเดฐเต เดนเตเดเตเดเต เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฟเดเตเดเตพเดเตเดเต เดเดฐเต เดเตเดฒเดฏเดจเตเดฑเต เดฒเดญเดฟเดเตเดเตเด TelegramBotHook().clent
เด
เดฅเดตเดพ TelegramBotHook().get_conn()
.
เดเตเดฒเดฟเดเตเดฐเดพเด REST API-เดฏเตโเดเตเดเดพเดฏเดฟ เดเดพเตป เดเดฐเต เดฎเตเดเตเดฐเตเดฑเดพเดชเตเดชเตผ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจ เดซเดฏเดฒเดฟเดจเตเดฑเต เดฐเดฃเตเดเดพเด เดญเดพเดเด, เด
เดคเต เดตเดฒเดฟเดเตเดเดฟเดเดพเดคเดฟเดฐเดฟเดเตเดเดพเตป python-telegram-bot
sendMessage
.
class TelegramBot:
"""Telegram Bot API wrapper
Examples:
>>> TelegramBot('YOuRAwEsomeBOtToKen', '@myprettydebugchat').send_message('Hi, darling')
>>> TelegramBot('YOuRAwEsomeBOtToKen').send_message('Hi, darling', chat_id=-1762374628374)
"""
API_ENDPOINT = 'https://api.telegram.org/bot{}/'
def __init__(self, tg_bot_token: str, chat_id: Union[int, str] = None):
self._base_url = TelegramBot.API_ENDPOINT.format(tg_bot_token)
self.session = BaseUrlSession(self._base_url)
self.chat_id = chat_id
def send_message(self, message: str, chat_id: Union[int, str] = None):
method = 'sendMessage'
payload = {'chat_id': chat_id or self.chat_id,
'text': message,
'parse_mode': 'MarkdownV2'}
response = self.session.post(method, data=payload).json()
if not response.get('ok'):
raise TelegramBotException(response)
class TelegramBotException(Exception):
def __init__(self, *args, **kwargs):
super().__init__((args, kwargs))
เดเดฒเตเดฒเดพเด เดเตเดเตเดเดฟเดเตเดเตเตผเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เดถเดฐเดฟเดฏเดพเดฏ เดฎเดพเตผเดเด:
TelegramBotSendMessage
,TelegramBotHook
,TelegramBot
- เดชเตเดฒเดเดฟเดจเดฟเตฝ, เดเดฐเต เดชเตเดคเต เดธเดเดญเดฐเดฃเดฟเดฏเดฟเตฝ เดเดเตเด, เด เดคเต เดเดชเตเดชเตบ เดธเตเดดเตโเดธเดฟเดจเต เดจเตฝเดเตเด.
เดเดเตเดเตพ เดเดคเตเดฒเตเดฒเดพเด เดชเด เดฟเดเตเดเตเดเตเดฃเตเดเดฟเดฐเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดเดเตเดเดณเตเดเต เดฑเดฟเดชเตเดชเตเตผเดเตเดเต เด เดชเตโเดกเตเดฑเตเดฑเตเดเตพ เดตเดฟเดเดฏเดเดฐเดฎเดพเดฏเดฟ เดชเดฐเดพเดเดฏเดชเตเดชเตเดเตเดเดฏเตเด เดเดพเดจเดฒเดฟเตฝ เดเดจเดฟเดเตเดเต เดเดฐเต เดชเดฟเดถเดเต เดธเดจเตเดฆเตเดถเด เด เดฏเดฏเตเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดคเต. เด เดคเต เดคเตเดฑเตเดฑเดพเดฃเต เดเดจเตเดจเต เดเดพเตป เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเด...
เดเดเตเดเดณเตเดเต เดจเดพเดฏเดฏเดฟเตฝ เดเดจเตเดคเต เดชเตเดเตเดเดฟ! เด
เดคเดฒเตเดฒเต เดจเดฎเตเดฎเตพ เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเดคเต? เดเตเดคเตเดฏเดฎเดพเดฏเดฟ!
เดจเต เดเดดเดฟเดเตเดเดพเตป เดชเตเดตเตเดเดฏเดพเดฃเต?
เดเดจเดฟเดเตเดเต เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดจเดทเตเดเดฎเดพเดฏเดคเดพเดฏเดฟ เดจเดฟเดเตเดเตพเดเตเดเต เดคเตเดจเตเดจเตเดจเตเดจเตเดฃเตเดเต? SQL เดธเตเตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเตผเดเตเดเดฟเดเตเดเดฏเดฟเดฒเตเดเตเดเต เดกเดพเดฑเตเดฑ เดเตเดฐเดพเตปเดธเตเดซเตผ เดเตเดฏเตเดฏเดพเดฎเตเดจเตเดจเต เด เดฆเตเดฆเตเดนเด เดตเดพเดเตเดฆเดพเดจเด เดเตเดฏเตเดคเดคเดพเดฏเดฟ เดคเตเดจเตเดจเตเดจเตเดจเต, เดเดจเตเดจเดฟเดเตเดเต เด เดฆเตเดฆเตเดนเด เด เดคเต เดเดเตเดคเตเดคเต เดตเดฟเดทเดฏเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดพเดฑเดฟ, เด เดดเดฟเดฎเดคเดฟ!
เด เดเตเดฐเตเดฐเดค เดฎเดจเดเดชเตเตผเดตเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดเดจเดฟเดเตเดเต เดจเดฟเดเตเดเตพเดเตเดเดพเดฏเดฟ เดเดฟเดฒ เดชเดฆเดพเดตเดฒเดฟเดเตพ เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเตเดฃเตเดเดฟเดตเดจเตเดจเต. เดเดชเตเดชเตเตพ เดจเดฟเดเตเดเตพเดเตเดเต เดเตเดเตเดคเตฝ เดฎเตเดจเตเดจเตเดเตเดเต เดชเตเดเดพเด.
เดเดเตเดเดณเตเดเต เดชเดฆเตเดงเดคเดฟ เดเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต:
- เดกเดพเดเต เดเตเดฏเตเดฏเตเด
- เดเดพเดธเตเดเตเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเด
- เดเดฒเตเดฒเดพเด เดเดคเตเดฐ เดฎเดจเตเดนเดฐเดฎเดพเดฃเตเดจเตเดจเต เดเดพเดฃเตเด
- เดชเตเดฐเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดธเตเดทเตป เดจเดฎเตเดชเดฑเตเดเตพ เดจเตฝเดเตเด
- SQL เดธเตเตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดจเตเดเตเด
- เดตเตเตผเดเตเดเดฟเดเตเดเดฏเดฟเตฝ เดกเดพเดฑเตเดฑ เดเดเตเด
- เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเดเตเดเดฃเดเตเดเตเดเตพ เดถเตเดเดฐเดฟเดเตเดเตเด
เด
เดคเดฟเดจเดพเตฝ, เดเดคเตเดฒเตเดฒเดพเด เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดทเดฎเดฎเดพเดเตเดเดพเตป, เดเดพเตป เดเดเตเดเดณเตเดเต เดเดฐเต เดเตเดฑเดฟเดฏ เดเตเดเตเดเดฟเดเตเดเตเตผเดเตเดเตฝ เดจเดเดคเตเดคเดฟ docker-compose.yml
:
docker-compose.db.yml
version: '3.4'
x-mssql-base: &mssql-base
image: mcr.microsoft.com/mssql/server:2017-CU21-ubuntu-16.04
restart: always
environment:
ACCEPT_EULA: Y
MSSQL_PID: Express
SA_PASSWORD: SayThanksToSatiaAt2020
MSSQL_MEMORY_LIMIT_MB: 1024
services:
dwh:
image: jbfavre/vertica:9.2.0-7_ubuntu-16.04
mssql_0:
<<: *mssql-base
mssql_1:
<<: *mssql-base
mssql_2:
<<: *mssql-base
mssql_init:
image: mio101/py3-sql-db-client-base
command: python3 ./mssql_init.py
depends_on:
- mssql_0
- mssql_1
- mssql_2
environment:
SA_PASSWORD: SayThanksToSatiaAt2020
volumes:
- ./mssql_init.py:/mssql_init.py
- ./dags/commons/datasources.py:/commons/datasources.py
เด เดตเดฟเดเต เดเดเตเดเตพ เดเดฏเตผเดคเตเดคเตเดจเตเดจเต:
- เดนเตเดธเตเดฑเตเดฑเดพเดฏเดฟ เดตเตเตผเดเตเดเดฟเดเตเด
dwh
เดเดฑเตเดฑเดตเตเด เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เดเตเดฐเดฎเตเดเดฐเดฃเดเตเดเตพเดเตเดเตเดชเตเดชเด, - SQL เดธเตเตผเดตเดฑเดฟเดจเตเดฑเต เดฎเตเดจเตเดจเต เดธเดจเตเดฆเตผเดญเดเตเดเตพ,
- เดชเดฟเดจเตเดจเตเดเตเดณเตเดณ เดกเดพเดฑเตเดฑเดพเดฌเตเดธเตเดเตพ เดเดเตเดเตพ เดเตเดฑเดเตเดเต เดกเดพเดฑเตเดฑ เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต (เดเดฐเต เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด เดจเตเดเตเดเดฐเตเดคเต
mssql_init.py
!)
เดเดดเดฟเดเตเด เดคเดตเดฃเดคเตเดคเตเดเตเดเดพเตพ เด เตฝเดชเตเดชเด เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเดฐเต เดเดฎเดพเตปเดกเดฟเดจเตเดฑเต เดธเดนเดพเดฏเดคเตเดคเตเดเต เดเดเตเดเตพ เดเดฒเตเดฒเดพ เดจเดฒเตเดฒ เดเดพเดฐเตเดฏเดเตเดเดณเตเด เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเต:
$ docker-compose -f docker-compose.yml -f docker-compose.db.yml up --scale worker=3
เดเดเตเดเดณเตเดเต เด
เดคเตเดญเตเดค เดฑเดพเตปเดกเดฎเตเดธเตผ เดธเตเดทเตเดเดฟเดเตเดเดคเต, เดจเดฟเดเตเดเตพเดเตเดเต เดเดจเด เดเดชเดฏเตเดเดฟเดเตเดเดพเด Data Profiling/Ad Hoc Query
:
เดชเตเดฐเดงเดพเดจ เดเดพเดฐเตเดฏเด เด
เดคเต เดตเดฟเดถเดเดฒเดจ เดตเดฟเดฆเดเตเดงเตผเดเตเดเต เดเดพเดฃเดฟเดเตเดเดฐเตเดคเต เดเดจเตเดจเดคเดพเดฃเต
เดตเดฟเดตเดฐเดฟเดเตเดเดพเตป ETL เดธเตเดทเดจเตเดเตพ เดเดพเตป เดเตเดฏเตเดฏเดฟเดฒเตเดฒ, เดเดฒเตเดฒเดพเด เด เดตเดฟเดเต เดจเดฟเดธเตเดธเดพเดฐเดฎเดพเดฃเต: เดเดเตเดเตพ เดเดฐเต เด เดเดฟเดคเตเดคเดฑ เดเดฃเตเดเดพเดเตเดเตเดจเตเดจเต, เด เดคเดฟเตฝ เดเดฐเต เด เดเดฏเดพเดณเดฎเตเดฃเตเดเต, เดเดเตเดเตพ เดเดฒเตเดฒเดพเด เดเดฐเต เดธเดจเตเดฆเตผเดญ เดฎเดพเดจเตเดเตผ เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดคเดฟเดฏเตเดจเตเดจเต, เดเดชเตเดชเตเตพ เดเดเตเดเตพ เดเดคเต เดเตเดฏเตเดฏเตเดจเตเดจเต:
with Session(task_name) as session:
print('Load', session.id, 'started')
# Load worflow
...
session.successful = True
session.loaded_rows = 15
session.py
from sys import stderr
class Session:
"""ETL workflow session
Example:
with Session(task_name) as session:
print(session.id)
session.successful = True
session.loaded_rows = 15
session.comment = 'Well done'
"""
def __init__(self, connection, task_name):
self.connection = connection
self.connection.autocommit = True
self._task_name = task_name
self._id = None
self.loaded_rows = None
self.successful = None
self.comment = None
def __enter__(self):
return self.open()
def __exit__(self, exc_type, exc_val, exc_tb):
if any(exc_type, exc_val, exc_tb):
self.successful = False
self.comment = f'{exc_type}: {exc_val}n{exc_tb}'
print(exc_type, exc_val, exc_tb, file=stderr)
self.close()
def __repr__(self):
return (f'<{self.__class__.__name__} '
f'id={self.id} '
f'task_name="{self.task_name}">')
@property
def task_name(self):
return self._task_name
@property
def id(self):
return self._id
def _execute(self, query, *args):
with self.connection.cursor() as cursor:
cursor.execute(query, args)
return cursor.fetchone()[0]
def _create(self):
query = """
CREATE TABLE IF NOT EXISTS sessions (
id SERIAL NOT NULL PRIMARY KEY,
task_name VARCHAR(200) NOT NULL,
started TIMESTAMPTZ NOT NULL DEFAULT current_timestamp,
finished TIMESTAMPTZ DEFAULT current_timestamp,
successful BOOL,
loaded_rows INT,
comment VARCHAR(500)
);
"""
self._execute(query)
def open(self):
query = """
INSERT INTO sessions (task_name, finished)
VALUES (%s, NULL)
RETURNING id;
"""
self._id = self._execute(query, self.task_name)
print(self, 'opened')
return self
def close(self):
if not self._id:
raise SessionClosedError('Session is not open')
query = """
UPDATE sessions
SET
finished = DEFAULT,
successful = %s,
loaded_rows = %s,
comment = %s
WHERE
id = %s
RETURNING id;
"""
self._execute(query, self.successful, self.loaded_rows,
self.comment, self.id)
print(self, 'closed',
', successful: ', self.successful,
', Loaded: ', self.loaded_rows,
', comment:', self.comment)
class SessionError(Exception):
pass
class SessionClosedError(SessionError):
pass
เดธเดฎเดฏเด เดตเดจเตเดจเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต เดเดเตเดเดณเตเดเต เดกเดพเดฑเตเดฑ เดถเตเดเดฐเดฟเดเตเดเตเด เดเดเตเดเดณเตเดเต เดเดจเตเดจเดฐ เดจเตเดฑเต เดฎเตเดถเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต. เดตเดณเดฐเต เด เดชเตเดฐเดธเดเตเดคเดฎเดพเดฏ เดตเดฐเดฟเดเดณเตเดเต เดธเดนเดพเดฏเดคเตเดคเตเดเต เดจเดฎเตเดเตเดเต เดเดคเต เดเตเดฏเตเดฏเดพเด:
source_conn = MsSqlHook(mssql_conn_id=src_conn_id, schema=src_schema).get_conn()
query = f"""
SELECT
id, start_time, end_time, type, data
FROM dbo.Orders
WHERE
CONVERT(DATE, start_time) = '{dt}'
"""
df = pd.read_sql_query(query, source_conn)
- เดเดฐเต เดนเตเดเตเดเต เดธเดนเดพเดฏเดคเตเดคเตเดเต เดจเดฎเตเดเตเดเต เดเดฏเตผเดซเตเดฒเตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเดฟเดเตเดเตเด
pymssql
- เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเตเด - เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเดฒเตเดเตเดเต เดเดฐเต เดคเตเดฏเดคเดฟเดฏเตเดเต เดฐเตเดชเดคเตเดคเดฟเตฝ เดเดฐเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดเตเดเดพเด - เดเดคเต เดเตเดเดชเตเดฒเตเดฑเตเดฑเต เดเดเตเดเดฟเตป เดซเดเดเตเดทเดจเดฟเดฒเตเดเตเดเต เดเดฑเดฟเดฏเดชเตเดชเตเดเตเด.
- เดเดเตเดเดณเตเดเต เด
เดญเตเดฏเตผเดคเตเดฅเดจ เดคเตเตผเดเตเดเตเดจเตเดจเต
pandas
เดเดฐเดพเดฃเต เดจเดฎเตเดฎเต เดจเตเดเตเดDataFrame
- เดเดคเต เดญเดพเดตเดฟเดฏเดฟเตฝ เดเดเตเดเตพเดเตเดเต เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดเตเด.
เดเดพเตป เดชเดเดฐเด เดตเดฏเตเดเตเดเตเดจเตเดจเดคเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต
{dt}
เดเดฐเต เด เดญเตเดฏเตผเดคเตเดฅเดจ เดชเดฐเดพเดฎเตเดฑเตเดฑเดฑเดฟเดจเต เดชเดเดฐเด%s
เดเดพเดจเตเดฐเต เดฆเตเดทเตเดเดจเดพเดฏ เดชเดฟเดจเตเดเตเดเดฟเดฏเต เดเดฏเดคเตเดเตเดฃเตเดเดฒเตเดฒpandas
เดเตเดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒpymssql
เด เดตเดธเดพเดจเดคเตเดคเตเดคเต เดธเตเดฒเดฟเดชเตเดชเตเดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเตparams: List
เด เดตเตป เดถเดฐเดฟเดเตเดเตเด เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเตเดตเตเดเตเดเดฟเดฒเตเดtuple
.
เดกเตเดตเดฒเดชเตเดชเตผ เดเดจเตเดจเดคเตเด เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเดpymssql
เดเดจเดฟ เด เดตเดจเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเตเดฃเตเดเดคเดฟเดฒเตเดฒเตเดจเตเดจเต เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต, เดชเตเดฑเดคเตเดคเตเดชเตเดเดพเดจเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเตpyodbc
.
เดเดฏเตผเดซเตเดฒเต เดเดเตเดเดณเตเดเต เดซเดเดเตโเดทเดจเตเดเดณเตเดเต เดเตผเดเตเดฏเตเดฎเตเดจเตเดฑเตเดเตพ เดเดจเตเดคเตเดฒเตเดฒเดพเดฎเดพเดฏเดพเดฃเต เดจเดฟเดฑเดเตเดเดคเตเดจเตเดจเต เดจเดฎเตเดเตเดเต เดจเตเดเตเดเดพเด:
เดกเดพเดฑเตเดฑ เดเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดคเตเดเดฐเตเดจเตเดจเดคเดฟเตฝ เด เตผเดคเตเดฅเดฎเดฟเดฒเตเดฒ. เดเดจเตเดจเดพเตฝ เดชเตเดฐเดฟเดชเตเดชเดฟเดเตเดเตฝ เดตเดฟเดเดฏเดเดฐเดฎเดพเดฃเตเดจเตเดจเต เดเดฐเตเดคเตเดจเตเดจเดคเตเด เดตเดฟเดเดฟเดคเตเดฐเดฎเดพเดฃเต. เดเดจเตเดจเดพเตฝ เดเดคเต เดเดฐเต เดคเตเดฑเตเดฑเดฒเตเดฒ. เด-เดเดนเต, เดเดจเตเดคเต เดเตเดฏเตเดฏเดฃเด?! เดเตเดเดพเดคเต เดเดตเดฟเดเต เดเดจเตเดคเดพเดฃเต:
if df.empty:
raise AirflowSkipException('No rows to load')
AirflowSkipException
เดชเดฟเดถเดเตเดเดณเตเดจเตเดจเตเดฎเดฟเดฒเตเดฒเตเดจเตเดจเต เดเดฏเตผเดซเตเดฒเตเดฏเตเดเต เดชเดฑเดฏเตเด, เดชเดเตเดทเต เดเดเตเดเตพ เดเดพเดธเตเดเต เดเดดเดฟเดตเดพเดเตเดเตเดจเตเดจเต. เดเดจเตเดฑเตผเดซเตเดธเดฟเดจเต เดชเดเตเดเดฏเต เดเตเดตเดชเตเดชเต เดเดคเตเดฐเด เดเดฃเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเดฟเดฒเตเดฒ, เดชเดเตเดทเต เดชเดฟเดเตเดเต.
เดจเดฎเตเดเตเดเต เดจเดฎเตเดฎเตเดเต เดกเดพเดฑเตเดฑ เดเตเดธเต เดเตเดฏเตเดฏเดพเด เดเดจเตเดจเดฟเดฒเดงเดฟเดเด เดจเดฟเดฐเดเตพ:
df['etl_source'] = src_schema
df['etl_id'] = session.id
df['hash_id'] = hash_pandas_object(df[['etl_source', 'id']])
เดเดตเตผ:
- เดเดเตเดเตพ เดเตผเดกเดฑเตเดเตพ เดธเตเดตเตเดเดฐเดฟเดเตเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต,
- เดเดเตเดเดณเตเดเต เดตเตเดณเตเดณเดชเตเดชเตเดเตเด เดธเตเดทเดจเตเดฑเต เดเดกเดฟ (เด เดคเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟเดฐเดฟเดเตเดเตเด เดเดฐเต เดเตเดฒเดฟเดเตเดเตเด),
- เดเดฑเดตเดฟเดเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเด เดเตผเดกเตผ เดเดกเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเด เดเดฐเต เดนเดพเดทเต - เด เดคเดฟเดจเดพเตฝ เด เดจเตเดคเดฟเดฎ เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเตฝ (เดเดฒเตเดฒเดพเด เดเดฐเต เดเตเดฌเดฟเดณเดฟเดฒเตเดเตเดเต เดชเดเดฐเตเดจเตเดจเดฟเดเดคเตเดคเต) เดเดเตเดเตพเดเตเดเต เดเดฐเต เด เดฆเตเดตเดฟเดคเตเดฏ เดเตผเดกเตผ เดเดกเดฟ เดเดฃเตเดเต.
เด เดตเดธเดพเดจ เดเดเตเดเด เด เดตเดถเตเดทเดฟเดเตเดเตเดจเตเดจเต: เดเดฒเตเดฒเดพเด เดตเตเตผเดเตเดเดฟเดเตเดเดฏเดฟเดฒเตเดเตเดเต เดเดดเดฟเดเตเดเตเด. เดเตเดเดพเดคเต, เดตเดฟเดเดฟเดคเตเดฐเดฎเตเดจเตเดจเต เดชเดฑเดฏเดเตเดเต, เดเดคเต เดเตเดฏเตเดฏเดพเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด เดเดเดญเตเดฐเดตเตเด เดเดพเดฐเตเดฏเดเตเดทเดฎเดตเตเดฎเดพเดฏ เดฎเดพเตผเดเตเดเดเตเดเดณเดฟเดฒเตเดจเตเดจเต CSV เดเดฃเต!
# Export data to CSV buffer
buffer = StringIO()
df.to_csv(buffer,
index=False, sep='|', na_rep='NUL', quoting=csv.QUOTE_MINIMAL,
header=False, float_format='%.8f', doublequote=False, escapechar='\')
buffer.seek(0)
# Push CSV
target_conn = VerticaHook(vertica_conn_id=target_conn_id).get_conn()
copy_stmt = f"""
COPY {target_table}({df.columns.to_list()})
FROM STDIN
DELIMITER '|'
ENCLOSED '"'
ABORT ON ERROR
NULL 'NUL'
"""
cursor = target_conn.cursor()
cursor.copy(copy_stmt, buffer)
- เดเดเตเดเตพ เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดฑเดฟเดธเตเดตเตผ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเต
StringIO
. pandas
เดฆเดฏเดฏเตเดเต เดเดเตเดเดณเตเดเต เดเดเตเดDataFrame
เดฐเตเดชเดคเตเดคเดฟเตฝCSV
-เดฒเตเดจเตเดเตพ.- เดเดฐเต เดนเตเดเตเดเต เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฎเตเดเตเดเต เดชเตเดฐเดฟเดฏเดชเตเดชเตเดเตเด เดตเตเตผเดเตเดเดฟเดเตเดเดฏเดฟเดฒเตเดเตเดเต เดเดฐเต เดเดฃเดเตเดทเตป เดคเตเดฑเดเตเดเดพเด.
- เดเดชเตเดชเตเตพ เดธเดนเดพเดฏเดคเตเดคเตเดเต
copy()
เดเดเตเดเดณเตเดเต เดกเดพเดฑเตเดฑ เดตเตเตผเดเตเดเดฟเดเตเดเดฏเดฟเดฒเตเดเตเดเต เดจเตเดฐเดฟเดเตเดเต เด เดฏเดฏเตเดเตเดเตเด!
เดกเตเดฐเตเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดคเตเดฐ เดฒเตเดจเตเดเตพ เดชเตเดฐเดฟเดชเตเดชเดฟเดเตเดเตเดตเตเดจเตเดจเต เดเดเตเดเตพ เดเดเตเดเตเดเตเด, เดเดฒเตเดฒเดพเด เดถเดฐเดฟเดฏเดพเดฃเตเดจเตเดจเต เดธเตเดทเตป เดฎเดพเดจเตเดเดฐเตเดเต เดชเดฑเดฏเตเด:
session.loaded_rows = cursor.rowcount
session.successful = True
เด เดคเตเดฐเดฏเตเดฏเตเดณเตเดณเต.
เดตเดฟเตฝเดชเตเดชเดจเดฏเดฟเตฝ, เดเดเตเดเตพ เดเดพเตผเดเตเดฑเตเดฑเต เดชเตเดฒเตเดฑเตเดฑเต เดธเตเดตเดฎเตเดงเดฏเดพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต. เดเดตเดฟเดเต เดเดพเตป เดเดฐเต เดเตเดฑเดฟเดฏ เดฏเดจเตเดคเตเดฐเด เด เดจเตเดตเดฆเดฟเดเตเดเต:
create_schema_query = f'CREATE SCHEMA IF NOT EXISTS {target_schema};'
create_table_query = f"""
CREATE TABLE IF NOT EXISTS {target_schema}.{target_table} (
id INT,
start_time TIMESTAMP,
end_time TIMESTAMP,
type INT,
data VARCHAR(32),
etl_source VARCHAR(200),
etl_id INT,
hash_id INT PRIMARY KEY
);"""
create_table = VerticaOperator(
task_id='create_target',
sql=[create_schema_query,
create_table_query],
vertica_conn_id=target_conn_id,
task_concurrency=1,
dag=dag)
เดเดพเตป เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต
VerticaOperator()
เดเดพเตป เดเดฐเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดธเตเดเตเดฎเดฏเตเด เดเดฐเต เดชเดเตเดเดฟเดเดฏเตเด เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต (เด เดต เดเดคเดฟเดจเดเด เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดคเตเตผเดเตเดเดฏเดพเดฏเตเด). เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เดชเตเดฐเดงเดพเดจ เดเดพเดฐเตเดฏเด:
for conn_id, schema in sql_server_ds:
load = PythonOperator(
task_id=schema,
python_callable=workflow,
op_kwargs={
'src_conn_id': conn_id,
'src_schema': schema,
'dt': '{{ ds }}',
'target_conn_id': target_conn_id,
'target_table': f'{target_schema}.{target_table}'},
dag=dag)
create_table >> load
เดธเดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเต
- เดถเดฐเดฟ, - เดเตเดฑเดฟเดฏ เดฎเตเดธเต เดชเดฑเดเตเดเต, - เด เดฒเตเดฒเต, เดเดชเตเดชเตเตพ
เดเดพเดเตเดเดฟเดฒเต เดเดฑเตเดฑเดตเตเด เดญเตเดเดฐเดฎเดพเดฏ เดฎเตเดเด เดเดพเดจเดพเดฃเตเดจเตเดจเต เดจเดฟเดเตเดเตพเดเตเดเต เดฌเตเดงเตเดฏเดฎเตเดฃเตเดเต?
เดเตเดฒเดฟเดฏ เดกเตเดฃเดพเตพเดกเตเดธเตบ, เดเตเดฐเตเดซเดฒเตเดฒเต
เดเดจเดฟเดเตเดเตเด เดเดจเตเดฑเต เดธเดนเดชเตเดฐเดตเตผเดคเตเดคเดเตผเดเตเดเตเด เดเดฐเต เดฎเดคเตเดธเดฐเดฎเตเดฃเตเดเตเดเตเดเดฟเตฝ: เดเดฆเตเดฏเด เดฎเตเดคเตฝ เดเดฐเดพเดฃเต เดชเตเดเตเดเตเดจเตเดจเต เดเดฐเต ETL เดชเตเดฐเตเดธเดธเตเดธเต เดธเตเดทเตโเดเดฟเดเตเดเตเดเดฏเตเด เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเดคเต: เด เดตเตผ เด เดตเดฐเตเดเต SSIS-เดเด เดเดฐเต เดฎเตเดธเตเด เดเดชเตเดชเด เดเดพเดจเตเด เดเดฏเตผเดซเตเดฒเตเดฏเตเด ... เดคเตเดเตผเดจเตเดจเต เดเดเตเดเตพ เด เดฑเตเดฑเดเตเดฑเตเดฑเดชเตเดชเดฃเดฟเดฏเตเดเต เดเดณเตเดชเตเดชเดตเตเด เดคเดพเดฐเดคเดฎเตเดฏเด เดเตเดฏเตเดฏเตเด ... เดเตเดณเตเดณเดพเด, เดเดพเตป เด เดตเดฐเต เดเดฒเตเดฒเดพ เดฎเตเดจเตเดจเดฃเดฟเดเดณเดฟเดฒเตเด เดคเตเตฝเดชเตเดชเดฟเดเตเดเตเดฎเตเดจเตเดจเต เดจเดฟเดเตเดเตพ เดธเดฎเตเดฎเดคเดฟเดเตเดเตเดฎเตเดจเตเดจเต เดเดพเตป เดเดฐเตเดคเตเดจเตเดจเต!
เดเตเดฑเดเตเดเตเดเตเดเดฟ เดเตเดฐเดตเดฎเดพเดฃเตเดเตเดเดฟเตฝ, เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต - เดชเตเดฐเตเดเตเดฐเดพเด เดเตเดกเดฟเดจเตเดฑเต เดฐเตเดชเดคเตเดคเดฟเตฝ เดชเตเดฐเดเตเดฐเดฟเดฏเดเตพ เดตเดฟเดตเดฐเดฟเดเตเดเตเดเตเดฃเตเดเต - เดเดจเตเดฑเต เดเตเดฒเดฟ เดเตเดฏเตเดคเต เดตเดณเดฐเตเดฏเดงเดฟเดเด เดเตเดเตเดคเตฝ เดธเตเดเดเดฐเดตเตเด เดเดธเตเดตเดพเดฆเตเดฏเดเดฐเดตเตเดฎเดพเดฃเต.
เดชเตเดฒเดเต-เดเดจเตเดจเตเดเดณเตเดเตเดฏเตเด เดธเตเดเตเดฒเดฌเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเตเดเต เดฎเตเตปเดเดฐเตเดคเดฒเดฟเดจเตเดฑเตเดฏเตเด เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด เดคเดฟเดจเตเดฑเต เดชเดฐเดฟเดงเดฟเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เดตเดฟเดชเตเดฒเตเดเดฐเดฃเด, เดฎเดฟเดเตเดเดตเดพเดฑเตเด เดเดคเต เดฎเตเดเดฒเดฏเดฟเดฒเตเด เดเดฏเตผเดซเตเดฒเต เดเดชเดฏเตเดเดฟเดเตเดเดพเดจเตเดณเตเดณ เด เดตเดธเดฐเด เดจเดฟเดเตเดเตพเดเตเดเต เดจเตฝเดเตเดจเตเดจเต: เดกเดพเดฑเตเดฑ เดถเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเด เดคเดฏเตเดฏเดพเดฑเดพเดเตเดเตเดจเตเดจเดคเดฟเดจเตเด เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดฎเตเดดเตเดตเตป เดเดเตเดฐเดคเตเดคเดฟเดฒเตเด, เดฑเตเดเตเดเดฑเตเดฑเตเดเตพ เดตเดฟเดเตเดทเตเดชเดฟเดเตเดเตเดฎเตเดชเตเดดเตเด (เดเตเดตเตเดตเดฏเดฟเดฒเตเดเตเดเต, เดเตเดดเตเดธเต).
เดญเดพเดเด เด เดจเตเดคเดฟเดฎเดตเตเด เดฑเดซเดฑเตปเดธเตเด เดตเดฟเดตเดฐเดเตเดเดณเตเด
เดเดเตเดเตพ เดจเดฟเดเตเดเตพเดเตเดเดพเดฏเดฟ เดถเตเดเดฐเดฟเดเตเด เดฑเตเดเตเดเต
start_date
. เด เดคเต, เดเดคเต เดเดคเดฟเดจเดเด เดเดฐเต เดชเตเดฐเดพเดฆเตเดถเดฟเด เดฎเตเดฎเตเดฎเดพเดฃเต. เดกเดเดฟเดจเตเดฑเต เดชเตเดฐเดงเดพเดจ เดตเดพเดฆเด เดตเดดเดฟstart_date
เดเดฒเตเดฒเดพเด เดเดเดจเตเดจเตเดชเตเดเตเด. เดเตเดฐเตเดเตเดเดคเตเดคเดฟเตฝ, เดจเดฟเดเตเดเตพ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝstart_date
เดจเดฟเดฒเดตเดฟเดฒเต เดคเตเดฏเดคเดฟ, เดเดชเตเดชเดschedule_interval
- เดเดฐเต เดฆเดฟเดตเดธเด, เดชเดฟเดจเตเดจเต DAG เดจเดพเดณเต เดเดฐเดเดญเดฟเดเตเดเตเด.start_date = datetime(2020, 7, 7, 0, 1, 2)
เดชเดฟเดจเตเดจเต เดชเตเดฐเดถเตโเดจเดเตเดเดณเตเดจเตเดจเตเดฎเดฟเดฒเตเดฒ.
เดเดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเด เดฎเดฑเตเดฑเตเดฐเต เดฑเตบเดเตเด เดชเดฟเดถเดเต เดเดฃเตเดเต:
Task is missing the start_date parameter
, เดเดคเต เดฎเดฟเดเตเดเดชเตเดชเตเดดเตเด เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเต เดจเดฟเดเตเดเตพ เดกเดพเดเต เดเดชเตเดชเดฑเตเดฑเตเดฑเดฑเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดฎเดฑเดจเตเดจเตเดตเตเดจเตเดจเดพเดฃเต.- เดเดฒเตเดฒเดพเด เดเดฐเต เดฎเตเดทเตเดจเดฟเตฝ. เด เดคเต, เดเตเดเดพเดคเต เดฌเตเดธเตเดเดณเตเด (เดเดฏเตผเดซเตเดฒเตเดฏเตเด เดเดเตเดเดณเตเดเต เดเตเดเตเดเดฟเดเดเตเด), เดเดฐเต เดตเตเดฌเต เดธเตเตผเดตเดฑเตเด เดเดฐเต เดทเตเดกเตเดฏเตเดณเดฑเตเด เดคเตเดดเดฟเดฒเดพเดณเดฟเดเดณเตเด. เด เดคเต เดชเตเดฒเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเต. เดเดจเตเดจเดพเตฝ เดเดพเดฒเดเตเดฐเดฎเตเดฃ, เดธเตเดตเดจเดเตเดเตพเดเตเดเดพเดฏเตเดณเตเดณ เดเตเดฒเดฟเดเดณเตเดเต เดเดฃเตเดฃเด เดตเตผเดฆเตเดงเดฟเดเตเดเต, PostgreSQL 20 ms-เดจเต เดชเดเดฐเด 5 เดธเตเดเตเดเตปเดกเดฟเตฝ เดธเตเดเดฟเดเดฏเตเดเต เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเดพเตป เดคเตเดเดเตเดเดฟเดฏเดชเตเดชเตเตพ, เดเดเตเดเตพ เด เดคเต เดเดเตเดคเตเดคเต เดเตเดฃเตเดเตเดชเตเดฏเดฟ.
- เดฒเตเดเตเดเตฝ เดเดเตเดธเดฟเดเตเดฏเตเดเตเดเตผ. เด เดคเต, เดเดเตเดเตพ เดเดชเตเดชเตเดดเตเด เด เดคเดฟเตฝ เดเดฐเดฟเดเตเดเตเดเดฏเดพเดฃเต, เดเดเตเดเตพ เดเดคเดฟเดจเดเด เด เดเดพเดงเดคเตเดคเดฟเดจเตเดฑเต เด เดฐเดฟเดเดฟเตฝ เดเดคเตเดคเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. LocalExecutor เดเดเตเดเตพเดเตเดเต เดเดคเตเดตเดฐเต เดฎเดคเดฟเดฏเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดเดจเตเดจเดพเตฝ เดเดชเตเดชเตเตพ เดเดฐเต เดคเตเดดเดฟเดฒเดพเดณเดฟเดฏเตเดเตเดเดฟเดฒเตเดฎเดพเดฏเดฟ เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเดพเดจเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฏเดฟ, CeleryExecutor-เดฒเตเดเตเดเต เดฎเดพเดฑเดพเตป เดเดเตเดเตพ เดเด เดฟเดจเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเตเดฐเดฎเดฟเดเตเดเตเดฃเตเดเดฟเดตเดฐเตเด. เดจเดฟเดเตเดเตพเดเตเดเต เดเดฐเต เดฎเตเดทเตเดจเดฟเตฝ เดเดคเต เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด เดเดจเตเดจ เดตเดธเตเดคเตเดค เดเดฃเดเตเดเดฟเดฒเตเดเตเดคเตเดคเต, เดเดฐเต เดธเตเตผเดตเดฑเดฟเตฝ เดชเตเดฒเตเด เดธเตเดฒเดฑเดฟ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดจเตเดจเตเด เดจเดฟเดเตเดเดณเต เดคเดเดฏเตเดจเตเดจเดฟเดฒเตเดฒ, เด เดคเต "เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, เดเดฐเดฟเดเตเดเดฒเตเด เดเตฝเดชเดพเดฆเดจเดคเตเดคเดฟเดฒเตเดเตเดเต เดชเตเดเดฟเดฒเตเดฒ, เดธเดคเตเดฏเดธเดจเตเดงเดฎเดพเดฏเดฟ!"
- เดเดชเดฏเตเดเดฟเดเตเดเดพเดคเตเดคเดคเต เด
เดจเตเดคเตผเดจเดฟเตผเดฎเตเดฎเดฟเดค เดเดชเดเดฐเดฃเดเตเดเตพ:
- เดเดฃเดเตเดทเดจเตเดเตพ เดธเตเดตเดจ เดเตเดฐเตเดกเตปเดทเตเดฏเดฒเตเดเตพ เดธเตเดเตเดทเดฟเดเตเดเดพเตป,
- SLA เดฎเดฟเดธเตเดธเตเดเตพ เดเตเดคเตเดฏเดธเดฎเดฏเดคเตเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเดคเตเดค เดเตเดฒเดฟเดเดณเตเดเต เดชเตเดฐเดคเดฟเดเดฐเดฟเดเตเดเดพเตป,
- xcom เดฎเตเดฑเตเดฑเดพเดกเดพเดฑเตเดฑ เดเตเดฎเดพเดฑเตเดฑเดคเตเดคเดฟเดจเดพเดฏเดฟ (เดเดพเตป เดชเดฑเดเตเดเต เดฎเตเดฑเตเดฑเดพเดกเดพเดฑเตเดฑ!) เดกเดพเดเต เดเดพเดธเตเดเตเดเตเดเตพเดเตเดเดฟเดเดฏเดฟเตฝ.
- เดฎเตเดฏเดฟเตฝ เดฆเตเดฐเตเดชเดฏเตเดเด. เดถเดฐเดฟ, เดเดจเดฟเดเตเดเต เดเดจเตเดคเต เดชเดฑเดฏเดพเตป เดเดดเดฟเดฏเตเด? เดตเตเดดเตเด เดตเดฐเตเดคเตเดคเดฟเดฏ เดเตเดฒเดฟเดเดณเตเดเต เดเดฒเตเดฒเดพ เดเดตเตผเดคเตเดคเดจเดเตเดเตพเดเตเดเตเด เด เดฒเตเตผเดเตเดเตเดเตพ เดธเดเตเดเตเดเดฐเดฟเดเตเดเต. เดเดชเตเดชเตเตพ เดเดจเตเดฑเต เดตเตผเดเตเดเต Gmail-เตฝ เดเดฏเตผเดซเตเดฒเตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต 90k เดเดฎเตเดฏเดฟเดฒเตเดเตพ เดเดฃเตเดเต, เดเตเดเดพเดคเต เดตเตเดฌเต เดฎเตเดฏเดฟเตฝ เดฎเตเดเตเดเต เดเดฐเต เดธเดฎเดฏเด 100-เตฝ เดเตเดเตเดคเตฝ เดเดเตเดเตเดเดพเดจเตเด เดเดฒเตเดฒเดพเดคเดพเดเตเดเดพเดจเตเด เดตเดฟเดธเดฎเตเดฎเดคเดฟเดเตเดเตเดจเตเดจเต.
เดเตเดเตเดคเตฝ เดเตเดดเดชเตเดชเดเตเดเตพ:
Apache Airflow Pitfails
เดเตเดเตเดคเตฝ เดเดเตเดเตเดฎเตเดทเตป เดเตเดณเตเดเตพ
เดเตเดเตเดฃเตเดเดฒเตเดฒ, เดคเดฒเดเตเดฃเตเดเต เดเตเดเตเดคเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป, เดเดฏเตผเดซเตเดฒเต เดเดเตเดเตพเดเตเดเดพเดฏเดฟ เดเดคเต เดคเดฏเตเดฏเดพเดฑเดพเดเตเดเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต:
REST API - เด เดฆเตเดฆเตเดนเดคเตเดคเดฟเดจเต เดเดชเตเดชเตเดดเตเด เดชเดฐเตเดเตเดทเดฃเดพเดคเตเดฎเด เดชเดฆเดตเดฟเดฏเตเดฃเตเดเต, เด เดคเต เด เดตเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดคเดเดฏเตเดจเตเดจเดฟเดฒเตเดฒ. เดเดคเต เดเดชเดฏเตเดเดฟเดเตเดเต, เดจเดฟเดเตเดเตพเดเตเดเต เดกเดพเดเตเดเดณเตเดฏเตเด เดเดพเดธเตเดเตเดเตเดเดณเตเดฏเตเด เดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดตเดฟเดตเดฐเดเตเดเตพ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดเดฐเต เดกเดพเดเต เดจเดฟเตผเดคเตเดคเดพเดจเตเด / เดเดฐเดเดญเดฟเดเตเดเดพเดจเตเด, เดเดฐเต DAG เดฑเตบ เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดเดฐเต เดชเตเตพ เดธเตเดทเตเดเดฟเดเตเดเดพเดจเตเด เดเดดเดฟเดฏเตเด.CLI - WebUI เดตเดดเดฟ เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เด เดธเตเดเดฐเตเดฏเด เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดชเตเดคเตเดตเต เดเดฒเตเดฒเดพเดคเตเดคเดคเตเดฎเดพเดฏ เดจเดฟเดฐเดตเดงเดฟ เดเตเดณเตเดเตพ เดเดฎเดพเตปเดกเต เดฒเตเดจเดฟเดฒเตเดเต เดฒเดญเตเดฏเดฎเดพเดฃเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:backfill
เดเดพเดธเตโเดเต เดธเดจเตเดฆเตผเดญเดเตเดเตพ เดชเตเดจเดฐเดพเดฐเดเดญเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต.
เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดตเดฟเดถเดเดฒเดจ เดตเดฟเดฆเดเตเดงเตผ เดตเดจเตเดจเต เดชเดฑเดเตเดเต: โเดธเดเดพเดตเต, เดเดจเตเดตเดฐเดฟ 1 เดฎเตเดคเตฝ 13 เดตเดฐเตเดฏเตเดณเตเดณ เดกเดพเดฑเตเดฑเดฏเดฟเตฝ เดจเดฟเดเตเดเตพเดเตเดเต เด เดธเดเดฌเดจเตเดงเดฎเตเดฃเตเดเต! เดถเดฐเดฟเดฏเดพเดเตเดเตเด, เดถเดฐเดฟเดฏเดพเดเตเดเตเด, เดถเดฐเดฟเดฏเดพเดเตเดเตเด, เดถเดฐเดฟเดฏเดพเดเตเดเตเด!" เดจเดฟเดเตเดเตพ เด เดคเตเดคเดฐเดฎเตเดฐเต เดนเตเดฌเต เดเดฃเต:airflow backfill -s '2020-01-01' -e '2020-01-13' orders
- เด
เดเดฟเดธเตเดฅเดพเดจ เดธเตเดตเดจเด:
initdb
,resetdb
,upgradedb
,checkdb
. run
, เดเดฐเต เดเตปเดธเตโเดฑเตเดฑเตปเดธเต เดเดพเดธเตโเดเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเดพเดจเตเด เดเดฒเตเดฒเดพ เดกเดฟเดชเตปเดกเตปเดธเดฟเดเดณเดฟเดฒเตเด เดธเตโเดเตเตผ เดเตเดฏเตเดฏเดพเดจเตเด เดเดคเต เดจเดฟเดเตเดเดณเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต. เดเตเดเดพเดคเต, เดจเดฟเดเตเดเตพเดเตเดเต เดเดคเต เดตเดดเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเดLocalExecutor
, เดจเดฟเดเตเดเตพเดเตเดเต เดเดฐเต เดธเตเดฒเดฑเดฟ เดเตเดฒเดธเตเดฑเตเดฑเตผ เดเดฃเตเดเตเดเตเดเดฟเตฝ เดชเตเดฒเตเด.- เดเดคเดพเดฃเตเดเต เดเดฐเต เดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเตเดจเตเดจเต
test
, เด เดเดฟเดธเตเดฅเดพเดจเดเตเดเดณเดฟเตฝ เดฎเดพเดคเตเดฐเด เดเดจเตเดจเตเด เดเดดเตเดคเตเดจเตเดจเดฟเดฒเตเดฒ. connections
เดทเตเดฒเตเดฒเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเดฃเดเตเดทเดจเตเดเตพ เดตเตปเดคเตเดคเดฟเตฝ เดธเตเดทเตเดเดฟเดเตเดเดพเตป เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต.
เดชเตเดคเตเดคเตบ API - เดธเดเดตเดฆเดฟเดเตเดเดพเดจเตเดณเตเดณ เดเดฐเต เดนเดพเตผเดกเตโเดเตเตผ เดฎเดพเตผเดเด, เด เดคเต เดชเตเดฒเดเดฟเดจเตเดเตพเดเตเดเดพเดฏเดฟ เดเดฆเตเดฆเตเดถเดฟเดเตเดเตเดณเตเดณเดคเดพเดฃเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เด เดคเดฟเตฝ เดเตเดฑเดฟเดฏ เดเตเดเดณเดพเตฝ เดเตเดเตเดเด เดเตเดเดฐเตเดคเต. เดชเดเตเดทเต เดเดเตเดเดณเต เดชเตเดเตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเดพเดฃเต เดคเดเดฏเตเด/home/airflow/dags
, เดเดเตเดipython
เดชเดฟเดจเตเดจเต เดเตเดดเดชเตเดชเด เดคเตเดเดเตเดเดฃเต? เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดเตเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฟเดเตเดเตพเดเตเดเต เดเดฒเตเดฒเดพ เดเดฃเดเตเดทเดจเตเดเดณเตเด เดเดฏเดฑเตเดฑเตเดฎเดคเดฟ เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด:from airflow import settings from airflow.models import Connection fields = 'conn_id conn_type host port schema login password extra'.split() session = settings.Session() for conn in session.query(Connection).order_by(Connection.conn_id): d = {field: getattr(conn, field) for field in fields} print(conn.conn_id, '=', d)
- เดเดฏเตผเดซเตเดฒเต เดฎเตเดฑเตเดฑเดพเดกเดพเดฑเตเดฑเดฌเตเดธเดฟเดฒเตเดเตเดเต เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต. เดเดคเดฟเดฒเตเดเตเดเต เดเดดเตเดคเดพเตป เดเดพเตป เดถเตเดชเดพเตผเดถ เดเตเดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒ, เดเดจเตเดจเดพเตฝ เดตเดฟเดตเดฟเดง เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดฎเตเดเตเดฐเดฟเดเตเดเตเดเตพเดเตเดเดพเดฏเดฟ เดเดพเดธเตโเดเต เดธเตเดฑเตเดฑเตเดฑเตเดฑเตเดเตพ เดฒเดญเดฟเดเตเดเตเดจเตเดจเดคเต เดเดคเตเดเตเดเดฟเดฒเตเด API-เดเตพ เดตเดดเดฟเดฏเตเดณเตเดณเดคเดฟเดจเตเดเตเดเดพเตพ เดตเตเดเดคเตเดคเดฟเดฒเตเด เดเดณเตเดชเตเดชเดคเตเดคเดฟเดฒเตเด เดเดฏเดฟเดฐเดฟเดเตเดเตเด.
เดจเดฎเตเดฎเตเดเต เดเดฒเตเดฒเดพ เดเตเดฒเดฟเดเดณเตเด เดจเดฟเตผเดเตเดเตเดตเดฎเดฒเตเดฒเตเดจเตเดจเต เดจเดฎเตเดเตเดเต เดชเดฑเดฏเดพเด, เดชเดเตเดทเต เด เดต เดเดฟเดฒเดชเตเดชเตเตพ เดตเตเดดเดพเด, เดเดคเต เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฃเต. เดเดจเตเดจเดพเตฝ เดเดฟเดฒ เดคเดเดธเตเดธเดเตเดเตพ เดเดคเดฟเดจเดเด เดธเดเดถเดฏเดพเดธเตเดชเดฆเดฎเดพเดฃเต, เด เดคเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดฃเตเดเดคเต เดเดตเดถเตเดฏเดฎเดพเดฃเต.
SQL เดธเตเดเตเดทเดฟเดเตเดเตเด!
WITH last_executions AS ( SELECT task_id, dag_id, execution_date, state, row_number() OVER ( PARTITION BY task_id, dag_id ORDER BY execution_date DESC) AS rn FROM public.task_instance WHERE execution_date > now() - INTERVAL '2' DAY ), failed AS ( SELECT task_id, dag_id, execution_date, state, CASE WHEN rn = row_number() OVER ( PARTITION BY task_id, dag_id ORDER BY execution_date DESC) THEN TRUE END AS last_fail_seq FROM last_executions WHERE state IN ('failed', 'up_for_retry') ) SELECT task_id, dag_id, count(last_fail_seq) AS unsuccessful, count(CASE WHEN last_fail_seq AND state = 'failed' THEN 1 END) AS failed, count(CASE WHEN last_fail_seq AND state = 'up_for_retry' THEN 1 END) AS up_for_retry FROM failed GROUP BY task_id, dag_id HAVING count(last_fail_seq) > 0
เดฑเตเดซเดฑเตปเดธเตเดเตพ
เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, Google-เดจเตเดฑเต เดเดทเตเดฏเตเดตเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเดฆเตเดฏเดคเตเดคเต เดชเดคเตเดคเต เดฒเดฟเดเตเดเตเดเตพ เดเดจเตเดฑเต เดฌเตเดเตเดเตโเดฎเดพเตผเดเตเดเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเดฏเตผเดซเตเดฒเต เดซเตเตพเดกเดฑเดฟเดฒเต เดเดณเตเดณเดเดเตเดเดเตเดเดณเดพเดฃเต.
เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเตป - เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, เดเดเตเดเตพ เดเดซเตเดธเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเดเดญเดฟเดเตเดเดฃเด. เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเตป, เดเดจเตเดจเดพเตฝ เดเดฐเดพเดฃเต เดจเดฟเตผเดฆเตเดฆเตเดถเดเตเดเตพ เดตเดพเดฏเดฟเดเตเดเตเดจเตเดจเดคเต?เดฎเดฟเดเดเตเด เดฐเตเดคเดฟเดเตพ - เดถเดฐเดฟ, เดธเตเดฐเดทเตโเดเดพเดเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดถเตเดชเดพเตผเดถเดเดณเตเดเตเดเดฟเดฒเตเด เดตเดพเดฏเดฟเดเตเดเตเด.เดเดฏเตผเดซเตเดฒเต เดฏเตเด - เดคเตเดเดเตเดเด เดคเดจเตเดจเต: เดเดฟเดคเตเดฐเดเตเดเดณเดฟเดฒเต เดเดชเดฏเตเดเตเดคเต เดเดจเตเดฑเตผเดซเตเดธเตเด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเตเดฏเตเดเต เดชเตเดฐเดงเดพเดจ เดเดถเดฏเดเตเดเตพ เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเตเดจเตเดจเต - เดจเดฟเดเตเดเตพเดเตเดเต เดเดจเตเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดฎเดจเดธเตเดธเดฟเดฒเดพเดฏเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ (เดชเตเดเตเดเตเดจเตเดจเต!) เด เดเดฟเดธเตเดฅเดพเดจ เดเดถเดฏเดเตเดเตพ เดจเดจเตเดจเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.Tianlong's Blog โ เดเดฐเต เดเดฏเตผเดซเตเดฒเต เดธเตเตผเดตเตผ/เดเตเดฒเดธเตเดฑเตเดฑเตผ เดเดเตเดเดจเต เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดพเด เดเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดเดฐเต เดเตเดกเต - เดเดฐเต เดเดฏเตผเดซเตเดฒเต เดเตเดฒเดธเตเดฑเตเดฑเตผ เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฐเต เดเตเดฑเดฟเดฏ เดเตเดกเต.เดฒเดฟเดซเตเดฑเตเดฑเดฟเตฝ เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต - เดเดฐเตเดชเดเตเดทเต เดเตเดเตเดคเตฝ เดเดชเดเดพเดฐเดฟเดเดคเดฏเตเด เดเตเดฑเดเตเดเต เดเดฆเดพเดนเดฐเดฃเดเตเดเดณเตเด เดเดดเดฟเดเต เดเดคเดพเดฃเตเดเต เด เดคเต เดฐเดธเดเดฐเดฎเดพเดฏ เดฒเตเดเดจเด.เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต เดเดเตเดเดจเตเดฏเดพเดฃเต เดธเตเดฒเดฑเดฟ เดคเตเดดเดฟเดฒเดพเดณเดฟเดเดณเดฟเตฝ เดเตเดฒเดฟเดเตพ เดตเดฟเดคเดฐเดฃเด เดเตเดฏเตเดฏเตเดจเตเดจเดคเต - เดธเตเดฒเดฑเดฟเดฏเตเดฎเดพเดฏเดฟ เดเตเตผเดจเตเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต.เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผ เดซเตเดฒเตเดฏเดฟเตฝ DAG เดฎเดฟเดเดเตเด เดฐเตเดคเดฟเดเตพ เดเดดเตเดคเตเดจเตเดจเต - เดเดพเดธเตโเดเตเดเตเดเดณเตเดเต เดเดเดชเตเดเตเดเตปเดธเดฟ, เดคเตเดฏเดคเดฟเดเตเดเต เดชเดเดฐเด เดเดกเดฟ เดฒเตเดกเดฟเดเดเต, เดฐเตเดชเดพเดจเตเดคเดฐเด, เดซเดฏเตฝ เดเดเดจ, เดฎเดฑเตเดฑเต เดฐเดธเดเดฐเดฎเดพเดฏ เดเดพเดฐเตเดฏเดเตเดเตพ เดเดจเตเดจเดฟเดตเดฏเตเดเตเดเตเดฑเดฟเดเตเดเต.เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเตเดฏเดฟเดฒเต เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพ เดเตเดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเตเดจเตเดจเต - เดเดพเตป เดเดเดจเตเดจเตเดชเตเดเตเดฎเตเดชเตเตพ เดฎเดพเดคเตเดฐเด เดธเตเดเดฟเดชเตเดชเดฟเดเตเด เดเดพเดธเตเดเตเดเตเดเดณเตเดเตเดฏเตเด เดเตเดฐเดฟเดเตผ เดฑเตเดณเดฟเดจเตเดฑเตเดฏเตเด เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพ.เดตเดพเดฏเตเดชเตเดฐเดตเดพเดนเด: เดจเดฟเดเตเดเดณเตเดเต DAG เดทเตเดกเตเดฏเตเดณเดฟเดจเต เดตเดณเดฐเต เดชเดฟเดจเตเดจเดฟเดฒเดพเดฏเดฟเดฐเดฟเดเตเดเตเดฎเตเดชเตเตพ - เดทเตเดกเตเดฏเตเดณเดฑเดฟเดฒเต เดเดฟเดฒ "เดเดฆเตเดฆเตเดถเดฟเดเตเด เดฐเตเดคเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเต" เดเดเตเดเดจเต เดฎเดฑเดฟเดเดเดเตเดเดพเด, เดจเดทเตเดเดชเตเดชเตเดเตเด เดกเดพเดฑเตเดฑ เดฒเตเดกเต เดเตเดฏเตเดฏเตเด, เดเดพเดธเตเดเตเดเตเดเตพเดเตเดเต เดฎเตเตปเดเดฃเดจ เดจเตฝเดเตเด.เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเตเดฏเตโเดเตเดเตเดณเตเดณ เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดฏ SQL เด เดจเตเดตเตเดทเดฃเดเตเดเตพ โ Airflow เดฎเตเดฑเตเดฑเดพเดกเดพเดฑเตเดฑเดฏเดฟเดฒเตเดเตเดเตเดณเตเดณ เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดฏ SQL เด เดจเตเดตเตเดทเดฃเดเตเดเตพ.เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต เดเดชเดฏเตเดเดฟเดเตเดเต เดตเตผเดเตเดเตเดซเตเดฒเตเดเตพ เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดเดฐเดเดญเดฟเดเตเดเตเด - เดเดฐเต เดเดทเตโเดเดพเดจเตเดธเตเดค เดธเตเตปเดธเตผ เดธเตเดทเตโเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดฏ เดเดฐเต เดตเดฟเดญเดพเดเดฎเตเดฃเตเดเต.เดชเตเดฐเตเดธเตเดฑเตเดฑเตเดฏเตเด เดเดฏเตผเดซเตเดฒเตเดฏเตเด เดเดชเดฏเตเดเดฟเดเตเดเต AWS-เตฝ Fetchr เดกเดพเดฑเตเดฑ เดธเดฏเตปเดธเต เดเตปเดซเตเดฐเดพ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเต - เดกเดพเดฑเตเดฑเดพ เดธเดฏเตปเดธเดฟเดจเดพเดฏเดฟ AWS-เตฝ เดเดฐเต เดเตปเดซเตเดฐเดพเดธเตเดเตเดฐเดเตเดเตผ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดฐเดธเดเดฐเดฎเดพเดฏ เดเดฐเต เดเตเดฑเดฟเดฏ เดเตเดฑเดฟเดชเตเดชเต.เดเดฏเตผเดซเตเดฒเต เดกเดฟเดเดเดฟเดเตพ เดกเตเดฌเดเตเดเต เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดฃเตเด 7 เดธเดพเดงเดพเดฐเดฃ เดชเดฟเดถเดเตเดเตพ - เดธเดพเดงเดพเดฐเดฃ เดคเตเดฑเตเดฑเตเดเตพ (เดเดฐเตเดเตเดเดฟเดฒเตเด เดเดชเตเดชเตเดดเตเด เดจเดฟเตผเดฆเตเดฆเตเดถเดเตเดเตพ เดตเดพเดฏเดฟเดเตเดเดพเดคเตเดคเดชเตเดชเตเตพ).เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต เดเดชเดฏเตเดเดฟเดเตเดเต เดชเดพเดธเตโเดตเตเดกเต เดธเดเดญเดฐเดฟเดเตเดเตเดเดฏเตเด เดเดเตโเดธเดธเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด - เดจเดฟเดเตเดเตพเดเตเดเต เดเดฃเดเตเดทเดจเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดพเดฎเตเดเตเดเดฟเดฒเตเด, เดเดณเตเดเตพ เดชเดพเดธเตโเดตเตเดกเตเดเตพ เดธเดเดญเดฐเดฟเดเตเดเตเดจเตเดจเดคเต เดเดเตเดเดจเตเดฏเตเดจเตเดจเต เดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเด.เดชเตเดคเตเดคเดฃเดฟเดจเตเดฑเต เดธเตเตป, เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต - เดเดเดชเตเดฒเดฟเดธเดฟเดฑเตเดฑเต เดกเดฟเดเดเดฟ เดซเตเตผเดตเตเดกเดฟเดเดเต, เดซเดเดเตโเดทเดจเตเดเดณเดฟเดฒเต เดธเดจเตเดฆเตผเดญเด เดคเตเดฐเต เดเตเดฏเตเดฏเตฝ, เดตเตเดฃเตเดเตเด เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพ, เดเตเดเดพเดคเต เดเดพเดธเตโเดเต เดฒเตเดเตเดเตเดเตพ เดเดดเดฟเดตเดพเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเตเด.เดตเดพเดฏเตเดธเดเตเดเดพเดฐเด: เด เดงเดฟเดเด เด เดฑเดฟเดฏเดพเดคเตเดค เดจเตเดฑเตเดเตเดเตเดเตพ, เดคเดจเตเดคเตเดฐเดเตเดเตพ, เดฎเดฟเดเดเตเด เดฐเตเดคเดฟเดเตพ - เดเดชเดฏเตเดเดคเตเดคเตเดเตเดเตเดฑเดฟเดเตเดเตdefault arguments
ะธparams
เดเตเดเดชเตเดฒเตเดฑเตเดฑเตเดเดณเดฟเดฒเตเด เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเดณเดฟเดฒเตเด เดเดฃเดเตเดทเดจเตเดเดณเดฟเดฒเตเด.เดเดฏเตผเดซเตเดฒเต เดทเตเดกเตเดฏเตเดณเตผ เดชเตเดฐเตเดซเตเตฝ เดเตเดฏเตเดฏเตเดจเตเดจเต - เดเดฏเตผเดซเตเดฒเต 2.0-เดจเต เดชเตเดฒเดพเดจเตผ เดเดเตเดเดจเต เดคเดฏเตเดฏเดพเดฑเตเดเตเดเตเดเตเดจเตเดจเต เดเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดเดฐเต เดเดฅ.เดกเตเดเตเดเตผ-เดเดฎเตเดชเตเดธเดฟเตฝ 3 เดธเตเดฒเดฑเดฟ เดคเตเดดเดฟเดฒเดพเดณเดฟเดเดณเตเดณเตเดณ เด เดชเตเดชเดพเดเตเดเต เดเดฏเตผเดซเตเดฒเต - เดเดเตเดเดณเตเดเต เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เด เตฝเดชเตเดชเด เดเดพเดฒเดนเดฐเดฃเดชเตเดชเตเดเตเด เดฒเตเดเดจเดdocker-compose
.เดเดฏเตผเดซเตเดฒเต เดธเดจเตเดฆเตผเดญเด เดเดชเดฏเตเดเดฟเดเตเดเต 4 เดเตเดเดชเตเดฒเตเดฑเตเดฑเดฟเดเดเต เดเดพเดธเตโเดเตเดเตเดเตพ - เดเตเดเดชเตเดฒเตเดฑเตเดฑเตเดเดณเตเด เดธเดจเตเดฆเตผเดญ เดซเตเตผเดตเตเดกเดฟเดเดเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดกเตเดจเดพเดฎเดฟเดเต เดเดพเดธเตเดเตเดเตเดเตพ.เดเดฏเตผเดซเตเดฒเตเดฏเดฟเดฒเต เดชเดฟเดถเดเต เด เดฑเดฟเดฏเดฟเดชเตเดชเตเดเตพ - เดฎเตเดฏเดฟเตฝ, เดธเตเดฒเดพเดเตเดเต เดเดจเตเดจเดฟเดต เดตเดดเดฟเดฏเตเดณเตเดณ เดธเตเดฑเตเดฑเดพเตปเดกเตเตผเดกเต, เดเดทเตโเดเดพเดจเตเดธเตเดค เด เดฑเดฟเดฏเดฟเดชเตเดชเตเดเตพ.เดเดฏเตผเดซเตเดฒเต เดตเตผเดเตเดเตเดทเตเดชเตเดชเต: เดเตเดฐเดเตเดเตเดเดณเดฟเดฒเตเดฒเดพเดคเตเดค เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ DAG-เดเตพ - เดฌเตเดฐเดพเดเตเดเดฟเดเดเต เดเตเดฒเดฟเดเตพ, เดฎเดพเดเตเดฐเตเดเตพ, XCom.
เดฒเตเดเดจเดคเตเดคเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดฒเดฟเดเตเดเตเดเดณเตเด:
เดฎเดพเดเตเดฐเต เดฑเดซเดฑเตปเดธเต - เดเตเดเดชเตเดฒเตเดฑเตเดฑเตเดเดณเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดชเตเดฒเตเดฏเตโเดธเตโเดนเตเตพเดกเดฑเตเดเตพ เดฒเดญเตเดฏเดฎเดพเดฃเต.เดธเดพเดงเดพเดฐเดฃ เด เดชเดเดเดเตเดเตพ - เดตเดพเดฏเตเดชเตเดฐเดตเดพเดนเด - เดกเดพเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ เดธเดพเดงเดพเดฐเดฃ เดคเตเดฑเตเดฑเตเดเตพ.puckel/docker-airflow: Docker Apache Airflow -docker-compose
เดชเดฐเตเดเตเดทเดฃเดคเตเดคเดฟเดจเตเด เดกเตเดฌเดเตเดเดฟเดเดเดฟเดจเตเด เดฎเดฑเตเดฑเตเด.python-telegram-bot/python-telegram-bot: เดจเดฟเดเตเดเตพเดเตเดเต เดจเดฟเดฐเดธเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดพเดคเตเดค เดเดฐเต เดฑเดพเดชเตเดชเตผ เดเดเตเดเตพ เดเดฃเตเดเดพเดเตเดเดฟ - เดเตเดฒเดฟเดเตเดฐเดพเด REST API-เดฏเตเดเตเดเตเดณเตเดณ เดชเตเดคเตเดคเตบ เดฑเดพเดชเตเดชเตผ.
เด เดตเดฒเดเดฌเด: www.habr.com