เจญเจพเจตเฉเจ เจเจฟเฉฐเจจเฉ เจตเฉ เจคเจเจจเจพเจฒเฉเจเฉ เจตเจฟเจเจธเจฟเจค เจนเฉ เจเจพเจตเฉ, เจชเฉเจฐเจพเจฃเฉเจเจ เจชเจนเฉเฉฐเจเจพเจ เจฆเฉ เจเฉฑเจ เจธเจคเจฐ เจนเจฎเฉเจธเจผเจพ เจตเจฟเจเจพเจธ เจฆเฉ เจชเจฟเฉฑเจเฉ เจฐเจนเจฟเฉฐเจฆเฉ เจนเฉเฅค เจเจน เจเฉฑเจ เจจเจฟเจฐเจตเจฟเจเจจ เจชเจฐเจฟเจตเจฐเจคเจจ, เจฎเจจเฉเฉฑเจเฉ เจเจพเจฐเจเจพเจ, เจคเจเจจเฉเจเฉ เจฒเฉเฉเจพเจ, เจเจพเจ เจเฉเจ เจนเฉเจฐ เจเจพเจฐเจจ เจนเฉ เจธเจเจฆเจพ เจนเฉเฅค เจกเฉเจเจพ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฆเฉ เจเฉเจคเจฐ เจตเจฟเฉฑเจ, เจกเฉเจเจพ เจธเจฐเฉเจค เจเจธ เจนเจฟเฉฑเจธเฉ เจตเจฟเฉฑเจ เจธเจญ เจคเฉเจ เจตเฉฑเจง เจชเฉเจฐเจเจ เจนเฉเฉฐเจฆเฉ เจนเจจ. เจญเจพเจตเฉเจ เจ เจธเฉเจ เจเจธ เจคเฉเจ เจเฉเจเจเจพเจฐเจพ เจชเจพเจเจฃ เจฆเจพ เจเจฟเฉฐเจจเจพ เจตเฉ เจธเฉเจชเจจเจพ เจฒเฉเจเจฆเฉ เจนเจพเจ, เจชเจฐ เจนเฉเจฃ เจคเฉฑเจ เจกเฉเจเจพ เจฆเจพ เจเฉเจ เจนเจฟเฉฑเจธเจพ เจคเจคเจเจพเจฒ เจธเฉฐเจฆเฉเจธเจผเจตเจพเจนเจเจพเจ เจ เจคเฉ เจเจฎเฉเจฒเจพเจ เจตเจฟเฉฑเจ เจญเฉเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉ, เจนเฉเจฐ เจชเฉเจฐเจพเจฃเฉ เจซเจพเจฐเจฎเฉเจเจพเจ เจฆเจพ เจเจผเจฟเจเจฐ เจจเจนเฉเจ เจเจฐเจจเจพ. เจฎเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจ เจชเจพเจเฉ เจเจ เจฐเจซเจฒเฉ เจฒเจ เจตเจฟเจเจฒเจชเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจจเฉเฉฐ เจตเฉฑเจ เจเจฐเจจ เจฒเจ เจธเฉฑเจฆเจพ เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ, เจเจน เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเจพเจ เจเจฟ เจคเฉเจธเฉเจ เจเจฎเฉเจฒเจพเจ เจคเฉเจ เจกเฉเจเจพ เจเจฟเจตเฉเจ เจฒเฉ เจธเจเจฆเฉ เจนเฉเฅค
prehistory
เจฌเจนเฉเจค เจธเจพเจฐเจพ เจกเฉเจเจพ เจ เจเฉ เจตเฉ เจเจฎเฉเจฒ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจชเจฐเจธเจชเจฐ เจธเฉฐเจเจพเจฐ เจคเฉเจ เจเฉฐเจชเจจเฉเจเจ เจตเจฟเจเจเจพเจฐ เจเจชเจธเฉ เจคเจพเจฒเจฎเฉเจฒ เจฆเฉ เจฎเจฟเจเจฐเจพเจ เจคเฉฑเจ. เจเจน เจเฉฐเจเจพ เจนเฉ เจเฉเจเจฐ เจคเฉเจธเฉเจ เจกเฉเจเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฒเจ เจเฉฑเจ เจเฉฐเจเจฐเจซเฉเจธ เจฒเจฟเจ เจธเจเจฆเฉ เจนเฉ เจเจพเจ เจฆเจซเจคเจฐ เจตเจฟเฉฑเจ เจเจนเจจเจพเจ เจฒเฉเจเจพเจ เจจเฉเฉฐ เจฐเฉฑเจ เจธเจเจฆเฉ เจนเฉ เจเฉ เจเจธ เจเจพเจฃเจเจพเจฐเฉ เจจเฉเฉฐ เจตเจงเฉเจฐเฉ เจธเฉเจตเจฟเจงเจพเจเจจเจ เจธเจฐเฉเจคเจพเจ เจตเจฟเฉฑเจ เจฆเจพเจเจฒ เจเจฐเจจเจเฉ, เจชเจฐ เจ เจเจธเจฐ เจเจน เจธเฉฐเจญเจพเจตเจจเจพ เจฌเจธ เจจเจนเฉเจ เจนเฉ เจธเจเจฆเฉเฅค เจเจพเจธ เจเฉฐเจฎ เจเจฟเจธเจฆเจพ เจฎเฉเจ เจธเจพเจนเจฎเจฃเจพ เจเฉเจคเจพ เจธเฉ เจเจน เจเฉฑเจ เจฎเจธเจผเจนเฉเจฐ CRM เจธเจฟเจธเจเจฎ เจจเฉเฉฐ เจเฉฑเจ เจกเฉเจเจพ เจตเฉเจ เจฐเจนเจพเจเจธ เจจเจพเจฒ เจเฉเฉ เจฐเจฟเจนเจพ เจธเฉ, เจ เจคเฉ เจซเจฟเจฐ เจเฉฑเจ OLAP เจธเจฟเจธเจเจฎ เจจเจพเจฒเฅค เจเจคเจฟเจนเจพเจธเจ เจคเฉเจฐ 'เจคเฉ, เจธเจพเจกเฉ เจเฉฐเจชเจจเฉ เจฒเจ, เจเจธ เจชเฉเจฐเจฃเจพเจฒเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจตเจชเจพเจฐ เจฆเฉ เจเฉฑเจ เจเจพเจธ เจเฉเจคเจฐ เจตเจฟเฉฑเจ เจธเฉเจตเจฟเจงเจพเจเจจเจ เจธเฉ. เจเจธ เจฒเจ, เจนเจฐ เจเฉเจ เจ เจธเจฒ เจตเจฟเฉฑเจ เจเจธ เจคเฉเจเฉ-เจงเจฟเจฐ เจชเฉเจฐเจฃเจพเจฒเฉ เจฆเฉ เจกเฉเจเจพ เจจเจพเจฒ เจตเฉ เจเฉฐเจฎ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉเจฃเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจธเฉ. เจธเจญ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจฌเฉเจธเจผเฉฑเจ, เจเฉฑเจ เจเจชเจจ API เจคเฉเจ เจกเฉเจเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเฉ เจธเฉฐเจญเจพเจตเจจเจพ เจฆเฉ เจเฉเจ เจเฉเจคเฉ เจเจ เจธเฉ. เจฌเจฆเจเจฟเจธเจฎเจคเฉ เจจเจพเจฒ, API เจจเฉ เจธเจพเจฐเฉ เจฒเฉเฉเฉเจเจฆเฉ เจกเฉเจเจพ เจจเฉเฉฐ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฒเจ เจเจตเจฐ เจจเจนเฉเจ เจเฉเจคเจพ, เจ เจคเฉ, เจเจธเจจเฉเฉฐ เจธเจงเจพเจฐเจจ เจธเจผเจฌเจฆเจพเจ เจตเจฟเฉฑเจ เจเจนเจฟเจฃ เจฒเจ, เจเจน เจตเฉฑเจกเฉ เจชเฉฑเจงเจฐ 'เจคเฉ เจเฉเจขเฉ เจธเฉ, เจ เจคเฉ เจคเจเจจเฉเจเฉ เจธเจนเจพเจเจคเจพ เจนเฉเจฐ เจตเจฟเจเจชเจ เจเจพเจฐเจเจธเจผเฉเจฒเจคเจพ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจจ เจฒเจ เจ เฉฑเจงเฉ เจฐเจธเจคเฉ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจจ เจตเจฟเฉฑเจ เจ เจธเจฎเจฐเฉฑเจฅ เจธเฉเฅค เจชเจฐ เจเจธ เจธเจฟเจธเจเจฎ เจจเฉ เจธเจฎเฉเจ-เจธเจฎเฉเจ 'เจคเฉ เจชเฉเจฐเจพเจฒเฉเจ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจจ เจฒเจ เจฒเจฟเฉฐเจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจเจฎเฉเจฒ เจฆเฉเจเจฐเจพ เจเฉเฉฐเจฎ เจนเฉเจ เจกเฉเจเจพ เจจเฉเฉฐ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเจพ เจฎเฉเจเจพ เจชเฉเจฐเจฆเจพเจจ เจเฉเจคเจพเฅค
เจเจน เจจเฉเจ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ เจเจฟ เจเจน เจเจเฉ เจเจ เจฎเจพเจฎเจฒเจพ เจจเจนเฉเจ เจธเฉ เจเจฟเจธ เจตเจฟเจ เจเจพเจฐเฉเจฌเจพเจฐ เจเจฎเฉเจฒเจพเจ เจเจพเจ เจคเจคเจเจพเจฒ เจฎเฉเจธเฉเจเจเจฐเจพเจ เจคเฉเจ เจกเจพเจเจพ เจเจเฉฑเจ เจพ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจธเฉ. เจนเจพเจฒเจพเจเจเจฟ, เจเจธ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ, เจ เจธเฉเจ เจเจฟเจธเฉ เจคเฉเจเฉ-เจงเจฟเจฐ เจฆเฉ เจเฉฐเจชเจจเฉ เจจเฉเฉฐ เจชเฉเจฐเจญเจพเจตเจฟเจค เจจเจนเฉเจ เจเจฐ เจธเจเจฆเฉ เจเฉ เจธเจฟเจฐเจซ เจเจธ เจคเจฐเฉเจเฉ เจจเจพเจฒ เจกเฉเจเจพ เจฆเจพ เจนเจฟเฉฑเจธเจพ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจฆเฉ เจนเฉเฅค
เจ เจชเจพเจเฉ เจเจ เจฐเจซเจฒเฉ
เจเจเฉเจเจฒ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจฒเจ, เจ เจธเฉเจ เจ เจเจธเจฐ เจ เจชเจพเจเฉ เจเจ เจฐเจซเจฒเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจเฅค เจเฉฑเจ เจชเจพเจ เจ เจเฉ เจเจธ เจคเจเจจเจพเจฒเฉเจเฉ เจคเฉเจ เจ เจฃเจเจพเจฃ เจนเฉ, เจจเฉเฉฐ เจฌเจฟเจนเจคเจฐ เจขเฉฐเจ เจจเจพเจฒ เจธเจฎเจเจฃ เจฒเจ เจเจฟ เจเจน เจธเฉฐเจฆเจฐเจญ เจตเจฟเฉฑเจ เจ เจคเฉ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจเจฟเจตเฉเจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉ, เจฎเฉเจ เจเฉเจ เจธเจผเฉเจฐเฉเจเจคเฉ เจฒเฉเจเจพเจ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเจพเจเจเจพเฅค
เจ เจชเจพเจเฉ เจเจ เจฐเจซเจฒเฉ เจเฉฑเจ เจฎเฉเจซเจค เจชเจฒเฉเจเจซเจพเจฐเจฎ เจนเฉ เจเฉ เจชเจพเจเจฅเจจ เจตเจฟเฉฑเจ ETL (เจเจเจธเจเฉเจฐเฉเจเจ-เจเจฐเจพเจเจธเจซเจพเจฐเจฎ-เจฒเฉเจกเจฟเฉฐเจ) เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ, เจเจฒเจพเจเจฃ เจ เจคเฉ เจจเจฟเจเจฐเจพเจจเฉ เจเจฐเจจ เจฒเจ เจตเจฐเจคเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจ เจฐเจซเจฒเฉ เจตเจฟเฉฑเจ เจฎเฉเฉฑเจ เจธเฉฐเจเจฒเจช เจเฉฑเจ เจจเจฟเจฐเจฆเฉเจธเจผเจฟเจค เจเจธเฉเจเจฒเจฟเจ เจเฉเจฐเจพเจซ เจนเฉ, เจเจฟเฉฑเจฅเฉ เจเฉเจฐเจพเจซ เจฆเฉ เจธเจฟเจฐเจฒเฉเจ เจเจพเจธ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจนเจจ, เจ เจคเฉ เจเฉเจฐเจพเจซ เจฆเฉ เจเจฟเจจเจพเจฐเฉ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจเจพเจ เจเจพเจฃเจเจพเจฐเฉ เจฆเจพ เจชเฉเจฐเจตเจพเจน เจนเจจเฅค เจเฉฑเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจฟเจธเฉ เจตเฉ เจชเจพเจเจฅเจจ เจซเฉฐเจเจธเจผเจจ เจจเฉเฉฐ เจเจพเจฒ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจเจพเจ เจเจธ เจตเจฟเฉฑเจ เจเจฒเจพเจธ เจฆเฉ เจธเฉฐเจฆเจฐเจญ เจตเจฟเฉฑเจ เจเจ เจซเฉฐเจเจธเจผเจจเจพเจ เจจเฉเฉฐ เจเฉเจฐเจฎเจตเจพเจฐ เจเจพเจฒ เจเจฐเจจ เจฆเจพ เจตเจงเฉเจฐเฉ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจคเจฐเจ เจนเฉ เจธเจเจฆเจพ เจนเฉเฅค เจธเจญ เจคเฉเจ เจเจฎ เจเจชเจฐเฉเจธเจผเจจเจพเจ เจฒเจ, เจชเจนเจฟเจฒเจพเจ เจนเฉ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจคเจฟเจเจฐ-เจเฉเจคเฉ เจตเจฟเจเจพเจธ เจนเจจ เจเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจตเจเฉเจ เจตเจฐเจคเฉ เจเจพ เจธเจเจฆเฉ เจนเจจเฅค เจ เจเจฟเจนเฉ เจตเจฟเจเจพเจธ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจนเจจ:
- เจเจชเจฐเฉเจเจฐ - เจกเฉเจเจพ เจจเฉเฉฐ เจเฉฑเจ เจฅเจพเจ เจคเฉเจ เจฆเฉเจเฉ เจฅเจพเจ เจคเฉ เจเฉเจฐเจพเจเจธเจซเจฐ เจเจฐเจจ เจฒเจ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉฑเจ เจกเฉเจเจพเจฌเฉเจธ เจเฉเจฌเจฒ เจคเฉเจ เจกเฉเจเจพ เจตเฉเจ เจฐเจนเจพเจเจธ เจตเจฟเฉฑเจ;
- เจธเฉเจเจธเจฐ - เจเจฟเจธเฉ เจเจพเจธ เจเจเจจเจพ เจฆเฉ เจตเจพเจชเจฐเจจ เจฆเฉ เจเจกเฉเจ เจเจฐเจจ เจ เจคเฉ เจเฉเจฐเจพเจซ เจฆเฉ เจ เจเจฒเฉ เจธเจฟเจฐเจฟเจเจ 'เจคเฉ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจฆเฉ เจชเฉเจฐเจตเจพเจน เจจเฉเฉฐ เจจเจฟเจฐเจฆเฉเจธเจผเจค เจเจฐเจจ เจฒเจ;
- เจนเฉเฉฑเจ - เจนเฉเจ เจฒเฉ-เจชเฉฑเจงเจฐ เจฆเฉ เจเจชเจฐเฉเจธเจผเจจเจพเจ เจฒเจ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจกเฉเจเจพเจฌเฉเจธ เจเฉเจฌเจฒ เจคเฉเจ เจกเฉเจเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฒเจ (เจเจฅเจจ เจตเจฟเฉฑเจ เจตเจฐเจคเจฟเจ เจเจพเจเจฆเจพ เจนเฉ);
- เจ เจคเฉ เจเจธ เจคเจฐเจพเจ เจนเฉ.
เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ เจ
เจชเจพเจเฉ เจเจ
เจฐเจซเจฒเฉ เจฆเจพ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจ เจตเจฐเจฃเจจ เจเจฐเจจเจพ เจ
เจฃเจเจเจฟเจค เจนเฉเจตเฉเจเจพเฅค เจธเฉฐเจเฉเจช เจเจพเจฃเจเจพเจฐเฉ เจฆเฉเจเฉ เจเจพ เจธเจเจฆเฉ เจนเฉ
เจกเจพเจเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฒเจ เจนเฉเฉฑเจ
เจธเจญ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฒเจ, เจธเจพเจจเฉเฉฐ เจเฉฑเจ เจนเฉเฉฑเจ เจฒเจฟเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจฟเจธ เจจเจพเจฒ เจ เจธเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเจพเจ:
- เจเจฎเฉเจฒ เจจเจพเจฒ เจเฉเฉเฉ
- เจคเฉเจนเจพเจจเฉเฉฐ เจฒเฉเฉเฉเจเจฆเจพ เจชเฉฑเจคเจฐ เจฒเฉฑเจญเฉ;
- เจชเฉฑเจคเจฐ เจคเฉเจ เจกเฉเจเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเฉ.
from airflow.hooks.base_hook import BaseHook
import imaplib
import logging
class IMAPHook(BaseHook):
def __init__(self, imap_conn_id):
"""
IMAP hook ะดะปั ะฟะพะปััะตะฝะธั ะดะฐะฝะฝัั
ั ัะปะตะบััะพะฝะฝะพะน ะฟะพััั
:param imap_conn_id: ะะดะตะฝัะธัะธะบะฐัะพั ะฟะพะดะบะปััะตะฝะธั ะบ ะฟะพััะต
:type imap_conn_id: string
"""
self.connection = self.get_connection(imap_conn_id)
self.mail = None
def authenticate(self):
"""
ะะพะดะบะปััะฐะตะผัั ะบ ะฟะพััะต
"""
mail = imaplib.IMAP4_SSL(self.connection.host)
response, detail = mail.login(user=self.connection.login, password=self.connection.password)
if response != "OK":
raise AirflowException("Sign in failed")
else:
self.mail = mail
def get_last_mail(self, check_seen=True, box="INBOX", condition="(UNSEEN)"):
"""
ะะตัะพะด ะดะปั ะฟะพะปััะตะฝะธั ะธะดะตะฝัะธัะธะบะฐัะพัะฐ ะฟะพัะปะตะดะฝะตะณะพ ะฟะธััะผะฐ,
ัะดะพะฒะปะตัะฒะพัะฐัััะตะณะพ ััะปะพะฒะธัะผ ะฟะพะธัะบะฐ
:param check_seen: ะัะผะตัะฐัั ะฟะพัะปะตะดะฝะตะต ะฟะธััะผะพ ะบะฐะบ ะฟัะพัะธัะฐะฝะฝะพะต
:type check_seen: bool
:param box: ะะฐะธะผะตะฝะพะฒะฐะฝะธั ััะธะบะฐ
:type box: string
:param condition: ะฃัะปะพะฒะธั ะฟะพะธัะบะฐ ะฟะธัะตะผ
:type condition: string
"""
self.authenticate()
self.mail.select(mailbox=box)
response, data = self.mail.search(None, condition)
mail_ids = data[0].split()
logging.info("ะ ััะธะบะต ะฝะฐะนะดะตะฝั ัะปะตะดัััะธะต ะฟะธััะผะฐ: " + str(mail_ids))
if not mail_ids:
logging.info("ะะต ะฝะฐะนะดะตะฝะพ ะฝะพะฒัั
ะฟะธัะตะผ")
return None
mail_id = mail_ids[0]
# ะตัะปะธ ัะฐะบะธั
ะฟะธัะตะผ ะฝะตัะบะพะปัะบะพ
if len(mail_ids) > 1:
# ะพัะผะตัะฐะตะผ ะพััะฐะปัะฝัะต ะฟัะพัะธัะฐะฝะฝัะผะธ
for id in mail_ids:
self.mail.store(id, "+FLAGS", "\Seen")
# ะฒะพะทะฒัะฐัะฐะตะผ ะฟะพัะปะตะดะฝะตะต
mail_id = mail_ids[-1]
# ะฝัะถะฝะพ ะปะธ ะพัะผะตัะธัั ะฟะพัะปะตะดะฝะตะต ะฟัะพัะธัะฐะฝะฝัะผ
if not check_seen:
self.mail.store(mail_id, "-FLAGS", "\Seen")
return mail_id
เจคเจฐเจ เจเจน เจนเฉ: เจ เจธเฉเจ เจเจจเฉเจเจ เจเจฐเจฆเฉ เจนเจพเจ, เจเจเจฐเฉ เจธเจญ เจคเฉเจ เจขเฉเจเจตเจพเจ เจ เฉฑเจเจฐ เจฒเฉฑเจญเจฆเฉ เจนเจพเจ, เจเฉเจเจฐ เจเฉเจ เจนเฉเจฐ เจนเจจ, เจคเจพเจ เจ เจธเฉเจ เจเจนเจจเจพเจ เจจเฉเฉฐ เจจเจเจผเจฐเจ เฉฐเจฆเจพเจเจผ เจเจฐเจฆเฉ เจนเจพเจเฅค เจเจธ เจซเฉฐเจเจธเจผเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ เจเจฟเจเจเจเจฟ เจฌเจพเจ เจฆ เจฆเฉ เจธเฉฐเจฆเฉเจธเจผเจพเจ เจตเจฟเฉฑเจ เจชเจนเจฟเจฒเฉ เจธเฉฐเจฆเฉเจธเจผเจพเจ เจฆเจพ เจธเจพเจฐเจพ เจกเจพเจเจพ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจเฉเจเจฐ เจ เจเจฟเจนเจพ เจจเจนเฉเจ เจนเฉ, เจคเจพเจ เจคเฉเจธเฉเจ เจธเจพเจฐเฉ เจ เฉฑเจเจฐเจพเจ เจฆเฉ เจเฉฑเจ เจเจฐเฉ เจตเจพเจชเจธ เจเจฐ เจธเจเจฆเฉ เจนเฉ เจเจพเจ เจ เจเจฒเฉ เจชเจพเจธ 'เจคเฉ เจชเจนเจฟเจฒเฉ เจ เจคเฉ เจฌเจพเจเฉ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจเจฎ เจคเฉเจฐ 'เจคเฉ, เจนเจฐ เจเฉเจเจผ, เจนเจฎเฉเจธเจผเจพ เจตเจพเจเจ, เจเฉฐเจฎ 'เจคเฉ เจจเจฟเจฐเจญเจฐ เจเจฐเจฆเฉ เจนเฉ.
เจ เจธเฉเจ เจนเฉเฉฑเจ เจตเจฟเฉฑเจ เจฆเฉ เจธเจนเจพเจเจ เจซเฉฐเจเจธเจผเจจ เจเฉเฉเจฆเฉ เจนเจพเจ: เจเฉฑเจ เจซเจพเจเจฒ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจจ เจฒเจ เจ เจคเฉ เจเฉฑเจ เจเจฎเฉเจฒ เจคเฉเจ เจเฉฑเจ เจฒเจฟเฉฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเฉฑเจ เจซเจพเจเจฒ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจจ เจฒเจเฅค เจคเจฐเฉเจเฉ เจจเจพเจฒ, เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจชเจฐเฉเจเจฐ เจตเจฟเฉฑเจ เจญเฉเจเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจเจน เจเจธ เจเจพเจฐเจเจธเจผเฉเจฒเจคเจพ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจฌเจพเจฐเฉฐเจฌเจพเจฐเจคเจพ 'เจคเฉ เจจเจฟเจฐเจญเจฐ เจเจฐเจฆเจพ เจนเฉ. เจนเฉเฉฑเจ เจตเจฟเฉฑเจ เจนเฉเจฐ เจเฉ เจเฉเฉเจจเจพ เจนเฉ, เจฆเฉเจฌเจพเจฐเจพ, เจเฉฐเจฎ 'เจคเฉ เจจเจฟเจฐเจญเจฐ เจเจฐเจฆเจพ เจนเฉ: เจเฉ เจชเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจซเจพเจเจฒเจพเจ เจคเฉเจฐเฉฐเจค เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเฉเจเจ เจนเจจ, เจคเจพเจ เจคเฉเจธเฉเจ เจชเฉฑเจคเจฐ เจจเจพเจฒ เจ เจเฉเจเจฎเฉเจเจเจพเจ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจเฉ เจชเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจกเฉเจเจพ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเจพ เจนเฉ, เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจชเฉฑเจคเจฐ เจจเฉเฉฐ เจชเจพเจฐเจธ เจเจฐเจจ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉเฉฐเจฆเฉ เจนเฉ, เจเจฆเจฟ เจฎเฉเจฐเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจชเฉฑเจคเจฐ เจชเฉเจฐเจพเจฒเฉเจ เจฆเฉ เจเฉฑเจ เจฒเจฟเฉฐเจ เจฆเฉ เจจเจพเจฒ เจเจเจเจฆเจพ เจนเฉ, เจเจฟเจธเจจเฉเฉฐ เจฎเฉเจจเฉเฉฐ เจเฉฑเจ เจจเจฟเจธเจผเจเจค เจฅเจพเจ เจคเฉ เจฐเฉฑเจเจฃ เจ เจคเฉ เจ เจเจฒเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค
def download_from_url(self, url, path, chunk_size=128):
"""
ะะตัะพะด ะดะปั ัะบะฐัะธะฒะฐะฝะธั ัะฐะนะปะฐ
:param url: ะะดัะตั ะทะฐะณััะทะบะธ
:type url: string
:param path: ะัะดะฐ ะฟะพะปะพะถะธัั ัะฐะนะป
:type path: string
:param chunk_size: ะะพ ัะบะพะปัะบะพ ะฑะฐะนัะพะฒ ะฟะธัะฐัั
:type chunk_size: int
"""
r = requests.get(url, stream=True)
with open(path, "wb") as fd:
for chunk in r.iter_content(chunk_size=chunk_size):
fd.write(chunk)
def download_mail_href_attachment(self, mail_id, path):
"""
ะะตัะพะด ะดะปั ัะบะฐัะธะฒะฐะฝะธั ัะฐะนะปะฐ ะฟะพ ัััะปะบะต ะธะท ะฟะธััะผะฐ
:param mail_id: ะะดะตะฝัะธัะธะบะฐัะพั ะฟะธััะผะฐ
:type mail_id: string
:param path: ะัะดะฐ ะฟะพะปะพะถะธัั ัะฐะนะป
:type path: string
"""
response, data = self.mail.fetch(mail_id, "(RFC822)")
raw_email = data[0][1]
raw_soup = raw_email.decode().replace("r", "").replace("n", "")
parse_soup = BeautifulSoup(raw_soup, "html.parser")
link_text = ""
for a in parse_soup.find_all("a", href=True, text=True):
link_text = a["href"]
self.download_from_url(link_text, path)
เจเฉเจก เจธเจงเจพเจฐเจจ เจนเฉ, เจเจธ เจฒเจ เจเจธ เจจเฉเฉฐ เจนเฉเจฐ เจธเจชเฉฑเจธเจผเจเฉเจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉเฅค เจฎเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจธเจฟเจฐเจซเจผ เจเจพเจฆเฉ เจฒเจพเจเจจ imap_conn_id เจฌเจพเจฐเฉ เจฆเฉฑเจธเจพเจเจเจพเฅค เจ เจชเจพเจเฉ เจเจ เจฐเจซเจฒเฉ เจเจจเฉเจเจธเจผเจจ เจชเฉเจฐเจพเจฎเฉเจเจฐเจพเจ (เจฒเฉเจเจเจจ, เจชเจพเจธเจตเจฐเจก, เจชเจคเจพ, เจ เจคเฉ เจนเฉเจฐ เจฎเจพเจชเจฆเฉฐเจก) เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเจฆเจพ เจนเฉ เจเจฟเจจเฉเจนเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจธเจคเจฐ เจชเจเจพเจฃเจเจฐเจคเจพ เจฆเฉเจเจฐเจพ เจเจเจธเฉเจธ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจฆเฉเจฐเจฟเจธเจผเจเฉเจเจค เจคเฉเจฐ 'เจคเฉ, เจเฉเจจเฉเจเจธเจผเจจ เจชเฉเจฐเจฌเฉฐเจงเจจ เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉ
เจกเจพเจเจพ เจฆเฉ เจเจกเฉเจ เจเจฐเจจ เจฒเจ เจธเฉเจเจธเจฐ
เจเจฟเจเจเจเจฟ เจ เจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเจพเจฃเจฆเฉ เจนเจพเจ เจเจฟ เจฎเฉเจฒ เจคเฉเจ เจกเฉเจเจพ เจเจฟเจตเฉเจ เจเจจเฉเจเจ เจเจฐเจจเจพ เจ เจคเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเจจเจพ เจนเฉ, เจ เจธเฉเจ เจนเฉเจฃ เจเจนเจจเจพเจ เจฆเฉ เจเจกเฉเจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจธเฉเจเจธเจฐ เจฒเจฟเจ เจธเจเจฆเฉ เจนเจพเจเฅค เจฎเฉเจฐเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจเจธเจจเฉ เจคเฉเจฐเฉฐเจค เจเฉฑเจ เจเจชเจฐเฉเจเจฐ เจฒเจฟเจเจฃเจพ เจเฉฐเจฎ เจจเจนเฉเจ เจเฉเจคเจพ เจเฉ เจกเฉเจเจพ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจฐเฉเจเจพ, เจเฉเจเจฐ เจเฉเจ เจนเฉ, เจเจฟเจเจเจเจฟ เจนเฉเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจฎเฉเจฒ เจคเฉเจ เจชเฉเจฐเจพเจชเจค เจกเฉเจเจพ เจฆเฉ เจ เจงเจพเจฐ เจคเฉ เจเฉฐเจฎ เจเจฐเจฆเฉเจเจ เจนเจจ, เจเจฟเจธ เจตเจฟเฉฑเจ เจเจน เจตเฉ เจธเจผเจพเจฎเจฒ เจนเจจ เจเฉ เจฆเฉเจเฉ เจธเจฐเฉเจคเจพเจ (API, เจเฉเจฒเฉเจซเฉเจจเฉ) เจคเฉเจ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจกเฉเจเจพ เจฒเฉเจเจฆเฉ เจนเจจ , เจตเฉเจฌ เจฎเฉเจเฉเจฐเจฟเจเจธ, เจเจฆเจฟ) เจเจฆเจฟ)เฅค เจฎเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจฆเฉเจตเจพเจเจเจพเฅค CRM เจธเจฟเจธเจเจฎ เจตเจฟเฉฑเจ เจเฉฑเจ เจจเจตเจพเจ เจเจชเจญเฉเจเจคเจพ เจชเฉเจฐเจเจ เจนเฉเจเจ เจนเฉ, เจ เจคเฉ เจ เจธเฉเจ เจ เจเฉ เจตเฉ เจเจธเจฆเฉ UUID เจฌเจพเจฐเฉ เจจเจนเฉเจ เจเจพเจฃเจฆเฉ เจนเจพเจเฅค เจซเจฟเจฐ, เจเจฆเฉเจ SIP เจเฉเจฒเฉเจซเฉเจจเฉ เจคเฉเจ เจกเฉเจเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจคเจพเจ เจ เจธเฉเจ เจเจธเจฆเฉ UUID เจจเจพเจฒ เจเฉเฉเฉเจเจ เจเจพเจฒเจพเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจพเจเจเฉ, เจชเจฐ เจ เจธเฉเจ เจเจนเจจเจพเจ เจจเฉเฉฐ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจ เจคเฉ เจธเจนเฉ เจขเฉฐเจ เจจเจพเจฒ เจตเจฐเจคเจฃ เจฆเฉ เจฏเฉเจ เจจเจนเฉเจ เจนเฉเจตเจพเจเจเฉเฅค เจ เจเจฟเจนเฉ เจฎเจพเจฎเจฒเจฟเจเจ เจตเจฟเฉฑเจ, เจกเฉเจเจพ เจฆเฉ เจจเจฟเจฐเจญเจฐเจคเจพ เจจเฉเฉฐ เจงเจฟเจเจจ เจตเจฟเฉฑเจ เจฐเฉฑเจเจฃเจพ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉ, เจเจพเจธ เจเจฐเจเฉ เจเฉ เจเจน เจตเฉฑเจ-เจตเฉฑเจ เจธเจฐเฉเจคเจพเจ เจคเฉเจ เจนเจจ. เจเจน, เจฌเฉเจธเจผเฉฑเจ, เจกเฉเจเจพ เจฆเฉ เจเจเจธเจพเจฐเจคเจพ เจจเฉเฉฐ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจฐเฉฑเจเจฃ เจฒเจ เจจเจพเจเจพเจซเจผเฉ เจเจชเจพเจ เจนเจจ, เจชเจฐ เจเฉเจ เจฎเจพเจฎเจฒเจฟเจเจ เจตเจฟเฉฑเจ เจเจน เจเจผเจฐเฉเจฐเฉ เจนเจจเฅค เจนเจพเจ, เจ เจคเฉ เจธเจฐเฉเจคเจพเจ 'เจคเฉ เจเจฌเจเจผเจพ เจเจฐเจจ เจฒเจ เจธเฉเจธเจค เจฐเจนเจฟเจฃเจพ เจตเฉ เจคเจฐเจเจนเฉเจฃ เจนเฉเฅค
เจเจธ เจคเจฐเฉเจนเจพเจ, เจธเจพเจกเจพ เจธเฉเจเจธเจฐ เจเฉเจฐเจพเจซ เจฆเฉ เจ เจเจฒเฉ เจธเจฟเจฐเจฒเฉเจเจพเจ เจจเฉเฉฐ เจฒเจพเจเจ เจเจฐเฉเจเจพ เจเฉเจเจฐ เจฎเฉเจฒ เจตเจฟเฉฑเจ เจคเจพเจเจผเจพ เจเจพเจฃเจเจพเจฐเฉ เจนเฉ, เจ เจคเฉ เจชเจฟเจเจฒเฉ เจเจพเจฃเจเจพเจฐเฉ เจจเฉเฉฐ เจ เจชเฉเจฐเจธเฉฐเจเจฟเจ เจตเจเฉเจ เจฎเจพเจฐเจ เจเจฐเฉเจเจพเฅค
from airflow.sensors.base_sensor_operator import BaseSensorOperator
from airflow.utils.decorators import apply_defaults
from my_plugin.hooks.imap_hook import IMAPHook
class MailSensor(BaseSensorOperator):
@apply_defaults
def __init__(self, conn_id, check_seen=True, box="Inbox", condition="(UNSEEN)", *args, **kwargs):
super().__init__(*args, **kwargs)
self.conn_id = conn_id
self.check_seen = check_seen
self.box = box
self.condition = condition
def poke(self, context):
conn = IMAPHook(self.conn_id)
mail_id = conn.get_last_mail(check_seen=self.check_seen, box=self.box, condition=self.condition)
if mail_id is None:
return False
else:
return True
เจ เจธเฉเจ เจกเจพเจเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเฉ เจนเจพเจ เจ เจคเฉ เจตเจฐเจคเจฆเฉ เจนเจพเจ
เจกเจพเจเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจ เจคเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจฐเจจ เจฒเจ, เจคเฉเจธเฉเจ เจเฉฑเจ เจตเฉฑเจเจฐเจพ เจเจชเจฐเฉเจเจฐ เจฒเจฟเจ เจธเจเจฆเฉ เจนเฉ, เจคเฉเจธเฉเจ เจคเจฟเจเจฐ-เจฌเจฃเจพเจเจเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจเจฟเจเจเจเจฟ เจนเฉเจฃ เจคเฉฑเจ เจคเจฐเจ เจฎเจพเจฎเฉเจฒเฉ เจนเฉ - เจ เฉฑเจเจฐ เจคเฉเจ เจกเฉเจเจพ เจฒเฉเจฃ เจฒเจ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจฎเฉเจ เจธเจเฉเจเจกเจฐเจก เจชเจพเจเจฅเจจ เจเจชเจฐเฉเจเจฐ เจฆเจพ เจธเฉเจเจพเจ เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ
from airflow.models import DAG
from airflow.operators.python_operator import PythonOperator
from airflow.sensors.my_plugin import MailSensor
from my_plugin.hooks.imap_hook import IMAPHook
start_date = datetime(2020, 4, 4)
# ะกัะฐะฝะดะฐััะฝะพะต ะบะพะฝัะธะณััะธัะพะฒะฐะฝะธะต ะณัะฐัะฐ
args = {
"owner": "example",
"start_date": start_date,
"email": ["[email protected]"],
"email_on_failure": False,
"email_on_retry": False,
"retry_delay": timedelta(minutes=15),
"provide_context": False,
}
dag = DAG(
dag_id="test_etl",
default_args=args,
schedule_interval="@hourly",
)
# ะะฟัะตะดะตะปัะตะผ ัะตะฝัะพั
mail_check_sensor = MailSensor(
task_id="check_new_emails",
poke_interval=10,
conn_id="mail_conn_id",
timeout=10,
soft_fail=True,
box="my_box",
dag=dag,
mode="poke",
)
# ะคัะฝะบัะธั ะดะปั ะฟะพะปััะตะฝะธั ะดะฐะฝะฝัั
ะธะท ะฟะธััะผะฐ
def prepare_mail():
imap_hook = IMAPHook("mail_conn_id")
mail_id = imap_hook.get_last_mail(check_seen=True, box="my_box")
if mail_id is None:
raise AirflowException("Empty mailbox")
conn.download_mail_href_attachment(mail_id, "./path.zip")
prepare_mail_data = PythonOperator(task_id="prepare_mail_data", default_args=args, dag=dag, python_callable= prepare_mail)
# ะะฟะธัะฐะฝะธะต ะพััะฐะปัะฝัั
ะฒะตััะธะฝ ะณัะฐัะฐ
...
# ะะฐะดะฐะตะผ ัะฒัะทั ะฝะฐ ะณัะฐัะต
mail_check_sensor >> prepare_mail_data
prepare_data >> ...
# ะะฟะธัะฐะฝะธะต ะพััะฐะปัะฝัั
ะฟะพัะพะบะพะฒ ัะฟัะฐะฒะปะตะฝะธั
เจคเจฐเฉเจเฉ เจจเจพเจฒ, เจเฉเจเจฐ เจคเฉเจนเจพเจกเฉ เจเจพเจฐเจชเฉเจฐเฉเจ เจฎเฉเจฒ mail.ru 'เจคเฉ เจตเฉ เจนเฉ, เจคเจพเจ เจคเฉเจธเฉเจ เจตเจฟเจธเจผเฉ, เจญเฉเจเจฃ เจตเจพเจฒเฉ, เจเจฆเจฟ เจฆเฉเจเจฐเจพ เจ เฉฑเจเจฐเจพเจ เจฆเฉ เจเฉเจ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจจเจนเฉเจ เจนเฉเจตเฉเจเฉเฅค เจตเจพเจชเจธ 2016 เจตเจฟเฉฑเจ, เจเจจเฉเจนเจพเจ เจจเฉ เจเจธเจจเฉเฉฐ เจชเฉเจธเจผ เจเจฐเจจ เจฆเจพ เจตเจพเจ เจฆเจพ เจเฉเจคเจพ เจธเฉ, เจชเจฐ เจธเจชเฉฑเจธเจผเจ เจคเฉเจฐ 'เจคเฉ เจเจจเฉเจนเจพเจ เจฆเฉ เจฎเจจ เจฌเจฆเจฒ เจเจ เจธเจจเฅค เจฎเฉเจ เจเจผเจฐเฉเจฐเฉ เจ เฉฑเจเจฐเจพเจ เจฒเจ เจเฉฑเจ เจตเฉฑเจเจฐเจพ เจซเฉเจฒเจกเจฐ เจฌเจฃเจพ เจเฉ เจ เจคเฉ เจฎเฉเจฒ เจตเฉเฉฑเจฌ เจเฉฐเจเจฐเจซเฉเจธ เจตเจฟเฉฑเจ เจฒเฉเฉเฉเจเจฆเฉ เจ เฉฑเจเจฐเจพเจ เจฒเจ เจเฉฑเจ เจซเจฟเจฒเจเจฐ เจธเจฅเจพเจชเจค เจเจฐเจเฉ เจเจธ เจธเจฎเฉฑเจธเจฟเจ เจฆเจพ เจนเฉฑเจฒ เจเฉเจคเจพ เจนเฉเฅค เจเจธ เจคเจฐเฉเจนเจพเจ, เจเฉเจ เจฒเจ เจธเจฟเจฐเจซเจผ เจฒเฉเฉเฉเจเจฆเฉ เจ เฉฑเจเจฐ เจ เจคเฉ เจธเจผเจฐเจคเจพเจ, เจฎเฉเจฐเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจธเจฟเจฐเจซเจผ (เจ เจฃเจธเฉเจจ) เจเจธ เจซเฉเจฒเจกเจฐ เจตเจฟเฉฑเจ เจชเฉเจฐเจพเจชเจค เจเจฐเฉ.
เจธเฉฐเจเฉเจช เจเจฐเจจ เจฒเจ, เจธเจพเจกเฉ เจเฉเจฒ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเจพ เจเฉเจฐเจฎ เจนเฉ: เจ
เจธเฉเจ เจเจพเจเจ เจเจฐเจฆเฉ เจนเจพเจ เจเจฟ เจเฉ เจเฉฑเจฅเฉ เจจเจตเฉเจ เจ
เฉฑเจเจฐ เจนเจจ เจเฉ เจธเจผเจฐเจคเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจฆเฉ เจนเจจ; เจเฉเจเจฐ เจนเจจ, เจคเจพเจ เจ
เจธเฉเจ เจเจเจฐเฉ เจ
เฉฑเจเจฐ เจฆเฉ เจฒเจฟเฉฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเจฐเจเจพเจเจต เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจฆเฉ เจนเจพเจเฅค
เจเจเจฐเฉ เจฌเจฟเฉฐเจฆเฉเจเจ เจฆเฉ เจคเจนเจฟเจค, เจเจน เจเฉฑเจก เจฆเจฟเฉฑเจคเจพ เจเจฟเจ เจนเฉ เจเจฟ เจเจน เจชเฉเจฐเจพเจฒเฉเจ เจ
เจจเจชเฉเจ เจเฉเจคเจพ เจเจพเจตเฉเจเจพ, เจชเฉเจฐเจพเจฒเฉเจ เจคเฉเจ เจกเฉเจเจพ เจจเฉเฉฐ เจธเจพเจซเจผ เจ
เจคเฉ เจธเฉฐเจธเจพเจงเจฟเจค เจเฉเจคเจพ เจเจพเจตเฉเจเจพ, เจ
เจคเฉ เจจเจคเฉเจเฉ เจตเจเฉเจ, เจธเจพเจฐเฉ เจเฉเจเจผ ETL เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจชเจพเจเจชเจฒเจพเจเจจ เจตเจฟเฉฑเจ เจ
เฉฑเจเฉ เจตเจง เจเจพเจตเฉเจเฉ, เจชเจฐ เจเจน เจชเจนเจฟเจฒเจพเจ เจนเฉ เจชเจฐเฉ เจนเฉ เจฒเฉเจ เจฆเจพ เจฆเจพเจเจฐเจพ. เจเฉ เจเจน เจฆเจฟเจฒเจเจธเจช เจ
เจคเฉ เจเจชเจฏเฉเจเฉ เจจเจฟเจเจฒเจฟเจ, เจคเจพเจ เจฎเฉเจ เจเฉเจธเจผเฉ เจจเจพเจฒ เจ
เจชเจพเจเฉ เจเจ
เจฐเจซเจฒเฉ เจฒเจ ETL เจนเฉฑเจฒเจพเจ เจ
เจคเฉ เจเจนเจจเจพเจ เจฆเฉ เจนเจฟเฉฑเจธเจฟเจเจ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเจจเจพ เจเจพเจฐเฉ เจฐเฉฑเจเจพเจเจเจพ.
เจธเจฐเฉเจค: www.habr.com