ETL แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜ แƒ›แƒชแƒ˜แƒ แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒแƒฌแƒงแƒแƒ‘แƒจแƒ˜

แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒš แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ˜แƒก, แƒขแƒ แƒแƒœแƒกแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒกแƒ แƒ“แƒ แƒ แƒ”แƒšแƒแƒชแƒ˜แƒฃแƒ  แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ”แƒ‘แƒจแƒ˜ แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“. แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒแƒฆแƒ แƒ˜แƒชแƒฎแƒฃแƒšแƒ˜แƒ, แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ.

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ แƒแƒ› แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ›แƒ แƒ•แƒ”แƒ  แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒ“แƒ แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜ (แƒฎแƒจแƒ˜แƒ แƒแƒ“ java) แƒกแƒแƒ“ แƒ’แƒแƒฉแƒ”แƒ แƒ“แƒ. แƒ‘แƒแƒšแƒ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒžแƒแƒ•แƒแƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ แƒฆแƒ•แƒ”แƒ•แƒ.

แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒ’แƒแƒกแƒแƒชแƒ”แƒ›แƒแƒ“, แƒ—แƒฃ แƒ แƒ แƒ แƒแƒšแƒก แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก ETL แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ, แƒ›แƒ” แƒ“แƒแƒ•แƒแƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ” แƒงแƒ•แƒ”แƒšแƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฌแƒแƒ แƒ›แƒแƒ˜แƒจแƒ•แƒ แƒ‘แƒแƒšแƒ แƒแƒ แƒ˜ แƒฌแƒšแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ˜แƒ“ แƒกแƒแƒชแƒแƒ•แƒจแƒ˜.

ETL แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜ แƒ›แƒชแƒ˜แƒ แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒแƒฌแƒงแƒแƒ‘แƒจแƒ˜

แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒก แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒแƒ แƒแƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒกแƒ˜แƒ•แƒ แƒชแƒ”, แƒ“แƒแƒ™แƒแƒ แƒ’แƒฃแƒšแƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜, แƒกแƒ”แƒกแƒ˜แƒ˜แƒก แƒ“แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ แƒ“แƒ แƒ.แƒจ.

แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒ›แƒแƒ’แƒ˜แƒ“แƒ˜แƒก แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ แƒฆแƒ•แƒ”แƒ•แƒแƒก, แƒแƒ แƒแƒกแƒฌแƒแƒ  แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒก, แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ‘แƒแƒก แƒ“แƒ แƒ.แƒจ.
แƒ“แƒแƒ’แƒ”แƒ’แƒ›แƒ˜แƒšแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒแƒ  แƒ“แƒแƒ˜แƒฌแƒงแƒแƒก แƒ“แƒ แƒแƒฃแƒšแƒแƒ“, แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ˜แƒงแƒ˜แƒœแƒแƒก แƒ“แƒ แƒ.แƒจ.

แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒแƒก แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒ แƒ แƒแƒ  แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. แƒ™แƒแƒ แƒ’ ETL-แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒšแƒแƒ“ แƒ’แƒแƒฃแƒ›แƒ™แƒšแƒแƒ•แƒ“แƒ”แƒก แƒ›แƒแƒ— แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒแƒก.

แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒกแƒฃแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒแƒก แƒ“แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒก, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒแƒก. แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก.

แƒแƒกแƒ” แƒ แƒแƒ›, แƒงแƒ•แƒ”แƒšแƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒœแƒแƒฎแƒ”แƒ•แƒแƒ แƒ˜ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒกแƒ—แƒแƒœ. แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก 48% แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ.
แƒงแƒ•แƒ”แƒšแƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ›แƒ”แƒกแƒแƒ›แƒ”แƒ“แƒ˜ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒ˜แƒก แƒแƒœ แƒ›แƒแƒ“แƒ”แƒšแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒแƒกแƒ—แƒแƒœ, แƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒฎแƒ”แƒ•แƒแƒ แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒ แƒ—แƒฃแƒšแƒ˜แƒ.

แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ›แƒ”แƒแƒ—แƒฎแƒ”แƒ“แƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ แƒ˜แƒ’แƒ—แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ 18% แƒแƒ แƒ˜แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜.

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก 22% แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒกแƒฃแƒ แƒ˜แƒ แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ“แƒ˜แƒ“ แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒ“แƒ แƒแƒก แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒ™แƒ•แƒ˜แƒ แƒแƒจแƒ˜ แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒฎแƒ“แƒ”แƒ‘แƒ. แƒ›แƒแƒจแƒ˜แƒœ แƒ แƒแƒชแƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ” แƒฎแƒ“แƒ”แƒ‘แƒ.

แƒแƒจแƒ™แƒแƒ แƒแƒ, แƒ แƒแƒ› ETL แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ›แƒแƒจแƒ˜แƒœ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒŸแƒฃแƒ แƒœแƒแƒšแƒจแƒ˜ แƒ แƒแƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ“แƒ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ“แƒ แƒแƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ›แƒแƒกแƒแƒซแƒ”แƒ‘แƒœแƒแƒ“.

แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜

แƒ แƒ˜แƒกแƒ˜ แƒœแƒแƒฎแƒ•แƒ แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ ETL แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜?

ETL แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜ แƒ›แƒชแƒ˜แƒ แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒแƒฌแƒงแƒแƒ‘แƒจแƒ˜
แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ - แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒแƒœ แƒ“แƒแƒ˜แƒฌแƒงแƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ,
แƒฌแƒงแƒแƒ แƒ - แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฌแƒงแƒแƒ แƒ,
แƒคแƒ”แƒœแƒ - แƒ แƒ แƒ“แƒแƒœแƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ˜ แƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ,
ETL Job Name - แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ›แƒชแƒ˜แƒ แƒ” แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜แƒกแƒ’แƒแƒœ,
แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜ - แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ,
แƒ“แƒแƒ–แƒแƒ แƒแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜ - แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜แƒ แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜,
แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ แƒฌแƒแƒ›แƒ˜ - แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒฎแƒแƒœแƒ˜ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ,
แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜ - แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ: OK, ERROR, RUNNING, HANGS
แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ - แƒ‘แƒแƒšแƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ แƒแƒœ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ.

แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ— แƒ”แƒš.แƒฌแƒ”แƒ แƒ˜แƒšแƒ˜. แƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒกแƒฎแƒ•แƒ แƒฌแƒ”แƒ•แƒ แƒ”แƒ‘แƒก. แƒ—แƒฃ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก, แƒ›แƒแƒจแƒ˜แƒœ แƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ.

แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ“แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒ™แƒแƒคแƒ˜แƒแƒ“ แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒ˜.

แƒ–แƒแƒ’แƒฏแƒ”แƒ  แƒฎแƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒ—แƒแƒ•แƒแƒ“ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒฎแƒ”แƒ“แƒ˜แƒก (แƒฎแƒ”แƒ“แƒ˜แƒก) แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”แƒช แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜.

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 แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ˜แƒก แƒ‘แƒแƒšแƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ

แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ Oracle แƒแƒœ Postgres, แƒ”แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒก แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ—. sqlite แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒ’แƒแƒ แƒ” แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒก แƒ“แƒ แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒก แƒžแƒ แƒแƒขแƒแƒขแƒ˜แƒžแƒ˜ PHP-แƒจแƒ˜.

แƒ’แƒแƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒก

แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ›แƒ”แƒ’แƒ-แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœ แƒ แƒแƒšแƒก แƒ—แƒแƒ›แƒแƒจแƒแƒ‘แƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒซแƒœแƒ”แƒšแƒ˜แƒ แƒ›แƒแƒ— แƒฃแƒฌแƒแƒ“แƒ แƒแƒžแƒขแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒก แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ“แƒแƒกแƒแƒ“แƒ’แƒ”แƒœแƒแƒ“. แƒ แƒแƒชแƒ แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒแƒกแƒก แƒฃแƒแƒฎแƒšแƒแƒ•แƒ“แƒ”แƒ‘แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜ แƒ แƒ—แƒฃแƒš แƒžแƒ แƒแƒ”แƒฅแƒขแƒแƒ“ แƒ˜แƒฅแƒชแƒ”แƒ•แƒ.

แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒžแƒ แƒแƒขแƒแƒขแƒ˜แƒžแƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ—. แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ›แƒชแƒ˜แƒ แƒ” แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒžแƒ แƒแƒขแƒแƒขแƒ˜แƒžแƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ gitlab-แƒจแƒ˜ SQLite PHP ETL Utilities.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ