Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Data Warehouse ΠΈ Smoothie

Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Data Warehouse ΠΈ Smoothie
На ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ идСалният Data Warehouse?

ЀокусирайтС сС Π²ΡŠΡ€Ρ…Ρƒ бизнСс стойността ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ‚Π΅ ΠΏΡ€ΠΈ липсата Π½Π° шаблонСн ΠΊΠΎΠ΄. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° DWH ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°: вСрсии, ΠΏΡ€Π΅Π³Π»Π΅Π΄, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ тСстванС ΠΈ CI. ΠœΠΎΠ΄ΡƒΠ»Π½ΠΎΡΡ‚, Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚, ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ ΠΈ общност. Π£Π΄ΠΎΠ±Π½Π° Π·Π° потрСбитСля докумСнтация ΠΈ визуализация Π½Π° зависимости (Data Lineage).

Π—Π° всичко Ρ‚ΠΎΠ²Π° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈ Π·Π° ролята Π½Π° DBT Π² СкосистСмата Big Data & Analytics – Π΄ΠΎΠ±Ρ€Π΅ дошли ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅

АртСми ΠšΠΎΠ·ΠΈΡ€ Π΅ във Π²Ρ€ΡŠΠ·ΠΊΠ°. ΠŸΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 5 Π³ΠΎΠ΄ΠΈΠ½ΠΈ работя със складовС Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ETL / ELT, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ с Π°Π½Π°Π»ΠΈΠ· ΠΈ визуализация Π½Π° Π΄Π°Π½Π½ΠΈ. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° работя Π² Wheely, Π°Π· ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°ΠΌ Π² OTUS Π½Π° курса Π˜Π½ΠΆΠ΅Π½Π΅Ρ€ Π½Π° Π΄Π°Π½Π½ΠΈ, Π° днСс искам Π΄Π° сподСля с вас Π΅Π΄Π½Π° статия, която написах Π² Π½Π°Π²Π΅Ρ‡Π΅Ρ€ΠΈΠ΅Ρ‚ΠΎ Π½Π° старта Π½ΠΎΠ²ΠΎ записванС Π·Π° курса.

Ρ€Π΅Π·ΡŽΠΌΠ΅

DBT Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½Π° с Π±ΡƒΠΊΠ²Π°Ρ‚Π° T Π² Π°ΠΊΡ€ΠΎΠ½ΠΈΠΌΠ° ELT (Extract - Transform - Load).

Π‘ появата Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΈ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΈ Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡Π½ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ BigQuery, Redshift, Snowflake, нямашС смисъл Π΄Π° сС правят трансформации извън Data Warehouse. 

DBT Π½Π΅ ΠΊΠ°Ρ‡Π²Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ, Π½ΠΎ прСдоставя Π³ΠΎΠ»Π΅ΠΌΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ са ΠΊΠ°Ρ‡Π΅Π½ΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ (Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ ΠΈΠ»ΠΈ външно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅).

Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Data Warehouse ΠΈ Smoothie
ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Ρ†Π΅Π» Π½Π° DBT Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΊΠΎΠ΄Π°, Π΄Π° Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π² SQL, Π΄Π° изпълни ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π² ΠΏΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° послСдоватСлност Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ.

DBT структура Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ само ΠΎΡ‚ 2 Π²ΠΈΠ΄Π°:

  • МодСл (.sql) - Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π·Π° трансформация, ΠΈΠ·Ρ€Π°Π·Π΅Π½Π° Ρ‡Ρ€Π΅Π· SELECT заявка
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ» (.yml) - ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, настройки, тСстовС, докумСнтация

На основно Π½ΠΈΠ²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π°, ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

  • ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚ подготвя ΠΊΠΎΠ΄Π° Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° във всяка ΡƒΠ΄ΠΎΠ±Π½Π° IDE
  • Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° CLI сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° стартиранСто Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅, DBT ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π² SQL
  • ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈΡΡ‚ SQL ΠΊΠΎΠ΄ сС изпълнява Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π² ΡƒΠΊΠ°Π·Π°Π½Π°Ρ‚Π° послСдоватСлност (Π³Ρ€Π°Ρ„ΠΈΠΊΠ°)

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° стартиранСто ΠΎΡ‚ CLI:

Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Data Warehouse ΠΈ Smoothie

Всичко Π΅ SELECT

Π’ΠΎΠ²Π° Π΅ убийствСна функция Π½Π° Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° Π½Π° Data Build Tool. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, 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 (Π΅Π·ΠΈΠΊ Π·Π° шаблони).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ†ΠΈΠΊΡŠΠ» Π·Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° сумата Π·Π° всСки ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅, посочСн Π² ΠΈΠ·Ρ€Π°Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Използва сС ΠΈ функцията Ref - Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π² ΠΊΠΎΠ΄Π° към Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ:

  • По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Ref Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ΠΈ Π² Ρ†Π΅Π»Π΅Π²ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» към Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠ»ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ
  • Ref Π²ΠΈ позволява Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° зависимост ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ

Π’ΠΎΡ‡Π½ΠΎ Jinja добавя ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ към DBT. Най-чСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ са:

  • If / else ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ - Ρ€Π°Π·ΠΊΠ»ΠΎΠ½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ
  • Π·Π° Π±Ρ€ΠΈΠΌΠΊΠΈ - Π±Ρ€ΠΈΠΌΠΊΠΈ
  • ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
  • ΠœΠ°ΠΊΡ€ΠΎ - създаванС Π½Π° макроси

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

БтратСгията Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, спорСд ΠΊΠΎΠΉΡ‚ΠΎ получСният Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Ρ‰Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ.

Π’ основни Π»ΠΈΠ½ΠΈΠΈ Ρ‚ΠΎΠ²Π° Π΅:

  • Π’Π°Π±Π»ΠΈΡ†Π° - физичСска Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ
  • View - ΠΈΠ·Π³Π»Π΅Π΄, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Storage

Има ΠΈ ΠΏΠΎ-слоТни стратСгии Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅:

  • Incremental - постСпСнно Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ (Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ„Π°ΠΊΡ‚ΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ); Π½ΠΎΠ²ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅ сС добавят, ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈΡ‚Π΅ сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚, ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈΡ‚Π΅ сС изчистват 
  • Π•Ρ„Π΅ΠΌΠ΅Ρ€Π΅Π½ – ΠΌΠΎΠ΄Π΅Π»ΡŠΡ‚ Π½Π΅ сС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ, Π° участва ΠΊΠ°Ρ‚ΠΎ CTE Π² Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ
  • Всички Π΄Ρ€ΡƒΠ³ΠΈ стратСгии, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ сами

Π’ допълнСниС към стратСгиитС Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅, ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° оптимизация Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • Π‘Π½Π΅ΠΆΠΈΠ½ΠΊΠ°: ΠŸΡ€Π΅Ρ…ΠΎΠ΄Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ сливанС, ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, бСзвъзмСздни срСдства Π·Π° ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅, Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ
  • Redshift: Diskey, Sorkey (с вмъкванС, ΡΡŠΡΡ‚Π°Π²Π΅Π½), Late Binding Views
  • BigQuery: РаздСлянС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ сливанС, KMS ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅, Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ ΠΈ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ
  • Π˜ΡΠΊΡ€Π°: Π€Π°ΠΉΠ»ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (ΠΏΠ°Ρ€ΠΊΠ΅Ρ‚, csv, json, orc, Π΄Π΅Π»Ρ‚Π°), partition_by, clustered_by, ΠΊΠΎΡ„ΠΈ, incremental_strategy

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ слСднитС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°:

  • Postgres
  • Redshift
  • BigQuery
  • Π‘Π½Π΅ΠΆΠΈΠ½ΠΊΠ°
  • ΠŸΡ€Π΅ΡΡ‚ΠΎ (частично)
  • Π˜ΡΠΊΡ€Π° (частична)
  • 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 Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ 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 Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ 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: Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Ρ‚Π°/час, сурогатни ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, тСстовС Π½Π° схСми, Pivot/Unpivot ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ
  • Π“ΠΎΡ‚ΠΎΠ²ΠΈ Π²ΠΈΡ‚Ρ€ΠΈΠ½ΠΈ шаблони Π·Π° услуги ΠΊΠ°Ρ‚ΠΎ снСгорин ΠΈ Нашивка 
  • НапримСр Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π° Π΄Π°Π½Π½ΠΈ Redshift 
  • Π’Π»ΠΈΠ·Π°Π½Π΅ - ΠœΠΎΠ΄ΡƒΠ» Π·Π° рСгистриранС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° DBT

ПълСн списък с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° dbt Ρ…ΡŠΠ±.

ΠžΡ‰Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ΡƒΠΊ Ρ‰Π΅ опиша няколко Π΄Ρ€ΡƒΠ³ΠΈ интСрСсни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π°Π· ΠΈ Π΅ΠΊΠΈΠΏΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Data Warehouse Wheely.

РаздСлянС Π½Π° срСдитС Π·Π° изпълнСниС 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 Π΅ ΠΊΠΎΠ»ΠΎΠ½Π½Π° Π‘Π£Π‘Π”, която Π²ΠΈ позволява Π΄Π° Π·Π°Π΄Π°Π²Π°Ρ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ Π·Π° компрСсиранС Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° всяка ΠΎΡ‚Π΄Π΅Π»Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π°. Π˜Π·Π±ΠΎΡ€ΡŠΡ‚ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈ Π·Π°Π΅ΠΌΠ°Π½ΠΎΡ‚ΠΎ дисково пространство с 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 Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Data Warehouse ΠΈ Smoothie

Автоматизация Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ

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

НиС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Python UDF Π·Π° изчисляванС Π½Π° Ρ…Π΅Ρˆ стойности, Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ Π½Π° ΠΈΠΌΠ΅ΠΉΠ» адрСси, Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΈΡ‚ΠΎΠ²Π° маска.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° макрос, ΠΊΠΎΠΉΡ‚ΠΎ създава UDF във всяка срСда Π·Π° изпълнСниС (dev, test, prod):

{% 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 Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Data Warehouse ΠΈ Smoothie

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠ³ΠΎΡ‚Π²ΡΠ½Π΅Ρ‚ΠΎ ΠΈ консумацията Π½Π° DWH става Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° приятно ΠΈ здравословно, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΈΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° смути. DBT сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Jinja, пСрсонализирани Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ (ΠΌΠΎΠ΄ΡƒΠ»ΠΈ), ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π» (ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π») ΠΈ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ. Π‘ΡŠΠ±ΠΈΡ€Π°ΠΉΠΊΠΈ Ρ‚Π΅Π·ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π·Π°Π΅Π΄Π½ΠΎ, Π²ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ цялостна Ρ€Π°Π±ΠΎΡ‚Π½Π° срСда Π·Π° вашия Data Warehouse. Π•Π΄Π²Π° Π»ΠΈ ΠΈΠΌΠ° ΠΏΠΎ-Π΄ΠΎΠ±ΡŠΡ€ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° трансформациитС Π² DWH днСс.

Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Data Warehouse ΠΈ Smoothie

УбСТдСнията, слСдвани ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° DBT, са Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°Π½ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

  • ΠšΠΎΠ΄ΡŠΡ‚, Π° Π½Π΅ GUI, Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π°Ρ‚Π° абстракция Π·Π° изразяванС Π½Π° слоТна Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°
  • Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π΄Π°Π½Π½ΠΈ трябва Π΄Π° Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π° Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π½Π° софтуСрното инТСнСрство (Π‘ΠΎΡ„Ρ‚ΡƒΠ΅Ρ€Π½ΠΎ инТСнСрство)

  • Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° с ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ трябва Π΄Π° сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° ΠΎΡ‚ потрСбитСлската общност ΠΊΠ°Ρ‚ΠΎ софтуСр с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄
  • НС само инструмСнтитС Π·Π° Π°Π½Π°Π»ΠΈΠ·, Π½ΠΎ ΠΈ ΠΊΠΎΠ΄ΡŠΡ‚ всС ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‰Π΅ става собствСност Π½Π° общността с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄

Π’Π΅Π·ΠΈ основни вярвания са Π΄ΠΎΠ²Π΅Π»ΠΈ Π΄ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 850 ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ днСс, ΠΈ Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Ρ‚ основата Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡŠΠ»Π½ΡƒΠ²Π°Ρ‰ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ създадСни Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅.

Π—Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС интСрСсуват, ΠΈΠΌΠ° Π²ΠΈΠ΄Π΅ΠΎ запис Π½Π° ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ ΡƒΡ€ΠΎΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Π΄ΠΎΡ… ΠΏΡ€Π΅Π΄ΠΈ няколко мСсСца ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ ΡƒΡ€ΠΎΠΊ Π² OTUS - Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° Amazon Redshift Storage.

Π’ допълнСниС към DBT ΠΈ Data Warehouses, ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ курса Data Engineer Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OTUS, ΠΌΠΎΠΈΡ‚Π΅ ΠΊΠΎΠ»Π΅Π³ΠΈ ΠΈ Π°Π· ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΡƒΡ€ΠΎΡ†ΠΈ ΠΏΠΎ Ρ€Π΅Π΄ΠΈΡ†Π° Π΄Ρ€ΡƒΠ³ΠΈ подходящи ΠΈ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ Ρ‚Π΅ΠΌΠΈ:

  • АрхитСктурни ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π·Π° прилоТСния с Π³ΠΎΠ»Π΅ΠΌΠΈ Π΄Π°Π½Π½ΠΈ
  • УпраТнявайтС сС със Spark ΠΈ Spark Streaming
  • НаучаванС Π½Π° Π½Π°Ρ‡ΠΈΠ½ΠΈ ΠΈ инструмСнти Π·Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ
  • Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡Π½ΠΈ Π²ΠΈΡ‚Ρ€ΠΈΠ½ΠΈ Π² DWH
  • NoSQL ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ: HBase, Cassandra, ElasticSearch
  • ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π½Π° организация Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ оркСстрацията 
  • ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚: обСдиняванС Π½Π° всички умСния ΠΏΠΎΠ΄ мСнторска ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ°

Π·Π° справка:

  1. DBT докумСнтация β€” ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация
  2. Какво Ρ‚ΠΎΡ‡Π½ΠΎ Π΅ dbt? β€” РСцСнзия Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° DBT 
  3. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° Amazon Redshift Storage β€” YouTube, OTUS Open Lesson Recording
  4. Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Greenplum β€” Най-близкият ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ ΡƒΡ€ΠΎΠΊ Π΅ 15 ΠΌΠ°ΠΉ 2020 Π³
  5. ΠšΡƒΡ€Ρ ΠΏΠΎ инТСнСрство Π½Π° Π΄Π°Π½Π½ΠΈ β€” ОВУБ
  6. Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° зрял Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс Π·Π° Π°Π½Π°Π»ΠΈΠ· β€” ПоглСд към Π±ΡŠΠ΄Π΅Ρ‰Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ‚Π΅
  7. Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ β€” Π•Π²ΠΎΠ»ΡŽΡ†ΠΈΡΡ‚Π° Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ Π²ΡŠΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° отворСния ΠΊΠΎΠ΄
  8. ΠΠ΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ тСстванС Π½Π° компилация с dbtCloud β€” ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° DBT
  9. ΠŸΡŠΡ€Π²ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ с ΡƒΡ€ΠΎΠΊΠ° Π·Π° DBT β€” ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΡΡ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ° Π·Π° самообучСниС
  10. ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π·Π° jaffle - Π£Ρ€ΠΎΠΊ Π·Π° Github DBT β€” Github, ΠΊΠΎΠ΄ Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅

НаучСтС ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° курса.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€