рдмреЕрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЖрдгрд┐ рддреНрд╡рд░реАрдд рд╡рд┐рдХрд╕рд┐рдд рдЖрдгрд┐ рджреЗрдЦрд░реЗрдЦ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЕрд░рдлреНрд▓реЛ рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ

рдмреЕрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЖрдгрд┐ рддреНрд╡рд░реАрдд рд╡рд┐рдХрд╕рд┐рдд рдЖрдгрд┐ рджреЗрдЦрд░реЗрдЦ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЕрд░рдлреНрд▓реЛ рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ

рд╣реЕрд▓реЛ, рд╣реЕрдмреНрд░! рдпрд╛ рд▓реЗрдЦрд╛рдд рдорд▓рд╛ рдмреЕрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрд╛ рдЙрддреНрддрдо рд╕рд╛рдзрдирд╛рдмрджреНрджрд▓ рдмреЛрд▓рд╛рдпрдЪреЗ рдЖрд╣реЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдбреАрдбрдмреНрд▓реНрдпреВрдПрдЪ рдХрд┐рдВрд╡рд╛ рддреБрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рд▓реЗрдХрдЪреНрдпрд╛ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдордзреНрдпреЗ. рдЖрдореНрд╣реА Apache Airflow (рдпрд╛рдкреБрдвреЗ Airflow рдореНрд╣рдгреВрди рд╕рдВрджрд░реНрднрд┐рдд) рдмрджреНрджрд▓ рдмреЛрд▓реВ. рд╣реЗ Habr├й рд╡рд░ рдЕрдиреНрдпрд╛рдпрдХрд╛рд░рдХрдкрдгреЗ рд▓рдХреНрд╖ рджреЗрдгреНрдпрд╛рдкрд╛рд╕реВрди рд╡рдВрдЪрд┐рдд рдЖрд╣реЗ рдЖрдгрд┐ рдореБрдЦреНрдп рднрд╛рдЧрд╛рдд рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рдкрдЯрд╡реВрди рджреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реЗрди рдХреА рддреБрдордЪреНрдпрд╛ ETL/ELT рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рд╢реЗрдбреНрдпреБрд▓рд░ рдирд┐рд╡рдбрддрд╛рдирд╛ рдХрд┐рдорд╛рди Airflow рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ.

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

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

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

рдЖрддрд╛ рдПрдЕрд░рдлреНрд▓реЛрдЪреНрдпрд╛ рдореБрдЦреНрдп рдШрдЯрдХрд╛рдВрдХрдбреЗ рдкрд╛рд╣реВ. рддреНрдпрд╛рдВрдЪреЗ рд╕рд╛рд░ рдЖрдгрд┐ рдЙрджреНрджреЗрд╢ рд╕рдордЬреВрди рдШреЗрдКрди, рддреБрдореНрд╣реА рддреБрдордЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реВ рд╢рдХрддрд╛. рдХрджрд╛рдЪрд┐рдд рдореБрдЦреНрдп рдШрдЯрдХ рдбрд╛рдпрд░реЗрдХреНрдЯреЗрдб рдЕреЕрд╕рд╛рдпрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдл (рдпрд╛рдкреБрдвреЗ DAG рдореНрд╣рдгреВрди рд╕рдВрджрд░реНрднрд┐рдд) рдЖрд╣реЗ.

рджрд┐рд╡рд╕

рдбреАрдПрдЬреА рд╣реА рддреБрдордЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдВрдЪреА рдХрд╛рд╣реА рдЕрд░реНрдердкреВрд░реНрдг рд╕рдВрдШрдЯрдирд╛ рдЖрд╣реЗ рдЬреА рддреБрдореНрд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реЗрд│рд╛рдкрддреНрд░рдХрд╛рдиреБрд╕рд╛рд░ рдХрд╛рдЯреЗрдХреЛрд░рдкрдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░рдорд╛рдиреЗ рдкреВрд░реНрдг рдХрд░реВ рдЗрдЪреНрдЫрд┐рддрд╛. рдПрдЕрд░рдлреНрд▓реЛ DAGs рдЖрдгрд┐ рдЗрддрд░ рдШрдЯрдХрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЛрдпреАрд╕реНрдХрд░ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ:

рдмреЕрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЖрдгрд┐ рддреНрд╡рд░реАрдд рд╡рд┐рдХрд╕рд┐рдд рдЖрдгрд┐ рджреЗрдЦрд░реЗрдЦ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЕрд░рдлреНрд▓реЛ рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ

DAG рдпрд╛рд╕рд╛рд░рдЦреЗ рджрд┐рд╕реВ рд╢рдХрддреЗ:

рдмреЕрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЖрдгрд┐ рддреНрд╡рд░реАрдд рд╡рд┐рдХрд╕рд┐рдд рдЖрдгрд┐ рджреЗрдЦрд░реЗрдЦ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЕрд░рдлреНрд▓реЛ рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ

рд╡рд┐рдХрд╛рд╕рдХ, рдбреАрдПрдЬреАрдЪреА рд░рдЪрдирд╛ рдХрд░рддрд╛рдирд╛, рдСрдкрд░реЗрдЯрд░рдЪрд╛ рдПрдХ рд╕рдВрдЪ рдареЗрд╡рддреЛ рдЬреНрдпрд╛рд╡рд░ DAG рдЕрдВрддрд░реНрдЧрдд рдХрд╛рд░реНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреАрд▓. рдпреЗрдереЗ рдЖрдкрдг рдЖрдгрдЦреА рдПрдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдШрдЯрдХрд╛рдХрдбреЗ рдЖрд▓реЛ рдЖрд╣реЛрдд: рдПрдЕрд░рдлреНрд▓реЛ рдСрдкрд░реЗрдЯрд░.

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

рдСрдкрд░реЗрдЯрд░ рд╣реА рдПрдХ рд╕рдВрд╕реНрдерд╛ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪреНрдпрд╛ рдЖрдзрд╛рд░рд╛рд╡рд░ рдиреЛрдХрд░реАрдЪреА рдЙрджрд╛рд╣рд░рдгреЗ рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд, рдЬреА рдиреЛрдХрд░реАрдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрджрд░рдореНрдпрд╛рди рдХрд╛рдп рдШрдбреЗрд▓ рдпрд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ. GitHub рд╡рд░реВрди рдПрдЕрд░рдлреНрд▓реЛ рд░рд┐рд▓реАрдЬ рд╣реЛрддреЛ рдЖрдзреАрдкрд╛рд╕реВрди рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдЬреНрдЬ рдСрдкрд░реЗрдЯрд░реНрд╕рдЪрд╛ рд╕рдВрдЪ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгреЗ:

  • рдмреЕрд╢рдСрдкрд░реЗрдЯрд░ - рдмреЕрд╢ рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░.
  • PythonOperator - Python рдХреЛрдб рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░.
  • EmailOperator тАФ рдИрдореЗрд▓ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░.
  • HTTPOperator - HTTP рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░.
  • SqlOperator - SQL рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░.
  • рд╕реЗрдиреНрд╕рд░ рд╣рд╛ рдЗрд╡реНрд╣реЗрдВрдЯрдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдгрд╛рд░рд╛ рдСрдкрд░реЗрдЯрд░ рдЖрд╣реЗ (рдЖрд╡рд╢реНрдпрдХ рд╡реЗрд│реЗрдЪреЗ рдЖрдЧрдорди, рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓рдЪреЗ рд╕реНрд╡рд░реВрдк, рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдПрдХ рдУрд│, API рдХрдбреВрди рдкреНрд░рддрд┐рд╕рд╛рдж рдЗ. рдЗ.).

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

рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдСрдкрд░реЗрдЯрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪрд╛ рддреБрдордЪреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдд рд╡рд╛рдкрд░ рдХрд░реВ рд╢рдХрддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдореНрд╣реА MongoDBToHiveViaHdfsTransfer, рдореЛрдВрдЧреЛрдбреАрдмреА рд╡рд░реВрди Hive рдордзреНрдпреЗ рджрд╕реНрддрдРрд╡рдЬ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░ рдЖрдгрд┐ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ рдСрдкрд░реЗрдЯрд░ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕: CHLoadFromHiveOperator рдЖрдгрд┐ CHTableLoaderOperator. рдореВрд▓рдд:, рдПрдЦрд╛рджреНрдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдмреЗрд╕рд┐рдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯрд╡рд░ рдмрдирд╡рд▓реЗрд▓рд╛ рдХреЛрдб рд╡рд╛рд░рдВрд╡рд╛рд░ рд╡рд╛рдкрд░рд▓рд╛ рдЧреЗрд▓реНрдпрд╛рд╡рд░, рддреБрдореНрд╣реА рддреЗ рдирд╡реАрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯрдордзреНрдпреЗ рдмрдирд╡рдгреНрдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛. рд╣реЗ рдкреБрдвреАрд▓ рд╡рд┐рдХрд╛рд╕ рд╕реБрд▓рдн рдХрд░реЗрд▓ рдЖрдгрд┐ рддреБрдореНрд╣реА рдкреНрд░рдХрд▓реНрдкрд╛рддреАрд▓ рдСрдкрд░реЗрдЯрд░реНрд╕рдЪреА рддреБрдордЪреА рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рд╛рд▓.

рдкреБрдвреЗ, рдХрд╛рд░реНрдпрд╛рдВрдЪреА рд╣реА рд╕рд░реНрд╡ рдЙрджрд╛рд╣рд░рдгреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрддрд╛ рдЖрдкрдг рд╢реЗрдбреНрдпреВрд▓рд░рдмрджреНрджрд▓ рдмреЛрд▓реВ.

рд╢реЗрдбреНрдпреБрд▓рд░

рдПрдЕрд░рдлреНрд▓реЛрдЪреЗ рдЯрд╛рд╕реНрдХ рд╢реЗрдбреНрдпреБрд▓рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ рд╕рдлрд░рдЪрдВрдж. рд╕реЗрд▓реЗрд░реА рд╣реА рдПрдХ рдкрд╛рдпрдерди рд▓рд╛рдпрдмреНрд░рд░реА рдЖрд╣реЗ рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рд░рд╛рдВрдЧ рдЖрдгрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЖрдгрд┐ рд╡рд┐рддрд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рдПрдЕрд░рдлреНрд▓реЛ рдмрд╛рдЬреВрд▓рд╛, рд╕рд░реНрд╡ рдХрд╛рд░реНрдпреЗ рдкреВрд▓рдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓реА рдЬрд╛рддрд╛рдд. рдкреВрд▓ рд╕реНрд╡рд╣рд╕реНрддреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рддреНрдпрд╛рдВрдЪрд╛ рдЙрджреНрджреЗрд╢ рд╕реНрддреНрд░реЛрддрд╛рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╡рд░реНрдХрд▓реЛрдб рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рдгреЗ рдХрд┐рдВрд╡рд╛ DWH рдордзреАрд▓ рдХрд╛рд░реНрдпреЗ рдЯрд╛рдЗрдк рдХрд░рдгреЗ рд╣рд╛ рдЖрд╣реЗ. рдкреВрд▓ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕рджреНрд╡рд╛рд░реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд:

рдмреЕрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЖрдгрд┐ рддреНрд╡рд░реАрдд рд╡рд┐рдХрд╕рд┐рдд рдЖрдгрд┐ рджреЗрдЦрд░реЗрдЦ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЕрд░рдлреНрд▓реЛ рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ

рдкреНрд░рддреНрдпреЗрдХ рдкреВрд▓рдордзреНрдпреЗ рд╕реНрд▓реЙрдЯрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрд╡рд░ рдорд░реНрдпрд╛рджрд╛ рдЕрд╕рддреЗ. 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. DAG рдордзреНрдпреЗ рдкреВрд░реНрд╡реАрдЪреА рдХрд╛рдореЗ рдкреВрд░реНрдг рдЭрд╛рд▓реА рдЖрд╣реЗрдд; рдирд╡реАрди рдХрд╛рд░реНрдп рд░рд╛рдВрдЧреЗрдд рд▓рд╛рд╡рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
  2. рдХрд╛рд░реНрдпрд╛рдВрдЪреНрдпрд╛ рдкреНрд░рд╛рдзрд╛рдиреНрдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рд░рд╛рдВрдЧреЗрдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реА рдЬрд╛рддреЗ (рдкреНрд░рд╛рдзрд╛рдиреНрдпрдХреНрд░рдо рджреЗрдЦреАрд▓ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд), рдЖрдгрд┐ рдЬрд░ рдкреВрд▓рдордзреНрдпреЗ рдПрдХ рд╡рд┐рдирд╛рдореВрд▓реНрдп рд╕реНрд▓реЙрдЯ рдЕрд╕реЗрд▓, рддрд░ рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
  3. рдЬрд░ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реЗрд▓реЗрд░реА рдЕрд╕реЗрд▓ рддрд░, рдХрд╛рд░реНрдп рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рдкрд╛рдард╡рд▓реЗ рдЬрд╛рддреЗ; рдЖрдкрдг рд╕рдорд╕реНрдпреЗрдордзреНрдпреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗрд▓реЗрд▓реЗ рдХрд╛рд░реНрдп рдПрдХ рдХрд┐рдВрд╡рд╛ рджреБрд╕рд░реНрдпрд╛ рдСрдкрд░реЗрдЯрд░рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рд╕реБрд░реВ рд╣реЛрддреЗ.

рдкреБрд░реЗрд╢реА рд╕рд╛рдзреА.

рд╢реЗрдбреНрдпреБрд▓рд░ рд╕рд░реНрд╡ DAGs рдЖрдгрд┐ DAGs рдордзреАрд▓ рд╕рд░реНрд╡ рдХрд╛рд░реНрдпрд╛рдВрдЪреНрдпрд╛ рд╕реЗрдЯрд╡рд░ рдЪрд╛рд▓рддреЗ.

рд╢реЗрдбреНрдпреБрд▓рд░рдиреЗ DAG рд╕реЛрдмрдд рдХрд╛рдо рд╕реБрд░реВ рдХрд░рдгреНтАНрдпрд╛рд╕рд╛рдареА, DAG рдиреЗ рд╢реЗрдбреНрдпреВрд▓ рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНтАНрдпрдХ рдЖрд╣реЗ:

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 рд▓рд╛ рдПрдХ рдПрдХреНрдЭрд┐рдХреНрдпреВрд╢рди рдбреЗрдЯ рдбрд╛рдпрдореЗрдВрд╢рди рдЕрд╕рддреЗ, рдореНрд╣рдгрдЬреЗ, DAG рдЪреНрдпрд╛ рдХрд╛рдорд╛рдЪреНрдпрд╛ рд╢реЗрдбреНрдпреВрд▓рдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрдЭрд┐рдХреНрдпреВрд╢рди рдбреЗрдЯрд╕рд╛рдареА рдЯрд╛рд╕реНрдХ рдЗрдиреНрд╕реНрдЯрдиреНрд╕ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рддрд╛рд░рдЦреЗрд╕рд╛рдареА, рдХрд╛рд░реНрдпреЗ рдкреБрдиреНрд╣рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд - рдХрд┐рдВрд╡рд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, DAG рдЕрдиреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рддрд╛рд░рдЦрд╛рдВрдордзреНрдпреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддреЗ. рд╣реЗ рдпреЗрдереЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рджрд░реНрд╢рд╡рд┐рд▓реЗ рдЖрд╣реЗ:

рдмреЕрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЖрдгрд┐ рддреНрд╡рд░реАрдд рд╡рд┐рдХрд╕рд┐рдд рдЖрдгрд┐ рджреЗрдЦрд░реЗрдЦ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЕрд░рдлреНрд▓реЛ рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ

рджреБрд░реНрджреИрд╡рд╛рдиреЗ (рдХрд┐рдВрд╡рд╛ рдХрджрд╛рдЪрд┐рдд рд╕реБрджреИрд╡рд╛рдиреЗ: рддреЗ рдкрд░рд┐рд╕реНрдерд┐рддреАрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ), рдЬрд░ DAG рдордзреАрд▓ рдХрд╛рд░реНрдпрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рджреБрд░реБрд╕реНрдд рдХреЗрд▓реА рдЧреЗрд▓реА, рддрд░ рдорд╛рдЧреАрд▓ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рддрд╛рд░рдЦреЗрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕рдорд╛рдпреЛрдЬрдиреЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдКрди рдкреБрдвреЗ рдЬрд╛рдИрд▓. рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдирд╡реАрди рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╡рд╛рдкрд░реВрди рдорд╛рдЧреАрд▓ рдХрд╛рд▓рд╛рд╡рдзреАрддреАрд▓ рдбреЗрдЯрд╛рдЪреА рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рд╛рдпрдЪреА рдЕрд╕реЗрд▓ рддрд░ рд╣реЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рд╡рд╛рдИрдЯ рдЖрд╣реЗ рдХрд╛рд░рдг рдкрд░рд┐рдгрд╛рдорд╛рдЪреА рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреНрд╖рдорддрд╛ рдЧрдорд╛рд╡рд▓реА рдЖрд╣реЗ (рдЕрд░реНрдерд╛рддрдЪ, Git рд╡рд░реВрди рд╕реНрддреНрд░реЛрдд рдХреЛрдбрдЪреА рдЖрд╡рд╢реНрдпрдХ рдЖрд╡реГрддреНрддреА рдкрд░рдд рдХрд░рдгреНрдпрд╛рд╕ рдХреЛрдгреАрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрд░рд╛рд╕ рджреЗрдд рдирд╛рд╣реА рдЖрдгрд┐ рдХрд╛рдп рдЧрдгрдирд╛ рдХрд░рд╛. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдХ рд╡реЗрд│ рд╣рд╡рд╛ рдЖрд╣реЗ, рдЬреНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ).

рдХрд╛рд░реНрдпреЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреЗ

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

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)

рдбреАрдПрдЬреА рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

рдмреЕрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЖрдгрд┐ рддреНрд╡рд░реАрдд рд╡рд┐рдХрд╕рд┐рдд рдЖрдгрд┐ рджреЗрдЦрд░реЗрдЦ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЕрд░рдлреНрд▓реЛ рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ

рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рддреБрдореНрд╣реА рдлрдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реВрди рдЖрдгрд┐ DAG рдЕрджреНрдпрддрдирд┐рдд рдХрд░реВрди рд╢рд╛рд░реНрдб рдЬреЛрдбреВ рдХрд┐рдВрд╡рд╛ рдХрд╛рдвреВ рд╢рдХрддрд╛. рдЖрд░рд╛рдорджрд╛рдпрдХ!

рдЖрдкрдг рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреЛрдб рдЬрдирд░реЗрд╢рди рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдбреЗрдЯрд╛рдмреЗрд╕рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рд╕реНрддреНрд░реЛрддрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рд╛ рдХрд┐рдВрд╡рд╛ рдЯреЗрдмрд▓ рд╕реНрдЯреНрд░рдХреНрдЪрд░рдЪреЗ рд╡рд░реНрдгрди рдХрд░рд╛, рдЯреЗрдмрд▓рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрдгрд┐ DWH рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░рдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдКрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдпрд╛рд░ рдХрд░рд╛. рддреБрдордЪреНрдпрд╛ рд╕реНрдЯреЛрд░реЗрдЬрдордзреНрдпреЗ N рдЯреЗрдмрд▓ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдХрд┐рдВрд╡рд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдПрдкреАрдЖрдпрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЬреЗ рд╕реВрдЪреАрдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдкреЕрд░рд╛рдореАрдЯрд░рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА, рддреБрдореНрд╣реА рдпрд╛ рд╕реВрдЪреАрдордзреВрди DAG рдордзреНрдпреЗ N рдХрд╛рд░реНрдпреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░реВ рд╢рдХрддрд╛, API рдордзреАрд▓ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреА рд╕рдорд╛рдВрддрд░рддрд╛ рдкреВрд▓рдордзреНрдпреЗ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рд╕реНрдХреНрд░реЕрдк рдХрд░реВ рд╢рдХрддрд╛. API рдХрдбреВрди рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛. рд▓рд╡рдЪрд┐рдХ!

рднрд╛рдВрдбрд╛рд░

рдПрдЕрд░рдлреНрд▓реЛрдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдмреЕрдХрдПрдВрдб рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдЖрд╣реЗ, рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ (рдорд╛рдпрдПрд╕рдХреНрдпреВрдПрд▓ рдХрд┐рдВрд╡рд╛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдЕрд╕реВ рд╢рдХрддреЛ, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдЖрд╣реЗ), рдЬреЗ рдХрд╛рд░реНрдпрд╛рдВрдЪреА рд╕реНрдерд┐рддреА, рдбреАрдПрдЬреА, рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрдЬ, рдЧреНрд▓реЛрдмрд▓ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЗ. рдЗрддреНрдпрд╛рджреА рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЗ. рдпреЗрдереЗ рдорд▓рд╛ рдЕрд╕реЗ рдореНрд╣рдгрд╛рдпрдЪреЗ рдЖрд╣реЗ рдХреА рдПрдЕрд░рдлреНрд▓реЛ рдордзреАрд▓ рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдЕрдЧрджреА рд╕реЛрдкреА рдЖрд╣реЗ (рд╕реБрдорд╛рд░реЗ 20 рдЯреЗрдмрд▓реНрд╕) рдЖрдгрд┐ рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреНрдпрд╛ рдЕрд╕рддреАрд▓ рддрд░ рддреЗ рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрд╣реЗ. рдорд▓рд╛ рдЗрдиреНрдлреЙрд░реНрдореЗрдЯрд┐рдХрд╛ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреАрд▓ 100500 рдЯреЗрдмрд▓реНрд╕ рдЖрдард╡рддрд╛рдд, рдЬреНрдпрд╛рдЪрд╛ рдкреНрд░рд╢реНрди рдХрд╕рд╛ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪрд╛ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рдкреВрд░реНрд╡реА рдмрд░рд╛рдЪ рдХрд╛рд│ рдЕрднреНрдпрд╛рд╕ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрд▓рд╛.

рджреЗрдЦрд░реЗрдЦ

рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЪреА рд╕рд╛рдзреЗрдкрдгрд╛ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд╛, рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рд╕реЛрдпреАрд╕реНрдХрд░ рдХрд╛рд░реНрдп рдирд┐рд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛. рдЖрдореНрд╣реА рдЭреЗрдкреЗрд▓рд┐рдирдордзреНрдпреЗ рдиреЛрдЯрдкреЕрдб рд╡рд╛рдкрд░рддреЛ, рдЬрд┐рдереЗ рдЖрдореНрд╣реА рдХрд╛рд░реНрдпрд╛рдВрдЪреА рд╕реНрдерд┐рддреА рдкрд╛рд╣рддреЛ:

рдмреЕрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЖрдгрд┐ рддреНрд╡рд░реАрдд рд╡рд┐рдХрд╕рд┐рдд рдЖрдгрд┐ рджреЗрдЦрд░реЗрдЦ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЕрд░рдлреНрд▓реЛ рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ

рд╣реЗ рд╕реНрд╡рддрдГ Airflow рдЪреЗ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рджреЗрдЦреАрд▓ рдЕрд╕реВ рд╢рдХрддреЗ:

рдмреЕрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЖрдгрд┐ рддреНрд╡рд░реАрдд рд╡рд┐рдХрд╕рд┐рдд рдЖрдгрд┐ рджреЗрдЦрд░реЗрдЦ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЕрд░рдлреНрд▓реЛ рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ

рдПрдЕрд░рдлреНрд▓реЛ рдХреЛрдб рдУрдкрди рд╕реЛрд░реНрд╕ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдЯреЗрд▓реАрдЧреНрд░рд╛рдордордзреНрдпреЗ рдЕреЕрд▓рд░реНрдЯрд┐рдВрдЧ рдЬреЛрдбрд▓реЗ рдЖрд╣реЗ. рдХрд╛рд░реНрдпрд╛рдЪреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд╛рд▓реВ рдЙрджрд╛рд╣рд░рдг, рдПрдЦрд╛рджреА рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛рд╕, рдЯреЗрд▓реАрдЧреНрд░рд╛рдордордзреАрд▓ рдЧрдЯрд╛рд▓рд╛ рд╕реНрдкреЕрдо рдХрд░рддреЗ, рдЬрд┐рдереЗ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдХрд╛рд╕ рдЖрдгрд┐ рд╕рдорд░реНрдерди рд╕рдВрдШ рдЕрд╕рддреЛ.

рдЖрдореНрд╣рд╛рд▓рд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо (рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕) рджреНрд╡рд╛рд░реЗ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рд╕рд╛рдж рдорд┐рд│рддреЛ рдЖрдгрд┐ рдЭреЗрдкреЗрд▓рд┐рдирджреНрд╡рд╛рд░реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдЕрд░рдлреНрд▓реЛрдордзреАрд▓ рдХрд╛рд░реНрдпрд╛рдВрдЪреЗ рдПрдХрдВрджрд░ рдЪрд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ.

рдПрдХреВрдг

рдПрдЕрд░рдлреНрд▓реЛ рд╣рд╛ рдореБрдЦреНрдпрддрдГ рдореБрдХреНрдд рд╕реНрд░реЛрдд рдЖрд╣реЗ рдЖрдгрд┐ рддреБрдореНрд╣реА рддреНрдпрд╛рддреВрди рдЪрдорддреНрдХрд╛рд░рд╛рдЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реВ рдирдпреЗ. рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░реЗ рдЙрдкрд╛рдп рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрд│ рдЖрдгрд┐ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рд╕ рддрдпрд╛рд░ рд░рд╣рд╛. рдзреНрдпреЗрдп рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЖрд╣реЗ, рдорд╛рдЭреНрдпрд╛рд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рд╛, рддреЗ рдпреЛрдЧреНрдп рдЖрд╣реЗ. рд╡рд┐рдХрд╛рд╕рд╛рдЪреА рдЧрддреА, рд▓рд╡рдЪрд┐рдХрддрд╛, рдирд╡реАрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрдгреНрдпрд╛рдЪреА рд╕реБрд▓рднрддрд╛ - рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рдЖрд╡рдбреЗрд▓. рдирдХреНрдХреАрдЪ, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рд╕рдВрд╕реНрдереЗрдХрдбреЗ, рдПрдЕрд░рдлреНрд▓реЛрдЪреА рд╕реНрдерд┐рд░рддрд╛ рдпрд╛рд╡рд░ рдЦреВрдк рд▓рдХреНрд╖ рджреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ: рдЪрдорддреНрдХрд╛рд░ рдШрдбрдд рдирд╛рд╣реАрдд.

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

рднрд╡рд┐рд╖реНрдпрд╛рд╕рд╛рдареА рдпреЛрдЬрдирд╛

рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдпрдкрдгреЗ рд╡рд╛рдврдд рдЖрд╣реЗ рдЖрдгрд┐ рдПрдЕрд░рдлреНрд▓реЛ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдЖрдореНрд╣реА рдореБрдЦреНрдп рдЧреЛрд╖реНрдЯ рдХрд░рдгрд╛рд░ рдЖрд╣реЛрдд рддреЗ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдЖрд╣реЗ. рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдПрдЕрд░рдлреНрд▓реЛ рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ, рд╕реЗрд▓реЗрд░реА рдХрд╛рдордЧрд╛рд░рд╛рдВрд╕рд╛рдареА рдкрд╛рдпрд╛рдВрдЪреА рдПрдХ рдЬреЛрдбреА рд╡рд╛рдЯрдк рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ рдЖрдгрд┐ рдЬреЙрдм рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдгрд┐ рднрд╛рдВрдбрд╛рд░рд╛рд╕рд╣ рд╕реЗрд▓реНрдл-рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реЗрдб рдмрдирд╡рд╛рдпрдЪреЗ рдЖрд╣реЗ.

рдПрдкрд┐рд▓реЛрдЧ

рд╣реЗ, рдЕрд░реНрдерд╛рддрдЪ, рдореА рдПрдЕрд░рдлреНрд▓реЛрдмрджреНрджрд▓ рд╕рд╛рдВрдЧреВ рдЗрдЪреНрдЫрд┐рдд рд╕рд░реНрд╡рдХрд╛рд╣реА рдирд╛рд╣реА, рдкрд░рдВрддреБ рдореА рдореБрдЦреНрдп рдореБрджреНрджреЗ рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛. рднреВрдХ рдЦрд╛рдгреНрдпрд╛рдиреЗ рд▓рд╛рдЧрддреЗ, рдХрд░реВрди рдкрд╣рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рдбреЗрд▓ :)

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛