ื“ืึทื˜ืึท ื‘ื•ื™ืขืŸ ื˜ื•ืœ ืึธื“ืขืจ ื•ื•ืึธืก ืื™ื– ืคึผืจืึธืกื˜ ืฆื•ื•ื™ืฉืŸ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข ืื•ืŸ ืกืžืึธืึธื˜ื”ื™ืข

ื“ืึทื˜ืึท ื‘ื•ื™ืขืŸ ื˜ื•ืœ ืึธื“ืขืจ ื•ื•ืึธืก ืื™ื– ืคึผืจืึธืกื˜ ืฆื•ื•ื™ืฉืŸ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข ืื•ืŸ ืกืžืึธืึธื˜ื”ื™ืข
ืื•ื™ืฃ ื•ื•ืึธืก ืคึผืจื™ื ืกืึทืคึผืึทืœื– ืื™ื– ืึท ื™ื“ืขืึทืœ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข ื’ืขื‘ื•ื™ื˜?

ืคืึธืงื•ืก ืื•ื™ืฃ ื’ืขืฉืขืคื˜ ื•ื•ืขืจื˜ ืื•ืŸ ืึทื ืึทืœื™ื˜ื™ืงืก ืื™ืŸ ื“ืขืจ ืึทื•ื•ืขืง ืคื•ืŸ ื‘ืึธื™ืœืขืจืคึผืœืึทื˜ืข ืงืึธื“. ืึธื ืคื™ืจื•ื ื’ DWH ื•ื•ื™ ืึท ืงืึธื“ืขื‘ืึทืกืข: ื•ื•ืขืจืกื™ืข, ืจืขืฆืขื ื–ื™ืข, ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื˜ืขืกื˜ื™ื ื’ ืื•ืŸ ืกื™. ืžืึธื“ื•ืœืึทืจ, ืขืงืกื˜ืขื ืกื™ื‘ืœืข, ืึธืคึฟืŸ ืžืงื•ืจ ืื•ืŸ ืงื”ืœ. ื‘ืึทื ื™ืฆืขืจ-ืคืจื™ื™ึทื ื“ืœืขืš ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื•ืŸ ื“ืขืคึผืขื ื“ืขื ืกื™ ื•ื•ื™ื–ืฉื•ื•ืึทืœืึทื–ื™ื™ืฉืึทืŸ (ื“ืึทื˜ืึท ืœื™ื ืขืึทื’ืข).

ืžืขืจ ื•ื•ืขื’ืŸ ืึทืœืข ื“ืขื ืื•ืŸ ื•ื•ืขื’ืŸ ื“ื™ ืจืึธืœืข ืคื•ืŸ โ€‹โ€‹DBT ืื™ืŸ ื“ื™ ื‘ื™ื’ ื“ืึทื˜ืึท & ืึทื ืึทืœื™ื˜ื™ืงืก ื™ืงืึธื•ืกื™ืกื˜ืึทื - ื‘ืึทื’ืจื™ืกื•ื ื’ ืฆื• ืงืึทืฅ.

ื”ืขืœื ืึทืœืขืžืขืŸ

ืึทืจื˜ืขืžื™ ืงืึธื–ื™ืจ ืื™ื– ืื™ืŸ ืงืึธื ื˜ืึทืงื˜. ืคึฟืึทืจ ืžืขืจ ื•ื•ื™ 5 ื™ืึธืจ ืื™ืš ื”ืึธื‘ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ืึทื˜ืŸ ื•ื•ืขืจื›ืึทื•ื–ื™ื–, ื‘ื ื™ืŸ ETL / ELT, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื“ืึทื˜ืŸ ืึทื ืึทืœื™ื˜ื™ืงืก ืื•ืŸ ื•ื•ื™ื–ืฉื•ื•ืึทืœืึทื–ื™ื™ืฉืึทืŸ. ืื™ืš ื‘ื™ืŸ ืื™ืฆื˜ ืืจื‘ืขื˜ืŸ ืื™ืŸ ื•ื•ื™ืœื™, ืื™ืš ืœืขืจื ืขืŸ ืื™ืŸ OTUS ืื•ื™ืฃ ืึท ืงื•ืจืก ื“ืึทื˜ืึท ืขื ื’ื™ื ืขืขืจ, ืื•ืŸ ื”ื™ื™ึทื ื˜ ืื™ืš ื•ื•ื™ืœืŸ ืฆื• ื˜ื™ื™ืœืŸ ืžื™ื˜ ืื™ืจ ืึทืŸ ืึทืจื˜ื™ืงืœ ื•ื•ืึธืก ืื™ืš ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ืึทื ื˜ื™ืกืึทืคึผื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ื ื™ื™ึท ืขื ืจืึธื•ืœืžืึทื ื˜ ืคึฟืึทืจ ื“ืขื ืงื•ืจืก.

ืงื•ืจืฅ ื‘ืืจื™ื›ื˜ืŸ

ื“ื™ DBT ืคืจื™ื™ืžื•ื•ืขืจืง ืื™ื– ืึทืœืข ื•ื•ืขื’ืŸ ื“ื™ T ืื™ืŸ ื“ื™ ELT (Extract - Transform - Load) ืึทืงืจืึทื ื™ื.

ืžื™ื˜ ื“ื™ ืึทื“ื•ื•ืขื ื˜ ืคื•ืŸ ืึทื–ืึท ืคึผืจืึธื“ื•ืงื˜ื™ื•ื• ืื•ืŸ ืกืงืึทืœืึทื‘ืœืข ืึทื ืึทืœื™ืกื™ืก ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ื•ื•ื™ BigQuery, Redshift, Snowflake, ืขืก ืื™ื– ืงื™ื™ืŸ ืคื•ื ื˜ ืฆื• ื˜ืึธืŸ ื˜ืจืึทื ืกืคืึธืจืžืึทืฆื™ืข ืึทืจื•ื™ืก ื“ื™ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข. 

DBT ื˜ื•ื˜ ื ื™ืฉื˜ ืืจืืคืงืืคื™ืข ื“ืึทื˜ืŸ ืคึฟื•ืŸ ืงื•ื•ืืœืŸ, ืึธื‘ืขืจ ื’ื™ื˜ ื’ืจื•ื™ืก ืึทืคึผืขืจื˜ื•ื ืึทื˜ื™ื– ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ืึทื˜ืŸ ื•ื•ืึธืก ืื™ื– ืฉื•ื™ืŸ ืœืึธื•ื“ื™ื“ ืื™ืŸ ื“ื™ ืกื˜ืึธืจื™ื“ื–ืฉ (ืื™ืŸ ืื™ื ืขืจืœืขื›ืขืจ ืึธื“ืขืจ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืกื˜ืึธืจื™ื“ื–ืฉ).

ื“ืึทื˜ืึท ื‘ื•ื™ืขืŸ ื˜ื•ืœ ืึธื“ืขืจ ื•ื•ืึธืก ืื™ื– ืคึผืจืึธืกื˜ ืฆื•ื•ื™ืฉืŸ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข ืื•ืŸ ืกืžืึธืึธื˜ื”ื™ืข
ื“ืขืจ ื”ื•ื™ืคึผื˜ ืฆื™ืœ ืคื•ืŸ DBT ืื™ื– ืฆื• ื ืขืžืขืŸ ื“ื™ ืงืึธื“, ืฆื•ื ื•ื™ืคื ืขืžืขืŸ ืขืก ืื™ืŸ SQL, ื•ื™ืกืคื™ืจืŸ ื“ื™ ืงืึทืžืึทื ื“ื– ืื™ืŸ ื“ื™ ืจื™ื›ื˜ื™ืง ืกื™ืงื•ื•ืึทื ืก ืื™ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™.

ื“ื‘ื˜ ืคึผืจืึธื™ืขืงื˜ ืกื˜ืจื•ืงื˜ื•ืจ

ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ื“ื™ืจืขืงื˜ืขืจื™ื– ืื•ืŸ ื˜ืขืงืขืก ืคื•ืŸ ื‘ืœื•ื™ื– 2 ื˜ื™ื™ืคึผืก:

  • ืžืึธื“ืขืœ (. ืกืงืœ) - ืึท ืึทืคึผืึทืจืึทื˜ ืคื•ืŸ ื˜ืจืึทื ืกืคืึธืจืžืึทืฆื™ืข ืื•ื™ืกื’ืขื“ืจื™ืงื˜ ื“ื•ืจืš ืึท ืกืขืœืขืงื˜ ืึธื ืคึฟืจืขื’
  • ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธืŸ ื˜ืขืงืข (.ื™ืžืœ) - ืคึผืึทืจืึทืžืขื˜ืขืจืก, ืกืขื˜ื˜ื™ื ื’ืก, ื˜ืขืกืฅ, ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ

ืื™ืŸ ืึท ื™ืงืขืจื“ื™ืง ืžื“ืจื’ื”, ื“ื™ ืึทืจื‘ืขื˜ ืื™ื– ืกื˜ืจืึทืงื˜ืฉืขืจื“ ื•ื•ื™ ื’ื™ื™ื˜:

  • ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืคึผืจื™ืคึผืขืจื– ืžืึธื“ืขืœ ืงืึธื“ ืื™ืŸ ืงื™ื™ืŸ ื‘ืึทืงื•ื•ืขื IDE
  • ื ื™ืฆืŸ ื“ื™ CLI, ืžืึธื“ืขืœืก ื–ืขื ืขืŸ ืœืึธื ื˜ืฉื˜, DBT ืงืึทืžืคึผื™ื™ืœื– ื“ื™ ืžืึธื“ืขืœ ืงืึธื“ ืื™ืŸ SQL
  • ื“ื™ ืงืึทืžืคึผื™ื™ืœื“ ืกืงืœ ืงืึธื“ ืื™ื– ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืื™ืŸ ื“ื™ ืกื˜ืึธืจื™ื“ื–ืฉ ืื™ืŸ ืึท ื’ืขื’ืขื‘ืŸ ืกื™ืงื•ื•ืึทื ืก (ื’ืจืึทืฃ)

ื“ืึธ ืก ื•ื•ืึธืก ืคืœื™ืกื ื“ื™ืง ืคึฟื•ืŸ ื“ื™ CLI ืงืขืŸ ืงื•ืงืŸ ื•ื•ื™:

ื“ืึทื˜ืึท ื‘ื•ื™ืขืŸ ื˜ื•ืœ ืึธื“ืขืจ ื•ื•ืึธืก ืื™ื– ืคึผืจืึธืกื˜ ืฆื•ื•ื™ืฉืŸ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข ืื•ืŸ ืกืžืึธืึธื˜ื”ื™ืข

ืึทืœืฅ ืื™ื– SELECT

ื“ืึธืก ืื™ื– ืึท ืงื™ืœืขืจ ืฉื˜ืจื™ืš ืคื•ืŸ ื“ื™ Data Build Tool ืคืจื™ื™ืžื•ื•ืขืจืง. ืื™ืŸ ืื ื“ืขืจืข ื•ื•ืขืจื˜ืขืจ, DBT ืึทื‘ืกื˜ืจืึทืงืฅ ืึทืœืข ื“ื™ ืงืึธื“ ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ืžืึทื˜ื™ืจื™ืึทืœื™ื™ื– ื“ื™ื™ืŸ ืคึฟืจืื’ืŸ ืื™ืŸ ื“ื™ ืงืจืึธื (ื•ื•ืขืจื™ื™ื™ืฉืึทื ื– ืคื•ืŸ ื“ื™ ืงืึทืžืึทื ื“ื– CREATE, INSERT, UPDATE, DELETE ALTER, GRANT, ...).

ืงื™ื™ืŸ ืžืึธื“ืขืœ ื™ื ื•ื•ืึทืœื•ื•ื– ืฉืจื™ื™ื‘ืŸ ืื™ื™ืŸ ืกืขืœืขืงื˜ ืึธื ืคึฟืจืขื’ ื•ื•ืึธืก ื“ื™ืคื™ื™ื ื– ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ื“ืึทื˜ืŸ ืฉื˜ืขืœืŸ.

ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ื™ ื˜ืจืึทื ืกืคืึธืจืžืึทืฆื™ืข ืœืึธื’ื™ืง ืงืขื ืขืŸ ื–ื™ื™ืŸ ืžืึทืœื˜ื™-ืžื“ืจื’ื” ืื•ืŸ ืงืึธื ืกืึธืœื™ื“ื™ืจืŸ ื“ืึทื˜ืŸ ืคื•ืŸ ืขื˜ืœืขื›ืข ืื ื“ืขืจืข ืžืึธื“ืขืœืก. ื ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืึท ืžืึธื“ืขืœ ื•ื•ืึธืก ื•ื•ืขื˜ ื‘ื•ื™ืขืŸ ืึท ืกื“ืจ ื•ื•ื™ื˜ืจื™ื ืข (ืค_ืึธืจื“ืขืจืก):

{% 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 (Common Table Expressions) - ืฆื• ืึธืจื’ืึทื ื™ื–ื™ืจืŸ ืื•ืŸ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ืงืึธื“ ื•ื•ืึธืก ื›ึผื•ืœืœ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ื˜ืจืึทื ืกืคืึธืจืžืึทืฆื™ืข ืื•ืŸ ื’ืขืฉืขืคื˜ ืœืึธื’ื™ืง

ืจื’ืข: ืžืึธื“ืขืœ ืงืึธื“ ืื™ื– ืึท ื’ืขืžื™ืฉ ืคื•ืŸ ืกืงืœ ืื•ืŸ ืฉืคึผืจืึทืš ื“ื–ืฉื™ื ื“ื–ืฉืึท (ื˜ืขืžืคึผืœื™ื™ื˜ื™ื ื’ ืฉืคึผืจืึทืš).

ื“ืขืจ ื‘ื™ื™ืฉืคึผื™ืœ ื ื™ืฆื˜ ืึท ืฉืœื™ื™ืฃ ืคึฟืึทืจ ืฆื• ื“ื–ืฉืขื ืขืจื™ื™ื˜ ื“ื™ ืกื•ืžืข ืคึฟืึทืจ ื™ืขื“ืขืจ ืฆืึธืœื•ื ื’ ืื•ืคึฟืŸ ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ืขืจ ืื•ื™ืกื“ืจื•ืง ืฉื˜ืขืœืŸ. ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืื™ื– ืื•ื™ืš ื’ืขื ื™ืฆื˜ ืจืขืฃ - ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื“ืขืจืžืึธื ืขืŸ ืื ื“ืขืจืข ืžืึธื“ืขืœืก ืื™ืŸ ื“ื™ ืงืึธื“:

  • ื‘ืขืฉืึทืก ื–ืึทืžืœื•ื ื’ ืจืขืฃ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืงืึธื ื•ื•ืขืจื˜ืขื“ ืฆื• ืึท ืฆื™ืœ ื˜ื™ื™ึทื˜ืœ ืฆื• ืึท ื˜ื™ืฉ ืึธื“ืขืจ ืžื™ื™ื ื•ื ื’ ืื™ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ
  • ืจืขืฃ ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื‘ื•ื™ืขืŸ ืึท ืžืึธื“ืขืœ ื“ืขืคึผืขื ื“ืขื ืกื™ ื’ืจืึทืคื™ืง

ืคึผื•ื ืงื˜ ื“ื–ืฉื™ื ื“ื–ืฉืึท ืžื•ืกื™ืฃ ื›ึผืžืขื˜ ืึทื ืœื™ืžืึทื˜ืึทื“ ืคึผืึทืกืึทื‘ื™ืœืึทื˜ื™ื– ืฆื• DBT. ื“ื™ ืžืขืจืกื˜ ืึธืคื˜ ื’ืขื ื™ืฆื˜ ื–ืขื ืขืŸ:

  • ืื•ื™ื‘ / ืึทื ื“ืขืจืฉ ืกื˜ื™ื™ื˜ืžืึทื ืฅ - ืฆื•ื•ื™ื™ึทื’ ืกื˜ื™ื™ื˜ืžืึทื ืฅ
  • ืคึฟืึทืจ ืœื•ืคึผืก
  • ื•ื•ืขืจื™ืึทื‘ืึทืœื–
  • ืžืึทืงืจืึธื• - ืงืจื™ื™ื™ื˜ื™ื ื’ ืžืึทืงืจืึธืก

ืžืึทื˜ืขืจื™ืึทืœื™ื–ืึทื˜ื™ืึธืŸ: ื˜ื™ืฉ, View, ื™ื ืงืจืขืžืขื ื˜ืึทืœ

ืžืึทื˜ืขืจื™ืึทืœื™ื–ืึทื˜ื™ืึธืŸ ืกื˜ืจืึทื˜ืขื’ื™ืข ืื™ื– ืึท ืฆื•ื’ืึทื ื’ ืœื•ื™ื˜ ื•ื•ืึธืก ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ื’ืึทื ื’ ืคื•ืŸ ืžืึธื“ืขืœ ื“ืึทื˜ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืกื˜ืึธืจื“ ืื™ืŸ ื“ื™ ืกื˜ืึธืจื™ื“ื–ืฉ.

ืื™ืŸ ื™ืงืขืจื“ื™ืง ื˜ืขืจืžื™ื ืขืŸ ืขืก ืื™ื–:

  • ื˜ื™ืฉ - ื’ืฉืžื™ื•ืช ื˜ื™ืฉ ืื™ืŸ ื“ื™ ืกื˜ืึธืจื™ื“ื–ืฉ
  • View - View, ื•ื•ื™ืจื˜ื•ืึทืœ ื˜ื™ืฉ ืื™ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ

ืขืก ื–ืขื ืขืŸ ืื•ื™ืš ืžืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜ ืžืึทื˜ื™ืจื™ืึทืœื™ื–ื™ื™ืฉืึทืŸ ืกื˜ืจืึทื˜ืขื’ื™ืขืก:

  • ื™ื ืงืจืึทืžืขื ื˜ืึทืœ - ื™ื ืงืจืึทืžืขื ื˜ืึทืœ ืœืึธื•ื“ื™ื ื’ (ืคื•ืŸ ื’ืจื•ื™ืก ืคืึทืงื˜ ื˜ื™ืฉืŸ); ื ื™ื™ึท ืฉื•ืจื•ืช ื–ืขื ืขืŸ ืฆื•ื’ืขื’ืขื‘ืŸ, ื’ืขื‘ื™ื˜ืŸ ืฉื•ืจื•ืช ื–ืขื ืขืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜, ืื•ื™ืกื’ืขืžืขืงื˜ ืฉื•ืจื•ืช ื–ืขื ืขืŸ ืงืœื™ืจื“ 
  • ืขืคืขืžืขืจืึทืœ - ื“ืขืจ ืžืึธื“ืขืœ ื˜ื•ื˜ ื ื™ืฉื˜ ืžืึทื˜ื™ืจื™ืึทืœื™ื™ื– ื’ืœื™ื™ึทืš, ืึธื‘ืขืจ ืคึผืึทืจื˜ื™ืกืึทืคึผื™ื™ืฅ ื•ื•ื™ ืึท CTE ืื™ืŸ ืื ื“ืขืจืข ืžืึธื“ืขืœืก
  • ืงื™ื™ืŸ ืื ื“ืขืจืข ืกื˜ืจืึทื˜ืขื’ื™ืขืก ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื’ืŸ ื–ื™ืš

ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ืžืึทื˜ื™ืจื™ืึทืœื™ื–ื™ื™ืฉืึทืŸ ืกื˜ืจืึทื˜ืขื’ื™ืขืก, ืขืก ื–ืขื ืขืŸ ืึทืคึผืขืจื˜ื•ื ืึทื˜ื™ื– ืคึฟืึทืจ ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ ืคึฟืึทืจ ืกืคึผืขืฆื™ืคื™ืฉ ืกื˜ืึธืจื™ื“ื–ืฉ, ืœืžืฉืœ:

  • ืฉื ื™ื™ืขืœืข: ื˜ืจืึทื ืกื™ืขื ื˜ ื˜ื™ืฉืŸ, ืฆื•ื ื•ื™ืคื’ื™ืกืŸ ื ืึทื˜ื•ืจ, ื˜ื™ืฉ ืงืœืึทืกื˜ืขืจื™ื ื’, ืงืึทืคึผื™ื™ื ื’ ื’ืจืึทื ืฅ, ื–ื™ื›ืขืจ ืงื•ืงืŸ
  • Redshift: Distkey, Sortkey (ื™ื ื˜ืขืจืœืขืึทื•ื•ืขื“, ืงืึทืžืคึผืึทื•ื ื“), ืฉืคึผืขื˜ ื‘ื™ื™ื ื“ื™ื ื’ ืงื•ืงืŸ
  • ื‘ื™ื’ืงื•ื•ืขืจื™: ื˜ื™ืฉ ืคึผืึทืจื˜ื™ืฉืึทื ื™ื ื’ ืื•ืŸ ืงืœืึทืกื˜ืขืจื™ื ื’, ืฆื•ื ื•ื™ืคื’ื™ืกืŸ ื ืึทื˜ื•ืจ, KMS ืขื ืงืจื™ืคึผืฉืึทืŸ, ืœืึทื‘ืขืœืก ืื•ืŸ ื˜ืึทื’ืก
  • ืึธื ืฆื™ื ื“ืŸ: ื˜ืขืงืข ืคึฟืึธืจืžืึทื˜ (ืคึผืึทืจืงืขื˜, ืงืกื•ื•, ื“ื–ืฉืกืึธืŸ, ืึธืจืง, ื“ืขืœื˜ืึท), partition_by, clustered_by, ื‘ืึทืงืึทืฅ, ื™ื ืงืจืึทืžืขื ื˜ืึทืœ_ืกื˜ืจืึทื˜ืขื’ื™

ื“ื™ ืคืืœื’ืขื ื“ืข ืกื˜ืึธืจื™ื“ื–ืฉื™ื– ื–ืขื ืขืŸ ื“ืขืจื•ื•ื™ื™ึทืœ ื’ืขืฉื˜ื™ืฆื˜:

  • ืคึผืึธืกื˜ื’ืจืขืก
  • Redshift
  • ื‘ื™ื’ืงื•ื•ืขืจื™
  • ืฉื ื™ื™ืขืœืข
  • ืคึผืจืขืกื˜ืึธ (ื˜ื™ื™ืœ)
  • ืึธื ืฆื™ื ื“ืŸ (ื˜ื™ื™ืœ)
  • Microsoft SQL Server (ืงื”ื™ืœื” ืึทื“ืึทืคึผื˜ืขืจ)

ืœืึธืžื™ืจ ืคึฟืึทืจื‘ืขืกืขืจืŸ ืื•ื ื“ื–ืขืจ ืžืึธื“ืขืœ:

  • ืœืึธืžื™ืจ ืžืึทื›ืŸ ื–ื™ื™ืŸ ืคื™ืœื•ื ื’ ื™ื ืงืจืึทืžืขื ื˜ืึทืœ (ื™ื ืงืจืขืžืขื ื˜ืึทืœ)
  • ืœืึธืžื™ืจ ืœื™ื™ื’ืŸ ืกืขื’ืžืึทื ื˜ื™ื™ืฉืึทืŸ ืื•ืŸ ืกืึธืจื˜ื™ื ื’ ืฉืœื™ืกืœืขืŸ ืคึฟืึทืจ 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 (ื“ื™ืจืขืงื˜ืขื“ ืึทืกื™ืงืœื™ืง ื’ืจืึทืคื™ืง).

DBT ื‘ื•ื™ืขืŸ ืึท ื’ืจืึทืคื™ืง ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ ืึทืœืข ืคึผืจื•ื™ืขืงื˜ ืžืึธื“ืขืœืก, ืึธื“ืขืจ ื’ืึทื ืฅ, ืจืขืฃ () ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ืขืŸ ืื™ืŸ ืžืึธื“ืขืœืก ืฆื• ืื ื“ืขืจืข ืžืึธื“ืขืœืก. ืžื™ื˜ ืึท ื’ืจืึทืคื™ืง ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื˜ืึธืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื˜ื™ื ื’ื–:

  • ืคืœื™ืกื ื“ื™ืง ืžืึธื“ืขืœืก ืื™ืŸ ื“ื™ ืจื™ื›ื˜ื™ืง ืกื™ืงื•ื•ืึทื ืก
  • ืคึผืึทืจืึทืœืขืœื™ื–ืึทื˜ื™ืึธืŸ ืคื•ืŸ ืกื˜ืึธืจืคืจืึทื ื˜ ืคืึธืจืžื™ืจื•ื ื’
  • ืคืœื™ืกื ื“ื™ืง ืึท ืึทืจื‘ื™ื˜ืจืึทืจื™ืฉ ืกื•ื‘ื’ืจืึทืฃ 

ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ื’ืจืึทืคื™ืง ื•ื•ื™ื–ืฉื•ื•ืึทืœืึทื–ื™ื™ืฉืึทืŸ:

ื“ืึทื˜ืึท ื‘ื•ื™ืขืŸ ื˜ื•ืœ ืึธื“ืขืจ ื•ื•ืึธืก ืื™ื– ืคึผืจืึธืกื˜ ืฆื•ื•ื™ืฉืŸ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข ืื•ืŸ ืกืžืึธืึธื˜ื”ื™ืข
ื™ืขื“ืขืจ ื ืึธื“ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื’ืจืึทืคื™ืง ืื™ื– ืึท ืžืึธื“ืขืœ; ื“ื™ ืขื“ื–ืฉืึทื– ืคื•ืŸ ื“ื™ ื’ืจืึทืคื™ืง ื–ืขื ืขืŸ ืกืคึผืขืกื™ืคื™ืขื“ ื“ื•ืจืš ื“ื™ ืื•ื™ืกื“ืจื•ืง ืจืขืฃ.

ื“ืึทื˜ืึท ืงื•ื•ืึทืœื™ื˜ื™ ืื•ืŸ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ

ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ื“ื–ืฉืขื ืขืจื™ื™ื˜ ื“ื™ ืžืึธื“ืขืœืก ื–ื™ืš, 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 # ะฟั€ะพะฒะตั€ะบะฐ ะฝะฐ ะฝะฐะปะธั‡ะธะต 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']

ืื•ืŸ ื“ืึธ ืื™ื– ื•ื•ื™ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืงื•ืงื˜ ื•ื•ื™ ืื•ื™ืฃ ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื•ื•ืขื‘ื–ื™ื™ื˜ืœ:

ื“ืึทื˜ืึท ื‘ื•ื™ืขืŸ ื˜ื•ืœ ืึธื“ืขืจ ื•ื•ืึธืก ืื™ื– ืคึผืจืึธืกื˜ ืฆื•ื•ื™ืฉืŸ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข ืื•ืŸ ืกืžืึธืึธื˜ื”ื™ืข

ืžืึทืงืจืึธืก ืื•ืŸ ืžืึธื“ื•ืœืขืก

ื“ืขืจ ืฆื™ืœ ืคื•ืŸ DBT ืื™ื– ื ื™ืฉื˜ ืึทื–ื•ื™ ืคื™ืœ ืฆื• ื•ื•ืขืจืŸ ืึท ืกื›ื•ื ืคื•ืŸ SQL ืกืงืจื™ืคึผืก, ืึธื‘ืขืจ ืฆื• ืฆื•ืฉื˜ืขืœืŸ ื ื™ืฆืขืจืก ืึท ืฉื˜ืึทืจืง ืื•ืŸ ืฉื˜ืจื™ืš-ืจื™ื™ึทืš ืžื™ื˜ืœ ืฆื• ื‘ื•ื™ืขืŸ ื–ื™ื™ืขืจ ืื™ื™ื’ืขื ืข ื˜ืจืึทื ืกืคืึธืจืžืึทืฆื™ืข ืื•ืŸ ื“ื™ืกื˜ืจื™ื‘ื™ื•ื˜ื™ื ื’ ื“ื™ ืžืึทื“ื–ืฉื•ืœื–.

ืžืึทืงืจืึธืก ื–ืขื ืขืŸ ืฉื˜ืขืœื˜ ืคื•ืŸ ืงืึทื ืกื˜ืจืึทืงืฉืึทื ื– ืื•ืŸ ืื•ื™ืกื“ืจื•ืงืŸ ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืจื•ืคึฟืŸ ื•ื•ื™ ืคืึทื ื’ืงืฉืึทื ื– ืื™ืŸ ืžืึธื“ืขืœืก. ืžืึทืงืจืึธืก ืœืึธื–ืŸ ืื™ืจ ืฆื• ืจื™ื™ื•ืก SQL ืฆื•ื•ื™ืฉืŸ ืžืึธื“ืขืœืก ืื•ืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ืื™ืŸ ืœื•ื™ื˜ ืžื™ื˜ ื“ื™ ื™ื ื–ืฉืขื ื™ืขืจื™ืข ืคึผืจื™ื ืฆื™ืคึผ ืคื•ืŸ DRY (ื“ื• ื–ืืœืกื˜ ื ื™ืฉื˜ ืื™ื‘ืขืจื—ื–ืจืŸ ื–ื™ืš).

ืžืึทืงืจืึธ ื‘ื™ื™ึทืฉืคึผื™ืœ:

{% 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 ืงื•ืžื˜ ืžื™ื˜ ืึท ืคึผืขืงืœ ืคืึทืจื•ื•ืึทืœื˜ืขืจ ื•ื•ืึธืก ืึทืœืึทื•ื– ื ื™ืฆืขืจืก ืฆื• ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื•ืŸ ืจื™ื™ื•ื– ื™ื—ื™ื“ ืžืึทื“ื–ืฉื•ืœื– ืื•ืŸ ืžืึทืงืจืึธืก.

ื“ืึธืก ืžื™ื˜ืœ ืึทื– ืื™ืจ ืงืขื ืขืŸ ืœืึธื“ืŸ ืื•ืŸ ื ื•ืฆืŸ ืœื™ื™ื‘ืจืขืจื™ื– ืึทื–ืึท ื•ื•ื™:

  • dbt_utils: ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ืึทื˜ืข / ืฆื™ื™ื˜, ืกืขืจืึทื’ืึทื˜ ืงื™ื–, ืกื˜ืฉืขืžืึท ื˜ืขืกืฅ, ืคึผื™ื•ื•ืึธื˜ / ื•ื ืคึผื™ื•ื•ืึธื˜ ืื•ืŸ ืื ื“ืขืจืข
  • ื’ืจื™ื™ื˜-ื’ืขืžืื›ื˜ ื•ื•ื™ื˜ืจื™ื ืข ื˜ืขืžืคึผืœืึทื˜ืขืก ืคึฟืึทืจ ื‘ืึทื“ื™ื ื•ื ื’ืก ืึทื–ืึท ื•ื•ื™ ืฉื ื™ื™ ืคึผืœืึธื• ะธ ืคึผืึทืก 
  • ืœื™ื‘ืจืึทืจื™ืขืก ืคึฟืึทืจ ืกืคึผืขืฆื™ืคื™ืฉ ื“ืึทื˜ืึท ืกื˜ืึธืจืขืก, ืœืžืฉืœ. Redshift 
  • ืœืึธื’ื’ื™ื ื’ - ืžืึธื“ื•ืœืข ืคึฟืึทืจ ืœืึธื’ื™ื ื’ DBT ืึธืคึผืขืจืึทืฆื™ืข

ื ื’ืึทื ืฅ ืจืฉื™ืžื” ืคื•ืŸ ืคึผืึทืงืึทื“ื–ืฉืึทื– ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื™ืŸ dbt hub.

ืืคื™ืœื• ืžืขืจ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ

ื“ืึธ ืื™ืš ื•ื•ืขืœ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืึท ื‘ื™ืกืœ ืื ื“ืขืจืข ื˜ืฉื™ืงืึทื•ื•ืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืื•ืŸ ื™ืžืคึผืœืึทืžืึทื ืฅ ื•ื•ืึธืก ื“ื™ ืžืึทื ืฉืึทืคึฟื˜ ืื•ืŸ ืื™ืš ื ื•ืฆืŸ ืฆื• ื‘ื•ื™ืขืŸ ืึท ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข ืื™ืŸ ื•ื•ื™ืœื™.

ืฆืขืฉื™ื™ื“ื•ื ื’ ืคื•ืŸ ืจื•ื ื˜ื™ืžืข ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ DEV - TEST - 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 ื•ื•ืขื˜ ื•ื™ืกืคื™ืจืŸ ื“ื™ ANALYZE COMPRESSION ื‘ืึทืคึฟืขืœ, ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ื˜ื™ืฉ ืžื™ื˜ ื“ื™ ืจืขืงืึทืžืขื ื“ื™ื“ ื–ื™ื™ึทืœ ืงืึธื“ื™ืจื•ื ื’ ืึทืœื’ืขืจื™ื“ืึทืžื–, ืกืคึผืขืกื™ืคื™ืขื“ ืกืขื’ืžืึทื ื˜ื™ื™ืฉืึทืŸ ืฉืœื™ืกืœืขืŸ (ื“ื™ืกื˜_ืงื™ื™) ืื•ืŸ ืกืึธืจื˜ื™ื ื’ ืฉืœื™ืกืœืขืŸ (ืกืึธืจื˜_ืงื™ื™), ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ื™ ื“ืึทื˜ืŸ ืฆื• ืขืก, ืื•ืŸ, ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง, ื•ื™ืกืžืขืงืŸ ื“ื™ ืึทืœื˜ ืงืึธืคึผื™ืข.

ืžืึทืงืจืึธ ื›ืกื™ืžืข:

{{ 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 (User Defined Functions), ื“ื™ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืคืึทื ื’ืงืฉืึทื ื–, ืึทืงืกืขืก ืงืึธื ื˜ืจืึธืœ ืื•ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ืจืึธื•ืœื™ื ื’ ืคื•ืŸ ื ื™ื™ึทืข ืจื™ืœื™ืกื™ื– ืื™ื– ื–ื™ื™ืขืจ ื‘ืึทืงื•ื•ืขื ืฆื• ื˜ืึธืŸ ืื™ืŸ DBT.

ืžื™ืจ ื ื•ืฆืŸ UDF ืื™ืŸ Python ืฆื• ืจืขื›ืขื ืขืŸ ื”ืึทืฉืขืก, E- ื‘ืจื™ื•ื• ื“ืึธื•ืžื™ื™ื ื– ืื•ืŸ ื‘ื™ื˜ืžืึทืกืง ื“ื™ืงืึธื•ื“ื™ื ื’.

ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืึท ืžืึทืงืจืึธื• ื•ื•ืึธืก ืงืจื™ื™ื™ืฅ ืึท 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 ืงืึทืžืึทื ื“ื–.

ืฆื• ื˜ืึธืŸ ื“ืึธืก, ื“ื™ ืงืึทืžืึทื ื“ื– ืคื•ืŸ ื“ื™ ืจืขื“ืฉื™ืคื˜_ืžืึทื™ื ื˜ืขื ืึทื ืกืข ืžืึทืงืจืึธื• ื–ืขื ืขืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ื™ืขื“ืขืจ ื ืึทื›ื˜:

{% 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 ื•ื•ื™ ืึท ืกืขืจื•ื•ื™ืก (Managed Service). ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜:

  • ื•ื•ืขื‘ IDE ืคึฟืึทืจ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืคึผืจืึทื“ื–ืฉืขืงืก ืื•ืŸ ืžืึธื“ืขืœืก
  • ืึทืจื‘ืขื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ืกืงืขื“ื–ืฉื•ืœื™ื ื’
  • ืคึผืฉื•ื˜ ืื•ืŸ ื‘ืึทืงื•ื•ืขื ืึทืงืกืขืก ืฆื• ืœืึธื’ืก
  • ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ืžื™ื˜ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ื™ืŸ ืคึผืจื•ื™ืขืงื˜
  • ืงืึทื ืขืงื˜ื™ื ื’ ืกื™ (ืงืึธื ื˜ื™ื ื•ืึธื•ืก ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ)

ื“ืึทื˜ืึท ื‘ื•ื™ืขืŸ ื˜ื•ืœ ืึธื“ืขืจ ื•ื•ืึธืก ืื™ื– ืคึผืจืึธืกื˜ ืฆื•ื•ื™ืฉืŸ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข ืื•ืŸ ืกืžืึธืึธื˜ื”ื™ืข

ืกืึธืฃ

ืคึผืจื™ืคึผืขืจื™ื ื’ ืื•ืŸ ืงืึทื ืกื•ืžื™ื ื’ DWH ื•ื•ืขืจื˜ ื•ื•ื™ ืขื ื“ื–ืฉื•ื™ืึทื‘ืึทืœ ืื•ืŸ ื•ื•ื•ื™ืœื˜ื•ื™ืง ื•ื•ื™ ื˜ืจื™ื ืงื˜ ืึท ืกืžืึธืึธื˜ื”ื™ืข. DBT ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ื“ื–ืฉื™ื ื“ื–ืฉืึท, ื‘ืึทื ื™ืฆืขืจ ื™ืงืกื˜ืขื ืฉืึทื ื– (ืžืึธื“ื•ืœืขืก), ืึท ืงืึทืžืคึผื™ื™ืœืขืจ, ืึทืŸ ืขืงืกืึทืงื™ื•ื˜ืขืจ ืื•ืŸ ืึท ืคึผืขืงืœ ืคืึทืจื•ื•ืึทืœื˜ืขืจ. ื“ื•ืจืš ืฉื˜ืขืœืŸ ื“ื™ ืขืœืขืžืขื ื˜ืŸ ืฆื•ื–ืึทืžืขืŸ ืื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึท ื’ืึทื ืฅ ืึทืจื‘ืขื˜ ืกื•ื•ื™ื•ื•ืข ืคึฟืึทืจ ื“ื™ื™ืŸ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข. ืขืก ืื™ื– ืงื•ื™ื ืึท ื‘ืขืกืขืจ ื•ื•ืขื’ ืฆื• ืคื™ืจืŸ ื˜ืจืึทื ืกืคืึธืจืžืึทืฆื™ืข ืื™ืŸ DWH ื”ื™ื™ึทื ื˜.

ื“ืึทื˜ืึท ื‘ื•ื™ืขืŸ ื˜ื•ืœ ืึธื“ืขืจ ื•ื•ืึธืก ืื™ื– ืคึผืจืึธืกื˜ ืฆื•ื•ื™ืฉืŸ ื“ืึทื˜ืึท ื•ื•ืึทืจืขื”ืึธื•ืกืข ืื•ืŸ ืกืžืึธืึธื˜ื”ื™ืข

ื“ื™ ื‘ื™ืœื™ืคืก ื ืื›ื’ืขื’ืื ื’ืขืŸ ื“ื•ืจืš ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืคื•ืŸ DBT ื–ืขื ืขืŸ ืคืืจืžื•ืœื™ืจื˜ ื•ื•ื™ ื’ื™ื™ื˜:

  • ืงืึธื“, ื ื™ื˜ GUI, ืื™ื– ื“ืขืจ ื‘ืขืกื˜ืขืจ ืึทื‘ืกื˜ืจืึทืงืฆื™ืข ืคึฟืึทืจ ื™ืงืกืคึผืจืขืกื™ื ื’ ืงืึธืžืคึผืœืขืงืก ืึทื ืึทืœื™ื˜ื™ืงืึทืœ ืœืึธื’ื™ืง
  • ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ืึทื˜ืŸ ื–ืึธืœ ืึทื“ืึทืคึผื˜ ื‘ืขืกื˜ืขืจ ืคึผืจืึทืงื˜ื™ืกื™ื– ืื™ืŸ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื™ื ื–ืฉืขื ื™ืขืจื™ืข (ืกืึธืคื˜ื•ื•ืึทืจืข ืื™ื ื–ืฉืขื ื™ืจื™ืข)

  • ืงืจื™ื˜ื™ืฉ ื“ืึทื˜ืŸ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื–ืึธืœ ื–ื™ื™ืŸ ืงืึทื ื˜ืจืึธื•ืœื“ ื“ื•ืจืš ื“ื™ ื‘ืึทื ื™ืฆืขืจ ืงื”ืœ ื•ื•ื™ ืึธืคึฟืŸ ืžืงื•ืจ ื•ื•ื™ื™ื›ื•ื•ืืจื’
  • ื ื™ื˜ ื‘ืœื•ื™ื– ืึทื ืึทืœื™ื˜ื™ืงืก ืžื›ืฉื™ืจื™ื, ืึธื‘ืขืจ ืื•ื™ืš ืงืึธื“ ื•ื•ืขื˜ ื™ื ืงืจื™ืกื™ื ื’ืœื™ ื•ื•ืขืจืŸ ื“ื™ ืคืึทืจืžืึธื’ ืคื•ืŸ ื“ื™ ืขืคึฟืŸ ืžืงื•ืจ ืงื”ืœ

ื“ื™ ื”ืึทืจืฅ ื‘ื™ืœื™ืคืก ื”ืึธื‘ืŸ ื’ืขืคึฟื™ืจื˜ ืึท ืคึผืจืึธื“ื•ืงื˜ ื•ื•ืึธืก ืื™ื– ื’ืขื ื™ืฆื˜ ื“ื•ืจืš ืื™ื‘ืขืจ 850 ืงืึธืžืคึผืึทื ื™ืขืก ื”ื™ื™ึทื ื˜, ืื•ืŸ ื–ื™ื™ ื–ืขื ืขืŸ ื“ื™ ื™ืงืขืจ ืคื•ืŸ ืคื™ืœืข ื™ืงืกื™ื™ื˜ื™ื ื’ ื™ืงืกื˜ืขื ืฉืึทื ื– ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืืฉืืคืŸ ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜.

ืคึฟืึทืจ ื“ื™ ืื™ื ื˜ืขืจืขืกื™ืจื˜, ืขืก ืื™ื– ืึท ื•ื•ื™ื“ืขื ืคื•ืŸ ืึทืŸ ืึธืคึฟืŸ ืœืขืงืฆื™ืข ืื™ืš ื’ืขื’ืขื‘ืŸ ืึท ื‘ื™ืกืœ ื—ื“ืฉื™ื ืฆื•ืจื™ืง ื•ื•ื™ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ืึทืŸ ืึธืคึฟืŸ ืœืขืงืฆื™ืข ืื™ืŸ OTUS - ื“ืึทื˜ืึท ื‘ื•ื™ืขืŸ ื˜ื•ืœ ืคึฟืึทืจ Amazon Redshift ืกื˜ืึธืจื™ื“ื–ืฉ.

ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• DBT ืื•ืŸ Data Warehousing, ื•ื•ื™ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืึท ื™ื ื–ืฉืขื ื™ืจ ืงื•ืจืก ืื•ื™ืฃ ื“ื™ OTUS ืคึผืœืึทื˜ืคืึธืจืžืข, ืžื™ื™ืŸ ื—ื‘ืจื™ื ืื•ืŸ ืื™ืš ืœืขืจื ืขืŸ ืงืœืืกืŸ ืื•ื™ืฃ ืึท ื ื•ืžืขืจ ืคื•ืŸ ืื ื“ืขืจืข ื‘ืึทื˜ื™ื™ึทื˜ื™ืง ืื•ืŸ ืžืึธื“ืขืจืŸ ื˜ืขืžืขืก:

  • ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจืึทืœ ืงืึทื ืกืขืคึผืก ืคึฟืึทืจ ื‘ื™ื’ ื“ืึทื˜ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–
  • ืคึผืจืึทืงื˜ื™ืกื™ื– ืžื™ื˜ Spark ืื•ืŸ Spark Streaming
  • ื•ื™ืกืคืึธืจืฉืŸ ืžืขื˜ื”ืึธื“ืก ืื•ืŸ ืžื›ืฉื™ืจื™ื ืคึฟืึทืจ ืœืึธื•ื“ื™ื ื’ ื“ืึทื˜ืŸ ืงื•ื•ืืœืŸ
  • ื‘ื ื™ืŸ ืึทื ืึทืœื™ืกื™ืก ืฉืึธื•ืงื™ื™ืกื™ื– ืื™ืŸ DWH
  • NoSQL ืงืึทื ืกืขืคึผืก: HBase, Cassandra, ElasticSearch
  • ืคึผืจื™ื ืกืึทืคึผืึทืœื– ืคื•ืŸ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืื•ืŸ ืึธืจืงืขืกื˜ืจืึทื˜ื™ืึธืŸ 
  • ืœืขืฆื˜ ืคึผืจืึธื™ืขืงื˜: ืฉื˜ืขืœืŸ ืึทืœืข ื“ื™ ืกืงื™ืœื– ืฆื•ื–ืึทืžืขืŸ ืื•ื ื˜ืขืจ ืžืขื ื˜ืึธืจื™ื ื’ ืฉื˜ื™ืฆืŸ

ืœื™ื ืงืก:

  1. ื“ื‘ื˜ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ - ื”ืงื“ืžื” โ€” ืืคื™ืฆื™ืขืœืข ื“ืืงื•ืžืขื ื˜ืืฆื™ืข
  2. ื•ื•ืึธืก, ืคึผื•ื ืงื˜, ืื™ื– dbt? โ€” ืื™ื‘ืขืจื‘ืœื™ืง ืึทืจื˜ื™ืงืœ ืคื•ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืžื—ื‘ืจื™ื ืคื•ืŸ DBT 
  3. ื“ืึทื˜ืึท ื‘ื•ื™ืขืŸ ื˜ื•ืœ ืคึฟืึทืจ Amazon Redshift ืกื˜ืึธืจื™ื“ื–ืฉ - ื™ืึธื•ื˜ื•ื‘ืข, ืจืขืงืึธืจื“ื™ื ื’ ืคื•ืŸ ืึทืŸ ืึธื˜ื•ืก ืขืคืŸ ืœืขืงืฆื™ืข
  4. ื‘ืึทืงืขื ืขืŸ ื–ื™ืš ืžื™ื˜ Greenplum - ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืึธืคึฟืŸ ืœืขืงืฆื™ืข ืื™ื– 15 ืžืื™ 2020
  5. ื“ืึทื˜ืึท ืื™ื ื–ืฉืขื ื™ืจื™ืข ืงืึธืจืก โ€” ืึธื˜ื•ืก
  6. ื‘ื•ื™ืขืŸ ืึท ื“ืขืจื•ื•ืึทืงืกืŸ ืึทื ืึทืœื™ื˜ื™ืงืก ื•ื•ืึธืจืงืคืœืึธื•ื• - ืึท ืงื•ืง ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜ ืคื•ืŸ ื“ืึทื˜ืŸ ืื•ืŸ ืึทื ืึทืœื™ื˜ื™ืงืก
  7. ืขืก ืื™ื– ืฆื™ื™ื˜ ืคึฟืึทืจ ืขืคึฟืขื ืขืŸ ืžืงื•ืจ ืึทื ืึทืœื™ื˜ื™ืงืก - ื“ื™ ืขื•ื•ืึธืœื•ืฆื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ืึทื ืึทืœื™ื˜ื™ืงืก ืื•ืŸ ื“ื™ ื”ืฉืคึผืขื” ืคื•ืŸ ืขืคึฟืŸ ืžืงื•ืจ
  8. ืงืขืกื™ื™ื“ืขืจื“ื™ืง ื™ื ื˜ืขื’ืจืึทื˜ื™ืึธืŸ ืื•ืŸ ืึทื•ื˜ืึธืžืึทื˜ืขื“ ื‘ื•ื™ืขืŸ ื˜ืขืกื˜ื™ื ื’ ืžื™ื˜ dbtCloud - ืคึผืจื™ื ืกืึทืคึผืึทืœื– ืคื•ืŸ ื‘ื ื™ืŸ ืกื™ ื ื™ืฆืŸ DBT
  9. ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ DBT ื˜ื•ื˜ืึธืจื™ืึทืœ โ€” ืคึผืจืึทืงื˜ื™ืก, ืฉืจื™ื˜-ื“ื•ืจืš-ืฉืจื™ื˜ ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืคึฟืึทืจ ืคืจื™ื™ึท ืึทืจื‘ืขื˜
  10. ื“ื–ืฉืึทืคืคืœืข ืงืจืึธื - Github DBT ื˜ื•ื˜ืึธืจื™ืึทืœ - ื’ื™ื˜ื”ื•ื‘, ื‘ื™ืœื“ื•ื ื’ืงืจื™ื™ื– ืคึผืจื•ื™ืขืงื˜ ืงืึธื“

ืœืขืจื ืขืŸ ืžืขืจ ื•ื•ืขื’ืŸ ื“ืขื ืงื•ืจืก.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’