рдПрдХ рдЖрджрд░реНрд╢ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреНрдпрд╛ рд╣реИрдВ?рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдореВрд▓реНрдп рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдХреА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред DWH рдХреЛ рдПрдХ рдХреЛрдбрдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛: рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдирд╛, рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдФрд░ CIред рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛, рд╡рд┐рд╕реНрддрд╛рд░рд╢реАрд▓рддрд╛, рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдФрд░ рд╕рдореБрджрд╛рдпред рджреЛрд╕реНрддрд╛рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рджреГрд╢реНрдп (рдбреЗрдЯрд╛ рд╡рдВрд╢)редрдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрд┐рдЧ рдбреЗрдЯрд╛ рдПрдВрдб рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреАрдмреАрдЯреА рдХреА рднреВрдорд┐рдХрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИредрд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░
Artemy Kozyr рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВред 5 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдореИрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕, рдИрдЯреАрдПрд▓ / рдИрдПрд▓рдЯреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Wheely рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ , рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЛрд░реНрд╕ рдкрд░ OTUS рдореЗрдВ рдкрдврд╝рд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдЖрдЬ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдЦ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВрдиреЗ рдирдП рдкрд╛рдареНрдпрдХреНрд░рдо рд╕реЗрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдкреВрд░реНрд╡ рд╕рдВрдзреНрдпрд╛ рдкрд░ рд▓рд┐рдЦрд╛ рдерд╛ редрд▓рдШреБ рд╕рдореАрдХреНрд╖рд╛
DBT рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рднреА рдЕрдХреНрд╖рд░ T рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдХрд┐ рд╕рдВрдХреНрд╖рд┐рдкреНрдд ELT (рдПрдХреНрд╕реНрдЯреНрд░реЗрдХреНрдЯ - рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо - рд▓реЛрдб) рдореЗрдВ рд╣реИредBigQuery, Redshift, Snowflake рдЬреИрд╕реЗ рдЙрддреНрдкрд╛рджрдХ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рднреА рдЕрд░реНрде рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛ред DBT рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдЕрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреЛрд░реЗрдЬ (рдЖрдВрддрд░рд┐рдХ рдпрд╛ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ) рд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдмрд░рджрд╕реНрдд рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИредDBT рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреЛрдб рд▓реЗрдирд╛, SQL рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИредDBT рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ 2 рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:- рдореЙрдбрд▓ (.sql) - рдПрдХ рдЪрдпрди рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЗрдХрд╛рдИ
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ (.yml) - рдкреИрд░рд╛рдореАрдЯрд░, рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдкрд░реАрдХреНрд╖рдг, рдкреНрд░рд▓реЗрдЦрди
рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрддрд░ рдкрд░, рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрд░рдЪрд┐рдд рд╣реИ:- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрдИрдбреАрдИ рдореЗрдВ рдореЙрдбрд▓ рдХреЛрдб рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ
- рд╕реАрдПрд▓рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореЙрдбрд▓ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, DBT SQL рдореЗрдВ рдореЙрдбрд▓ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ
- рд╕рдВрдХрд▓рд┐рдд SQL рдХреЛрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдиреБрдХреНрд░рдо (рдЧреНрд░рд╛рдлрд╝) рдореЗрдВ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ рдХрд┐ CLI рд╕реЗ рд▓реЙрдиреНрдЪ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:рд╕рдм рдХреБрдЫ рд╕рд┐рд▓реЗрдХреНрдЯ рд╣реИ
рдпрд╣ рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдПрдХ рдХрд┐рд▓рд░ рдлреАрдЪрд░ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, DBT рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдореЗрдВ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рднреМрддрд┐рдХрдХрд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдХреЛрдбреЛрдВ (рд╕рд╛рд░, рдЗрдиреНрд╕рд░реНрдЯ, рдЕрджреНрдпрддрди, DELETE ALTER, GRANT, ... рдХрдорд╛рдВрдбреНрд╕ рд╕реЗ рднрд┐рдиреНрдирддрд╛) рдХреЛ рд╕рд╛рд░ рдХрд░рддрд╛ рд╣реИредрдХрд┐рд╕реА рднреА рдореЙрдбрд▓ рдореЗрдВ рдПрдХ 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
рд╣рдо рдпрд╣рд╛рдВ рдХреМрди рд╕реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ?рдкрд╣рд▓рд╛: CTE (рдХреЙрдорди рдЯреЗрдмрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛: рдореЙрдбрд▓ рдХреЛрдб SQL рдФрд░ рдЬрд┐рдВрдЬрд╛ рднрд╛рд╖рд╛ (рдЕрд╕реНрдерд╛рдпреА рднрд╛рд╖рд╛) рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИредрдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд▓реВрдк рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рддреНрдпреЗрдХ рднреБрдЧрддрд╛рди рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд░рд╛рд╢рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред Ref рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛:- рд╕рдВрдХрд▓рди рдХреЗ рд╕рдордп, рд░реЗрдлрд░реА рдХреЛ рд▓рдХреНрд╖реНрдп рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рд░реЗрдлрд░реА рдЖрдкрдХреЛ рдореЙрдбрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдпрд╣ рдЬрд┐рдВрдЬрд╛ рд╣реИ рдЬреЛ рдбреАрдмреАрдЯреА рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдЕрд╕реАрдорд┐рдд рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ:- рдпрджрд┐ / рдЕрдиреНрдп рдХрдерди
- рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП - рдЫреЛрд░реЛрдВ
- рдЪрд░ - рдЪрд░
- рдореИрдХреНрд░реЛ - рдореИрдХреНрд░реЛрдЬрд╝ рдмрдирд╛рдПрдБ
рд╕рд╛рдордЧреНрд░реАрдХрд░рдг: рддрд╛рд▓рд┐рдХрд╛, рджреГрд╢реНрдп, рд╡реГрджреНрдзрд┐рд╢реАрд▓
рд╕рд╛рдордЧреНрд░реАрдХрд░рдг рд░рдгрдиреАрддрд┐ - рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реЗрдЯ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдПрдХ рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ, рдпрд╣ рд╣реИ:- рддрд╛рд▓рд┐рдХрд╛ - рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рднреМрддрд┐рдХ рддрд╛рд▓рд┐рдХрд╛
- рд╡реНрдпреВ - рд╡реНрдпреВ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓
рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рд╛рдордЧреНрд░реАрдХрд░рдг рд░рдгрдиреАрддрд┐рдпрд╛рдБ рд╣реИрдВ:- рд╡реГрджреНрдзрд┐рд╢реАрд▓ - рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд▓реЛрдбрд┐рдВрдЧ (рдмрдбрд╝реЗ рддрдереНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ); рдирдИ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВ, рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдЧрдП рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рдЯрд╛рдП рдЧрдП рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдкрдВрдЪрд╛рдВрдЧ - рдореЙрдбрд▓ рд╕реАрдзреЗ рднреМрддрд┐рдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдореЗрдВ рд╕реАрдЯреАрдИ рдХреЗ рд░реВрдк рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реИ
- рдХреЛрдИ рдЕрдиреНрдп рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдЬреЛ рдЖрдк рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
рднреМрддрд┐рдХрдХрд░рдг рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреЛрджрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЕрд╡рд╕рд░ рдЦреЛрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:- рд╕реНрдиреЛрдлреНрд▓реЗрдХ : рдХреНрд╖рдгрд┐рдХ рдЯреЗрдмрд▓, рдорд░реНрдЬ рд╡реНрдпрд╡рд╣рд╛рд░, рдЯреЗрдмрд▓ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛, рд╕реБрд░рдХреНрд╖рд┐рдд рджреГрд╢реНрдп
- рд░реЗрдбрд╢рд┐рдлреНрдЯ : рдбрд┐рд╕реНрдЯреЗрдХ, рд╕реЙрдВрдЯрдХреА (рдЗрдВрдЯрд░рд▓реЗрд╡реНрдб, рдХрдВрдкрд╛рдЙрдВрдб), рд▓реЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╡реНрдпреВ
- BigQuery : рдЯреЗрдмрд▓ рд╡рд┐рднрд╛рдЬрди рдФрд░ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ, рдорд░реНрдЬ рд╡реНрдпрд╡рд╣рд╛рд░, рдХреЗрдПрдордПрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди, рд▓реЗрдмрд▓ рдФрд░ рдЯреИрдЧ
- рд╕реНрдкрд╛рд░реНрдХ : рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк (рд▓рдХрдбрд╝реА рдХреА рдЫрдд, csv, json, orc, рдбреЗрд▓реНрдЯрд╛), partition_by, clustered_by, buckets, incremental_strategy
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрдВрдбрд╛рд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:- postgres
- рд▓рд╛рд▓ рд╢рд┐рдлреНрдЯ
- BigQuery
- рд╣рд┐рдордкрд╛рдд рдХрд╛ рдПрдХ рдЦрдВрдб
- рдкреНрд░реЗрд╕реНрдЯреЛ (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ)
- рд╕реНрдкрд╛рд░реНрдХ (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ)
- Microsoft SQL рд╕рд░реНрд╡рд░ (рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдПрдбрд╛рдкреНрдЯрд░)
рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВ:- рдЗрд╕рдХреА рднрд░рдг рд╡реГрджреНрдзрд┐ (рд╡реГрджреНрдзрд┐рд╢реАрд▓) рдХрд░реЗрдВ
- Redshift рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд╛рдЬрди рдФрд░ рд╕реЙрд░реНрдЯ рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ
{{
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
рдореЙрдбрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл
рд╡рд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╡реГрдХреНрд╖ рд╣реИред рд╡рд╣ рдПрдХ рдбреАрдПрдЬреА (рдбрд╛рдпрд░реЗрдХреНрдЯреЗрдб рдПрд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдл - рджрд┐рд╢рд╛рддреНрдордХ рдПрд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдл) рд╣реИредDBT рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╛ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдХреЗ рд▓рд┐рдП ref () рд▓рд┐рдВрдХ рдореЙрдбрд▓ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИред рдЧреНрд░рд╛рдл рд░рдЦрдиреЗ рд╕реЗ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:- рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдореЙрдбрд▓
- рд╡рд┐рдВрдбреЛ рдбреНрд░реЗрд╕рд┐рдВрдЧ рдХрд╛ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг
- рдордирдорд╛рдирд╛ рд╕рдмрдЧреНрд░рд╛рдл рдЪрд▓рд╛рдирд╛
рдЧреНрд░рд╛рдлрд╝ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЙрджрд╛рд╣рд░рдг:рдЧреНрд░рд╛рдл рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдПрдХ рдореЙрдбрд▓ рд╣реИ, рдЧреНрд░рд╛рдлрд╝ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд░реЗрдл рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдбреЗрдЯрд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рдкреНрд░рд▓реЗрдЦрди
рд╕реНрд╡рдпрдВ рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛, DBT рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рджрд╛рд╡реЗ рдкрд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:- рд╢реВрдиреНрдп рдирд╣реАрдВ
- рдЕрджреНрд╡рд┐рддреАрдп
- рд╕рдВрджрд░реНрдн рдЕрдЦрдВрдбрддрд╛ - рд╕рдВрджрд░реНрдн рдЕрдЦрдВрдбрддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрд░реНрдбрд░ рдЯреЗрдмрд▓ рдореЗрдВ customer_id рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЖрдИрдбреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ)
- рдорд┐рд▓рд╛рди рд╕реВрдЪреА
рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг (рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдкрд░реАрдХреНрд╖рдг) рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рджрд┐рди, рдПрдХ рд╕рдкреНрддрд╛рд╣, рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╛рдЬрд╕реНрд╡ рдХрд╛% рд╡рд┐рдЪрд▓рдиред SQL рдХреНрд╡реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдХреЛрдИ рднреА рдзрд╛рд░рдгрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рд╣реЛ рд╕рдХрддреА рд╣реИредрдЗрд╕ рддрд░рд╣, рдбреЗрдЯрд╛ рдХреЗ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдЪрд▓рди рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдореЗрдВ рдкрдХрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, DBT рдореЙрдбрд▓ рд╕реНрддрд░ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рд╕реНрддрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: - 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
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
рдбреАрдмреАрдЯреА рдПрдХ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЙрдбреНрдпреВрд▓ рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредрдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреИрд╕реЗ:- dbt_utils : рджрд┐рдирд╛рдВрдХ / рд╕рдордп, рд╕рд░реЛрдЧреЗрдЯ рдХреБрдВрдЬреА, рд╕реНрдХреАрдорд╛ рдкрд░реАрдХреНрд╖рдг, рдкрд┐рд╡рдЯ / рдЕрдирдкреНрд░реАрд╕реНрдЯ рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛
- рд╕реНрдиреЛрдкреНрд▓реЛ рдФрд░ рд╕реНрдЯреНрд░рд╛рдЗрдк рдЬреИрд╕реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рд╢реЛрдХреЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ
- рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬреИрд╕реЗ Redshift
- рд▓реЙрдЧрд┐рдВрдЧ - DBT рд▓реЙрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓
рд╕рдВрдХреБрд▓ рдХреА рдкреВрд░реА рд╕реВрдЪреА dbt рд╣рдм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ редрдФрд░ рднреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдпрд╣рд╛рдВ рдореИрдВ рдХрдИ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдХрд┐ рдореИрдВ рдФрд░ рдЯреАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реНрд╣реАрд▓реА рдореЗрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ редрд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдкреГрдердХреНрдХрд░рдг 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 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓реЗрдВ рдФрд░ рдЕрдм рдФрд░ рдирд╣реАрдВред рдпрд╣реА рд╣реИ, рдЗрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рджреМрдбрд╝рдирд╛ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЬрдм рдПрдХ рдардВрдвреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд┐рд▓реНрдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрддрдВрдн рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рднреМрддрд┐рдХрдХрд░рдг
Redshift рдПрдХ рдХреЙрд▓рдо DBMS рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрдкреАрдбрд╝рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╖реНрдЯрддрдо рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЪреБрдирд╛рд╡ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реЗ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдХреЛ 20-50% рддрдХ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред Redshift.compress_tableрдореИрдХреНрд░реЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг COMPRESSION рдЖрджреЗрд╢ рдкрд░ рдЕрдорд▓, рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╕реНрддрдВрдн рдХреЛрдбрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╡рд┐рднрд╛рдЬрди рдЪрд╛рдмрд┐рдпрд╛рдБ рдиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ (dist_key) рдФрд░ рдкреНрд░рдХрд╛рд░ (key_key) рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЯреЗрдмрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрд╖ рдХреЙрдкреА рд╣рдЯрд╛ рджреАред рдореИрдХреНрд░реЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░:{{ 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() }}"
рд▓реЙрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрдк рдмрд╛рдж рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ (рдмрд╛рдзрд╛рдУрдВ) рдХрд╛ рдСрдбрд┐рдЯ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдпрд╣рд╛рдВ рд▓реБрдХрдЕрдк рдбреЗрдЯрд╛ рдореЗрдВ рд▓реБрдХрдЕрдк рдбреЗрдЯрд╛ рдкрд░ рдбреИрд╢рдмреЛрд░реНрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:рднрдВрдбрд╛рд░рдг рд╕реНрд╡рдЪрд╛рд▓рди
рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реНрдЯреЛрд░реЗрдЬ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд┐рд╕реА рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдпреВрдбреАрдПрдл (рдпреВрдЬрд░ рдбрд┐рдлрд╛рдЗрдВрдб рдлрдВрдХреНрд╢рдВрд╕), рддреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕реНрдХрд░рдгрдмрджреНрдз рдХрд░рдирд╛, рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдФрд░ рдирдП рд░рд┐рд▓реАрдЬ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд░рдирд╛ рдбреАрдмреАрдЯреА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИредрд╣рдо рд╣реИрд╢ рдорд╛рди, рдореЗрд▓ рдбреЛрдореЗрди рдбреЛрдореЗрди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдмрд┐рдЯрдХреЙрдиреНрд╕ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░ рдореЗрдВ UDF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВредрдЙрджрд╛рд╣рд░рдг рдореИрдХреНрд░реЛ рдЬреЛ рдХрд┐рд╕реА рднреА рд░рдирдЯрд╛рдЗрдо рдкрд░ рдпреВрдбреАрдПрдл рдмрдирд╛рддрд╛ рд╣реИ (рджреЗрд╡, рдкрд░реАрдХреНрд╖рдг, рдареЗрд╕):{% 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 %}
Wheely рдореЗрдВ, рд╣рдо Amazon Redshift рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ PostgreSQL рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред Redshift рдХреЗ рд▓рд┐рдП, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдкрд░ рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдХреНрд░рдорд╢рдГ ANALYZE рдФрд░ VACUUM рдХрдорд╛рдВрдбредрдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, redshift_mainurance рдореИрдХреНрд░реЛ рд╕реЗ рдХрдорд╛рдВрдб рд╣рд░ рд░рд╛рдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ:{% 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 %}
рдбреАрдмреАрдЯреА рдХреНрд▓рд╛рдЙрдб
DBT рдХреЛ рдПрдХ рд╕реЗрд╡рд╛ (рдкреНрд░рдмрдВрдзрд┐рдд рд╕реЗрд╡рд╛) рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдПрдХ рд╕реЗрдЯ рдореЗрдВ:- рд╡реЗрдм рдЖрдИрдбреАрдИ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП
- рдиреМрдХрд░реА рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдЕрдиреБрд╕реВрдЪреА рд╕реЗрдЯрд┐рдВрдЧ
- рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╣реБрдБрдЪ
- рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╕рд╛рдЗрдЯ
- CI (рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг) рдХрдиреЗрдХреНрд╢рди
рдирд┐рд╖реНрдХрд░реНрд╖
рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ рдФрд░ рдЦрдкрдд DWH рдЪрд┐рдХрдирд╛рдИ рдкреАрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдЦрдж рдФрд░ рдлрд╛рдпрджреЗрдордВрдж рд╣реИред DBT рдореЗрдВ рдЬрд┐рдВрдЬрд╛, рдХрд╕реНрдЯрдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдореЙрдбреНрдпреВрд▓), рдХрдВрдкрд╛рдЗрд▓рд░, рдЗрдВрдЬрди (рдирд┐рд╖реНрдкрд╛рджрдХ) рдФрд░ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрди рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдПрдХрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд╛ рдкреВрд░рд╛ рдорд╛рд╣реМрд▓ рдорд┐рд▓рддрд╛ рд╣реИред рдЖрдЬ DWH рдХреЗ рднреАрддрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИред
рдбреАрдмреАрдЯреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреАрдЫрд╛ рдХреА рдЧрдИ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:- рдХреЛрдб, рдЬреАрдпреВрдЖрдИ рдирд╣реАрдВ, рдЬрдЯрд┐рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рддрд░реНрдХ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдореВрд░реНрдд рд╣реИ
- рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ (рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ) рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
- рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдбреЗрдЯрд╛ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
- рди рдХреЗрд╡рд▓ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдЯреВрд▓, рдмрд▓реНрдХрд┐ рдХреЛрдб рддреЗрдЬреА рд╕реЗ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕рдореБрджрд╛рдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЬрд╛рдПрдЧрд╛ред
рдЗрди рдореБрдЦреНрдп рдорд╛рдиреНрдпрддрд╛рдУрдВ рдиреЗ рдПрдХ рдРрд╕реЗ рдЙрддреНрдкрд╛рдж рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдЬ 850 рд╕реЗ рдЕрдзрд┐рдХ рдХрдВрдкрдирд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЖрдзрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗредрдЬреЛ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓реЗ рд╕рдмрдХ рдХрд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ OTUS - Data Build Tool for Amazon Redshift рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдЦреБрд▓реЗ рдкрд╛рда рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдерд╛ редрдУрдЯреАрдпреВрдПрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЛрд░реНрд╕ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдбреАрдмреАрдЯреА рдФрд░ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдФрд░ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдХрдИ рдЕрдиреНрдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдФрд░ рдЖрдзреБрдирд┐рдХ рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдХрдХреНрд╖рд╛рдПрдВ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:- рдмрд┐рдЧ рдбреЗрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ
- рд╕реНрдкрд╛рд░реНрдХ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ
- рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдФрд░ рдЙрдкрдХрд░рдг
- DWH рдореЗрдВ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдПрдирд╛рд▓рд┐рдЯрд┐рдХ рд╢реЛрдХреЗрд╕
- NoSQL: HBase, Cassandra, ElasticSearch
-
- :
:
- DBT documentation тАФ Introduction тАФ
- What, exactly, is dbt? тАФ DBT
- Data Build Tool Amazon Redshift тАФ YouTube, OTUS
- Greenplum тАФ 15 2020
- Data Engineering тАФ OTUS
- Building a Mature Analytics Workflow тАФ
- ItтАЩs time for open source analytics тАФ Open Source
- Continuous Integration and Automated Build Testing with dbtCloud тАФ CI DBT
- Getting started with DBT tutorial тАФ ,
- Jaffle shop тАФ Github DBT Tutorial тАФ Github,
.