рдПрдпрд░рдлрд╝реНрд▓реЛ рдмреИрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ

рдПрдпрд░рдлрд╝реНрд▓реЛ рдмреИрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ

рдирдорд╕реНрддреЗ, рд╣рдмрд░! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмреИрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЪ рдпрд╛ рдЖрдкрдХреЗ рдбреЗрдЯрд╛рд▓реЗрдХ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВред рд╣рдо рдЕрдкрд╛рдЪреЗ рдПрдпрд░рдлреНрд▓реЛ (рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдпрд░рдлреНрд▓реЛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╣реИрдмреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реИ, рдФрд░ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреА рдИрдЯреАрдПрд▓/рдИрдПрд▓рдЯреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓рд░ рдЪреБрдирддреЗ рд╕рдордп рдХрдо рд╕реЗ рдХрдо рдПрдпрд░рдлреНрд▓реЛ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЬрдм рдореИрдВ рдЯрд┐рдВрдХреЙрдл рдмреИрдВрдХ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ рддреЛ рдореИрдВрдиреЗ рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЪ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд┐рдЦреА рдереАред рдЕрдм рдореИрдВ Mail.Ru Group рдЯреАрдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдЧреЗрдорд┐рдВрдЧ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рджрд░рдЕрд╕рд▓, рдЬреИрд╕реЗ рд╣реА рд╕рдорд╛рдЪрд╛рд░ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди рд╕рд╛рдордиреЗ рдЖрдПрдВрдЧреЗ, рдореИрдВ рдФрд░ рдореЗрд░реА рдЯреАрдо рдпрд╣рд╛рдВ рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛

рддреЛ, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рдпреБрдкреНрд░рд╡рд╛рд╣ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ (рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╕реЗрдЯ) рдХрд╛рд░реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕, рдпреЛрдЬрдирд╛ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ред рдПрдпрд░рдлрд╝реНрд▓реЛ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛: рдкрд╛рдпрдерди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди (рд╡рд┐рдХрд╕рд┐рдд) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдлрд╛рдпрджреЗ рд╣реИрдВ: рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдкрдХрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдИрдЯреАрдПрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд┐рд░реНрдл рдПрдХ рдкрд╛рдпрдерди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдФрд░ рдЖрдк рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ, рдЯреАрдо рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЗрд╕реЗ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВред рд╡рд╛рджреНрдпрдпрдВрддреНрд░ рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП PyCharm + Git рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдЕрджреНрднреБрдд рдФрд░ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ!

рдЖрдЗрдП рдЕрдм рдПрдпрд░рдлрд╝реНрд▓реЛ рдХреА рдореБрдЦреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЙрдирдХреЗ рд╕рд╛рд░ рдФрд░ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╕рдордЭрдХрд░, рдЖрдк рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдореБрдЦреНрдп рдЗрдХрд╛рдИ рдбрд╛рдпрд░реЗрдХреНрдЯреЗрдб рдПрд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдлрд╝ (рдЗрд╕рдХреЗ рдмрд╛рдж рдбреАрдПрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рд╣реИред

рдбреЗрдЧ

рдбреАрдПрдЬреА рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХреБрдЫ рд╕рд╛рд░реНрдердХ рдЬреБрдбрд╝рд╛рд╡ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдпрд░рдлрд╝реНрд▓реЛ рдбреАрдПрдЬреА рдФрд░ рдЕрдиреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

рдПрдпрд░рдлрд╝реНрд▓реЛ рдмреИрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ

рдбреАрдПрдЬреА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

рдПрдпрд░рдлрд╝реНрд▓реЛ рдмреИрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ

рдбреЗрд╡рд▓рдкрд░, DAG рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ DAG рдХреЗ рднреАрддрд░ рдХрд╛рд░реНрдп рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЗрдХрд╛рдИ рдкрд░ рдЖрддреЗ рд╣реИрдВ: рдПрдпрд░рдлреНрд▓реЛ рдСрдкрд░реЗрдЯрд░ред

рдСрдкрд░реЗрдЯрд░реЛрдВ

рдСрдкрд░реЗрдЯрд░ рдПрдХ рдЗрдХрд╛рдИ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬреЙрдм рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬреЙрдм рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред GitHub рд╕реЗ рдПрдпрд░рдлрд╝реНрд▓реЛ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрддрд╛ рд╣реИ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдореМрдЬреВрдж рд╣реИред рдЙрджрд╛рд╣рд░рдг:

  • рдмреИрд╢рдСрдкрд░реЗрдЯрд░ - рдмреИрд╢ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ред
  • PythonOperator - Python рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ред
  • рдИрдореЗрд▓рдСрдкрд░реЗрдЯрд░ - рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ред
  • HTTPрдСрдкрд░реЗрдЯрд░ - http рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ред
  • SqlOperator - SQL рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ред
  • рд╕реЗрдВрд╕рд░ рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИ (рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рдХрд╛ рдЖрдЧрдорди, рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди, рдПрдкреАрдЖрдИ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдЖрджрд┐, рдЖрджрд┐)ред

рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдкрд░реЗрдЯрд░ рд╣реИрдВ: DockerOperator, HiveOperator, S3FileTransferOperator, PrestoToMysqlOperator, SlackOperatorред

рдЖрдк рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдСрдкрд░реЗрдЯрд░ рднреА рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ MongoDBToHiveViaHdfsTransfer рдмрдирд╛рдпрд╛, рдЬреЛ MongoDB рд╕реЗ Hive рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдСрдкрд░реЗрдЯрд░ рд╣реИрдВред рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕: CHLoadFromHiveOperator рдФрд░ CHTableLoaderOperatorред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЬреИрд╕реЗ рд╣реА рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдореВрд▓ рдХрдердиреЛрдВ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдХреЛрдб рдХрд╛ рдмрд╛рд░-рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдПрдХ рдирдП рдХрдерди рдореЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдЖрдЧреЗ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЗрди рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдм рд╣рдо рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рд╕рдордпрдмрджреНрдзрдХ

рдПрдпрд░рдлреНрд▓реЛ рдХрд╛ рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЕрдЬрд╡рд╛рдЗрди. рд╕реЗрд▓реЗрд░реА рдПрдХ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдПрдпрд░рдлрд╝реНрд▓реЛ рдкрдХреНрд╖ рдкрд░, рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреВрд▓ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдЙрдирдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпрднрд╛рд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдпрд╛ рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЪ рдХреЗ рднреАрддрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реИред рдкреВрд▓ рдХреЛ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдПрдпрд░рдлрд╝реНрд▓реЛ рдмреИрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ

рдкреНрд░рддреНрдпреЗрдХ рдкреВрд▓ рдореЗрдВ рд╕реНрд▓реЙрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдПрдХ рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИред DAG рдмрдирд╛рддреЗ рд╕рдордп, рдЗрд╕реЗ рдПрдХ рдкреВрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

ALERT_MAILS =  Variable.get("gv_mail_admin_dwh")
DAG_NAME = 'dma_load'
OWNER = 'Vasya Pupkin'
DEPENDS_ON_PAST = True
EMAIL_ON_FAILURE = True
EMAIL_ON_RETRY = True
RETRIES = int(Variable.get('gv_dag_retries'))
POOL = 'dma_pool'
PRIORITY_WEIGHT = 10

start_dt = datetime.today() - timedelta(1)
start_dt = datetime(start_dt.year, start_dt.month, start_dt.day)

default_args = {
    'owner': OWNER,
    'depends_on_past': DEPENDS_ON_PAST,
    'start_date': start_dt,
    'email': ALERT_MAILS,
    'email_on_failure': EMAIL_ON_FAILURE,
    'email_on_retry': EMAIL_ON_RETRY,
    'retries': RETRIES,
    'pool': POOL,
    'priority_weight': PRIORITY_WEIGHT
}
dag = DAG(DAG_NAME, default_args=default_args)
dag.doc_md = __doc__

DAG рд╕реНрддрд░ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреВрд▓ рдХреЛ рдХрд╛рд░реНрдп рд╕реНрддрд░ рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рд╢реЗрдбреНрдпреВрд▓рд░, рдПрдпрд░рдлреНрд▓реЛ рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рджрд░рдЕрд╕рд▓, рд╢реЗрдбреНрдпреВрд▓рд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рднреА рддрдВрддреНрд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ:

  1. рдбреАрдПрдЬреА рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдп рдкреВрд░реЗ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ; рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдХрддрд╛рд░рдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  2. рдХрддрд╛рд░ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рднреА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдпрджрд┐ рдкреВрд▓ рдореЗрдВ рдПрдХ рдореБрдлреНрдд рд╕реНрд▓реЙрдЯ рд╣реИ, рддреЛ рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  3. рдпрджрд┐ рдХреЛрдИ рдирд┐рдГрд╢реБрд▓реНрдХ рд╢реНрд░рдорд┐рдХ рдЕрдЬрд╡рд╛рдЗрди рд╣реИ, рддреЛ рдХрд╛рд░реНрдп рдЙрд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ; рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЖрдкрдиреЗ рдЬреЛ рдХрд╛рд░реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред

рд╢реЗрдбреНрдпреВрд▓рд░ рд╕рднреА рдбреАрдПрдЬреА рдХреЗ рд╕реЗрдЯ рдФрд░ рдбреАрдПрдЬреА рдХреЗ рднреАрддрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред

рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЛ рдбреАрдПрдЬреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреАрдПрдЬреА рдХреЛ рдПрдХ рд╢реЗрдбреНрдпреВрд▓ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='@hourly')

рддреИрдпрд╛рд░ рдкреНрд░реАрд╕реЗрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ: @once, @hourly, @daily, @weekly, @monthly, @yearly.

рдЖрдк рдХреНрд░реЙрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='*/10 * * * *')

рдХрд╛рд░реНрдпрд╡рд╛рд╣реА рдХреА рддрд╛рд░реАрдЦ

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдпрд░рдлреНрд▓реЛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдбреАрдПрдЬреА рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рддрд┐рдерд┐ рдХреНрдпрд╛ рд╣реИред рдПрдпрд░рдлрд╝реНрд▓реЛ рдореЗрдВ, DAG рдХрд╛ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рджрд┐рдирд╛рдВрдХ рдЖрдпрд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, DAG рдХреЗ рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрди рддрд┐рдерд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрди рддрд┐рдерд┐ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреАрдПрдЬреА рдХрдИ рдирд┐рд╖реНрдкрд╛рджрди рддрд┐рдерд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдпрд╣рд╛рдБ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдПрдпрд░рдлрд╝реНрд▓реЛ рдмреИрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ (рдпрд╛ рд╢рд╛рдпрдж рд╕реМрднрд╛рдЧреНрдп рд╕реЗ: рдпрд╣ рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ), рдпрджрд┐ рдбреАрдПрдЬреА рдореЗрдВ рдХрд╛рд░реНрдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд┐рдЫрд▓реА рдирд┐рд╖реНрдкрд╛рджрди рддрд┐рдерд┐ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдорд╛рдпреЛрдЬрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдирдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд┐рдЫрд▓реА рдЕрд╡рдзрд┐ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреБрд░рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреБрдирд░реБрддреНрдкрд╛рджрдХрддрд╛ рдЦреЛ рдЧрдИ рд╣реИ (рдмреЗрд╢рдХ, рдХреЛрдИ рднреА рдЖрдкрдХреЛ Git рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдФрд░ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдЖрдкрдХреЛ рдПрдХ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред

рдХрд╛рд░реНрдп рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛

рдбреАрдПрдЬреА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛рдпрдерди рдореЗрдВ рдХреЛрдб рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рд╛рд░реНрдб рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рдеред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рддреАрди MySQL рд╢рд╛рд░реНрдб рд╣реИрдВ, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдЪрдврд╝рдиреЗ рдФрд░ рдХреБрдЫ рдбреЗрдЯрд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВред DAG рдореЗрдВ рдкрд╛рдпрдерди рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

connection_list = lv.get('connection_list')

export_profiles_sql = '''
SELECT
  id,
  user_id,
  nickname,
  gender,
  {{params.shard_id}} as shard_id
FROM profiles
'''

for conn_id in connection_list:
    export_profiles = SqlToHiveViaHdfsTransfer(
        task_id='export_profiles_from_' + conn_id,
        sql=export_profiles_sql,
        hive_table='stg.profiles',
        overwrite=False,
        tmpdir='/data/tmp',
        conn_id=conn_id,
        params={'shard_id': conn_id[-1:], },
        compress=None,
        dag=dag
    )
    export_profiles.set_upstream(exec_truncate_stg)
    export_profiles.set_downstream(load_profiles)

рдбреАрдПрдЬреА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдПрдпрд░рдлрд╝реНрд▓реЛ рдмреИрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдХреЗрд╡рд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдХреЗ рдФрд░ рдбреАрдПрдЬреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рдПрдХ рд╢рд╛рд░реНрдб рдЬреЛрдбрд╝ рдпрд╛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд░рд╛рдорджрд╛рдпрдХ!

рдЖрдк рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреЛрдб рдкреАрдврд╝реА рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ рдпрд╛ рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдФрд░, рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЪ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдЖрдкрдХреЗ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдПрди рдЯреЗрдмрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬреЛ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕ рд╕реВрдЪреА рд╕реЗ рдбреАрдПрдЬреА рдореЗрдВ рдПрди рдХрд╛рд░реНрдп рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдкреАрдЖрдИ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЛ рдПрдХ рдкреВрд▓ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдХреНрд░реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдПрдкреАрдЖрдИ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛. рд▓рдЪреАрд▓рд╛!

рдХреЛрд╖

рдПрдпрд░рдлрд╝реНрд▓реЛ рдХрд╛ рдЕрдкрдирд╛ рдмреИрдХрдПрдВрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ, рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ (MySQL рдпрд╛ Postgres рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Postgres рд╣реИ), рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐, DAGs, рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЗрддреНрдпрд╛рджрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдпрд╣ рдХрд╣ рд╕рдХреВрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдКрдкрд░ рдЕрдкрдиреА рдХреЛрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдПрдпрд░рдлреНрд▓реЛ рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрд╣реБрдд рд╕рд░рд▓ (рд▓рдЧрднрдЧ 20 рдЯреЗрдмрд▓) рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдореБрдЭреЗ рдЗрдиреНрдлреЙрд░реНрдореЗрдЯрд┐рдХрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ 100500 рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдпрд╛рдж рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕рдордЭрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рдерд╛ред

рдирд┐рдЧрд░рд╛рдиреА

рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕рд░рд▓рддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рдПрдХ рдХрд╛рд░реНрдп рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛред рд╣рдо рдЬрд╝реЗрдкреЗрд▓рд┐рди рдореЗрдВ рдПрдХ рдиреЛрдЯрдкреИрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦрддреЗ рд╣реИрдВ:

рдПрдпрд░рдлрд╝реНрд▓реЛ рдмреИрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ

рдпрд╣ рдПрдпрд░рдлрд╝реНрд▓реЛ рдХрд╛ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

рдПрдпрд░рдлрд╝реНрд▓реЛ рдмреИрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ

рдПрдпрд░рдлрд╝реНрд▓реЛ рдХреЛрдб рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрд▓рд░реНрдЯ рдЬреЛрдбрд╝рд╛ рд╣реИред рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд▓ рд░рд╣рд╛ рдЙрджрд╛рд╣рд░рдг, рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рд╕рдореВрд╣ рдХреЛ рд╕реНрдкреИрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдХрд╛рд╕ рдФрд░ рд╕рд╣рд╛рдпрддрд╛ рдЯреАрдо рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред

рд╣рдореЗрдВ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ), рдФрд░ рдЬрд╝реЗрдкреЗрд▓рд┐рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдореЗрдВ рдПрдпрд░рдлрд╝реНрд▓реЛ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рдордЧреНрд░ рддрд╕реНрд╡реАрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░

рдПрдпрд░рдлрд╝реНрд▓реЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рдЪрдорддреНрдХрд╛рд░ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдХрд╛рд░рдЧрд░ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣реЗрдВред рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЛ, рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐, рд▓рдЪреАрд▓рд╛рдкрди, рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА - рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдЖрдПрдЧрд╛ред рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдЧрдарди, рдПрдпрд░рдлреНрд▓реЛ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЪрдорддреНрдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдпрд░рдлреНрд▓реЛ рдкреНрд░рддрд┐рджрд┐рди рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓рдЧрднрдЧ 6,5 рд╣рдЬрд╛рд░ рдХрд╛рд░реНрдп. рд╡реЗ рдЪрд░рд┐рддреНрд░ рдореЗрдВ рдХрд╛рдлреА рднрд┐рдиреНрди рд╣реИрдВред рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдФрд░ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдореБрдЦреНрдп DWH рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рд╣реИрдВ, рдореБрдЦреНрдп DWH рдХреЗ рдЕрдВрджрд░ рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рд╣реИрдВ, рддреЗрдЬрд╝ DWH рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рд╣реИрдВ, рдХрдИ, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╣реИрдВ - рдФрд░ рдПрдпрд░рдлреНрд▓реЛ рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рдЙрди рд╕рдмрдХреЛ рдЪрдмрд╛рддрд╛ рд╣реИред рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╣реЗрдВ рддреЛ рдпрд╣ рд╣реИ 2,3 рд╣рдЬрд╛рд░реЛрдВ DWH (Hadoop) рдХреЗ рднреАрддрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ ELT рдХрд╛рд░реНрдп, рд▓рдЧрднрдЧред 2,5 рд╕реМ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реВрддреНрд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдПрдХ рдЯреАрдо рд╣реИ 4 рдИрдЯреАрдПрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕, рдЬреЛ рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЪ рдореЗрдВ рдИрдЯреАрдПрд▓ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЪ рдХреЗ рдЕрдВрджрд░ рдИрдПрд▓рдЯреА рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ, рдЬреЛ рд╕реЗрд╡рд╛ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

╨Я╨╗╨░╨╜╤Л ╨╜╨░ ╨▒╤Г╨┤╤Г╤Й╨╡╨╡

рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдмрдврд╝ рд░рд╣реА рд╣реИ, рдФрд░ рдПрдпрд░рдлреНрд▓реЛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣рдо рдЬреЛ рдореБрдЦреНрдп рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рд╡рд╣ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╣реИред рд╣рдо рдПрдХ рдПрдпрд░рдлреНрд▓реЛ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╕реЗрд▓реЗрд░реА рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреИрд░реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдиреМрдХрд░реА рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрд╡-рдбреБрдкреНрд▓рд┐рдХреЗрдЯрд┐рдВрдЧ рд╣реЗрдб рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЙрдкрд╕рдВрд╣рд╛рд░

рдмреЗрд╢рдХ, рдпрд╣ рд╡рд╣ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВ рдПрдпрд░рдлреНрд▓реЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдЦрд╛рдиреЗ рд╕реЗ рднреВрдЦ рд▓рдЧрддреА рд╣реИ, рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдЖрдПрдЧрд╛ :)

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ