เชจเชพเชจเชพ เชกเซ‡เชŸเชพ เชตเซ‡เชฐเชนเชพเช‰เชธเชฎเชพเช‚ ETL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเซเช‚

เช˜เชฃเชพ เชฒเซ‹เช•เซ‹ เชฐเชฟเชฒเซ‡เชถเชจเชฒ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ‡ เช•เชพเชขเชตเชพ, เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพ เช…เชจเซ‡ เชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชตเชฟเชถเชฟเชทเซเชŸ เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เชธเชพเชงเชจเซ‹เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฒเซ‹เช— เชฅเชฏเซ‡เชฒ เช›เซ‡, เชญเซ‚เชฒเซ‹ เชธเซเชงเชพเชฐเซ‡เชฒ เช›เซ‡.

เชญเซ‚เชฒเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชฒเซ‹เช—เชฎเชพเช‚ เชฎเชพเชนเชฟเชคเซ€ เชถเชพเชฎเซ‡เชฒ เช›เซ‡ เช•เซ‡ เชธเชพเชงเชจ เช•เชพเชฐเซเชฏ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เชจเชฟเชทเซเชซเชณ เช—เชฏเซเช‚ เช…เชจเซ‡ เช•เชฏเชพ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹ (เช˜เชฃเซ€เชตเชพเชฐ เชœเชพเชตเชพ) เช•เซเชฏเชพเช‚ เช…เชŸเช•เซ€ เช—เชฏเชพ. เช›เซ‡เชฒเซเชฒเซ€ เชฒเซ€เชŸเซ€เช“เชฎเชพเช‚, เชคเชฎเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชญเซ‚เชฒ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช•เซ‹เชทเซเชŸเช• เช…เชจเชจเซเชฏ เช•เซ€ เช‰เชฒเซเชฒเช‚เช˜เชจ.

ETL เชญเซ‚เชฒเชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชถเซเช‚ เชญเซ‚เชฎเชฟเช•เชพ เชญเชœเชตเซ‡ เช›เซ‡ เชคเซ‡ เชชเซเชฐเชถเซเชจเชจเซ‹ เชœเชตเชพเชฌ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡, เชฎเซ‡เช‚ เช›เซ‡เชฒเซเชฒเชพเช‚ เชฌเซ‡ เชตเชฐเซเชทเซ‹เชฎเชพเช‚ เช‰เชฆเซเชญเชตเซ‡เชฒเซ€ เชคเชฎเชพเชฎ เชธเชฎเชธเซเชฏเชพเช“เชจเซ‡ เชฌเชฆเชฒเซ‡ เชฎเซ‹เชŸเชพ เชญเช‚เชกเชพเชฐเชฎเชพเช‚ เชตเชฐเซเช—เซ€เช•เซƒเชค เช•เชฐเซ€ เช›เซ‡.

เชจเชพเชจเชพ เชกเซ‡เชŸเชพ เชตเซ‡เชฐเชนเชพเช‰เชธเชฎเชพเช‚ ETL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเซเช‚

เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชญเซ‚เชฒเซ‹เชฎเชพเช‚ เชชเซ‚เชฐเชคเซ€ เชœเช—เซเชฏเชพ เชจ เชนเซ‹เชตเซ€, เช•เชจเซ‡เช•เซเชถเชจ เช—เซเชฎเชพเชตเชตเซเช‚, เชธเชคเซเชฐ เชนเช‚เช— เชตเช—เซ‡เชฐเซ‡เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.

เชคเชพเชฐเซเช•เชฟเช• เชญเซ‚เชฒเซ‹เชฎเชพเช‚ เชŸเซ‡เชฌเชฒ เช•เซ€เชจเซเช‚ เช‰เชฒเซเชฒเช‚เช˜เชจ, เชฌเชฟเชจ-เชฎเชพเชจเซเชฏ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ, เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธเชจเซ€ เชเช•เซเชธเซ‡เชธเชจเซ‹ เช…เชญเชพเชต เชตเช—เซ‡เชฐเซ‡เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.
เชถเซ‡เชกเซเชฏเซ‚เชฒเชฐ เชธเชฎเชฏเชธเชฐ เชถเชฐเซ‚ เชจ เชฅเชˆ เชถเช•เซ‡, เชคเซ‡ เชธเซเชฅเชฟเชฐ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡, เชตเช—เซ‡เชฐเซ‡.

เชธเชฐเชณ เชญเซ‚เชฒเซ‹เชจเซ‡ เชธเซเชงเชพเชฐเชตเชพเชฎเชพเช‚ เชฒเชพเช‚เชฌเซ‹ เชธเชฎเชฏ เชฒเชพเช—เชคเซ‹ เชจเชฅเซ€. เชเช• เชธเชพเชฐเซ€ ETL เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชฎเซ‹เชŸเชพ เชญเชพเช—เชจเชพเชจเซ‡ เชชเซ‹เชคเชพเชจเซ€ เชœเชพเชคเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

เชœเชŸเชฟเชฒ เชฌเช—เซเชธ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ, เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชคเซ‹เชจเซเช‚ เช…เชจเซเชตเซ‡เชทเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เชถเซ‹เชงเชตเชพ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เช˜เชฃเซ€เชตเชพเชฐ เชชเชฐเชฟเชตเชฐเซเชคเชจ เชชเชฐเซ€เช•เซเชทเชฃ เช…เชจเซ‡ เชœเชฎเชพเชตเชŸเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชพเชฏ เช›เซ‡.

เชคเซ‡เชฅเซ€, เช…เชกเชงเซ€ เชฌเชงเซ€ เชธเชฎเชธเซเชฏเชพเช“ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เช›เซ‡. เชฌเชงเซ€ เชญเซ‚เชฒเซ‹เชฎเชพเช‚เชฅเซ€ 48% เชธเชฐเชณ เชญเซ‚เชฒเซ‹ เช›เซ‡.
เชคเชฎเชพเชฎ เชธเชฎเชธเซเชฏเชพเช“เชจเซ‹ เชคเซเชฐเซ€เชœเซ‹ เชญเชพเช— เชธเซเชŸเซ‹เชฐเซ‡เชœ เชฒเซ‹เชœเชฟเช• เช…เชฅเชตเชพ เชฎเซ‹เชกเชฒ เชฌเชฆเชฒเชตเชพเชฅเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เช›เซ‡, เช†เชฎเชพเช‚เชจเซ€ เช…เชกเชงเชพเชฅเซ€ เชตเชงเซ เชญเซ‚เชฒเซ‹ เชœเชŸเชฟเชฒ เช›เซ‡.

เช…เชจเซ‡ เชคเชฎเชพเชฎ เชธเชฎเชธเซเชฏเชพเช“เชจเชพ เชเช• เช•เซเชตเชพเชฐเซเชŸเชฐ เช•เชฐเชคเชพ เชชเชฃ เช“เช›เชพ เช•เชพเชฐเซเชฏ เชถเซ‡เชกเซเชฏเซ‚เชฒเชฐเชฅเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เช›เซ‡, เชœเซ‡เชฎเชพเช‚เชฅเซ€ 18% เชธเชฐเชณ เชญเซ‚เชฒเซ‹ เช›เซ‡.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชฌเชจเชคเซ€ เชคเชฎเชพเชฎ เชญเซ‚เชฒเซ‹เชฎเชพเช‚เชฅเซ€ 22% เชœเชŸเชฟเชฒ เชนเซ‹เชฏ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชธเซเชงเชพเชฐเชฃเชพ เชฎเชพเชŸเซ‡ เชธเซŒเชฅเซ€ เชตเชงเซ เชงเซเชฏเชพเชจ เช…เชจเซ‡ เชธเชฎเชฏเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช›เซ‡. เชคเซ‡เช“ เช…เช เชตเชพเชกเชฟเชฏเชพเชฎเชพเช‚ เชฒเช—เชญเช— เชเช• เชตเชพเชฐ เชฅเชพเชฏ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชญเซ‚เชฒเซ‹ เชฒเช—เชญเช— เชฆเชฐเชฐเซ‹เชœ เชฅเชพเชฏ เช›เซ‡.

เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡, ETL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซเช‚ เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เช…เชธเชฐเช•เชพเชฐเช• เชฐเชนเซ‡เชถเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชฒเซ‹เช—เชฎเชพเช‚ เชถเช•เซเชฏ เชคเซ‡เชŸเชฒเซ€ เชธเชšเซ‹เชŸ เชฐเซ€เชคเซ‡ เชญเซ‚เชฒเชจเซเช‚ เชธเซเชฅเชพเชจ เชธเซ‚เชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช…เชจเซ‡ เชธเชฎเชธเซเชฏเชพเชจเชพ เชธเซเชคเซเชฐเซ‹เชคเชจเซ‡ เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡ เชจเซเชฏเซ‚เชจเชคเชฎ เชธเชฎเชฏเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ.

เช…เชธเชฐเช•เชพเชฐเช• เชฆเซ‡เช–เชฐเซ‡เช–

ETL เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เชนเซเช‚ เชถเซเช‚ เชœเซ‹เชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชนเชคเซ‹?

เชจเชพเชจเชพ เชกเซ‡เชŸเชพ เชตเซ‡เชฐเชนเชพเช‰เชธเชฎเชพเช‚ ETL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเซเช‚
เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹ - เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡เชฃเซ‡ เช•เชพเชฎ เชถเชฐเซ‚ เช•เชฐเซเชฏเซเช‚,
เชธเซเชคเซเชฐเซ‹เชค - เชฎเชพเชนเชฟเชคเซ€ เชธเซเชคเซเชฐเซ‹เชค,
เชธเซเชคเชฐ - เชธเซเชŸเซ‹เชฐเซ‡เชœเชจเซเช‚ เช•เชฏเซเช‚ เชธเซเชคเชฐ เชฒเซ‹เชก เชฅเชˆ เชฐเชนเซเชฏเซเช‚ เช›เซ‡,
ETL เชœเซ‹เชฌเชจเซเช‚ เชจเชพเชฎ - เช…เชชเชฒเซ‹เชก เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ, เชœเซ‡เชฎเชพเช‚ เช˜เชฃเชพ เชจเชพเชจเชพ เชชเช—เชฒเชพเช“เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡,
เชธเซเชŸเซ‡เชช เชจเช‚เชฌเชฐ - เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซ‡เชฒเชพ เชชเช—เชฒเชพเชจเซ€ เชธเช‚เช–เซเชฏเชพ,
เช…เชธเชฐเช—เซเชฐเชธเซเชค เชชเช‚เช•เซเชคเชฟเช“ - เช•เซ‡เชŸเชฒเชพ เชกเซ‡เชŸเชพ เชชเชฐ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡,
เช…เชตเชงเชฟ เชธเซ‡เช•เชจเซเชก - เชคเซ‡ เช•เซ‡เชŸเชฒเซ‹ เชธเชฎเชฏ เชฒเซ‡ เช›เซ‡,
เชธเซเชฅเชฟเชคเชฟ - เชฌเชงเซเช‚ เชธเชพเชฐเซเช‚ เช›เซ‡ เช•เซ‡ เชจเชนเซ€เช‚: เช เซ€เช• เช›เซ‡, เชญเซ‚เชฒ, เชšเชพเชฒเซ€ เชฐเชนเซ€ เช›เซ‡, เชนเซ‡เช‚เช—เซเชธ
เชธเช‚เชฆเซ‡เชถ - เช›เซ‡เชฒเซเชฒเซ‹ เชธเชซเชณ เชธเช‚เชฆเซ‡เชถ เช…เชฅเชตเชพ เชญเซ‚เชฒ เชตเชฐเซเชฃเชจ.

เชเชจเซเชŸเซเชฐเซ€เช“เชจเซ€ เชธเซเชฅเชฟเชคเชฟเชจเชพ เช†เชงเชพเชฐเซ‡, เชคเชฎเซ‡ เช‡เชฎเซ‡เช‡เชฒ เชฎเซ‹เช•เชฒเซ€ เชถเช•เซ‹ เช›เซ‹. เช…เชจเซเชฏ เชธเชญเซเชฏเซ‹เชจเซ‡ เชชเชคเซเชฐ. เชœเซ‹ เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชญเซ‚เชฒเซ‹ เชจเชฅเซ€, เชคเซ‹ เชชเช›เซ€ เชชเชคเซเชฐ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€.

เช†เชฎ, เชญเซ‚เชฒเชจเซ€ เช˜เชŸเชจเชพเชฎเชพเช‚, เช˜เชŸเชจเชพเชจเซเช‚ เชธเซเชฅเชพเชจ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชธเซ‚เชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช•เซเชฏเชพเชฐเซ‡เช• เชเชตเซเช‚ เชฌเชจเซ‡ เช›เซ‡ เช•เซ‡ เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชŸเซ‚เชฒ เชชเซ‹เชคเซ‡ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชจเชฅเซ€. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเซ€เชงเชพ เชœ เชตเซเชฏเซ (เชตเซเชฏเซ‚) เช•เซ‰เชฒ เช•เชฐเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เช›เซ‡, เชœเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เชฐเชฟเชชเซ‹เชฐเซเชŸ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡.

ETL เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชŸเซ‡เชฌเชฒ

ETL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ€ เชฆเซ‡เช–เชฐเซ‡เช–เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพ เชฎเชพเชŸเซ‡, เชเช• เชŸเซ‡เชฌเชฒ เช…เชจเซ‡ เชเช• เชฆเซƒเชถเซเชฏ เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡.

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชชเชฐ เชชเชพเช›เชพ เช†เชตเซ€ เชถเช•เซ‹ เช›เซ‹ เชคเชฎเชพเชฐเซ‹ เชจเชพเชจเซ‹ เชธเช‚เช—เซเชฐเชน เช…เชจเซ‡ sqlite เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชชเซเชฐเซ‹เชŸเซ‹เชŸเชพเช‡เชช เชฌเชจเชพเชตเซ‹.

DDL เช•เซ‹เชทเซเชŸเช•เซ‹

CREATE TABLE UTL_JOB_STATUS (
/* Table for logging of job execution log. Important that the job has the steps ETL_START and ETL_END or ETL_ERROR */
  UTL_JOB_STATUS_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  SID               INTEGER NOT NULL DEFAULT -1, /* Session Identificator. Unique for every Run of job */
  LOG_DT            INTEGER NOT NULL DEFAULT 0,  /* Date time */
  LOG_D             INTEGER NOT NULL DEFAULT 0,  /* Date */
  JOB_NAME          TEXT NOT NULL DEFAULT 'N/A', /* Job name like JOB_STG2DM_GEO */
  STEP_NAME         TEXT NOT NULL DEFAULT 'N/A', /* ETL_START, ... , ETL_END/ETL_ERROR */
  STEP_DESCR        TEXT,                        /* Description of task or error message */
  UNIQUE (SID, JOB_NAME, STEP_NAME)
);
INSERT INTO UTL_JOB_STATUS (UTL_JOB_STATUS_ID) VALUES (-1);

DDL เชœเซเช“/เชฐเชฟเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‹

CREATE VIEW IF NOT EXISTS UTL_JOB_STATUS_V
AS /* Content: Package Execution Log for last 3 Months. */
WITH SRC AS (
  SELECT LOG_D,
    LOG_DT,
    UTL_JOB_STATUS_ID,
    SID,
	CASE WHEN INSTR(JOB_NAME, 'FTP') THEN 'TRANSFER' /* file transfer */
	     WHEN INSTR(JOB_NAME, 'STG') THEN 'STAGE' /* stage */
	     WHEN INSTR(JOB_NAME, 'CLS') THEN 'CLEANSING' /* cleansing */
	     WHEN INSTR(JOB_NAME, 'DIM') THEN 'DIMENSION' /* dimension */
	     WHEN INSTR(JOB_NAME, 'FCT') THEN 'FACT' /* fact */
		 WHEN INSTR(JOB_NAME, 'ETL') THEN 'STAGE-MART' /* data mart */
	     WHEN INSTR(JOB_NAME, 'RPT') THEN 'REPORT' /* report */
	     ELSE 'N/A' END AS LAYER,
	CASE WHEN INSTR(JOB_NAME, 'ACCESS') THEN 'ACCESS LOG' /* source */
	     WHEN INSTR(JOB_NAME, 'MASTER') THEN 'MASTER DATA' /* source */
	     WHEN INSTR(JOB_NAME, 'AD-HOC') THEN 'AD-HOC' /* source */
	     ELSE 'N/A' END AS SOURCE,
    JOB_NAME,
    STEP_NAME,
    CASE WHEN STEP_NAME='ETL_START' THEN 1 ELSE 0 END AS START_FLAG,
    CASE WHEN STEP_NAME='ETL_END' THEN 1 ELSE 0 END AS END_FLAG,
    CASE WHEN STEP_NAME='ETL_ERROR' THEN 1 ELSE 0 END AS ERROR_FLAG,
    STEP_NAME || ' : ' || STEP_DESCR AS STEP_LOG,
	SUBSTR( SUBSTR(STEP_DESCR, INSTR(STEP_DESCR, '***')+4), 1, INSTR(SUBSTR(STEP_DESCR, INSTR(STEP_DESCR, '***')+4), '***')-2 ) AS AFFECTED_ROWS
  FROM UTL_JOB_STATUS
  WHERE datetime(LOG_D, 'unixepoch') >= date('now', 'start of month', '-3 month')
)
SELECT JB.SID,
  JB.MIN_LOG_DT AS START_DT,
  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) AS LOG_DT,
  JB.SOURCE,
  JB.LAYER,
  JB.JOB_NAME,
  CASE
  WHEN JB.ERROR_FLAG = 1 THEN 'ERROR'
  WHEN JB.ERROR_FLAG = 0 AND JB.END_FLAG = 0 AND strftime('%s','now') - JB.MIN_LOG_DT > 0.5*60*60 THEN 'HANGS' /* half an hour */
  WHEN JB.ERROR_FLAG = 0 AND JB.END_FLAG = 0 THEN 'RUNNING'
  ELSE 'OK'
  END AS STATUS,
  ERR.STEP_LOG     AS STEP_LOG,
  JB.CNT           AS STEP_CNT,
  JB.AFFECTED_ROWS AS AFFECTED_ROWS,
  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) AS JOB_START_DT,
  strftime('%d.%m.%Y %H:%M', datetime(JB.MAX_LOG_DT, 'unixepoch')) AS JOB_END_DT,
  JB.MAX_LOG_DT - JB.MIN_LOG_DT AS JOB_DURATION_SEC
FROM
  ( SELECT SID, SOURCE, LAYER, JOB_NAME,
           MAX(UTL_JOB_STATUS_ID) AS UTL_JOB_STATUS_ID,
           MAX(START_FLAG)       AS START_FLAG,
           MAX(END_FLAG)         AS END_FLAG,
           MAX(ERROR_FLAG)       AS ERROR_FLAG,
           MIN(LOG_DT)           AS MIN_LOG_DT,
           MAX(LOG_DT)           AS MAX_LOG_DT,
           SUM(1)                AS CNT,
           SUM(IFNULL(AFFECTED_ROWS, 0)) AS AFFECTED_ROWS
    FROM SRC
    GROUP BY SID, SOURCE, LAYER, JOB_NAME
  ) JB,
  ( SELECT UTL_JOB_STATUS_ID, SID, JOB_NAME, STEP_LOG
    FROM SRC
    WHERE 1 = 1
  ) ERR
WHERE 1 = 1
  AND JB.SID = ERR.SID
  AND JB.JOB_NAME = ERR.JOB_NAME
  AND JB.UTL_JOB_STATUS_ID = ERR.UTL_JOB_STATUS_ID
ORDER BY JB.MIN_LOG_DT DESC, JB.SID DESC, JB.SOURCE;

SQL เชคเชชเชพเชธเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชจเชตเซ‹ เชธเชคเซเชฐ เชจเช‚เชฌเชฐ เชฎเซ‡เชณเชตเชตเซ‹ เชถเช•เซเชฏ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ

SELECT SUM (
  CASE WHEN start_job.JOB_NAME IS NOT NULL AND end_job.JOB_NAME IS NULL /* existed job finished */
	    AND NOT ( 'y' = 'n' ) /* force restart PARAMETER */
       THEN 1 ELSE 0
  END ) AS IS_RUNNING
  FROM
    ( SELECT 1 AS dummy FROM UTL_JOB_STATUS WHERE sid = -1) d_job
  LEFT OUTER JOIN
    ( SELECT JOB_NAME, SID, 1 AS dummy
      FROM UTL_JOB_STATUS
      WHERE JOB_NAME = 'RPT_ACCESS_LOG' /* job name PARAMETER */
	    AND STEP_NAME = 'ETL_START'
      GROUP BY JOB_NAME, SID
    ) start_job /* starts */
  ON d_job.dummy = start_job.dummy
  LEFT OUTER JOIN
    ( SELECT JOB_NAME, SID
      FROM UTL_JOB_STATUS
      WHERE JOB_NAME = 'RPT_ACCESS_LOG'  /* job name PARAMETER */
	    AND STEP_NAME in ('ETL_END', 'ETL_ERROR') /* stop status */
      GROUP BY JOB_NAME, SID
    ) end_job /* ends */
  ON start_job.JOB_NAME = end_job.JOB_NAME
     AND start_job.SID = end_job.SID

เช•เซ‹เชทเซเชŸเช• เชธเซเชตเชฟเชงเชพเช“:

  • เชกเซ‡เชŸเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ เชถเชฐเซ‚เช†เชค เช…เชจเซ‡ เช…เช‚เชค ETL_START เช…เชจเซ‡ ETL_END เชชเช—เชฒเชพเช‚เช“ เชฆเซเชตเชพเชฐเชพ เช…เชจเซเชธเชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡
  • เชญเซ‚เชฒเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชคเซ‡เชจเชพ เชตเชฐเซเชฃเชจ เชธเชพเชฅเซ‡เชจเซเช‚ ETL_ERROR เชชเช—เชฒเซเช‚ เชฌเชจเชพเชตเชตเซเช‚ เชœเซ‹เชˆเช
  • เชชเซเชฐเซ‹เชธเซ‡เชธเซเชก เชกเซ‡เชŸเชพเชจเซ‹ เชœเชฅเซเชฅเซ‹ เชนเชพเช‡เชฒเชพเช‡เชŸ เชฅเชตเซ‹ เชœเซ‹เชˆเช, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชซเซ‚เชฆเชกเซ€ เชธเชพเชฅเซ‡
  • เชคเซ‡ เชœ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ force_restart=y เชชเชฐเชฟเชฎเชพเชฃ เชธเชพเชฅเซ‡ เชเช• เชœ เชธเชฎเชฏเซ‡ เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชคเซ‡เชจเชพ เชตเชฟเชจเชพ เชธเชคเซเชฐ เชจเช‚เชฌเชฐ เชซเช•เซเชค เชชเซ‚เชฐเซเชฃ เชฅเชฏเซ‡เชฒ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชœ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.
  • เชธเชพเชฎเชพเชจเซเชฏ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚, เชคเชฎเซ‡ เชธเชฎเชพเชจ เชกเซ‡เชŸเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเชฎเชพเช‚เชคเชฐ เชฐเซ€เชคเซ‡ เชšเชฒเชพเชตเซ€ เชถเช•เชคเชพ เชจเชฅเซ€

เช•เซ‹เชทเซเชŸเช• เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เช›เซ‡:

  • เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ ETL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‹ เชธเชคเซเชฐ เชจเช‚เชฌเชฐ เชฎเซ‡เชณเชตเชตเซ‹
  • เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชฒเซ‹เช— เชเชจเซเชŸเซเชฐเซ€ เชฆเชพเช–เชฒ เช•เชฐเซ‹
  • ETL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‹ เช›เซ‡เชฒเซเชฒเซ‹ เชธเชซเชณ เชฐเซ‡เช•เซ‹เชฐเซเชก เชฎเซ‡เชณเชตเชตเซ‹

เช“เชฐเซ‡เช•เชฒ เช…เชฅเชตเชพ เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชธ เชœเซ‡เชตเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚, เช† เช•เชพเชฎเช—เซ€เชฐเซ€ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชซเช‚เช•เซเชถเชจเซเชธ เชคเชฐเซ€เช•เซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ€ เชถเช•เชพเชฏ เช›เซ‡. sqlite เชจเซ‡ เชฌเชพเชนเซเชฏ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชจเซ‡ เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชคเซ‡ PHP เชฎเชพเช‚ เชชเซเชฐเซ‹เชŸเซ‹เชŸเชพเช‡เชช.

เชจเชฟเชทเซเช•เชฐเซเชท

เช†เชฎ, เชกเซ‡เชŸเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เชŸเซ‚เชฒเซเชธเชฎเชพเช‚ เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถเชพเช“ เชฎเซ‡เช—เชพ-เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชญเซ‚เชฎเชฟเช•เชพ เชญเชœเชตเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชธเชฎเชธเซเชฏเชพเชจเซเช‚ เช•เชพเชฐเชฃ เชเชกเชชเชฅเซ€ เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชฎเชจเซ‡ เชถเซเชฐเซ‡เชทเซเช  เช•เชนเซ‡เชตเซเช‚ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชธเซ‹ เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชเช• เชœเชŸเชฟเชฒ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชซเซ‡เชฐเชตเชพเชฏ เช›เซ‡.

เชฒเซ‡เช– เชชเซเชฐเซ‹เชŸเซ‹เชŸเชพเช‡เชชเชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ เชธเชฎเชธเซเชฏเชพเชจเชพ เชธเช‚เชญเชตเชฟเชค เช‰เช•เซ‡เชฒเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เชชเซ‚เชฐเซเช‚ เชชเชพเชกเซ‡ เช›เซ‡. เช†เช–เซ‹ เชจเชพเชจเซ‹ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชชเซเชฐเซ‹เชŸเซ‹เชŸเชพเช‡เชช เช—เชฟเชŸเชฒเซ‡เชฌเชฎเชพเช‚ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ SQLite PHP ETL เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเช“.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹