Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Data Warehouse ΠΈ Smoothie

Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Data Warehouse ΠΈ Smoothie
На ΠΊΠΎΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ ΠΈΠ΄Π΅Π°Π»Π΅Π½ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ?

Π€ΠΎΠΊΡƒΡΠΈΡ€Π°Ρ˜Ρ‚Π΅ сС Π½Π° Π΄Π΅Π»ΠΎΠ²Π½Π°Ρ‚Π° врСдност ΠΈ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π²ΠΎ отсуство Π½Π° ΠΊΠΎΠ΄ Π·Π° ΠΊΠΎΡ‚Π΅Π». Π£ΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со DWH ΠΊΠ°ΠΊΠΎ Π±Π°Π·Π° Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈ: Π²Π΅Ρ€Π·ΠΈΠΈ, ΠΏΡ€Π΅Π³Π»Π΅Π΄, автоматско Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΈ CI. ΠœΠΎΠ΄ΡƒΠ»Π°Ρ€Π΅Π½, ΠΏΡ€ΠΎΡˆΠΈΡ€Π»ΠΈΠ², со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ ΠΈ Π·Π°Π΅Π΄Π½ΠΈΡ†Π°. ΠšΠΎΡ€ΠΈΡΠ½ΠΈΡ‡ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΈ Π²ΠΈΠ·ΡƒΠ΅Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° зависност (Data Lineage).

ПовСќС Π·Π° сСто ΠΎΠ²Π° ΠΈ Π·Π° ΡƒΠ»ΠΎΠ³Π°Ρ‚Π° Π½Π° DBT Π²ΠΎ СкосистСмот Big Data & Analytics - Π΄ΠΎΠ±Ρ€Π΅Π΄ΠΎΡ˜Π΄ΠΎΠ²Ρ‚Π΅ Π²ΠΎ cat.

Π—Π΄Ρ€Π°Π²ΠΎ Π½Π° ситС

АртСми ΠšΠΎΠ·ΠΈΡ€ Π΅ Π²ΠΎ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚. ПовСќС ΠΎΠ΄ 5 Π³ΠΎΠ΄ΠΈΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΠΌ со ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ETL/ELT, ΠΊΠ°ΠΊΠΎ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ Π²ΠΈΠ·ΡƒΠ΅Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°. ΠœΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΠΌ Π²ΠΎ тркаласт, ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΌ Π²ΠΎ ОВУБ Π½Π° курс Π˜Π½ΠΆΠ΅Π½Π΅Ρ€ Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π° дСнСс сакам Π΄Π° сподСлам со вас Π΅Π΄Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° која ја напишав Π²ΠΎ прСсрСт Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½ΠΎΠ²ΠΈ уписи Π·Π° курсот.

ΠŸΡ€Π΅Π³Π»Π΅Π΄

Π Π°ΠΌΠΊΠ°Ρ‚Π° DBT Π΅ сè Π·Π° T Π²ΠΎ ΠΊΡ€Π°Ρ‚Π΅Π½ΠΊΠ°Ρ‚Π° ELT (Extract - Transform - Load).

Π‘ΠΎ Π΄ΠΎΠ°Ρ“Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΈ скалабилни Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡ΠΊΠΈ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΊΠ°ΠΊΠΎ BigQuery, Redshift, Snowflake, нСмашС смисла Π΄Π° сС ΠΏΡ€Π°Π²Π°Ρ‚ трансформации Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ Data Warehouse. 

DBT Π½Π΅ ΠΏΡ€Π΅Π·Π΅ΠΌΠ° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ ΠΈΠ·Π²ΠΎΡ€ΠΈ, Π½ΠΎ Π΄Π°Π²Π° ΠΎΠ΄Π»ΠΈΡ‡Π½ΠΈ моТности Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΡˆΡ‚ΠΎ вСќС сС Π²Ρ‡ΠΈΡ‚Π°Π½ΠΈ Π²ΠΎ Π‘ΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ (Π²ΠΎ Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅).

Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Data Warehouse ΠΈ Smoothie
Π“Π»Π°Π²Π½Π°Ρ‚Π° Ρ†Π΅Π» Π½Π° DBT Π΅ Π΄Π° Π³ΠΎ Π·Π΅ΠΌΠ΅ ΠΊΠΎΠ΄ΠΎΡ‚, Π΄Π° Π³ΠΎ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π° Π²ΠΎ SQL, Π΄Π° Π³ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° сСквСнца Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ DBT

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ сС состои ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΎΠ΄ само 2 Ρ‚ΠΈΠΏΠ°:

  • МодСл (.sql) - Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π½Π° Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π° ΠΈΠ·Ρ€Π°Π·Π΅Π½Π° со Π±Π°Ρ€Π°ΡšΠ΅ SELECT
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡΠΊΠ° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° (.yml) - ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, поставки, тСстови, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°

На основно Π½ΠΈΠ²ΠΎ, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ структурирана Π½Π° слСдниов Π½Π°Ρ‡ΠΈΠ½:

  • ΠšΠΎΡ€ΠΈΡΠ½ΠΈΠΊΠΎΡ‚ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΡƒΠ²Π° ΠΌΠΎΠ΄Π΅Π» ΠΊΠΎΠ΄ Π²ΠΎ кој Π±ΠΈΠ»ΠΎ ΡƒΠ΄ΠΎΠ±Π΅Π½ IDE
  • ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ CLI, ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ сС лансираат, DBT Π³ΠΎ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π° ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚ Π²ΠΎ SQL
  • ΠšΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Π½ΠΈΠΎΡ‚ SQL ΠΊΠΎΠ΄ сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Π²ΠΎ Storage Π²ΠΎ Π΄Π°Π΄Π΅Π½Π° Π½ΠΈΠ·Π° (Π³Ρ€Π°Ρ„ΠΈΠΊ)

Π•Π²Π΅ ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° Ρ‚Ρ€Ρ‡Π°ΡšΠ΅Ρ‚ΠΎ ΠΎΠ΄ CLI:

Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Data Warehouse ΠΈ Smoothie

Π‘Γ¨ Π΅ 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 (Common Table Expressions) - Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ΄ кој содрТи ΠΌΠ½ΠΎΠ³Ρƒ трансформации ΠΈ Π΄Π΅Π»ΠΎΠ²Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°

Π’Ρ‚ΠΎΡ€ΠΎ: ΠœΠΎΠ΄Π΅Π»Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ Π΅ мСшавина ΠΎΠ΄ SQL ΠΈ јазик Jinja (јазик Π½Π° шаблон).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ користи јамка Π·Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° износот Π·Π° сСкој Π½Π°Ρ‡ΠΈΠ½ Π½Π° плаќањС Π½Π°Π²Π΅Π΄Π΅Π½ Π²ΠΎ ΠΈΠ·Ρ€Π°Π·ΠΎΡ‚ постави. Π‘Π΅ користи ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π Π•Π€ β€” моТност Π·Π° ΡƒΠΏΠ°Ρ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚:

  • Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π Π•Π€ ќС сС ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π° Π²ΠΎ Ρ†Π΅Π»Π΅Π½ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡ Π½Π° Ρ‚Π°Π±Π΅Π»Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄ Π²ΠΎ Storage
  • Π Π•Π€ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½ Π·Π° зависност ΠΎΠ΄ ΠΌΠΎΠ΄Π΅Π»

Π’ΠΎΡ‡Π½ΠΎ Jinja Π΄ΠΎΠ΄Π°Π²Π° рСчиси Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ моТности Π½Π° DBT. ΠΠ°Ρ˜Ρ‡Π΅ΡΡ‚ΠΎ користСни сС:

  • Ако / Π΄Ρ€ΡƒΠ³ΠΎ изјави - изјави Π½Π° Π³Ρ€Π°Π½ΠΊΠ°
  • Π—Π° јамки
  • ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
  • ΠœΠ°ΠΊΡ€ΠΎ - создавањС ΠΌΠ°ΠΊΡ€ΠΎΠ°

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°: Π’Π°Π±Π΅Π»Π°, ПоглСд, Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π΅ пристап спорСд кој Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈΠΎΡ‚ сСт Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚ ќС сС складира Π²ΠΎ Storage.

Π’ΠΎ основна смисла, Ρ‚ΠΎΠ° Π΅:

  • Π’Π°Π±Π΅Π»Π° - Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠ° Ρ‚Π°Π±Π΅Π»Π° Π²ΠΎ Π‘ΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ
  • ΠŸΡ€Π΅Π³Π»Π΅Π΄ - ΠΏΡ€Π΅Π³Π»Π΅Π΄, Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° Ρ‚Π°Π±Π΅Π»Π° Π²ΠΎ Storage

ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ ΠΈ послоТСни стратСгии Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°:

  • Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ - ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅ (Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ‚Π°Π±Π΅Π»ΠΈ со Ρ„Π°ΠΊΡ‚ΠΈ); сС Π΄ΠΎΠ΄Π°Π²Π°Π°Ρ‚ Π½ΠΎΠ²ΠΈ Π»ΠΈΠ½ΠΈΠΈ, сС Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π°Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚ΠΈΡ‚Π΅ Π»ΠΈΠ½ΠΈΠΈ, сС Π±Ρ€ΠΈΡˆΠ°Ρ‚ ΠΈΠ·Π±Ρ€ΠΈΡˆΠ°Π½ΠΈΡ‚Π΅ Π»ΠΈΠ½ΠΈΠΈ 
  • Π•Ρ„Π΅ΠΌΠ΅Ρ€Π΅Π½ - ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚ Π½Π΅ сС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ, Ρ‚ΡƒΠΊΡƒ учСствува ΠΊΠ°ΠΊΠΎ CTE Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ
  • Π‘ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈ стратСгии ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ сами

ΠŸΠΎΠΊΡ€Π°Ρ˜ стратСгиитС Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°, ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ моТности Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π·Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π°, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • Π‘Π½Π΅Π³ΡƒΠ»ΠΊΠ°: ΠΌΠΈΠ½Π»ΠΈΠ²ΠΈ Ρ‚Π°Π±Π΅Π»ΠΈ, ΠΎΠ΄Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ со ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅, Π³Ρ€ΡƒΠΏΠΈΡ€Π°ΡšΠ΅ Ρ‚Π°Π±Π΅Π»ΠΈ, ΠΊΠΎΠΏΠΈΡ€Π°ΡšΠ΅ Π³Ρ€Π°Π½Ρ‚ΠΎΠ²ΠΈ, Π±Π΅Π·Π±Π΅Π΄Π½ΠΈ ΠΏΡ€Π΅Π³Π»Π΅Π΄ΠΈ
  • Redshift: Distkey, Sortkey (ΠΏΡ€Π΅ΠΏΠ»Π΅Ρ‚Π΅Π½ΠΎ, слоТСно), Late Binding Views
  • Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΏΡ€Π°ΡˆΠ°ΡšΠ΅: ПодСлба ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°ΡšΠ΅ Ρ‚Π°Π±Π΅Π»ΠΈ, ΠΎΠ΄Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅, ΡˆΠΈΡ„Ρ€ΠΈΡ€Π°ΡšΠ΅ KMS, Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ ΠΈ ΠΎΠ·Π½Π°ΠΊΠΈ
  • БвСќи: Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° (parquet, csv, json, orc, delta), partition_by, clustered_by, buckets, incremental_strategy

Π’ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² сС ΠΏΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ΠΈ слСднитС ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π°:

  • ΠŸΠΎΡΡ‚Π³Ρ€Π΅Ρ
  • 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 (Directed Acyclic Graph).

DBT Π³Ρ€Π°Π΄ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊ Π²Ρ€Π· основа Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ситС ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ ΠΊΠ°ΠΆΠ°Π½ΠΎ, ref() врски Π²ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π΄ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π˜ΠΌΠ°ΡšΠ΅Ρ‚ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π³ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ слСднивС Ρ€Π°Π±ΠΎΡ‚ΠΈ:

  • Π’ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° Π½ΠΈΠ·Π°
  • ΠŸΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Π»ΠΎΠ³ΠΎΡ‚
  • Π’ΠΎΠ΄Π΅ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΠΏΠΎΡ‚Π³Ρ€Π°Ρ„ 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π²ΠΈΠ·ΡƒΠ΅Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½ΠΈ:

Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Data Warehouse ΠΈ Smoothie
БСкој јазол Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΡ‚ Π΅ ΠΌΠΎΠ΄Π΅Π»; Ρ€Π°Π±ΠΎΠ²ΠΈΡ‚Π΅ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΡ‚ сС спСцифицирани со ΠΈΠ·Ρ€Π°Π·ΠΎΡ‚ ref.

ΠšΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°

ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° самитС ΠΌΠΎΠ΄Π΅Π»ΠΈ, DBT Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° тСстиратС Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ Π½Π° прСтпоставки (Ρ‚Π²Ρ€Π΄Π΅ΡšΠ°) Π·Π° Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈΠΎΡ‚ сСт Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС:

  • НС Нулта
  • Π£Π½ΠΈΠΊΠ°Ρ‚Π½ΠΈ Планови
  • Π Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π΅Π½ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ‚Π΅Ρ‚ - Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π΅Π½ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ‚Π΅Ρ‚ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, customer_id Π²ΠΎ Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π° со Π½Π°Ρ€Π°Ρ‡ΠΊΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π° Π½Π° 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']

А Π΅Π²Π΅ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΎΠ²Π°Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π°Ρ‚Π° Π²Π΅Π±-страница:

Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Data Warehouse ΠΈ Smoothie

ΠœΠ°ΠΊΡ€ΠΎΠ° ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ

Π¦Π΅Π»Ρ‚Π° Π½Π° 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: Ρ€Π°Π±ΠΎΡ‚Π° со Date/Time, Surrogate Keys, Schema тСстови, Pivot/Unpivot ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ
  • Π“ΠΎΡ‚ΠΎΠ²ΠΈ витрински шаблони Π·Π° услуги ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС Чистач Π½Π° снСг ΠΈ Π›Π΅Π½Ρ‚Π° 
  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π° спСцифични ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†ΠΈ Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π½Π° ΠΏΡ€. 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, тСст, Ρ†ΠΈ Π·Π΅ΠΌΠ°Ρ˜Ρ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ само Π·Π° послСднитС 3 Π΄Π΅Π½Π° ΠΈ Π½Π΅ повСќС. Односно, Ρ‚Ρ€Ρ‡Π°ΡšΠ΅Ρ‚ΠΎ Π²ΠΎ ΠΎΠ²ΠΈΠ΅ срСдини ќС Π±ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ±Ρ€Π·ΠΎ ΠΈ ќС Π±Π°Ρ€Π° ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ рСсурси. Кога Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π° prod ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°Ρ‚Π° Π½Π° Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ΠΎΡ‚ ќС сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° со Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ

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

ΠœΠΎΠ΄ΡƒΠ»ΠΎΡ‚ Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½Ρ†ΠΈΡ˜Π° ќС Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° Π³ΠΈ снимитС ситС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ посСбна Ρ‚Π°Π±Π΅Π»Π°, која послСдоватСлно ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи Π·Π° Ρ€Π΅Π²ΠΈΠ·ΠΈΡ˜Π° ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° тСснитС Π³Ρ€Π»Π°.

Π’Π°ΠΊΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»Π° Π²Ρ€Π· основа Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½Ρ†ΠΈΡ˜Π° Π²ΠΎ Looker:

Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Data Warehouse ΠΈ Smoothie

ΠΠ²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ

Ако користитС Π½Π΅ΠΊΠΎΠΈ СкстСнзии Π½Π° функционалноста Π½Π° користСното ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ UDF (Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ ΠΎΠ΄ корисникот), Ρ‚ΠΎΠ³Π°Ρˆ Π²Π΅Ρ€Π·ΠΈΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠ²ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°Ρ‚Π° Π½Π° пристапот ΠΈ автоматското ΠΏΡƒΡˆΡ‚Π°ΡšΠ΅ Π½ΠΎΠ²ΠΈ изданија Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π·Π° ΠΏΡ€Π°Π²Π΅ΡšΠ΅ Π²ΠΎ DBT.

НиС користимС UDF Π²ΠΎ Python Π·Π° Π΄Π° прСсмСтамС Ρ…Π°ΡˆΠΎΠ²ΠΈ, Π΄ΠΎΠΌΠ΅Π½ΠΈ Π·Π° Π΅-ΠΏΠΎΡˆΡ‚Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° битмаски.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΌΠ°ΠΊΡ€ΠΎ ΡˆΡ‚ΠΎ создава UDF Π½Π° која Π±ΠΈΠ»ΠΎ срСдина Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ (dev, тСст, ΠΏΡ€ΠΎΠ΄):

{% 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_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 ΠΊΠ°ΠΊΠΎ услуга (Π£ΠΏΡ€Π°Π²ΡƒΠ²Π°Π½Π° услуга). Π’ΠΊΠ»ΡƒΡ‡Π΅Π½ΠΎ:

  • Web IDE Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΈ распорСд Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°
  • ЕдноставСн ΠΈ ΡƒΠ΄ΠΎΠ±Π΅Π½ пристап Π΄ΠΎ Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈΡ‚Π΅
  • Π’Π΅Π±-страница со Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π·Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
  • ΠŸΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ CI (ΠΊΠΎΠ½Ρ‚ΠΈΠ½ΡƒΠΈΡ€Π°Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π°)

Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Data Warehouse ΠΈ Smoothie

Π—Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° ΠΈ ΠΊΠΎΠ½ΡΡƒΠΌΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° DWH станува исто Ρ‚ΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΈΡ˜Π°Ρ‚Π½ΠΎ ΠΈ корисно ΠΊΠ°ΠΊΠΎ ΠΈ ΠΏΠΈΠ΅ΡšΠ΅Ρ‚ΠΎ смути. DBT сС состои ΠΎΠ΄ Jinja, кориснички СкстСнзии (ΠΌΠΎΠ΄ΡƒΠ»ΠΈ), ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€, ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅Π» ΠΈ ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ. Π‘ΠΎ ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΎΠ²ΠΈΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°Ρ‚Π΅ цСлосна Ρ€Π°Π±ΠΎΡ‚Π½Π° срСдина Π·Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Π•Π΄Π²Π°Ρ˜ ΠΈΠΌΠ° ΠΏΠΎΠ΄ΠΎΠ±Π°Ρ€ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π²ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° DWH дСнСс.

Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠ»ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Data Warehouse ΠΈ Smoothie

Π’Π΅Ρ€ΡƒΠ²Π°ΡšΠ°Ρ‚Π° ΡˆΡ‚ΠΎ Π³ΠΈ слСдат Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΈΡ‚Π΅ Π½Π° DBT сС Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°Π½ΠΈ Π½Π° слСдниов Π½Π°Ρ‡ΠΈΠ½:

  • ΠšΠΎΠ΄ΠΎΡ‚, Π° Π½Π΅ GUI, Π΅ Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€Π°Ρ‚Π° Π°ΠΏΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° Π·Π° ΠΈΠ·Ρ€Π°Π·ΡƒΠ²Π°ΡšΠ΅ слоТСна Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡ΠΊΠ° Π»ΠΎΠ³ΠΈΠΊΠ°
  • Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° со ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ приспособи Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π²ΠΎ софтвСрското инТСнСрство (БофтвСрско инТСнСрство)

  • Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½Π° ΠΎΠ΄ Π·Π°Π΅Π΄Π½ΠΈΡ†Π°Ρ‚Π° Π½Π° корисници ΠΊΠ°ΠΊΠΎ софтвСр со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄
  • НС само Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·Π°, Ρ‚ΡƒΠΊΡƒ ΠΈ ΠΊΠΎΠ΄ΠΎΡ‚ сè повСќС ќС станат сопствСност Π½Π° Π·Π°Π΅Π΄Π½ΠΈΡ†Π°Ρ‚Π° со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄

ОвиС основни Π²Π΅Ρ€ΡƒΠ²Π°ΡšΠ° создадоа ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ ΡˆΡ‚ΠΎ Π³ΠΎ користат ΠΏΡ€Π΅ΠΊΡƒ 850 ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ дСнСс, ΠΈ Ρ‚ΠΈΠ΅ ја Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π°Ρ‚ основата Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ Π²ΠΎΠ·Π±ΡƒΠ΄Π»ΠΈΠ²ΠΈ СкстСнзии ΡˆΡ‚ΠΎ ќС Π±ΠΈΠ΄Π°Ρ‚ создадСни Π²ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π°.

Π—Π° заинтСрСсиранитС ΠΈΠΌΠ° Π²ΠΈΠ΄Π΅ΠΎ ΠΎΠ΄ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° Π»Π΅ΠΊΡ†ΠΈΡ˜Π° која ја ΠΎΠ΄Ρ€ΠΆΠ°Π² ΠΏΡ€Π΅Π΄ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ мСсСци ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° Π»Π΅ΠΊΡ†ΠΈΡ˜Π° Π²ΠΎ ОВУБ - Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° Amazon Redshift.

ΠŸΠΎΠΊΡ€Π°Ρ˜ DBT ΠΈ Data Warehousing, ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ курсот Data Engineer Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OTUS, јас ΠΈ ΠΌΠΎΠΈΡ‚Π΅ ΠΊΠΎΠ»Π΅Π³ΠΈ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΠΌΠ΅ часови Π½Π° Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ Π΄Ρ€ΡƒΠ³ΠΈ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΈ ΠΈ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ Ρ‚Π΅ΠΌΠΈ:

  • АрхитСктонски ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΈ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ
  • Π’Π΅ΠΆΠ±Π°Ρ˜Ρ‚Π΅ со Spark ΠΈ Spark Streaming
  • Π˜ΡΡ‚Ρ€Π°ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΈΠ·Π²ΠΎΡ€ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ
  • Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡ΠΊΠΈ Π²ΠΈΡ‚Ρ€ΠΈΠ½ΠΈ Π²ΠΎ DWH
  • NoSQL ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΈ: HBase, Cassandra, ElasticSearch
  • ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π° 
  • Π—Π°Π²Ρ€ΡˆΠ΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚: Π·Π΄Ρ€ΡƒΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° ситС Π²Π΅ΡˆΡ‚ΠΈΠ½ΠΈ ΠΏΠΎΠ΄ мСнторска ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ°

Π Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ:

  1. DBT Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° - Π’ΠΎΠ²Π΅Π΄ β€” ΠžΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°
  2. Π¨Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π΅ dbt? - ΠŸΡ€Π΅Π³Π»Π΅Π΄Π°Ρ˜Ρ‚Π΅ ја ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° ΠΎΠ΄ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° DBT 
  3. Алатка Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° Amazon Redshift β€” YouTube, БнимањС Π½Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° Π»Π΅ΠΊΡ†ΠΈΡ˜Π° OTUS
  4. Π—Π°ΠΏΠΎΠ·Π½Π°Π²Π°ΡšΠ΅ со Π“Ρ€ΠΈΠ½ΠΏΠ»ΡƒΠΌ β€” Π‘Π»Π΅Π΄Π½Π°Ρ‚Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° Π»Π΅ΠΊΡ†ΠΈΡ˜Π° Π΅ 15 мај 2020 Π³ΠΎΠ΄ΠΈΠ½Π°
  5. ΠšΡƒΡ€Ρ Π·Π° инТСнСрство Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ - ОВУБ
  6. Π“Ρ€Π°Π΄Π΅ΡšΠ΅ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Ρ‚Π΅ΠΊ Π½Π° Π·Ρ€Π΅Π»ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈ - ПоглСд Π½Π° ΠΈΠ΄Π½ΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΈ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°
  7. Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π·Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ° со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ β€” Π•Π²ΠΎΠ»ΡƒΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° ΠΈ Π²Π»ΠΈΡ˜Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄
  8. ΠšΠΎΠ½Ρ‚ΠΈΠ½ΡƒΠΈΡ€Π°Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° ΠΈ автоматско Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ со dbtCloud β€” ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π½Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ CI ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ DBT
  9. Π—Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π°ΠΌΠ΅ со упатство Π·Π° DBT β€” Π’Π΅ΠΆΠ±Π°, Ρ‡Π΅ΠΊΠΎΡ€-ΠΏΠΎ-Ρ‡Π΅ΠΊΠΎΡ€ инструкции Π·Π° ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡ˜Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°
  10. Jaffle shop β€” Упатство Π·Π° Github DBT β€” Github, ΠΊΠΎΠ΄ Π·Π° Π΅Π΄ΡƒΠΊΠ°Ρ‚ΠΈΠ²Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

Π”ΠΎΠ·Π½Π°Ρ˜Ρ‚Π΅ повСќС Π·Π° курсот.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€