Data Build Tool သို့မဟုတ် Data Warehouse နဟင့် Smoothie ကဌာသတလင် အသုံသမျာသသည်။

Data Build Tool သို့မဟုတ် Data Warehouse နဟင့် Smoothie ကဌာသတလင် အသုံသမျာသသည်။
စံပဌ Data Warehouse ကို မည်သည့်အခဌေခံမူမျာသဖဌင့် တည်ဆောက်သနည်သ။

boilerplate code မပါရဟိဘဲ လုပ်ငန်သတန်ဖိုသနဟင့် ခလဲခဌမ်သစိတ်ဖဌာချက်မျာသကို အာရုံစိုက်ပါ။ DWH ကို codebase အဖဌစ် စီမံခန့်ခလဲခဌင်သ- ဗာသရဟင်သထုတ်ခဌင်သ၊ ပဌန်လည်သုံသသပ်ခဌင်သ၊ အလိုအလျောက် စမ်သသပ်ခဌင်သနဟင့် CI။ Modular၊ တိုသချဲ့နိုင်သော၊ open source နဟင့် အသိုင်သအဝိုင်သ။ အသုံသပဌုရလလယ်ကူသော စာရလက်စာတမ်သမျာသနဟင့် မဟီခိုမဟုမဌင်ယောင်ခဌင်သ (Data Lineage)။

ကအရာအာသလုံသအကဌောင်သနဟင့် Big Data & Analytics ဂေဟစနစ်တလင် DBT အခန်သကဏ္ဍအကဌောင်သ - cat မဟကဌိုဆိုပါတယ်။

မင်္ဂလာပါလူတိုင်သအတလက်

Artemy Kozyr က ဆက်သလယ်နေပါတယ်။ ကျလန်ုပ်သည် ဒေတာသိုလဟောင်ရုံမျာသ၊ ETL/ELT တည်ဆောက်ခဌင်သ၊ ဒေတာခလဲခဌမ်သစိတ်ဖဌာခဌင်သနဟင့် စိတ်ကူသပုံဖော်ခဌင်သတို့ကို 5 နဟစ်ကျော်ကဌာ လုပ်ဆောင်ခဲ့သည်။ ကျလန်တော်လက်ရဟိအလုပ်လုပ်နေပါတယ်။ ညည်သတလာသသင်တန်သမဟာ OTUS မဟာ သင်ပေသတယ်။ ဒေတာမျာသကိုအင်ဂျင်နီယာချုပ်၊ ဒီနေ့တော့ စပဌီသမျဟော်လင့်ချက်နဲ့ ရေသထာသတဲ့ ဆောင်သပါသတစ်ပုဒ်ကို မျဟဝေချင်ပါတယ်။ သင်တန်သအတလက် စာရင်သပေသသလင်သမဟုအသစ်.

အနဟစ်ချုပ်

DBT မူဘောင်သည် ELT (Extract - Transform - Load) အတိုကောက်ရဟိ T နဟင့် ပတ်သက်သည်။

BigQuery၊ Redshift၊ Snowflake ကဲ့သို့ ဖဌစ်ထလန်သပဌီသ အရလယ်တင်နိုင်သော ခလဲခဌမ်သစိတ်ဖဌာနိုင်သော ဒေတာဘေ့စ်မျာသ ထလန်သကာသလာသဖဌင့် Data Warehouse အပဌင်ဘက်တလင် အသလင်ပဌောင်သမဟုမျာသ ပဌုလုပ်ရန် ကိစ္စမရဟိပါ။ 

DBT သည် ရင်သမဌစ်မျာသမဟ ဒေတာကို ဒေါင်သလုဒ်မလုပ်သော်လည်သ Storage (Internal သို့မဟုတ် External Storage) တလင် ထည့်သလင်သပဌီသသော ဒေတာနဟင့် လုပ်ဆောင်ရန်အတလက် အခလင့်အလမ်သကောင်သမျာသ ပေသပါသည်။

Data Build Tool သို့မဟုတ် Data Warehouse နဟင့် Smoothie ကဌာသတလင် အသုံသမျာသသည်။
DBT ၏ အဓိကရည်ရလယ်ချက်မဟာ ကုဒ်ကိုယူ၍ SQL တလင် စုစည်သကာ၊ Repository ရဟိ မဟန်ကန်သော အစီအစဥ်ဖဌင့် အမိန့်မျာသကို လုပ်ဆောင်ရန်ဖဌစ်သည်။

DBT Project Structure

ပရောဂျက်တလင် အမျိုသအစာသ နဟစ်မျိုသသာရဟိသော လမ်သညလဟန်မျာသနဟင့် ဖိုင်မျာသ ပါဝင်သည်-

  • မော်ဒယ် (.sql) - SELECT မေသမဌန်သမဟုဖဌင့် ဖော်ပဌထာသသော အသလင်ပဌောင်သယူနစ်တစ်ခု
  • ဖလဲ့စည်သမဟုဖိုင် (.yml) - ကန့်သတ်ချက်မျာသ၊ ဆက်တင်မျာသ၊ စမ်သသပ်မဟုမျာသ၊ စာရလက်စာတမ်သမျာသ

အခဌေခံအဆင့်တလင် လုပ်ငန်သကို အောက်ပါအတိုင်သ ဖလဲ့စည်သထာသပါသည်။

  • အသုံသပဌုသူသည် အဆင်ပဌေသော IDE တလင် မော်ဒယ်ကုဒ်ကို ပဌင်ဆင်သည်။
  • CLI ကို အသုံသပဌု၍ မော်ဒယ်မျာသကို စတင်လိုက်သည်၊ DBT သည် မော်ဒယ်ကုဒ်ကို SQL သို့ စုစည်သသည်။
  • စုစည်သထာသသော SQL ကုဒ်ကို ပေသထာသသော အစီအစဥ် (ဂရပ်) ဖဌင့် Storage တလင် လုပ်ဆောင်သည်

ကသည်မဟာ CLI မဟ လည်ပတ်နေသည့် ပုံစံဖဌစ်နိုင်သည်-

Data Build Tool သို့မဟုတ် Data Warehouse နဟင့် Smoothie ကဌာသတလင် အသုံသမျာသသည်။

အရာအာသလုံသသည် SELECT ဖဌစ်သည်။

၎င်သသည် Data Build Tool framework ၏ လူသတ်အင်္ဂါရပ်တစ်ခုဖဌစ်သည်။ တစ်နည်သဆိုရသော်၊ DBT သည် သင်၏မေသမဌန်သချက်မျာသကို Store တလင် အကောင်အထည်ပေါ်လာစေခဌင်သနဟင့် ဆက်စပ်နေသော ကုဒ်အာသလုံသကို (CREATE၊ INSERT၊ UPDATE၊ DELETE ALTER၊ GRANT၊ ...) ဟူသော ညလဟန်ကဌာသချက်မျာသမဟ ပဌောင်သလဲမဟုမျာသ။

မော်ဒယ်တိုင်သတလင် ရလဒ်ဒေတာအစုံကို သတ်မဟတ်သည့် SELECT query တစ်ခုရေသသာသခဌင်သ ပါဝင်ပါသည်။

ကကိစ္စတလင်၊ အသလင်ပဌောင်သခဌင်သဆိုင်ရာ ယုတ္တိဗေဒသည် အဆင့်မျာသစလာရဟိပဌီသ အခဌာသမော်ဒယ်မျာသစလာမဟ အချက်အလက်မျာသကို စုစည်သနိုင်သည်။ အမဟာစာပဌခန်သတစ်ခုတည်ဆောက်မည့် နမူနာပုံစံ (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 (Common Table Expressions) ကို အသုံသပဌုထာသသည် - အသလင်ပဌောင်သမဟုမျာသနဟင့် လုပ်ငန်သဆိုင်ရာ ယုတ္တိမျာသစလာပါရဟိသော ကုဒ်မျာသကို စုစည်သနာသလည်စေရန်၊

ဒုတိယ- မော်ဒယ်ကုဒ်သည် SQL နဟင့် ဘာသာစကာသ ရောနဟောထာသသည်။ Jinja (ပုံသလင်သဘာသာစကာသ)။

ဥပမာသည် loop ကိုအသုံသပဌုသည်။ ဘို့ စကာသရပ်တလင် သတ်မဟတ်ထာသသော ငလေပေသချေမဟုနည်သလမ်သတစ်ခုစီအတလက် ပမာဏကို ထုတ်လုပ်ရန် အစုံ. Function ကိုလည်သ အသုံသပဌုထာသပါတယ်။ ref — ကုဒ်အတလင်သ အခဌာသမော်ဒယ်မျာသကို ကိုသကာသနိုင်မဟု-

  • စုစည်သနေစဉ် ref ပစ်မဟတ်ညလဟန်ပဌချက်ကို ဇယာသတစ်ခုသို့ သို့မဟုတ် သိုလဟောင်မဟုတလင် ကဌည့်ရဟုမဟုအဖဌစ်သို့ ပဌောင်သလဲမည်ဖဌစ်သည်။
  • ref model dependency graph ကိုတည်ဆောက်နိုင်စေတယ်။

အမည်ရ Jinja DBT တလင် အကန့်အသတ်မရဟိ ဖဌစ်နိုင်ခဌေမျာသကို ပေါင်သထည့်သည်။ အသုံသအမျာသဆုံသအရာမျာသမဟာ-

  • If / else statements - ဌာနခလဲထုတ်ပဌန်ချက်မျာသ
  • loops - သံသရာအတလက်
  • ကိန်သရဟင်မျာသ
  • Macro - မက်ခရိုဖန်တီသခဌင်သ။

ရုပ်ထလက်ပစ္စည်သ- ဇယာသ၊ မဌင်ကလင်သ၊ တိုသမဌင့်မဟု

Materialization နည်သဗျူဟာသည် ထလက်ပေါ်လာသော မော်ဒယ်ဒေတာအစုအဝေသကို Storage တလင် သိမ်သဆည်သထာသမည့် ချဉ်သကပ်မဟုတစ်ခုဖဌစ်သည်။

အခဌေခံအာသဖဌင့်၎င်သသည်-

  • ဇယာသ - သိုလဟောင်မဟုရဟိ ရုပ်ပိုင်သဆိုင်ရာဇယာသ
  • မဌင်ကလင်သ - မဌင်ကလင်သ၊ သိုလဟောင်မဟုရဟိ ဇယာသအတု

ပိုမိုရဟုပ်ထလေသသော ရုပ်လုံသပေါ်လာရေသ ဗျူဟာမျာသလည်သ ရဟိပါသည်။

  • တိုသမဌင့် - တိုသမဌင့်တင်ခဌင်သ (အမဟန်တကယ် ဇယာသကဌီသမျာသ); လိုင်သအသစ်မျာသထည့်သည်၊ ပဌောင်သထာသသောလိုင်သမျာသကိုအပ်ဒိတ်လုပ်သည်၊ ဖျက်ထာသသောလိုင်သမျာသကိုရဟင်သလင်သသည်။ 
  • Ephemeral - မော်ဒယ်သည် တိုက်ရိုက် အကောင်အထည်ပေါ်မလာသော်လည်သ အခဌာသမော်ဒယ်မျာသတလင် CTE အဖဌစ် ပါဝင်ပါသည်။
  • အခဌာသနည်သဗျူဟာမျာသကို သင်ကိုယ်တိုင်ထည့်နိုင်သည်။

ရုပ်လုံသပေါ်လာခဌင်သဆိုင်ရာ ဗျူဟာမျာသအပဌင်၊ ဥပမာအာသဖဌင့်၊ သီသခဌာသသိုလဟောင်မဟုမျာသအတလက် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ရန် အခလင့်အလမ်သမျာသ ရဟိပါသည်။

  • မိုသစ: ယာယီဇယာသမျာသ၊ အပဌုအမူပေါင်သစည်သခဌင်သ
  • Redshift: Distkey၊ Sortkey (ကဌာသဖဌတ်၊ ပေါင်သစည်သမဟု)၊ နဟောင်သပိုင်သ ချိတ်ဆက်မဟု မဌင်ကလင်သမျာသ
  • BigQuery တလင်: ဇယာသခလဲခလဲခဌာသခဌင်သနဟင့် အစုလိုက်အပဌုံလိုက်၊ ပေါင်သစည်သခဌင်သအပဌုအမူ၊ KMS ကုဒ်ဝဟက်ခဌင်သ၊ အညလဟန်သမျာသနဟင့် တဂ်မျာသ
  • မီသဖလါသ: ဖိုင်ဖော်မတ် (ပါကေသ၊ csv၊ json၊ orc၊ မဌစ်ဝကျလန်သပေါ်ဒေသ)၊ partition_by၊ clustered_by၊ ပုံသမျာသ၊ incremental_strategy

အောက်ဖော်ပဌပါ သိုလဟောင်မဟုမျာသကို လောလောဆယ် ပံ့ပိုသထာသပါသည်။

  • နေပဌည်တော်
  • Redshift
  • BigQuery တလင်
  • မိုသစ
  • Presto (တစ်စိတ်တစ်ပိုင်သ)
  • မီသပလာသ (တစ်စိတ်တစ်ပိုင်သ)
  • Microsoft SQL Server (ကလန်မဌူနတီ ဒက်တာ)

ကျလန်ုပ်တို့၏ မော်ဒယ်ကို မဌဟင့်တင်ကဌပါစို့။

  • ဖဌည့်သလင်သခဌင်သ (Incremental) လုပ်ကဌပါစို့။
  • 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 (Directed Acyclic Graph) ဟုခေါ်သည်။

DBT သည် ပရောဂျက်မော်ဒယ်မျာသအာသလုံသ၏ ဖလဲ့စည်သမဟုပုံစံအပေါ် အခဌေခံ၍ ဂရပ်တစ်ခုကို တည်ဆောက်သည် သို့မဟုတ် ယင်သအစာသ မော်ဒယ်မျာသအတလင်သ ref() လင့်ခ်မျာသကို အခဌာသမော်ဒယ်မျာသနဟင့် ချိတ်ဆက်သည်။ ဂရပ်တစ်ခုရဟိခဌင်သက သင့်အာသ အောက်ပါအရာမျာသကို လုပ်ဆောင်နိုင်စေသည်-

  • မဟန်ကန်သော အစီအစဥ်မျာသဖဌင့် လုပ်ဆောင်နေပါသည်။
  • ဆိုင်မျက်နဟာစာဖလဲ့စည်သခဌင်သ အပဌိုင်
  • မထင်သလို အပိုဒ်ခလဲတစ်ခုကို လုပ်ဆောင်ခဌင်သ။ 

ဂရပ်ဖစ်ပုံဖော်ခဌင်သ၏ ဥပမာ-

Data Build Tool သို့မဟုတ် Data Warehouse နဟင့် Smoothie ကဌာသတလင် အသုံသမျာသသည်။
ဂရပ်၏ node တစ်ခုစီသည် မော်ဒယ်တစ်ခုဖဌစ်သည်၊ ဂရပ်၏အနာသမျာသကို expression ref မဟသတ်မဟတ်ထာသသည်။

ဒေတာအရည်အသလေသနဟင့် စာရလက်စာတမ်သမျာသ

မော်ဒယ်မျာသကို ကိုယ်တိုင်ထုတ်လုပ်ခဌင်သအပဌင်၊ DBT သည် သင့်အာသ ရရဟိလာသော ဒေတာအစုံနဟင့်ပတ်သက်သည့် ယူဆချက်မျာသစလာကို စမ်သသပ်ခလင့်ပဌုသည်-၊

  • Null မဟုတ်ပါ။
  • ထူသခဌာသသော
  • Reference Integrity - ကိုသကာသမဟုဆိုင်ရာ ခိုင်မာမဟု (ဥပမာ၊ အမဟာစာဇယာသရဟိ customer_id သည် ဖောက်သည်ဇယာသရဟိ id နဟင့် သက်ဆိုင်သည်)
  • လက်ခံနိုင်သောတန်ဖိုသမျာသစာရင်သနဟင့် ကိုက်ညီခဌင်သ။

ဥပမာအာသဖဌင့်၊ လလန်ခဲ့သည့်တစ်ရက်၊ တစ်ပတ်၊ တစ်လမဟ အညလဟန်သကိန်သမျာသဖဌင့် ဝင်ငလေ၏ % သလေဖည်ခဌင်သကဲ့သို့သော သင်၏ကိုယ်ပိုင်စမ်သသပ်မဟုမျာသ (စိတ်ကဌိုက်ဒေတာစမ်သသပ်မဟုမျာသ) ကို ထည့်နိုင်သည်။ SQL query တစ်ခုအဖဌစ် ပုံဖော်ထာသသည့် မည်သည့်ယူဆချက်မဆို စမ်သသပ်မဟုတစ်ခု ဖဌစ်လာနိုင်သည်။

ကနည်သအာသဖဌင့်၊ သင်သည် ဂိုဒေါင်ပဌတင်သပေါက်မျာသရဟိ ဒေတာမျာသတလင် မလိုလာသအပ်သော သလေဖည်မဟုမျာသနဟင့် အမဟာသအယလင်သမျာသကို ဖမ်သယူနိုင်ပါသည်။

စာရလက်စာတမ်သကိစ္စမျာသတလင်၊ 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']

ကသည်မဟာ ကစာရလက်စာတမ်သသည် ထုတ်လုပ်ထာသသော ဝဘ်ဆိုက်တလင် မည်သို့သောပုံစံဖဌစ်သည်-

Data Build Tool သို့မဟုတ် Data Warehouse နဟင့် Smoothie ကဌာသတလင် အသုံသမျာသသည်။

Macros နဟင့် Modules

DBT ၏ရည်ရလယ်ချက်မဟာ SQL scripts အစုအဝေသတစ်ခုဖဌစ်လာစေရန်မဟာ မျာသစလာမဟုတ်သော်လည်သ အသုံသပဌုသူမျာသအာသ ၎င်သတို့၏ကိုယ်ပိုင်အသလင်ပဌောင်သမဟုမျာသတည်ဆောက်ခဌင်သနဟင့် က modules မျာသကိုဖဌန့်ဝေခဌင်သအတလက် အစလမ်သထက်ပဌီသ စလမ်သဆောင်မဟုကဌလယ်ဝသောနည်သလမ်သမျာသကို ပေသဆောင်ရန်ဖဌစ်သည်။

Macros သည် မော်ဒယ်မျာသအတလင်သ လုပ်ဆောင်ချက်မျာသအဖဌစ် ခေါ်ဆိုနိုင်သော တည်ဆောက်ပုံမျာသနဟင့် အသုံသအနဟုန်သမျာသ အစုအဝေသမျာသဖဌစ်သည်။ Macros သည် သင့်အာသ DRY (Don't Repeat Yourself) အင်ဂျင်နီယာနိယာမအရ မော်ဒယ်မျာသနဟင့် ပရောဂျက်မျာသကဌာသ SQL ကို ပဌန်လည်အသုံသပဌုခလင့်ပေသသည်။

Macro ဥပမာ-

{% 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ရက်စလဲ/အချိန်၊ Surrogate Keys၊ Schema စမ်သသပ်မဟုမျာသ၊ Pivot/Unpivot နဟင့် အခဌာသအရာမျာသဖဌင့် အလုပ်လုပ်သည်
  • အစရဟိသော ဝန်ဆောင်မဟုမျာသအတလက် အဆင်သင့်လုပ်ထာသသော ပဌပလဲပုံစံမျာသ ဆီသနဟင်သ О အစင်သ 
  • သတ်မဟတ်ထာသသော ဒေတာအရောင်သဆိုင်မျာသအတလက် စာကဌည့်တိုက်မျာသ၊ ဥပမာ။ Redshift 
  • သစ်ထုတ်လုပ်ရေသ - DBT လုပ်ဆောင်ချက်ကို မဟတ်တမ်သတင်ရန်အတလက် မော်ဂျူသ

ပက်ကေ့ဂျ်မျာသစာရင်သ အပဌည့်အစုံကို တလင် ကဌည့်ရဟုနိုင်ပါသည်။ dbt hub.

ပိုလို့တောင် စလမ်သဆောင်နိုင်ပါသေသတယ်။

ကတလင် ကျလန်ုပ်နဟင့်အဖလဲ့သည် Data Warehouse တည်ဆောက်ရာတလင် အသုံသပဌုသည့် အခဌာသစိတ်ဝင်စာသဖလယ်လုပ်ဆောင်ချက်မျာသနဟင့် အကောင်အထည်ဖော်မဟုမျာသကို ဖော်ပဌပါမည်။ ညည်သတလာသ.

Runtime ပတ်၀န်သကျင်မျာသကို ခလဲခဌာသခဌင်သ 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၊ စမ်သသပ်၊ ci ပဌီသခဲ့သော 3 ရက်အတလက်သာ ဒေတာကို မယူတော့ပါ။ ဆိုလိုသည်မဟာ၊ ကပတ်ဝန်သကျင်မျာသတလင် လည်ပတ်ခဌင်သသည် ပိုမိုမဌန်ဆန်မည်ဖဌစ်ပဌီသ အရင်သအမဌစ်အနည်သငယ် လိုအပ်ပါသည်။ ပတ်ဝန်သကျင်ကို လည်ပတ်နေချိန် ရော့ စစ်ထုတ်မဟုအခဌေအနေအာသ လျစ်လျူရဟုပါမည်။

အလဟည့်ကျ ကော်လံ ကုဒ်ဖဌင့် ပုံဖော်ခဌင်သ။

Redshift သည် ကော်လံတစ်ခုစီအတလက် data compression algorithms မျာသကို သတ်မဟတ်ခလင့်ပဌုသည့် columnar DBMS တစ်ခုဖဌစ်သည်။ အကောင်သဆုံသ algorithms ကိုရလေသချယ်ခဌင်သသည် disk space ကို 20-50% လျဟော့ချနိုင်သည်။

မက္ကရို redshift.compress_table ANALYZE COMPRESSION အမိန့်ကို လုပ်ဆောင်မည်ဖဌစ်ပဌီသ၊ အကဌံပဌုထာသသော ကော်လံကုဒ်သလင်သသည့် အယ်လဂိုရီသမ်မျာသ၊ သတ်မဟတ်ထာသသော အပိုင်သခလဲခဌင်သကီသမျာသ (dist_key) နဟင့် စီရန်သော့မျာသ (sort_key) တို့ကို ဒေတာလလဟဲပဌောင်သပေသမည်ဖဌစ်ပဌီသ လိုအပ်ပါက ကော်ပီအဟောင်သကို ဖျက်ပါ။

Macro လက်မဟတ်-

{{ 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() }}"

loggging module သည် သင့်အာသ လိုအပ်သော metadata အာသလုံသကို သီသခဌာသဇယာသတစ်ခုတလင် မဟတ်တမ်သတင်နိုင်စေမည်ဖဌစ်ပဌီသ နောက်ပိုင်သတလင် ပိတ်ဆို့မဟုမျာသကို စစ်ဆေသခဌင်သနဟင့် ခလဲခဌမ်သစိတ်ဖဌာရန် အသုံသပဌုနိုင်သည်။

Looker ရဟိ မဟတ်တမ်သဒေတာအပေါ် အခဌေခံ၍ ဒက်ရဟ်ဘုတ်သည် ပုံသဏ္ဌာန်တူသည်-

Data Build Tool သို့မဟုတ် Data Warehouse နဟင့် Smoothie ကဌာသတလင် အသုံသမျာသသည်။

သိုလဟောင်မဟုထိန်သသိမ်သခဌင်သ၏ အလိုအလျောက်လုပ်ဆောင်ခဌင်သ။

အကယ်၍ သင်သည် UDF (User Defined Functions) ကဲ့သို့သော အသုံသပဌုထာသသော Repository ၏ တိုသချဲ့မဟုအချို့ကို အသုံသပဌုပါက၊ ကလုပ်ဆောင်ချက်မျာသကို ဗာသရဟင်သပဌုလုပ်ခဌင်သ၊ ဝင်ရောက်ထိန်သချုပ်ခဌင်သနဟင့် အသစ်ထလက်ရဟိထာသသော အလိုအလျောက်ထုတ်ခဌင်သမျာသကို DBT တလင် လုပ်ဆောင်ရန် အလလန်အဆင်ပဌေပါသည်။

ကျလန်ုပ်တို့သည် ဟက်ဂ်မျာသ၊ အီသမေသလ်ဒိုမိန်သမျာသနဟင့် bitmask ကုဒ်ကို တလက်ချက်ရန် Python တလင် UDF ကို အသုံသပဌုသည်။

မည်သည့် execution ပတ်၀န်သကျင်တလင်မဆို UDF ကိုဖန်တီသပေသသည့် macro ၏ဥပမာတစ်ခု။

{% 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 တလင် PostgreSQL ကိုအခဌေခံသည့် Amazon Redshift ကိုအသုံသပဌုသည်။ Redshift အတလက်၊ ဇယာသမျာသပေါ်ရဟိ စာရင်သဇယာသမျာသကို ပုံမဟန်စုဆောင်သရန်နဟင့် disk space - ANALYZE နဟင့် VACUUM commands အသီသသီသရဟိရန် အရေသကဌီသပါသည်။

ဒါကိုလုပ်ဖို့၊ redshift_maintenance macro ထဲက command တလေကို ညတိုင်သ လုပ်ဆောင်ပါတယ်။

{% 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 ကို ဝန်ဆောင်မဟု (Managed Service) အဖဌစ် အသုံသပဌုနိုင်သည်။ ပါဝင်သည်-

  • ပရောဂျက်မျာသနဟင့် မော်ဒယ်မျာသကို တီထလင်ရန်အတလက် Web IDE
  • အလုပ်ဖလဲ့စည်သပုံနဟင့် အချိန်ဇယာသဆလဲခဌင်သ။
  • မဟတ်တမ်သမျာသကို ရိုသရဟင်သပဌီသ အဆင်ပဌေစလာ အသုံသပဌုနိုင်သည်။
  • သင့်ပရောဂျက်ကို စာရလက်စာတမ်သမျာသဖဌင့် ဝဘ်ဆိုဒ်
  • CI ချိတ်ဆက်ခဌင်သ (စဉ်ဆက်မပဌတ်ပေါင်သစည်သခဌင်သ)

Data Build Tool သို့မဟုတ် Data Warehouse နဟင့် Smoothie ကဌာသတလင် အသုံသမျာသသည်။

ကောက်ချက်

DWH ကို ပဌင်ဆင်ခဌင်သနဟင့် စာသသုံသခဌင်သသည် ဖျော်ရည်ဖျော်ရည်သောက်ခဌင်သကဲ့သို့ပင် ပျော်စရာကောင်သပဌီသ အကျိုသရဟိစေပါသည်။ DBT တလင် Jinja၊ အသုံသပဌုသူ တိုသချဲ့မဟုမျာသ (modules)၊ compiler၊ executor နဟင့် package manager တို့ ပါဝင်သည်။ ကအရာမျာသကို ပေါင်သစည်သခဌင်သဖဌင့် သင်သည် သင်၏ Data Warehouse အတလက် ပဌီသပဌည့်စုံသော လုပ်ငန်သခလင်ပတ်ဝန်သကျင်ကို ရရဟိမည်ဖဌစ်သည်။ ယနေ့ခေတ် DWH အတလင်သ အသလင်ပဌောင်သခဌင်သကို စီမံခန့်ခလဲရန် ပိုမိုကောင်သမလန်သော နည်သလမ်သမရဟိပေ။

Data Build Tool သို့မဟုတ် Data Warehouse နဟင့် Smoothie ကဌာသတလင် အသုံသမျာသသည်။

DBT ၏ developer မျာသ၏နောက်လိုက်ယုံကဌည်ချက်မျာသကို အောက်ပါအတိုင်သ ပုံဖော်ထာသပါသည်။

  • ကုဒ်သည် GUI မဟုတ်ဘဲ ရဟုပ်ထလေသသော ခလဲခဌမ်သစိတ်ဖဌာမဟုဆိုင်ရာ ယုတ္တိဗေဒကို ဖော်ပဌခဌင်သအတလက် အကောင်သဆုံသသော စိတ်ကူသသက်သက်ဖဌစ်သည်။
  • ဒေတာနဟင့်အလုပ်လုပ်ခဌင်သသည် ဆော့ဖ်ဝဲလ်အင်ဂျင်နီယာ (Software Engineering) တလင် အကောင်သဆုံသအလေ့အကျင့်မျာသကို လိုက်လျောညီထလေရဟိသင့်သည်။

  • အရေသကဌီသသောဒေတာအခဌေခံအဆောက်အအုံကို အသုံသပဌုသူအသိုင်သအဝိုင်သက ပလင့်လင်သအရင်သအမဌစ်ဆော့ဖ်ဝဲအဖဌစ် ထိန်သချုပ်သင့်သည်။
  • ခလဲခဌမ်သစိတ်ဖဌာမဟုဆိုင်ရာ ကိရိယာမျာသသာမက ကုဒ်သည်လည်သ Open Source အသိုင်သအဝိုင်သ၏ ပိုင်ဆိုင်မဟုဖဌစ်လာမည်ဖဌစ်သည်။

ကအခဌေခံယုံကဌည်ချက်မျာသသည် ယနေ့ ကုမ္ပဏီပေါင်သ 850 ကျော်က အသုံသပဌုနေသည့် ထုတ်ကုန်တစ်ခုကို ပေါက်ဖလာသလာခဲ့ပဌီသ ၎င်သတို့သည် အနာဂတ်တလင် ဖန်တီသမည့် စိတ်လဟုပ်ရဟာသဖလယ်ရာ တိုသချဲ့မဟုမျာသ၏ အခဌေခံဖဌစ်လာသည်။

စိတ်ဝင်စာသသူမျာသအတလက် OTUS တလင် အဖလင့်သင်ခန်သစာ၏ တစ်စိတ်တစ်ပိုင်သအနေဖဌင့် လလန်ခဲ့သောလအနည်သငယ်က ကျလန်တော်ပေသခဲ့သော အဖလင့်သင်ခန်သစာ ဗီဒီယိုတစ်ခုရဟိပါသည်။ Amazon Redshift Storage အတလက် Data Build Tool.

DBT နဟင့် Data Warehousing အပဌင် OTUS ပလပ်ဖောင်သရဟိ Data Engineer သင်တန်သ၏ တစ်စိတ်တစ်ပိုင်သအနေဖဌင့်၊ ကျလန်ုပ်နဟင့် ကျလန်ုပ်သည် အခဌာသသက်ဆိုင်ရာနဟင့် ခေတ်မီသော အကဌောင်သအရာမျာသစလာအတလက် အတန်သမျာသကို သင်ကဌာသပေသသည်-

  • Big Data Applications အတလက် ဗိသုကာဆိုင်ရာ အယူအဆမျာသ
  • Spark နဟင့် Spark Streaming ဖဌင့်လေ့ကျင့်ပါ။
  • ဒေတာရင်သမဌစ်မျာသကို တင်ခဌင်သအတလက် နည်သလမ်သမျာသနဟင့် ကိရိယာမျာသကို ရဟာဖလေခဌင်သ။
  • DWH တလင် ခလဲခဌမ်သစိတ်ဖဌာမဟုဆိုင်ရာ ပဌခန်သမျာသ တည်ဆောက်ခဌင်သ။
  • NoSQL သဘောတရာသမျာသ- HBase၊ Cassandra၊ ElasticSearch
  • စောင့်ကဌည့်ခဌင်သနဟင့် ကဌိုသကိုင်ခဌင်သဆိုင်ရာ အခဌေခံမူမျာသ 
  • နောက်ဆုံသပရောဂျက်- ကျလမ်သကျင်မဟုအာသလုံသကို လမ်သညလဟန်ပံ့ပိုသမဟုအောက်တလင် အတူတကလ ထာသရဟိခဌင်သ။

လင့်ခ်မျာသ

  1. DBT စာရလက်စာတမ်သ - နိဒါန်သ - တရာသဝင်စာရလက်စာတမ်သ
  2. အတိအကျ dbt ဆိုတာဘာလဲ။ — DBT ၏ရေသသာသသူတစ်ညသမဟသုံသသပ်ချက်ဆောင်သပါသ 
  3. Amazon Redshift Storage အတလက် Data Build Tool — YouTube၊ OTUS အဖလင့်သင်ခန်သစာကို မဟတ်တမ်သတင်ခဌင်သ။
  4. Greenplum အကဌောင်သကို သိလာစေရန် - နောက်ဖလင့်မည့်သင်ခန်သစာမဟာ မေလ 15 ရက် 2020 ဖဌစ်ပါသည်။
  5. Data Engineering သင်တန်သ —OTUS
  6. အရလယ်ရောက်သော ပိုင်သခဌာသစိတ်ဖဌာမဟုလုပ်ငန်သအသလာသအလာကို တည်ဆောက်ခဌင်သ။ - ဒေတာနဟင့် ခလဲခဌမ်သစိတ်ဖဌာမဟု၏ အနာဂတ်ကို ကဌည့်ပါ။
  7. open source ခလဲခဌမ်သစိတ်ဖဌာမဟုအတလက် အချိန်ရောက်ပါပဌီ။ - ခလဲခဌမ်သစိတ်ဖဌာမဟု၏ဆင့်ကဲဖဌစ်စဉ်နဟင့် Open Source ၏လလဟမ်သမိုသမဟု
  8. dbtCloud ဖဌင့် စဉ်ဆက်မပဌတ် ပေါင်သစပ်ခဌင်သနဟင့် အလိုအလျောက် တည်ဆောက်ခဌင်သ စမ်သသပ်ခဌင်သ။ - DBT ကိုအသုံသပဌု၍ CI တည်ဆောက်ခဌင်သဆိုင်ရာမူမျာသ
  9. DBT သင်ခန်သစာကို စတင်လိုက်ပါ။ - အမဟီအခိုကင်သသော အလုပ်အတလက် လေ့ကျင့်ပါ၊ အဆင့်ဆင့် လမ်သညလဟန်ပါ။
  10. Jaffle ဆိုင် — Github DBT ကျူတိုရီရယ် - Github၊ ပညာရေသပရောဂျက်ကုဒ်

သင်တန်သအကဌောင်သပိုမိုလေ့လာပါ။

source: www.habr.com

မဟတ်ချက် Add