рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рд╕реНрдореВрдереА рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ

рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рд╕реНрдореВрдереА рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ
рдПрдХ рдЖрджрд░реНрд╢ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ?

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

рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрд┐рдЧ рдбреЗрдЯрд╛ рдФрд░ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреАрдмреАрдЯреА рдХреА рднреВрдорд┐рдХрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░

рдЖрд░реНрдЯреЗрдореА рдХреЛрдЬрд╝реАрд░ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд╣реИрдВред 5 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдореИрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕, рдИрдЯреАрдПрд▓/рдИрдПрд▓рдЯреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБ Wheely, рдореИрдВ OTUS рдореЗрдВ рдПрдХ рдкрд╛рдареНрдпрдХреНрд░рдо рдкрд░ рдкрдврд╝рд╛рддрд╛ рд╣реВрдБ рдбрд╛рдЯрд╛ рдЕрднрд┐рдпрдВрддрд╛, рдФрд░ рдЖрдЬ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдЦ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдирд╛рдорд╛рдВрдХрди.

рд╕рд╛рд░

рдбреАрдмреАрдЯреА рдврд╛рдВрдЪрд╛ рдИрдПрд▓рдЯреА (рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯ - рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо - рд▓реЛрдб) рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

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

рдбреАрдмреАрдЯреА рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░реАрди рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╣реА рд╕реНрдЯреЛрд░реЗрдЬ (рдЖрдВрддрд░рд┐рдХ рдпрд╛ рдмрд╛рд╣рд░реА рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ) рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред

рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рд╕реНрдореВрдереА рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ
DBT рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреЛрдб рд▓реЗрдирд╛, рдЙрд╕реЗ SQL рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрдорд╛рдВрдб рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИред

рдбреАрдмреАрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЗрд╡рд▓ 2 рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдФрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдореЙрдбрд▓ (.sql) - SELECT рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдПрдХ рдЗрдХрд╛рдИ
  • рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ (.yml) - рдкреИрд░рд╛рдореАрдЯрд░, рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдкрд░реАрдХреНрд╖рдг, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

рдмреБрдирд┐рдпрд╛рджреА рд╕реНрддрд░ рдкрд░, рдХрд╛рд░реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрд░рдЪрд┐рдд рд╣реИ:

  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ IDE рдореЗрдВ рдореЙрдбрд▓ рдХреЛрдб рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ
  • рд╕реАрдПрд▓рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореЙрдбрд▓ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдбреАрдмреАрдЯреА рдореЙрдбрд▓ рдХреЛрдб рдХреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ
  • рд╕рдВрдХрд▓рд┐рдд SQL рдХреЛрдб рдХреЛ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рджрд┐рдП рдЧрдП рдЕрдиреБрдХреНрд░рдо (рдЧреНрд░рд╛рдлрд╝) рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕реАрдПрд▓рдЖрдИ рд╕реЗ рд░рдирд┐рдВрдЧ рдХреИрд╕реА рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:

рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рд╕реНрдореВрдереА рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ

рд╕рдм рдХреБрдЫ рдЪрдпрди рд╣реИ

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

рдХрд┐рд╕реА рднреА рдореЙрдбрд▓ рдореЗрдВ рдПрдХ SELECT рдХреНрд╡реЗрд░реА рд▓рд┐рдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рд╡рд░реНрддрди рддрд░реНрдХ рдмрд╣реБ-рд╕реНрддрд░реАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрдИ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдореЗрдХрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдСрд░реНрдбрд░ рд╢реЛрдХреЗрд╕ рдмрдирд╛рдПрдЧрд╛ (f_orders):

{% set payment_methods = ['credit_card', 'coupon', 'bank_transfer', 'gift_card'] %}
 
with orders as (
 
   select * from {{ ref('stg_orders') }}
 
),
 
order_payments as (
 
   select * from {{ ref('order_payments') }}
 
),
 
final as (
 
   select
       orders.order_id,
       orders.customer_id,
       orders.order_date,
       orders.status,
       {% for payment_method in payment_methods -%}
       order_payments.{{payment_method}}_amount,
       {% endfor -%}
       order_payments.total_amount as amount
   from orders
       left join order_payments using (order_id)
 
)
 
select * from final

рд╣рдо рдпрд╣рд╛рдВ рдХреМрди рд╕реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ?

рдкрд╣рд▓рд╛: рдкреНрд░рдпреБрдХреНрдд рд╕реАрдЯреАрдИ (рдХреЙрдорди рдЯреЗрдмрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди) - рдХреЛрдб рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ

рджреВрд╕рд░рд╛: рдореЙрдбрд▓ рдХреЛрдб SQL рдФрд░ рднрд╛рд╖рд╛ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИ Jinja (рд╕рд╛рдБрдЪрд╛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛)ред

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

  • рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд░реЗрдлрд░реА рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рдХрд┐рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдпрд╛ рджреГрд╢реНрдп рдореЗрдВ рд▓рдХреНрд╖реНрдп рд╕реВрдЪрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
  • рд░реЗрдлрд░реА рдЖрдкрдХреЛ рдПрдХ рдореЙрдбрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдлрд╝ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

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

  • рдпрджрд┐/рдЕрдиреНрдпрдерд╛ рдХрдерди - рд╢рд╛рдЦрд╛ рд╡рд┐рд╡рд░рдг
  • рд▓реВрдк рдХреЗ рд▓рд┐рдП - рдЪрдХреНрд░
  • рдЪрд░
  • рдореИрдХреНрд░реЛ - рдореИрдХреНрд░реЛрдЬрд╝ рдмрдирд╛рдирд╛

рднреМрддрд┐рдХреАрдХрд░рдг: рддрд╛рд▓рд┐рдХрд╛, рджреГрд╢реНрдп, рд╡реГрджреНрдзрд┐рд╢реАрд▓

рднреМрддрд┐рдХреАрдХрд░рдг рд░рдгрдиреАрддрд┐ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдореА рд╕реЗрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдмреБрдирд┐рдпрд╛рджреА рд╢рдмреНрджреЛрдВ рдореЗрдВ рдпрд╣ рд╣реИ:

  • рддрд╛рд▓рд┐рдХрд╛ - рднрдВрдбрд╛рд░рдг рдореЗрдВ рднреМрддрд┐рдХ рддрд╛рд▓рд┐рдХрд╛
  • рджреЗрдЦреЗрдВ - рджреЗрдЦреЗрдВ, рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓

рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рднреМрддрд┐рдХрдХрд░рдг рд░рдгрдиреАрддрд┐рдпрд╛рдБ рднреА рд╣реИрдВ:

  • рд╡реГрджреНрдзрд┐рд╢реАрд▓ - рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд▓реЛрдбрд┐рдВрдЧ (рдмрдбрд╝реА рддрдереНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА); рдирдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВ, рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЕрджреНрдпрддрди рдХреА рдЬрд╛рддреА рд╣реИрдВ, рд╣рдЯрд╛рдИ рдЧрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕рд╛рдлрд╝ рдХреА рдЬрд╛рддреА рд╣реИрдВ 
  • рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ - рдореЙрдбрд▓ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рд╕рд╛рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдореЗрдВ рд╕реАрдЯреАрдИ рдХреЗ рд░реВрдк рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реИ
  • рдХреЛрдИ рдЕрдиреНрдп рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдЖрдк рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ

рднреМрддрд┐рдХрдХрд░рдг рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЕрд╡рд╕рд░ рднреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рд╣рд┐рдордкрд╛рдд рдХрд╛ рдПрдХ рдЦрдВрдб: рдХреНрд╖рдгрд┐рдХ рддрд╛рд▓рд┐рдХрд╛рдПрдБ, рдорд░реНрдЬ рд╡реНрдпрд╡рд╣рд╛рд░, рддрд╛рд▓рд┐рдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ, рдЕрдиреБрджрд╛рди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛, рд╕реБрд░рдХреНрд╖рд┐рдд рджреГрд╢реНрдп
  • рд▓рд╛рд▓ рд╡рд┐рдЪрд▓рди: рдбрд┐рд╕реНрдЯрдХреА, рд╕реЙрд░реНрдЯрдХреА (рдЗрдВрдЯрд░рд▓реАрд╡реНрдб, рдХрдВрдкрд╛рдЙрдВрдб), рд▓реЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╡реНрдпреВ
  • BigQuery: рдЯреЗрдмрд▓ рд╡рд┐рднрд╛рдЬрди рдФрд░ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ, рдорд░реНрдЬ рд╡реНрдпрд╡рд╣рд╛рд░, рдХреЗрдПрдордПрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди, рд▓реЗрдмрд▓ рдФрд░ рдЯреИрдЧ
  • рд╕реНрдкрд╛рд░реНрдХ: рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк (рдкреИрд░рдХреНрд╡реЗрдЯ, рд╕реАрдПрд╕рд╡реА, рдЬреЗрд╕рди, рдУрдЖрд░рд╕реА, рдбреЗрд▓реНрдЯрд╛), рдкрд╛рд░реНрдЯреАрд╢рди_рдмрд╛рдп, рдХреНрд▓рд╕реНрдЯрд░реНрдб_рдмрд╛рдп, рдмрдХреЗрдЯ, рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓_рд╕реНрдЯреНрд░реИрдЯреЗрдЬреА

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдЧреНрд░рд╣рдг рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:

  • postgres
  • рд▓рд╛рд▓ рд╡рд┐рдЪрд▓рди
  • BigQuery
  • рд╣рд┐рдордкрд╛рдд рдХрд╛ рдПрдХ рдЦрдВрдб
  • рдкреНрд░реЗрд╕реНрдЯреЛ (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ)
  • рд╕реНрдкрд╛рд░реНрдХ (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ)
  • рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ (рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдПрдбрд╛рдкреНрдЯрд░)

рдЖрдЗрдП рдЕрдкрдиреЗ рдореЙрдбрд▓ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВ:

  • рдЖрдЗрдП рдЗрд╕рдХреА рдлрд┐рд▓рд┐рдВрдЧ рдХреЛ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓ (рд╡реГрджреНрдзрд┐рд╢реАрд▓) рдмрдирд╛рдПрдВ
  • рдЖрдЗрдП Redshift рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд╛рдЬрди рдФрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ

-- ╨Ъ╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╤П ╨╝╨╛╨┤╨╡╨╗╨╕: 
-- ╨Ш╨╜╨║╤А╨╡╨╝╨╡╨╜╤В╨░╨╗╤М╨╜╨╛╨╡ ╨╜╨░╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡, ╤Г╨╜╨╕╨║╨░╨╗╤М╨╜╤Л╨╣ ╨║╨╗╤О╤З ╨┤╨╗╤П ╨╛╨▒╨╜╨╛╨▓╨╗╨╡╨╜╨╕╤П ╨╖╨░╨┐╨╕╤Б╨╡╨╣ (unique_key)
-- ╨Ъ╨╗╤О╤З ╤Б╨╡╨│╨╝╨╡╨╜╤В╨░╤Ж╨╕╨╕ (dist), ╨║╨╗╤О╤З ╤Б╨╛╤А╤В╨╕╤А╨╛╨▓╨║╨╕ (sort)
{{
  config(
       materialized='incremental',
       unique_key='order_id',
       dist="customer_id",
       sort="order_date"
   )
}}
 
{% set payment_methods = ['credit_card', 'coupon', 'bank_transfer', 'gift_card'] %}
 
with orders as (
 
   select * from {{ ref('stg_orders') }}
   where 1=1
   {% if is_incremental() -%}
       -- ╨н╤В╨╛╤В ╤Д╨╕╨╗╤М╤В╤А ╨▒╤Г╨┤╨╡╤В ╨┐╤А╨╕╨╝╨╡╨╜╨╡╨╜ ╤В╨╛╨╗╤М╨║╨╛ ╨┤╨╗╤П ╨╕╨╜╨║╤А╨╡╨╝╨╡╨╜╤В╨░╨╗╤М╨╜╨╛╨│╨╛ ╨╖╨░╨┐╤Г╤Б╨║╨░
       and order_date >= (select max(order_date) from {{ this }})
   {%- endif %} 
 
),
 
order_payments as (
 
   select * from {{ ref('order_payments') }}
 
),
 
final as (
 
   select
       orders.order_id,
       orders.customer_id,
       orders.order_date,
       orders.status,
       {% for payment_method in payment_methods -%}
       order_payments.{{payment_method}}_amount,
       {% endfor -%}
       order_payments.total_amount as amount
   from orders
       left join order_payments using (order_id)
 
)
 
select * from final

рдореЙрдбрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл

рдпрд╣ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рд╡реГрдХреНрд╖ рднреА рд╣реИред рдЗрд╕реЗ DAG (рдбрд╛рдпрд░реЗрдХреНрдЯреЗрдб рдПрд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдлрд╝) рдХреЗ рдирд╛рдо рд╕реЗ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

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

  • рдореЙрдбрд▓реЛрдВ рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдЪрд▓рд╛рдирд╛
  • рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдЧрдарди рдХрд╛ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг
  • рдПрдХ рдордирдорд╛рдирд╛ рд╕рдмрдЧреНрд░рд╛рдл рдЪрд▓рд╛рдирд╛ 

рдЧреНрд░рд╛рдл рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рд╕реНрдореВрдереА рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ
рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдПрдХ рдореЙрдбрд▓ рд╣реИ; рдЧреНрд░рд╛рдлрд╝ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд░реЗрдлрд░реА рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

рд╕реНрд╡рдпрдВ рдореЙрдбрд▓ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреАрдмреАрдЯреА рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

  • рдЕрд╢рдХреНрдд рдирд╣реАрдВ
  • рдЕрджреНрд╡рд┐рддреАрдп
  • рд╕рдВрджрд░реНрдн рдЕрдЦрдВрдбрддрд╛ - рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдЕрдЦрдВрдбрддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрд░реНрдбрд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ customer_id рдЧреНрд░рд╛рд╣рдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЖрдИрдбреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ)
  • рд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдорд┐рд▓рд╛рди

рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг (рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдкрд░реАрдХреНрд╖рдг) рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреИрд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рджрд┐рди, рдПрдХ рд╕рдкреНрддрд╛рд╣, рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╛рдЬрд╕реНрд╡ рдХрд╛% рд╡рд┐рдЪрд▓рдиред SQL рдХреНрд╡реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдХреЛрдИ рднреА рдзрд╛рд░рдгрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдмрди рд╕рдХрддреА рд╣реИред

рдЗрд╕ рддрд░рд╣, рдЖрдк рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдбреЗрдЯрд╛ рдореЗрдВ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдЪрд▓рди рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдбреАрдмреАрдЯреА рдореЙрдбрд▓ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реНрддрд░реЛрдВ рдкрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред 

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реНрддрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреЛрдбрд╝рдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИ:

 - name: fct_orders
   description: This table has basic information about orders, as well as some derived facts based on payments
   columns:
     - name: order_id
       tests:
         - unique # ╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╜╨░ ╤Г╨╜╨╕╨║╨░╨╗╤М╨╜╨╛╤Б╤В╤М ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╣
         - not_null # ╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╜╨░ ╨╜╨░╨╗╨╕╤З╨╕╨╡ null
       description: This is a unique identifier for an order
     - name: customer_id
       description: Foreign key to the customers table
       tests:
         - not_null
         - relationships: # ╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╤Б╤Б╤Л╨╗╨╛╤З╨╜╨╛╨╣ ╤Ж╨╡╨╗╨╛╤Б╤В╨╜╨╛╤Б╤В╨╕
             to: ref('dim_customers')
             field: customer_id
     - name: order_date
       description: Date (UTC) that the order was placed
     - name: status
       description: '{{ doc("orders_status") }}'
       tests:
         - accepted_values: # ╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╜╨░ ╨┤╨╛╨┐╤Г╤Б╤В╨╕╨╝╤Л╨╡ ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П
             values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']

рдФрд░ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИ:

рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рд╕реНрдореВрдереА рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ

рдореИрдХреНрд░реЛрдЬрд╝ рдФрд░ рдореЙрдбреНрдпреВрд▓

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

рдореИрдХреНрд░реЛрдЬрд╝ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореЙрдбрд▓ рдХреЗ рднреАрддрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдХреНрд░реЛрдЬрд╝ рдЖрдкрдХреЛ DRY (рдбреЛрдВрдЯ рд░рд┐рдкреАрдЯ рдпреЛрд░рд╕реЗрд▓реНрдл) рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЙрдбрд▓ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмреАрдЪ SQL рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдореИрдХреНрд░реЛ рдЙрджрд╛рд╣рд░рдг:

{% macro rename_category(column_name) %}
case
 when {{ column_name }} ilike  '%osx%' then 'osx'
 when {{ column_name }} ilike  '%android%' then 'android'
 when {{ column_name }} ilike  '%ios%' then 'ios'
 else 'other'
end as renamed_product
{% endmacro %}

рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ:

{% set column_name = 'product' %}
select
 product,
 {{ rename_category(column_name) }} -- ╨▓╤Л╨╖╨╛╨▓ ╨╝╨░╨║╤А╨╛╤Б╨░
from my_table

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

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЬреИрд╕реЗ:

  • рдбреАрдмреАрдЯреА_рдпреВрдЯрд┐рд▓реНрд╕: рджрд┐рдирд╛рдВрдХ/рд╕рдордп, рд╕рд░реЛрдЧреЗрдЯ рдХреБрдВрдЬреА, рд╕реНрдХреАрдорд╛ рдкрд░реАрдХреНрд╖рдг, рдкрд┐рд╡реЛрдЯ/рдЕрдирдкрд┐рд╡реЛрдЯ рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛
  • рдЬреИрд╕реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╢реЛрдХреЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрд░реНрдл рд╣рд▓ ╨╕ Stripe 
  • рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЙрджрд╛. рд▓рд╛рд▓ рд╡рд┐рдЪрд▓рди 
  • рд▓реЙрдЧрд┐рдВрдЧ - рдбреАрдмреАрдЯреА рдСрдкрд░реЗрд╢рди рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓

рдкреИрдХреЗрдЬреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ рдбреАрдмреАрдЯреА рд╣рдм.

рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ

рдпрд╣рд╛рдВ рдореИрдВ рдХреБрдЫ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреАрдо рдФрд░ рдореИрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ Wheely.

рд░рдирдЯрд╛рдЗрдо рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдХрд╛ рдкреГрдердХреНрдХрд░рдг DEV - рдкрд░реАрдХреНрд╖рдг - PROD

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╣реА DWH рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рднреА (рд╡рд┐рднрд┐рдиреНрди рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рднреАрддрд░)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

with source as (
 
   select * from {{ source('salesforce', 'users') }}
   where 1=1
   {%- if target.name in ['dev', 'test', 'ci'] -%}           
       where timestamp >= dateadd(day, -3, current_date)   
   {%- endif -%}
 
)

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

рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓рдо рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рднреМрддрд┐рдХреАрдХрд░рдг

рд░реЗрдбрд╢рд┐рдлреНрдЯ рдПрдХ рд╕реНрддрдВрдн DBMS рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрдкреАрдбрд╝рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╖реНрдЯрддрдо рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рд╕реЗ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдХреЛ 20-50% рддрдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдХреНрд░реЛ redshift.compress_table рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕рдВрдкреАрдбрд╝рди рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛, рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХреЙрд▓рдо рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдХреБрдВрдЬреА (рдбрд┐рд╕реНрдЯ_рдХреА) рдФрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА (рд╕реЙрд░реНрдЯ_рдХреА) рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдЧрд╛, рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкреБрд░рд╛рдиреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╣рдЯрд╛ рджреЗрдВред

рдореИрдХреНрд░реЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░:

{{ compress_table(schema, table,
                 drop_backup=False,
                 comprows=none|Integer,
                 sort_style=none|compound|interleaved,
                 sort_keys=none|List<String>,
                 dist_style=none|all|even,
                 dist_key=none|String) }}

рд▓реЙрдЧрд┐рдВрдЧ рдореЙрдбрд▓ рдЪрд▓рддрд╛ рд╣реИ

рдЖрдк рдореЙрдбрд▓ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рд╣реБрдХ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд▓реЙрдиреНрдЪ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

   pre-hook: "{{ logging.log_model_start_event() }}"
   post-hook: "{{ logging.log_model_end_event() }}"

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

рд▓реБрдХрд░ рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреИрд╢рдмреЛрд░реНрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рд╕реНрдореВрдереА рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ

рднрдВрдбрд╛рд░рдг рд░рдЦрд░рдЦрд╛рд╡ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рди

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

рд╣рдо рд╣реИрд╢, рдИрдореЗрд▓ рдбреЛрдореЗрди рдФрд░ рдмрд┐рдЯрдорд╛рд╕реНрдХ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдореЗрдВ рдпреВрдбреАрдПрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдХреНрд░реЛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдХрд┐рд╕реА рднреА рдирд┐рд╖реНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг (рдбреЗрд╡, рдЯреЗрд╕реНрдЯ, рдкреНрд░реЛрдб) рдкрд░ рдпреВрдбреАрдПрдл рдмрдирд╛рддрд╛ рд╣реИ:

{% macro create_udf() -%}
 
 {% set sql %}
       CREATE OR REPLACE FUNCTION {{ target.schema }}.f_sha256(mes "varchar")
           RETURNS varchar
           LANGUAGE plpythonu
           STABLE
       AS $$  
           import hashlib
           return hashlib.sha256(mes).hexdigest()
       $$
       ;
 {% endset %}
  
 {% set table = run_query(sql) %}
 
{%- endmacro %}

рд╡реНрд╣реАрд▓реА рдореЗрдВ рд╣рдо Amazon Redshift рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ PostgreSQL рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд░реЗрдбрд╢рд┐рдлреНрдЯ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдФрд░ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдЦрд╛рд▓реА рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдХреНрд░рдорд╢рдГ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╡реИрдХреНрдпреВрдо рдХрдорд╛рдВрдбред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, redshift_maintenance рдореИрдХреНрд░реЛ рд╕реЗ рдЖрджреЗрд╢ рд╣рд░ рд░рд╛рдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:

{% macro redshift_maintenance() %}
 
   {% set vacuumable_tables=run_query(vacuumable_tables_sql) %}
 
   {% for row in vacuumable_tables %}
       {% set message_prefix=loop.index ~ " of " ~ loop.length %}
 
       {%- set relation_to_vacuum = adapter.get_relation(
                                               database=row['table_database'],
                                               schema=row['table_schema'],
                                               identifier=row['table_name']
                                   ) -%}
       {% do run_query("commit") %}
 
       {% if relation_to_vacuum %}
           {% set start=modules.datetime.datetime.now() %}
           {{ dbt_utils.log_info(message_prefix ~ " Vacuuming " ~ relation_to_vacuum) }}
           {% do run_query("VACUUM " ~ relation_to_vacuum ~ " BOOST") %}
           {{ dbt_utils.log_info(message_prefix ~ " Analyzing " ~ relation_to_vacuum) }}
           {% do run_query("ANALYZE " ~ relation_to_vacuum) %}
           {% set end=modules.datetime.datetime.now() %}
           {% set total_seconds = (end - start).total_seconds() | round(2)  %}
           {{ dbt_utils.log_info(message_prefix ~ " Finished " ~ relation_to_vacuum ~ " in " ~ total_seconds ~ "s") }}
       {% else %}
           {{ dbt_utils.log_info(message_prefix ~ ' Skipping relation "' ~ row.values() | join ('"."') ~ '" as it does not exist') }}
       {% endif %}
 
   {% endfor %}
 
{% endmacro %}

рдбреАрдмреАрдЯреА рдХреНрд▓рд╛рдЙрдб

рдбреАрдмреАрдЯреА рдХреЛ рдПрдХ рд╕реЗрд╡рд╛ (рдкреНрд░рдмрдВрдзрд┐рдд рд╕реЗрд╡рд╛) рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╕рдореНрдорд┐рд▓рд┐рдд:

  • рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдЖрдИрдбреАрдИ
  • рдХрд╛рд░реНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ
  • рд▓реЙрдЧ рддрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╣реБрдВрдЪ
  • рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╡рд╛рд▓реА рд╡реЗрдмрд╕рд╛рдЗрдЯ
  • рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рд╕реАрдЖрдИ (рд╕рддрдд рдПрдХреАрдХрд░рдг)

рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рд╕реНрдореВрдереА рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ

рдирд┐рд╖реНрдХрд░реНрд╖

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

рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рд╕реНрдореВрдереА рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ

рдбреАрдмреАрдЯреА рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдирд╛рдИ рдЧрдИ рдорд╛рдиреНрдпрддрд╛рдПрдБ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рд╣реИрдВ:

  • рдХреЛрдб, рдЬреАрдпреВрдЖрдИ рдирд╣реАрдВ, рдЬрдЯрд┐рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рддрд░реНрдХ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдореВрд░реНрдд рд╣реИ
  • рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ (рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ) рдореЗрдВ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдЕрдкрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

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

рдЗрди рдореВрд▓ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдиреЗ рдПрдХ рдРрд╕реЗ рдЙрддреНрдкрд╛рдж рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдЬ 850 рд╕реЗ рдЕрдзрд┐рдХ рдХрдВрдкрдирд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрдирд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд░реЛрдорд╛рдВрдЪрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЖрдзрд╛рд░ рдмрдирддреЗ рд╣реИрдВред

рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦреБрд▓реЗ рдкрд╛рда рдХрд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ OTUS рдореЗрдВ рдПрдХ рдЦреБрд▓реЗ рдкрд╛рда рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдерд╛ - рдЕрдореЗрдЬрд╝реЕрди рд░реЗрдбрд╢рд┐рдлреНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓.

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

  • рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ
  • рд╕реНрдкрд╛рд░реНрдХ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ
  • рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛
  • DWH рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд╢реЛрдХреЗрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
  • NoSQL рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ: HBase, Cassandra, ElasticSearch
  • рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдЖрдпреЛрдЬрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд 
  • рдЕрдВрддрд┐рдо рдкрд░рд┐рдпреЛрдЬрдирд╛: рдорд╛рд░реНрдЧрджрд░реНрд╢рди рд╕рдорд░реНрдерди рдХреЗ рддрд╣рдд рд╕рднреА рдХреМрд╢рд▓реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛

рдХрдбрд╝рд┐рдпрд╛рдБ:

  1. рдбреАрдмреАрдЯреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг - рдкрд░рд┐рдЪрдп - рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ
  2. рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреАрдмреАрдЯреА рдХреНрдпрд╛ рд╣реИ? - рдбреАрдмреАрдЯреА рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдореАрдХреНрд╖рд╛ рд▓реЗрдЦ 
  3. рдЕрдореЗрдЬрд╝реЕрди рд░реЗрдбрд╢рд┐рдлреНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ - рдпреВрдЯреНрдпреВрдм, рдПрдХ рдУрдЯреАрдпреВрдПрд╕ рдУрдкрди рдкрд╛рда рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ
  4. рдЧреНрд░реАрдирдкреНрд▓рдо рдХреЛ рдЬрд╛рдирдирд╛ - рдЕрдЧрд▓рд╛ рдЦреБрд▓рд╛ рдкрд╛рда 15 рдордИ, 2020 рд╣реИ
  5. рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЛрд░реНрд╕ -OTUS
  6. рдПрдХ рдкрд░рд┐рдкрдХреНрд╡ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг - рдбреЗрдЯрд╛ рдФрд░ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреЗ рднрд╡рд┐рд╖реНрдп рдкрд░ рдПрдХ рдирдЬрд╝рд░
  7. рдпрд╣ рдУрдкрди рд╕реЛрд░реНрд╕ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХрд╛ рд╕рдордп рд╣реИ - рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рдХрд╛ рдкреНрд░рднрд╛рд╡
  8. dbtCloud рдХреЗ рд╕рд╛рде рд╕рддрдд рдПрдХреАрдХрд░рдг рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмрд┐рд▓реНрдб рдкрд░реАрдХреНрд╖рдг - рдбреАрдмреАрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдЖрдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд
  9. рдбреАрдмреАрдЯреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ тАФ рдЕрднреНрдпрд╛рд╕, рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢
  10. рдЬрд╛рдлрд╝рд▓ рд╢реЙрдк - рдЬреАрдердм рдбреАрдмреАрдЯреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ - рдЬреАрдердм, рд╢реИрдХреНрд╖рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб

рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдиреЗрдВ.

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

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