เจกเฉ‡เจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ เจœเจพเจ‚ เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจ…เจคเฉ‡ เจธเจฎเฉ‚เจฅเฉ€ เจตเจฟเจšเจ•เจพเจฐ เจ†เจฎ เจ•เฉ€ เจนเฉˆ

เจกเฉ‡เจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ เจœเจพเจ‚ เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจ…เจคเฉ‡ เจธเจฎเฉ‚เจฅเฉ€ เจตเจฟเจšเจ•เจพเจฐ เจ†เจฎ เจ•เฉ€ เจนเฉˆ
เจ‡เฉฑเจ• เจ†เจฆเจฐเจธเจผ เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจ•เจฟเจนเฉœเฉ‡ เจธเจฟเจงเจพเจ‚เจคเจพเจ‚ 'เจคเฉ‡ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ?

เจฌเจพเจ‡เจฒเจฐเจชเจฒเฉ‡เจŸ เจ•เฉ‹เจก เจฆเฉ€ เจ…เจฃเจนเฉ‹เจ‚เจฆ เจตเจฟเฉฑเจš เจตเจชเจพเจฐเจ• เจฎเฉเฉฑเจฒ เจ…เจคเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ 'เจคเฉ‡ เจงเจฟเจ†เจจ เจ•เฉ‡เจ‚เจฆเจฐเจค เจ•เจฐเฉ‹เฅค เจ•เฉ‹เจกเจฌเฉ‡เจธ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ DWH เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ: เจธเฉฐเจธเจ•เจฐเจฃ, เจธเจฎเฉ€เจ–เจฟเจ†, เจ†เจŸเฉ‹เจฎเฉ‡เจŸเจฟเจก เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจ…เจคเฉ‡ CI. เจฎเจพเจกเจฟเจŠเจฒเจฐ, เจเจ•เจธเจŸเฉˆเจ‚เจธเฉ€เจฌเจฒ, เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจ…เจคเฉ‡ เจ•เจฎเจฟเจŠเจจเจฟเจŸเฉ€เฅค เจ‰เจชเจญเฉ‹เจ—เจคเจพ-เจ…เจจเฉเจ•เฉ‚เจฒ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจ…เจคเฉ‡ เจจเจฟเจฐเจญเจฐเจคเจพ เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ (เจกเฉ‡เจŸเจพ เจฒเจพเจˆเจจเฉ‡เจœ)เฅค

เจ‡เจธ เจธเจญ เจฌเจพเจฐเฉ‡ เจ…เจคเฉ‡ เจตเฉฑเจกเฉ‡ เจกเฉ‡เจŸเจพ เจ…เจคเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจˆเจ•เฉ‹เจธเจฟเจธเจŸเจฎ เจตเจฟเฉฑเจš DBT เจฆเฉ€ เจญเฉ‚เจฎเจฟเจ•เจพ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ - cat to welcome.

เจธเจญ เจจเฉ‚เฉฐ เจนเฉˆเจฒเฉ‹

เจ†เจฐเจŸเจฎเฉ€ เจ•เฉ‹เจœเจผเฉ€เจฐ เจธเฉฐเจชเจฐเจ• เจตเจฟเฉฑเจš เจนเฉˆเฅค 5 เจธเจพเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจตเฉฑเจง เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจฎเฉˆเจ‚ เจกเจพเจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ, ETL/ELT เจฌเจฃเจพเจ‰เจฃ เจฆเฉ‡ เจจเจพเจฒ-เจจเจพเจฒ เจกเจพเจŸเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ…เจคเฉ‡ เจตเจฟเจœเจผเฉ‚เจ…เจฒเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐ เจฐเจฟเจนเจพ เจนเจพเจ‚เฅค เจฎเฉˆเจ‚ เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐ เจฐเจฟเจนเจพ เจนเจพเจ‚ เจตเฉเจนเฉ€เจฒเฉ€, เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจ•เฉ‹เจฐเจธ 'เจคเฉ‡ OTUS เจตเจฟเฉฑเจš เจชเฉœเฉเจนเจพเจ‰เจ‚เจฆเจพ เจนเจพเจ‚ เจกเจพเจŸเจพ เจ‡เฉฐเจœเฉ€เจจเฉ€เจ…เจฐ, เจ…เจคเฉ‡ เจ…เฉฑเจœ เจฎเฉˆเจ‚ เจคเฉเจนเจพเจกเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฒเฉ‡เจ– เจธเจพเจ‚เจเจพ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚ เจœเฉ‹ เจฎเฉˆเจ‚ เจธเจผเฉเจฐเฉ‚เจ†เจค เจฆเฉ€ เจ‰เจฎเฉ€เจฆ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจธเฉ€ เจ•เฉ‹เจฐเจธ เจฒเจˆ เจจเจตเจพเจ‚ เจฆเจพเจ–เจฒเจพ.

เจ›เฉ‹เจŸเฉ€ เจธเจฎเฉ€เจ–เจฟเจ†

DBT เจซเจฐเฉ‡เจฎเจตเจฐเจ• ELT (เจเจ•เจธเจŸเจฐเฉˆเจ•เจŸ - เจŸเฉเจฐเจพเจ‚เจธเจซเจพเจฐเจฎ - เจฒเฉ‹เจก) เจธเฉฐเจ–เฉ‡เจช เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจŸเฉ€ เจฌเจพเจฐเฉ‡ เจนเฉˆเฅค

BigQuery, Redshift, Snowflake เจตเจฐเจ—เฉ‡ เจ‰เจคเจชเจพเจฆเจ• เจ…เจคเฉ‡ เจธเจ•เฉ‡เจฒเฉ‡เจฌเจฒ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ‡ เจ†เจ—เจฎเจจ เจฆเฉ‡ เจจเจพเจฒ, เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจฆเฉ‡ เจฌเจพเจนเจฐ เจชเจฐเจฟเจตเจฐเจคเจจ เจ•เจฐเจจ เจฆเจพ เจ•เฉ‹เจˆ เจฎเจคเจฒเจฌ เจจเจนเฉ€เจ‚ เจธเฉ€. 

DBT เจธเจฐเฉ‹เจคเจพเจ‚ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจกเจพเจŠเจจเจฒเฉ‹เจก เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจธเจŸเฉ‹เจฐเฉ‡เจœเจผ (เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจœเจพเจ‚ เจฌเจพเจนเจฐเฉ€ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจตเจฟเฉฑเจš) เจตเจฟเฉฑเจš เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฒเฉ‹เจก เจ•เฉ€เจคเฉ‡ เจ—เจ เจกเฉ‡เจŸเจพ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ‡ เจตเจงเฉ€เจ† เจฎเฉŒเจ•เฉ‡ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจกเฉ‡เจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ เจœเจพเจ‚ เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจ…เจคเฉ‡ เจธเจฎเฉ‚เจฅเฉ€ เจตเจฟเจšเจ•เจพเจฐ เจ†เจฎ เจ•เฉ€ เจนเฉˆ
DBT เจฆเจพ เจฎเฉเฉฑเจ– เจ‰เจฆเฉ‡เจธเจผ เจ•เฉ‹เจก เจฒเฉˆเจฃเจพ, เจ‡เจธเจจเฉ‚เฉฐ SQL เจตเจฟเฉฑเจš เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเจจเจพ, เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจธเจนเฉ€ เจ•เฉเจฐเจฎ เจตเจฟเฉฑเจš เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃเจพ เจนเฉˆเฅค

DBT เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจขเจพเจ‚เจšเจพ

เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซ 2 เจ•เจฟเจธเจฎเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจซเจพเจˆเจฒเจพเจ‚ เจนเจจ:

  • เจฎเจพเจกเจฒ (.sql) - เจ‡เฉฑเจ• SELECT เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจ—เจŸ เจ•เฉ€เจคเฉ€ เจคเจฌเจฆเฉ€เจฒเฉ€ เจฆเฉ€ เจ‡เจ•เจพเจˆ
  • เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจ‡เจฒ (.yml) - เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ, เจธเฉˆเจŸเจฟเฉฐเจ—, เจŸเฉˆเจธเจŸ, เจฆเจธเจคเจพเจตเฉ‡เจœเจผ

เจ‡เฉฑเจ• เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจชเฉฑเจงเจฐ 'เจคเฉ‡, เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ:

  • เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• IDE เจตเจฟเฉฑเจš เจฎเจพเจกเจฒ เจ•เฉ‹เจก เจคเจฟเจ†เจฐ เจ•เจฐเจฆเจพ เจนเฉˆ
  • CLI เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจฎเจพเจกเจฒ เจฒเจพเจ‚เจš เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, DBT เจฎเจพเจกเจฒ เจ•เฉ‹เจก เจจเฉ‚เฉฐ SQL เจตเจฟเฉฑเจš เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเจฆเจพ เจนเฉˆ
  • เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เฉ€เจคเจพ SQL เจ•เฉ‹เจก เจ‡เฉฑเจ• เจฆเจฟเฉฑเจคเฉ‡ เจ•เฉเจฐเจฎ (เจ—เฉเจฐเจพเจซ) เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจšเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ

CLI เจคเฉ‹เจ‚ เจšเฉฑเจฒเจฃเจพ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจพ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡ เจธเจ•เจฆเจพ เจนเฉˆ:

เจกเฉ‡เจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ เจœเจพเจ‚ เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจ…เจคเฉ‡ เจธเจฎเฉ‚เจฅเฉ€ เจตเจฟเจšเจ•เจพเจฐ เจ†เจฎ เจ•เฉ€ เจนเฉˆ

เจธเจญ เจ•เฉเจ SELECT เจนเฉˆ

เจ‡เจน เจกเจพเจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจฆเฉ€ เจ‡เฉฑเจ• เจ•เจพเจคเจฒ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจนเฉˆเฅค เจฆเฉ‚เจœเฉ‡ เจธเจผเจฌเจฆเจพเจ‚ เจตเจฟเฉฑเจš, DBT เจธเจŸเฉ‹เจฐ เจตเจฟเฉฑเจš เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ›เจพเจ‚ เจจเฉ‚เฉฐ เจธเจพเจ•เจพเจฐ เจ•เจฐเจจ เจจเจพเจฒ เจœเฉเฉœเฉ‡ เจธเจพเจฐเฉ‡ เจ•เฉ‹เจกเจพเจ‚ เจจเฉ‚เฉฐ เจเจฌเจธเจŸเจฐเฉˆเจ•เจŸ เจ•เจฐเจฆเจพ เจนเฉˆ (CREATE, INSERT, UPDATE, 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 เจ…เจคเฉ‡ เจญเจพเจธเจผเจพ เจฆเจพ เจฎเจฟเจธเจผเจฐเจฃ เจนเฉˆ เจœเจฟเฉฐเจœเจพ (เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸเจฟเฉฐเจ— เจญเจพเจธเจผเจพ)เฅค

เจ‰เจฆเจพเจนเจฐเจจ เจ‡เฉฑเจ• เจฒเฉ‚เจช เจตเจฐเจคเจฆเจพ เจนเฉˆ เจฒเจˆ เจธเจฎเฉ€เจ•เจฐเจจ เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ เจนเจฐเฉ‡เจ• เจญเฉเจ—เจคเจพเจจ เจตเจฟเจงเฉ€ เจฒเจˆ เจฐเจ•เจฎ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจธเฉˆเฉฑเจŸ. เจซเฉฐเจ•เจธเจผเจจ เจตเฉ€ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจนเจตเจพเจฒเจพ - เจ•เฉ‹เจก เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจนเฉ‹เจฐ เจฎเจพเจกเจฒเจพเจ‚ เจฆเจพ เจนเจตเจพเจฒเจพ เจฆเฉ‡เจฃ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ:

  • เจธเฉฐเจ•เจฒเจจ เจฆเฉŒเจฐเจพเจจ เจนเจตเจพเจฒเจพ เจธเจŸเฉ‹เจฐเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉ‡เจฌเจฒ เจœเจพเจ‚ เจฆเฉเจฐเจฟเจธเจผ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจŸเจพเจฐเจ—เฉ‡เจŸ เจชเฉเจ†เจ‡เฉฐเจŸเจฐ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพ
  • เจนเจตเจพเจฒเจพ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฎเจพเจกเจฒ เจจเจฟเจฐเจญเจฐเจคเจพ เจ—เฉเจฐเจพเจซ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ

เจฌเจฟเจฒเจ•เฉเจฒ เจœเจฟเฉฐเจœเจพ DBT เจตเจฟเฉฑเจš เจฒเจ—เจญเจ— เจ…เจธเฉ€เจฎเจค เจธเฉฐเจญเจพเจตเจจเจพเจตเจพเจ‚ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆเฅค เจธเจญ เจคเฉ‹เจ‚ เจตเฉฑเจง เจตเจฐเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ:

  • If / else เจธเจŸเฉ‡เจŸเจฎเฉˆเจ‚เจŸเจธ - เจฌเฉเจฐเจพเจ‚เจš เจธเจŸเฉ‡เจŸเจฎเฉˆเจ‚เจŸเจธ
  • เจฒเฉ‚เจชเจธ เจฒเจˆ
  • เจตเฉ‡เจฐเฉ€เจเจฌเจฒ
  • เจฎเฉˆเจ•เจฐเฉ‹ - เจฎเฉˆเจ•เจฐเฉ‹ เจฌเจฃเจพเจ‰เจฃเจพ

เจชเจฆเจพเจฐเจฅเฉ€เจ•เจฐเจจ: เจธเจพเจฐเจฃเฉ€, เจฆเฉเจฐเจฟเจธเจผ, เจตเจพเจงเจพ

เจฎเฉˆเจŸเฉ€เจฐเฉ€เจ…เจฒเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจฐเจฃเจจเฉ€เจคเฉ€ เจ‡เฉฑเจ• เจชเจนเฉเฉฐเจš เจนเฉˆ เจœเจฟเจธ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจฎเจพเจกเจฒ เจกเฉ‡เจŸเจพ เจฆเจพ เจจเจคเฉ€เจœเจพ เจธเฉˆเฉฑเจŸ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เจน เจนเฉˆ:

  • เจŸเฉ‡เจฌเจฒ - เจธเจŸเฉ‹เจฐเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจญเฉŒเจคเจฟเจ• เจธเจพเจฐเจฃเฉ€
  • เจตเฉ‡เจ–เฉ‹ - เจตเฉ‡เจ–เฉ‹, เจธเจŸเฉ‹เจฐเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจตเจฐเจšเฉเจ…เจฒ เจŸเฉ‡เจฌเจฒ

เจนเฉ‹เจฐ เจตเฉ€ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจชเจฆเจพเจฐเจฅเฉ€เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจฐเจฃเจจเฉ€เจคเฉ€เจ†เจ‚ เจนเจจ:

  • เจ‡เจจเจ•เจฐเฉ€เจฎเฉˆเจ‚เจŸเจฒ - เจ‡เจจเจ•เจฐเฉ€เจฎเฉˆเจ‚เจŸเจฒ เจฒเฉ‹เจกเจฟเฉฐเจ— (เจตเฉฑเจกเฉ‡ เจคเฉฑเจฅ เจŸเฉ‡เจฌเจฒ เจฆเฉ€); เจจเจตเฉ€เจ†เจ‚ เจฒเจพเจˆเจจเจพเจ‚ เจœเฉ‹เฉœเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ, เจฌเจฆเจฒเฉ€เจ†เจ‚ เจฒเจพเจˆเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจฎเจฟเจŸเจพเจˆเจ†เจ‚ เจ—เจˆเจ†เจ‚ เจฒเจพเจˆเจจเจพเจ‚ เจธเจพเจซเจผ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ 
  • เจ‡เจซเฉ‡เจฎเจฐเจฒ - เจฎเจพเจกเจฒ เจธเจฟเฉฑเจงเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจนเฉ€เจ‚ เจฌเจฃเจฆเจพ, เจชเจฐ เจฆเฉ‚เจœเฉ‡ เจฎเจพเจกเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• CTE เจตเจœเฉ‹เจ‚ เจนเจฟเฉฑเจธเจพ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆ
  • เจ•เฉ‹เจˆ เจนเฉ‹เจฐ เจฐเจฃเจจเฉ€เจคเฉ€เจ†เจ‚ เจœเฉ‹ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจœเฉ‹เฉœ เจธเจ•เจฆเฉ‡ เจนเฉ‹

เจชเจฆเจพเจฐเจฅเฉ€เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจฐเจฃเจจเฉ€เจคเฉ€เจ†เจ‚ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ–เจพเจธ เจธเจŸเฉ‹เจฐเฉ‡เจœเจผเจพเจ‚ เจฒเจˆ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ เจฆเฉ‡ เจฎเฉŒเจ•เฉ‡ เจนเจจ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ:

  • snowflake: เจ…เจธเจฅเจพเจˆ เจŸเฉ‡เจฌเจฒ, เจฐเจฒเฉ‡เจตเจพเจ‚ เจตเจฟเจนเจพเจฐ, เจŸเฉ‡เจฌเจฒ เจ•เจฒเฉฑเจธเจŸเจฐเจฟเฉฐเจ—, เจ…เจจเฉเจฆเจพเจจเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเจจเจพ, เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจฆเฉเจฐเจฟเจธเจผ
  • Redshift: เจกเจฟเจธเจŸเจ•เฉ€, เจธเฉ‹เจฐเจŸเจ•เฉ€ (เจ‡เฉฐเจŸเจฐเจฒเฉ€เจตเจก, เจ•เฉฐเจชเจพเจŠเจ‚เจก), เจฒเฉ‡เจŸ เจฌเจพเจˆเจกเจฟเฉฐเจ— เจตเจฟเจŠเจœเจผ
  • เจฌเจฟเจ—เจ•เฉ‹เจฐเฉ€: เจŸเฉ‡เจฌเจฒ เจตเจฟเจญเจพเจ—เฉ€เจ•เจฐเจจ เจ…เจคเฉ‡ เจ•เจฒเฉฑเจธเจŸเจฐเจฟเฉฐเจ—, เจฐเจฒเฉ‡เจตเจพเจ‚ เจตเจฟเจนเจพเจฐ, KMS เจเจจเจ•เฉเจฐเจฟเจชเจธเจผเจจ, เจฒเฉ‡เจฌเจฒ เจ…เจคเฉ‡ เจŸเฉˆเจ—เจธ
  • เจธเจชเจพเจฐเจ•: เจซเจพเจˆเจฒ เจซเจพเจฐเจฎเฉˆเจŸ (เจชเจพเจฐเจ•เฉเจเจŸ, csv, json, orc, delta), partition_by, clustered_by, buckets, incremental_strategy

เจจเจฟเจฎเจจเจฒเจฟเจ–เจค เจธเจŸเฉ‹เจฐเฉ‡เจœ เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจธเจฎเจฐเจฅเจฟเจค เจนเจจ:

  • เจชเฉ‹เจธเจŸเจ—เจฐเฉ‡เจธ
  • Redshift
  • เจฌเจฟเจ—เจ•เฉ‹เจฐเฉ€
  • snowflake
  • เจชเฉเจฐเฉ€เจธเจŸเฉ‹ (เจ…เฉฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡)
  • เจธเจชเจพเจฐเจ• (เจ…เฉฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡)
  • Microsoft SQL เจธเจฐเจตเจฐ (เจ•เจฎเจฟเจŠเจจเจฟเจŸเฉ€ เจ…เจกเจพเจชเจŸเจฐ)

เจ†เจ“ เจ†เจชเจฃเฉ‡ เจฎเจพเจกเจฒ เจจเฉ‚เฉฐ เจธเฉเจงเจพเจฐเฉ€เจ:

  • เจ†เจ‰ เจ‡เจธเจฆเฉ€ เจญเจฐเจพเจˆ เจจเฉ‚เฉฐ เจตเจพเจงเจพ (เจตเจงเฉ‡ เจนเฉ‹เจ) เจ•เจฐเฉ€เจ
  • เจ†เจ‰ 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

เจฎเจพเจกเจฒ เจจเจฟเจฐเจญเจฐเจคเจพ เจ—เฉเจฐเจพเจซเจผ

เจ‡เจน เจ‡เฉฑเจ• เจจเจฟเจฐเจญเจฐเจคเจพ เจฆเจพ เจฐเฉเฉฑเจ– เจตเฉ€ เจนเฉˆเฅค เจ‡เจธเจจเฉ‚เฉฐ เจกเฉ€เจเจœเฉ€ (เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฟเจก เจเจธเฉ€เจ•เจฒเฉ€เจ• เจ—เฉเจฐเจพเจซ) เจตเจœเฉ‹เจ‚ เจตเฉ€ เจœเจพเจฃเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

DBT เจธเจพเจฐเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฎเจพเจกเจฒเจพเจ‚ เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจฆเฉ‡ เจ…เจงเจพเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจ—เฉเจฐเจพเจซ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจœเจพเจ‚ เจ‡เจธ เจฆเฉ€ เจฌเจœเจพเจ, เจฎเจพเจกเจฒเจพเจ‚ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจนเฉ‹เจฐ เจฎเจพเจกเจฒเจพเจ‚ เจฒเจˆ เจฐเฉˆเจซ() เจฒเจฟเฉฐเจ•เจธเฅค เจ—เฉเจฐเจพเจซเจผ เจนเฉ‹เจฃ เจจเจพเจฒ เจคเฉเจธเฉ€เจ‚ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€เจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

  • เจธเจนเฉ€ เจ•เฉเจฐเจฎ เจตเจฟเฉฑเจš เจฎเจพเจกเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃเจพ
  • เจธเจŸเฉ‹เจฐเจซเจฐเฉฐเจŸ เจ—เจ เจจ เจฆเฉ‡ เจธเจฎเจพเจจเจคเจพ
  • เจ‡เฉฑเจ• เจ†เจฐเจฌเจฟเจŸเจฐเจฐเฉ€ เจธเจฌเจ—เฉเจฐเจพเจซ เจšเจฒเจพ เจฐเจฟเจนเจพ เจนเฉˆ 

เจ—เฉเจฐเจพเจซ เจตเจฟเจœเจผเฉ‚เจ…เจฒเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ:

เจกเฉ‡เจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ เจœเจพเจ‚ เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจ…เจคเฉ‡ เจธเจฎเฉ‚เจฅเฉ€ เจตเจฟเจšเจ•เจพเจฐ เจ†เจฎ เจ•เฉ€ เจนเฉˆ
เจ—เฉเจฐเจพเจซ เจฆเจพ เจนเจฐเฉ‡เจ• เจจเฉ‹เจก เจ‡เฉฑเจ• เจฎเจพเจกเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆ; เจ—เฉเจฐเจพเจซ เจฆเฉ‡ เจ•เจฟเจจเจพเจฐเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจธเจฎเฉ€เจ•เจฐเจจ เจฐเฉˆเจซ เจฆเฉเจ†เจฐเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจกเจพเจŸเจพ เจ—เฉเจฃเจตเฉฑเจคเจพ เจ…เจคเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ

เจฎเจพเจกเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ–เฉเจฆ เจคเจฟเจ†เจฐ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, DBT เจคเฉเจนเจพเจจเฉ‚เฉฐ เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚ เจกเจพเจŸเจพ เจธเฉˆเฉฑเจŸ เจฌเจพเจฐเฉ‡ เจ•เจˆ เจงเจพเจฐเจจเจพเจตเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ:

  • เจจเจฒ เจจเจนเฉ€เจ‚
  • เจตเจฟเจฒเฉฑเจ–เจฃ
  • เจธเฉฐเจฆเจฐเจญ เจ‡เจ•เจธเจพเจฐเจคเจพ - เจธเฉฐเจฆเจฐเจญ เจ‡เจ•เจธเจพเจฐเจคเจพ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ†เจฐเจกเจฐ เจŸเฉ‡เจฌเจฒ เจตเจฟเฉฑเจš เจ—เจพเจนเจ•_เจ†เจˆเจกเฉ€ เจ—เจพเจนเจ• เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš เจ†เจˆเจกเฉ€ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆ)
  • เจธเจตเฉ€เจ•เจพเจฐเจฏเฉ‹เจ— เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆ

เจคเฉเจนเจพเจกเฉ‡ เจ†เจชเจฃเฉ‡ เจŸเฉˆเจธเจŸเจพเจ‚ (เจ•เจธเจŸเจฎ เจกเฉ‡เจŸเจพ เจŸเฉˆเจธเจŸ) เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ เจธเฉฐเจญเจต เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจฆเจฟเจจ, เจ‡เฉฑเจ• เจนเจซเจผเจคเฉ‡, เจ‡เฉฑเจ• เจฎเจนเฉ€เจจเจพ เจชเจนเจฟเจฒเจพเจ‚ เจฆเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจฎเจพเจฒเฉ€เจ เจฆเจพ % เจตเจฟเจตเจนเจพเจฐเฅค เจ‡เฉฑเจ• 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']

เจ…เจคเฉ‡ เจ‡เฉฑเจฅเฉ‡ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ‡เจน เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€ เจตเฉˆเจฌเจธเจพเจˆเจŸ 'เจคเฉ‡ เจ•เจฟเจตเฉ‡เจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

เจกเฉ‡เจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ เจœเจพเจ‚ เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจ…เจคเฉ‡ เจธเจฎเฉ‚เจฅเฉ€ เจตเจฟเจšเจ•เจพเจฐ เจ†เจฎ เจ•เฉ€ เจนเฉˆ

เจฎเฉˆเจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจฎเฉ‹เจกเฉ€เจŠเจฒ

เจกเฉ€เจฌเฉ€เจŸเฉ€ เจฆเจพ เจ‰เจฆเฉ‡เจธเจผ SQL เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจฌเจฃเจจเจพ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจชเจฐ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจ†เจชเจฃเฉ‡ เจชเจฐเจฟเจตเจฐเจคเจจ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจ‡เจนเจจเจพเจ‚ เจฎเฉ‹เจกเจฟเจŠเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฐเจกเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจผเจ•เจคเฉ€เจธเจผเจพเจฒเฉ€ เจ…เจคเฉ‡ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ-เจ…เจฎเฉ€เจฐ เจธเจพเจงเจจ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจเจพ เจนเฉˆเฅค

เจฎเฉˆเจ•เจฐเฉ‹เจœเจผ เจฐเจšเจจเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจธเจฎเฉ€เจ•เจฐเจจเจพเจ‚ เจฆเฉ‡ เจธเฉˆเฉฑเจŸ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจพเจกเจฒเจพเจ‚ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจซเฉฐเจ•เจธเจผเจจ เจ•เจฟเจนเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจฎเฉˆเจ•เจฐเฉ‹เจœเจผ เจคเฉเจนเจพเจจเฉ‚เฉฐ 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 เจ‡เฉฑเจ• เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ เจฆเฉ‡ เจจเจพเจฒ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจฎเฉˆเจกเจฟเจŠเจฒเจพเจ‚ เจ…เจคเฉ‡ เจฎเฉˆเจ•เจฐเฉ‹ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจฆเฉเจฌเจพเจฐเจพ เจตเจฐเจคเจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจฒเฉ‹เจก เจ•เจฐเจจ เจ…เจคเฉ‡ เจตเจฐเจคเจฃ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹เจฃเจพ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ:

  • dbt_utils: เจฎเจฟเจคเฉ€/เจธเจฎเจพเจ‚, เจธเจฐเฉ‹เจ—เฉ‡เจŸ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚, เจธเจ•เฉ€เจฎเจพ เจŸเฉˆเจธเจŸ, เจชเฉ€เจตเฉ‹เจŸ/เจ…เจจเจชเฉ€เจตเฉ‹เจŸ เจ…เจคเฉ‡ เจนเฉ‹เจฐเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ
  • เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ‡ เจธเจผเฉ‹เจ•เฉ‡เจธ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸเจธ เจฌเจฐเจซเจฌเจพเจฐเฉ€ ะธ เจธเจŸเจฐเจฟเจช 
  • เจ–เจพเจธ เจกเจพเจŸเจพ เจธเจŸเฉ‹เจฐเจพเจ‚ เจฒเจˆ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ Redshift 
  • เจฒเจพเจ— - DBT เจ•เจพเจฐเจตเจพเจˆ เจจเฉ‚เฉฐ เจฒเฉŒเจ— เจ•เจฐเจจ เจฒเจˆ เจฎเฉ‹เจกเฉ€เจŠเจฒ

เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจฆเฉ€ เจชเฉ‚เจฐเฉ€ เจธเฉ‚เจšเฉ€ เจ‡เฉฑเจฅเฉ‡ เจฒเฉฑเจญเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ dbt เจนเฉฑเจฌ.

เจนเฉ‹เจฐ เจตเฉ€ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚

เจ‡เฉฑเจฅเฉ‡ เจฎเฉˆเจ‚ เจ•เฉเจ เจนเฉ‹เจฐ เจฆเจฟเจฒเจšเจธเจช เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจฒเจพเจ—เฉ‚เจ•เจฐเจจเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจพเจ‚เจ—เจพ เจœเฉ‹ เจŸเฉ€เจฎ เจ…เจคเฉ‡ เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจตเจฐเจคเจฆเฉ‡ เจนเจพเจ‚เฅค เจตเฉเจนเฉ€เจฒเฉ€.

เจฐเจจเจŸเจพเจˆเจฎ เจตเจพเจคเจพเจตเจฐเจจ เจจเฉ‚เฉฐ เจตเฉฑเจ– เจ•เจฐเจจเจพ 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 -%}
 
)

เจ‡เจน เจ•เฉ‹เจก เจธเจผเจพเจฌเจฆเจฟเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เจนเจฟเฉฐเจฆเจพ เจนเฉˆ: เจตเจพเจคเจพเจตเจฐเจฃ เจฒเจˆ dev, test, ci เจธเจฟเจฐเจซเจผ เจชเจฟเจ›เจฒเฉ‡ 3 เจฆเจฟเจจเจพเจ‚ เจฒเจˆ เจกเฉ‡เจŸเจพ เจฒเจ“ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจจเจนเฉ€เจ‚เฅค เจฏเจพเจจเฉ€, เจ‡เจนเจจเจพเจ‚ เจตเจพเจคเจพเจตเจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš เจšเฉฑเจฒเจฃเจพ เจฌเจนเฉเจค เจคเฉ‡เจœเจผ เจนเฉ‹เจตเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจ˜เฉฑเจŸ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค เจœเจฆเฉ‹เจ‚ เจตเจพเจคเจพเจตเจฐเจฃ 'เจคเฉ‡ เจšเฉฑเจฒเจฆเจพ เจนเฉˆ เจชเฉ‡เจธเจผเฉ‡ เจซเจฟเจฒเจŸเจฐ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจ…เจฃเจกเจฟเฉฑเจ  เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจตเจฟเจ•เจฒเจชเจฟเจ• เจ•เจพเจฒเจฎ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจฆเฉ‡ เจจเจพเจฒ เจชเจฆเจพเจฐเจฅเฉ€เจ•เจฐเจจ

Redshift เจ‡เฉฑเจ• เจ•เจพเจฒเจฎ DBMS เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจนเจฐเฉ‡เจ• เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจ•เจพเจฒเจฎ เจฒเจˆ เจกเจพเจŸเจพ เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจ…เจจเฉเจ•เฉ‚เจฒ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจจเจพเจฒ เจกเจฟเจธเจ• เจธเจชเฉ‡เจธ เจจเฉ‚เฉฐ 20-50% เจคเฉฑเจ• เจ˜เจŸเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจฎเฉˆเจ•เจฐเฉ‹ redshift.compress_table ANALYZE COMPRESSION เจ•เจฎเจพเจ‚เจก เจจเฉ‚เฉฐ เจšเจฒเจพเจเจ—เจพ, เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เฉ€เจคเฉ‡ เจ•เจพเจฒเจฎ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ, เจจเจฟเจธเจผเจšเจฟเจค เจธเฉˆเจ—เจฎเฉˆเจ‚เจŸเฉ‡เจธเจผเจจ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ (dist_key) เจ…เจคเฉ‡ เจ›เจพเจ‚เจŸเจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ (sort_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 (เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจซเฉฐเจ•เจธเจผเจจ), เจคเจพเจ‚ เจ‡เจนเจจเจพเจ‚ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเจพ เจธเฉฐเจธเจ•เจฐเจฃ, เจชเจนเฉเฉฐเจš เจจเจฟเจฏเฉฐเจคเจฐเจฃ, เจ…เจคเฉ‡ เจจเจตเฉ‡เจ‚ เจฐเฉ€เจฒเฉ€เจœเจผเจพเจ‚ เจฆเฉ€ เจธเจตเฉˆเจšเจฒเจฟเจค เจฐเฉ‹เจฒเจฟเฉฐเจ— เจกเฉ€เจฌเฉ€เจŸเฉ€ เจตเจฟเฉฑเจš เจ•เจฐเจจเจพ เจฌเจนเฉเจค เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจนเฉˆเจธเจผเจพเจ‚, เจˆเจฎเฉ‡เจฒ เจกเฉ‹เจฎเฉ‡เจจเจพเจ‚, เจ…เจคเฉ‡ เจฌเจฟเฉฑเจŸเจฎเจพเจธเจ• เจกเฉ€เจ•เฉ‹เจกเจฟเฉฐเจ— เจฆเฉ€ เจ—เจฃเจจเจพ เจ•เจฐเจจ เจฒเจˆ เจชเจพเจˆเจฅเจจ เจตเจฟเฉฑเจš UDF เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจ‡เฉฑเจ• เจฎเฉˆเจ•เจฐเฉ‹ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจœเฉ‹ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจตเจพเจคเจพเจตเจฐเจจ (dev, test, prod) 'เจคเฉ‡ เจ‡เฉฑเจ• 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_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 %}

DBT เจ•เจฒเจพเจŠเจก

DBT เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ (เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจธเฉ‡เจตเจพ) เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฃเจพ เจธเฉฐเจญเจต เจนเฉˆเฅค เจธเจผเจพเจฎเจฒ:

  • เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจ…เจคเฉ‡ เจฎเจพเจกเจฒเจพเจ‚ เจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจฒเจˆ เจตเฉˆเฉฑเจฌ IDE
  • เจจเฉŒเจ•เจฐเฉ€ เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจ…เจคเฉ‡ เจธเจฎเจพเจ‚-เจธเจพเจฐเจฃเฉ€
  • เจฒเฉŒเจ—เจธ เจคเฉฑเจ• เจธเจฐเจฒ เจ…เจคเฉ‡ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจชเจนเฉเฉฐเจš
  • เจคเฉเจนเจพเจกเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจตเจพเจฒเฉ€ เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ
  • เจ•เจจเฉˆเจ•เจŸเจฟเฉฐเจ— CI (เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ)

เจกเฉ‡เจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ เจœเจพเจ‚ เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจ…เจคเฉ‡ เจธเจฎเฉ‚เจฅเฉ€ เจตเจฟเจšเจ•เจพเจฐ เจ†เจฎ เจ•เฉ€ เจนเฉˆ

เจธเจฟเฉฑเจŸเจพ

DWH เจจเฉ‚เฉฐ เจคเจฟเจ†เจฐ เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจธเฉ‡เจตเจจ เจ•เจฐเจจเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจฆเฉ€ เจชเฉ€เจฃ เจœเจฟเฉฐเจจเจพ เจฎเจœเจผเฉ‡เจฆเจพเจฐ เจ…เจคเฉ‡ เจฒเจพเจญเจ•เจพเจฐเฉ€ เจฌเจฃ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค DBT เจตเจฟเฉฑเจš เจœเจฟเฉฐเจœเจพ, เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ (เจฎเฉŒเจกเจฟเจŠเจฒ), เจ‡เฉฑเจ• เจ•เฉฐเจชเจพเจˆเจฒเจฐ, เจ‡เฉฑเจ• เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเจฐ, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค เจ‡เจนเจจเจพเจ‚ เจคเฉฑเจคเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เฉ‡ เจฐเฉฑเจ– เจ•เฉ‡ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจฒเจˆ เจ‡เฉฑเจ• เจธเฉฐเจชเฉ‚เจฐเจจ เจ•เฉฐเจฎ เจ•เจฐเจจ เจตเจพเจฒเจพ เจตเจพเจคเจพเจตเจฐเจฃ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเฉ‹เฅค เจ…เฉฑเจœ DWH เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจชเจฐเจฟเจตเจฐเจคเจจ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ•เจฐเจจ เจฆเจพ เจธเจผเจพเจ‡เจฆ เจนเฉ€ เจ•เฉ‹เจˆ เจตเจงเฉ€เจ† เจคเจฐเฉ€เจ•เจพ เจนเฉˆเฅค

เจกเฉ‡เจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ เจœเจพเจ‚ เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจ…เจคเฉ‡ เจธเจฎเฉ‚เจฅเฉ€ เจตเจฟเจšเจ•เจพเจฐ เจ†เจฎ เจ•เฉ€ เจนเฉˆ

DBT เจฆเฉ‡ เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจ…เจชเจฃเจพเจ เจตเจฟเจธเจผเจตเจพเจธเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจ…เจจเฉเจธเจพเจฐ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ:

  • เจ•เฉ‹เจก, GUI เจจเจนเฉ€เจ‚, เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃเจพเจคเจฎเจ• เจคเจฐเจ• เจจเฉ‚เฉฐ เจชเฉเจฐเจ—เจŸ เจ•เจฐเจจ เจฒเจˆ เจธเจญ เจคเฉ‹เจ‚ เจตเจงเฉ€เจ† เจเจฌเจธเจŸเจฐเฉˆเจ•เจธเจผเจจ เจนเฉˆ
  • เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจธเจพเจซเจŸเจตเฉ‡เจ…เจฐ เจ‡เฉฐเจœเฉ€เจจเฉ€เจ…เจฐเจฟเฉฐเจ— (เจธเจพเจซเจŸเจตเฉ‡เจ…เจฐ เจ‡เฉฐเจœเฉ€เจจเฉ€เจ…เจฐเจฟเฉฐเจ—) เจตเจฟเฉฑเจš เจธเจญ เจคเฉ‹เจ‚ เจตเจงเฉ€เจ† เจ…เจญเจฟเจ†เจธเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ‰เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ

  • เจจเจพเจœเจผเฉเจ• เจกเฉ‡เจŸเจพ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจจเฉ‚เฉฐ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจญเจพเจˆเจšเจพเจฐเฉ‡ เจฆเฉเจ†เจฐเจพ เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ เจตเจœเฉ‹เจ‚ เจจเจฟเจฏเฉฐเจคเจฐเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ
  • เจธเจฟเจฐเจซเจผ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจŸเฉ‚เจฒ เจนเฉ€ เจจเจนเฉ€เจ‚, เจธเจ—เฉ‹เจ‚ เจ•เฉ‹เจก เจตเฉ€ เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจ•เจฎเจฟเจŠเจจเจฟเจŸเฉ€ เจฆเฉ€ เจธเฉฐเจชเจคเฉ€ เจฌเจฃ เจœเจพเจฃเจ—เฉ‡

เจ‡เจนเจจเจพเจ‚ เจฎเฉ‚เจฒ เจตเจฟเจธเจผเจตเจพเจธเจพเจ‚ เจจเฉ‡ เจ‡เฉฑเจ• เจ‰เจคเจชเจพเจฆ เจชเฉˆเจฆเจพ เจ•เฉ€เจคเจพ เจนเฉˆ เจœเฉ‹ เจ…เฉฑเจœ 850 เจคเฉ‹เจ‚ เจตเฉฑเจง เจ•เฉฐเจชเจจเฉ€เจ†เจ‚ เจฆเฉเจ†เจฐเจพ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‰เจน เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฆเจฟเจฒเจšเจธเจช เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจเจพเจ‚ เจฆเจพ เจ†เจงเจพเจฐ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจ เจœเฉ‹ เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจฌเจฃเจพเจ เจœเจพเจฃเจ—เฉ‡เฅค

เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฃ เจตเจพเจฒเจฟเจ†เจ‚ เจฒเจˆ, เจ‡เฉฑเจ• เจ“เจชเจจ เจธเจฌเจ• เจฆเจพ เจ‡เฉฑเจ• เจตเฉ€เจกเฉ€เจ“ เจนเฉˆ เจœเฉ‹ เจฎเฉˆเจ‚ เจ•เฉเจ เจฎเจนเฉ€เจจเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ OTUS เจตเจฟเจ–เฉ‡ เจ‡เฉฑเจ• เจ–เฉเฉฑเจฒเฉ‡ เจชเจพเจ  เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚ เจฆเจฟเฉฑเจคเจพ เจธเฉ€ - เจเจฎเจพเจœเจผเจพเจจ เจฐเฉˆเฉฑเจกเจธเจผเจฟเจซเจŸ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจฒเจˆ เจกเจพเจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ.

DBT เจ…เจคเฉ‡ เจกเจพเจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธเจฟเฉฐเจ— เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, OTUS เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ 'เจคเฉ‡ เจกเจพเจŸเจพ เจ‡เฉฐเจœเฉ€เจจเฉ€เจ…เจฐ เจ•เฉ‹เจฐเจธ เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚, เจฎเฉˆเจ‚ เจ…เจคเฉ‡ เจฎเฉ‡เจฐเฉ‡ เจธเจนเจฟเจฏเฉ‹เจ—เฉ€ เจ•เจˆ เจนเฉ‹เจฐ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ…เจคเฉ‡ เจ†เจงเฉเจจเจฟเจ• เจตเจฟเจธเจผเจฟเจ†เจ‚ 'เจคเฉ‡ เจ•เจฒเจพเจธเจพเจ‚ เจชเฉœเฉเจนเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚:

  • เจตเฉฑเจกเฉ‡ เจกเฉ‡เจŸเจพ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐเจฒ เจงเจพเจฐเจจเจพเจตเจพเจ‚
  • เจธเจชเจพเจฐเจ• เจ…เจคเฉ‡ เจธเจชเจพเจฐเจ• เจธเจŸเฉเจฐเฉ€เจฎเจฟเฉฐเจ— เจจเจพเจฒ เจ…เจญเจฟเจ†เจธ เจ•เจฐเฉ‹
  • เจกเจพเจŸเจพ เจธเจฐเฉ‹เจคเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉ‹เจก เจ•เจฐเจจ เจฒเจˆ เจขเฉฐเจ—เจพเจ‚ เจ…เจคเฉ‡ เจธเจพเจงเจจเจพเจ‚ เจฆเฉ€ เจชเฉœเจšเฉ‹เจฒ เจ•เจฐเจจเจพ
  • DWH เจตเจฟเฉฑเจš เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃเจพเจคเจฎเจ• เจธเจผเฉ‹เจ…เจ•เฉ‡เจธ เจฌเจฃเจพเจ‰เจฃเจพ
  • NoSQL เจธเฉฐเจ•เจฒเจช: HBase, Cassandra, ElasticSearch
  • เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ…เจคเฉ‡ เจ†เจฐเจ•เฉˆเจธเจŸเฉ‡เจธเจผเจจ เจฆเฉ‡ เจธเจฟเจงเจพเจ‚เจค 
  • เจ…เฉฐเจคเจฎ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ: เจธเจฒเจพเจนเจ•เจพเจฐ เจธเจนเจพเจ‡เจคเจพ เจฆเฉ‡ เจ…เจงเฉ€เจจ เจธเจพเจฐเฉ‡ เจนเฉเจจเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจจเจพ

เจฒเจฟเฉฐเจ•:

  1. DBT เจฆเจธเจคเจพเจตเฉ‡เจœเจผ - เจœเจพเจฃ-เจชเจ›เจพเจฃ - เจ…เจงเจฟเจ•เจพเจฐเจค เจฆเจธเจคเจพเจตเฉ‡เจœเจผ
  2. เจ•เฉ€, เจ…เจธเจฒ เจตเจฟเฉฑเจš, เจกเฉ€เจฌเฉ€เจŸเฉ€ เจนเฉˆ? โ€” DBT เจฆเฉ‡ เจฒเฉ‡เจ–เจ•เจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฆเฉเจ†เจฐเจพ เจฒเฉ‡เจ– เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹ 
  3. เจเจฎเจพเจœเจผเจพเจจ เจฐเฉˆเฉฑเจกเจธเจผเจฟเจซเจŸ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจฒเจˆ เจกเจพเจŸเจพ เจฌเจฟเจฒเจก เจŸเฉ‚เจฒ โ€” YouTube, เจ‡เฉฑเจ• OTUS เจ–เฉเฉฑเจฒเฉ‡ เจชเจพเจ  เจฆเฉ€ เจฐเจฟเจ•เจพเจฐเจกเจฟเฉฐเจ—
  4. เจ—เฉเจฐเฉ€เจจเจชเจฒเจฎ เจจเฉ‚เฉฐ เจœเจพเจฃเจจเจพ - เจ…เจ—เจฒเจพ เจ–เฉเฉฑเจฒเจพ เจชเจพเจ  15 เจฎเจˆ, 2020 เจนเฉˆ
  5. เจกเจพเจŸเจพ เจ‡เฉฐเจœเฉ€เจจเฉ€เจ…เจฐเจฟเฉฐเจ— เจ•เฉ‹เจฐเจธ -เจ“เจŸเจธ
  6. เจ‡เฉฑเจ• เจชเจฐเจฟเจชเฉฑเจ• เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจตเจฐเจ•เจซเจฒเฉ‹ เจฌเจฃเจพเจ‰เจฃเจพ - เจกเฉ‡เจŸเจพ เจ…เจคเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉ‡ เจญเจตเจฟเฉฑเจ– 'เจคเฉ‡ เจ‡เฉฑเจ• เจจเจœเจผเจฐ
  7. เจ‡เจน เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเจพ เจธเจฎเจพเจ‚ เจนเฉˆ - เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเจพ เจตเจฟเจ•เจพเจธ เจ…เจคเฉ‡ เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจฆเจพ เจชเฉเจฐเจญเจพเจต
  8. dbtCloud เจจเจพเจฒ เจจเจฟเจฐเฉฐเจคเจฐ เจเจ•เฉ€เจ•เจฐเจฃ เจ…เจคเฉ‡ เจ†เจŸเฉ‹เจฎเฉ‡เจŸเจฟเจก เจฌเจฟเจฒเจก เจŸเฉˆเจธเจŸเจฟเฉฐเจ— - DBT เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ CI เจฌเจฃเจพเจ‰เจฃ เจฆเฉ‡ เจธเจฟเจงเจพเจ‚เจค
  9. DBT เจŸเจฟเจŠเจŸเฉ‹เจฐเจฟเจ…เจฒ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจเจพ - เจธเฉเจคเฉฐเจคเจฐ เจ•เฉฐเจฎ เจฒเจˆ เจ…เจญเจฟเจ†เจธ, เจ•เจฆเจฎ-เจฆเจฐ-เจ•เจฆเจฎ เจจเจฟเจฐเจฆเฉ‡เจธเจผ
  10. เจœเจพเจซเจฒ เจฆเฉ€ เจฆเฉเจ•เจพเจจ - เจ—เจฟเจฅเจฌ เจกเฉ€เจฌเฉ€เจŸเฉ€ เจŸเจฟเจŠเจŸเฉ‹เจฐเจฟเจ…เจฒ - เจ—เจฟเจฅเจฌ, เจตเจฟเจฆเจฟเจ…เจ• เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ•เฉ‹เจก

เจ•เฉ‹เจฐเจธ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจœเจพเจฃเฉ‹เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹