рдПрдХ рдЖрджрд░реНрд╢ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдореВрд▓реНрдп рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред DWH рдХреЛ рдХреЛрдбрдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛: рд╕рдВрд╕реНрдХрд░рдг, рд╕рдореАрдХреНрд╖рд╛, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдФрд░ CIред рдореЙрдбреНрдпреВрд▓рд░, рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓, рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдФрд░ рд╕рдореБрджрд╛рдпред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (рдбреЗрдЯрд╛ рд╡рдВрд╢рд╛рд╡рд▓реА)ред
рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрд┐рдЧ рдбреЗрдЯрд╛ рдФрд░ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреАрдмреАрдЯреА рдХреА рднреВрдорд┐рдХрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░
рдЖрд░реНрдЯреЗрдореА рдХреЛрдЬрд╝реАрд░ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд╣реИрдВред 5 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдореИрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕, рдИрдЯреАрдПрд▓/рдИрдПрд▓рдЯреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
рд╕рд╛рд░
рдбреАрдмреАрдЯреА рдврд╛рдВрдЪрд╛ рдИрдПрд▓рдЯреА (рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯ - рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо - рд▓реЛрдб) рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
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 рдФрд░ рднрд╛рд╖рд╛ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИ
рдЙрджрд╛рд╣рд░рдг рдПрдХ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдПрд╕рдЯреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рддреНрдпреЗрдХ рднреБрдЧрддрд╛рди рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд░рд╛рд╢рд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ. рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд░реЗрдлрд░реА - рдХреЛрдб рдХреЗ рднреАрддрд░ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛:
- рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд░реЗрдлрд░реА рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рдХрд┐рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдпрд╛ рджреГрд╢реНрдп рдореЗрдВ рд▓рдХреНрд╖реНрдп рд╕реВрдЪрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- рд░реЗрдлрд░реА рдЖрдкрдХреЛ рдПрдХ рдореЙрдбрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдлрд╝ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдЕрд░реНрдерд╛рддреН
- рдпрджрд┐/рдЕрдиреНрдпрдерд╛ рдХрдерди - рд╢рд╛рдЦрд╛ рд╡рд┐рд╡рд░рдг
- рд▓реВрдк рдХреЗ рд▓рд┐рдП - рдЪрдХреНрд░
- рдЪрд░
- рдореИрдХреНрд░реЛ - рдореИрдХреНрд░реЛрдЬрд╝ рдмрдирд╛рдирд╛
рднреМрддрд┐рдХреАрдХрд░рдг: рддрд╛рд▓рд┐рдХрд╛, рджреГрд╢реНрдп, рд╡реГрджреНрдзрд┐рд╢реАрд▓
рднреМрддрд┐рдХреАрдХрд░рдг рд░рдгрдиреАрддрд┐ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдореА рд╕реЗрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдмреБрдирд┐рдпрд╛рджреА рд╢рдмреНрджреЛрдВ рдореЗрдВ рдпрд╣ рд╣реИ:
- рддрд╛рд▓рд┐рдХрд╛ - рднрдВрдбрд╛рд░рдг рдореЗрдВ рднреМрддрд┐рдХ рддрд╛рд▓рд┐рдХрд╛
- рджреЗрдЦреЗрдВ - рджреЗрдЦреЗрдВ, рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓
рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рднреМрддрд┐рдХрдХрд░рдг рд░рдгрдиреАрддрд┐рдпрд╛рдБ рднреА рд╣реИрдВ:
- рд╡реГрджреНрдзрд┐рд╢реАрд▓ - рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд▓реЛрдбрд┐рдВрдЧ (рдмрдбрд╝реА рддрдереНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА); рдирдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВ, рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЕрджреНрдпрддрди рдХреА рдЬрд╛рддреА рд╣реИрдВ, рд╣рдЯрд╛рдИ рдЧрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕рд╛рдлрд╝ рдХреА рдЬрд╛рддреА рд╣реИрдВ
- рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ - рдореЙрдбрд▓ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рд╕рд╛рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдореЗрдВ рд╕реАрдЯреАрдИ рдХреЗ рд░реВрдк рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реИ
- рдХреЛрдИ рдЕрдиреНрдп рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдЖрдк рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
рднреМрддрд┐рдХрдХрд░рдг рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЕрд╡рд╕рд░ рднреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- рд╣рд┐рдордкрд╛рдд рдХрд╛ рдПрдХ рдЦрдВрдб: рдХреНрд╖рдгрд┐рдХ рддрд╛рд▓рд┐рдХрд╛рдПрдБ, рдорд░реНрдЬ рд╡реНрдпрд╡рд╣рд╛рд░, рддрд╛рд▓рд┐рдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ, рдЕрдиреБрджрд╛рди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛, рд╕реБрд░рдХреНрд╖рд┐рдд рджреГрд╢реНрдп
- рд▓рд╛рд▓ рд╡рд┐рдЪрд▓рди: рдбрд┐рд╕реНрдЯрдХреА, рд╕реЙрд░реНрдЯрдХреА (рдЗрдВрдЯрд░рд▓реАрд╡реНрдб, рдХрдВрдкрд╛рдЙрдВрдб), рд▓реЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╡реНрдпреВ
- 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 - рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЙрджрд╛.
рд▓рд╛рд▓ рд╡рд┐рдЪрд▓рди рд▓реЙрдЧрд┐рдВрдЧ - рдбреАрдмреАрдЯреА рдСрдкрд░реЗрд╢рди рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓
рдкреИрдХреЗрдЬреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ
рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдпрд╣рд╛рдВ рдореИрдВ рдХреБрдЫ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреАрдо рдФрд░ рдореИрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ
рд░рдирдЯрд╛рдЗрдо рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдХрд╛ рдкреГрдердХреНрдХрд░рдг 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% рддрдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдХреНрд░реЛ
рдореИрдХреНрд░реЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░:
{{ 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
- рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдЖрдпреЛрдЬрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд
- рдЕрдВрддрд┐рдо рдкрд░рд┐рдпреЛрдЬрдирд╛: рдорд╛рд░реНрдЧрджрд░реНрд╢рди рд╕рдорд░реНрдерди рдХреЗ рддрд╣рдд рд╕рднреА рдХреМрд╢рд▓реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛
рдХрдбрд╝рд┐рдпрд╛рдБ:
рдбреАрдмреАрдЯреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг - рдкрд░рд┐рдЪрдп - рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреАрдмреАрдЯреА рдХреНрдпрд╛ рд╣реИ? - рдбреАрдмреАрдЯреА рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдореАрдХреНрд╖рд╛ рд▓реЗрдЦрдЕрдореЗрдЬрд╝реЕрди рд░реЗрдбрд╢рд┐рдлреНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ - рдпреВрдЯреНрдпреВрдм, рдПрдХ рдУрдЯреАрдпреВрдПрд╕ рдУрдкрди рдкрд╛рда рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧрдЧреНрд░реАрдирдкреНрд▓рдо рдХреЛ рдЬрд╛рдирдирд╛ - рдЕрдЧрд▓рд╛ рдЦреБрд▓рд╛ рдкрд╛рда 15 рдордИ, 2020 рд╣реИрдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЛрд░реНрд╕ -OTUSрдПрдХ рдкрд░рд┐рдкрдХреНрд╡ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг - рдбреЗрдЯрд╛ рдФрд░ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреЗ рднрд╡рд┐рд╖реНрдп рдкрд░ рдПрдХ рдирдЬрд╝рд░рдпрд╣ рдУрдкрди рд╕реЛрд░реНрд╕ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХрд╛ рд╕рдордп рд╣реИ - рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рдХрд╛ рдкреНрд░рднрд╛рд╡dbtCloud рдХреЗ рд╕рд╛рде рд╕рддрдд рдПрдХреАрдХрд░рдг рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмрд┐рд▓реНрдб рдкрд░реАрдХреНрд╖рдг - рдбреАрдмреАрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдЖрдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддрдбреАрдмреАрдЯреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ тАФ рдЕрднреНрдпрд╛рд╕, рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢рдЬрд╛рдлрд╝рд▓ рд╢реЙрдк - рдЬреАрдердм рдбреАрдмреАрдЯреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ - рдЬреАрдердм, рд╢реИрдХреНрд╖рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб
рд╕реНрд░реЛрдд: www.habr.com