Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ°Ρ‚ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Π”Π°Π½Π½ΠΈ ΠΈ Π‘ΠΌΡƒΠ·ΠΈ

Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ°Ρ‚ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Π”Π°Π½Π½ΠΈ ΠΈ Π‘ΠΌΡƒΠ·ΠΈ
На ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ сС основава ΠΈΠ΄Π΅Π°Π»Π½ΠΎΡ‚ΠΎ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Π”Π°Π½Π½ΠΈ?

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

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

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ Π½Π° всички

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

ΠšΡ€Π°Ρ‚ΡŠΠΊ ΠΎΠ±Π·ΠΎΡ€

Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΡŠΡ‚ DBT – Ρ‚ΠΎΠ²Π° Π΅ всичко Π·Π° Π±ΡƒΠΊΠ²Π°Ρ‚Π° T Π² Π°ΠΊΡ€ΠΎΠ½ΠΈΠΌΠ° ELT (Extract – Transform – Load).

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

DBT Π½Π΅ изтСгля Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ, Π½ΠΎ прСдоставя ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ са Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ Π² Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ (Π² Internal ΠΈΠ»ΠΈ External Storage).

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

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

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

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

На основно Π½ΠΈΠ²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° сС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

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

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

Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ°Ρ‚ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Π”Π°Π½Π½ΠΈ ΠΈ Π‘ΠΌΡƒΠ·ΠΈ

Всичко Π΅ SELECT

Π’ΠΎΠ²Π° Π΅ ΠΊΠΈΠ»ΡŠΡ€-функцията Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Data Build Tool. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, DBT абстрахира цСлия ΠΊΠΎΠ΄, ΡΠ²ΡŠΡ€Π·Π°Π½ с матСриализацията Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ заявки Π² Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ (Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ CREATE, INSERT, UPDATE, DELETE ALTER, GRANT, …).

Всяка ΠΌΠΎΠ΄Π΅Π» ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° написванСто Π½Π° Π΅Π΄Π½Π° SELECT заявка, която опрСдСля рСзултатния Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ.

ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° прСобразуванията ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС многостСпСнна ΠΈ Π΄Π° консолидира Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ няколко Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄Π΅Π»Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΌΠΎΠ΄Π΅Π», ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ построи Π²ΠΈΡ‚Ρ€ΠΈΠ½Π° Π·Π° ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈ (f_orders):

{% set payment_methods = ['credit_card', 'coupon', 'bank_transfer', 'gift_card'] %}
 
с ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ (
 
   ΠΈΠ·Π±Π΅Ρ€ΠΈ * ΠΎΡ‚ {{ ref('stg_orders') }}
 
),
 
плащания ΠΏΠΎ ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ (
 
   ΠΈΠ·Π±Π΅Ρ€ΠΈ * ΠΎΡ‚ {{ ref('order_payments') }}
 
),
 
Ρ„ΠΈΠ½Π°Π»Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ (
 
   ΠΈΠ·Π±Π΅Ρ€ΠΈ
       ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈ.order_id,
       ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈ.customer_id,
       ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈ.order_date,
       ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈ.status,
       {% for payment_method in payment_methods -%}
       order_payments.{{payment_method}}_amount,
       {% endfor -%}
       order_payments.total_amount ΠΊΠ°Ρ‚ΠΎ amount
   ΠΎΡ‚ ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈ
       ляво съСдинСниС order_payments using (order_id)
 
)
 
ΠΈΠ·Π±Π΅Ρ€ΠΈ * ΠΎΡ‚ Ρ„ΠΈΠ½Π°Π»Π½ΠΎ

Какво интСрСсно ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Ρ‚ΡƒΠΊ?

На ΠΏΡŠΡ€Π²ΠΎ място: Използвани са CTE (ΠžΠ±Ρ‰ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π·Π° изразяванС) β€” Π·Π° организация ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΌΠ½ΠΎΠ³ΠΎ прСобразувания ΠΈ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°

На Π²Ρ‚ΠΎΡ€ΠΎ място: ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° β€” Ρ‚ΠΎΠ²Π° Π΅ смСсица ΠΎΡ‚ SQL ΠΈ Π΅Π·ΠΈΠΊΠ° Jinja (Π΅Π·ΠΈΠΊ Π·Π° шаблони).

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Ρ†ΠΈΠΊΡŠΠ» for Π·Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° сумата Π·Π° всСки ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅, ΡƒΠΊΠ°Π·Π°Π½ Π² ΠΈΠ·Ρ€Π°Π·Π° set. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° функцията ref β€” Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° сС позовСш Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ΄Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ:

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

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

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

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ: Π’Π°Π±Π»ΠΈΡ†Π°, ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅, Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ

БтратСгия Π·Π° матСриализация β€” ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, спорСд ΠΊΠΎΠΉΡ‚ΠΎ рСзултатният Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Ρ‰Π΅ бъдС Π·Π°ΠΏΠ°Π·Π΅Π½ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ.

Π’ основния ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‚ΠΎΠ²Π° Π΅:

  • Π’Π°Π±Π»ΠΈΡ†Π° β€” физичСска Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ
  • ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ

Има ΠΈ ΠΏΠΎ-слоТни стратСгии Π·Π° матСриализация:

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

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

  • Snowflake: ΠŸΡ€Π΅Ρ…ΠΎΠ΄Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, Merge ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠšΠ»Π°ΡΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΠšΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π²Π°, Π‘ΠΈΠ³ΡƒΡ€Π½ΠΈ прСдставлСния
  • Redshift: Distkey, Sortkey (Π²Π·Π°ΠΈΠΌΠ½ΠΎ, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ), ΠšΠ»Π°ΡΠΈΡ‡Π΅ΡΠΊΠΈ прСдставлСния
  • BigQuery: ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ & класифициранС, Merge ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, KMS Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π΅, Π•Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ & Π’Π°Π³ΠΎΠ²Π΅
  • Spark: Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° Ρ„Π°ΠΉΠ»Π° (parquet, csv, json, orc, delta), partition_by, clustered_by, buckets, incremental_strategy

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

  • Postgres
  • Redshift
  • BigQuery
  • Snowflake
  • Presto (частично)
  • Spark (частично)
  • 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 ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ°Ρ‚ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Π”Π°Π½Π½ΠΈ ΠΈ Π‘ΠΌΡƒΠ·ΠΈ
ВсСки Π²Ρ€ΡŠΡ… Π½Π° Π³Ρ€Π°Ρ„Π° β€” Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠΎΠ΄Π΅Π», Ρ€Π΅Π±Ρ€Π°Ρ‚Π° Π½Π° Π³Ρ€Π°Ρ„Π° сС опрСдСлят Ρ‡Ρ€Π΅Π· ΠΈΠ·Ρ€Π°Π·Π° ref.

ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΈ докумСнтация

ОсвСн Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° самитС ΠΌΠΎΠ΄Π΅Π»ΠΈ, DBT позволява тСстванС Π½Π° Ρ€Π΅Π΄ΠΈΡ†Π° прСдполоТСния (assertions) Π·Π° крайния Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ:

  • Not Null
  • Unique
  • Reference Integrity β€” Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π° цялост (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, customer_id Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° orders ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° id Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° customers)
  • Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с списъка Π½Π° допустимитС стойности

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ добавянС Π½Π° собствСни тСстовС (custom data tests), ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π½Π° ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ спрямо ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π΅Π½, сСдмица, мСсСц. Всяко ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°Π½ΠΎ ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° SQL заявка, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π΅ Π² тСст.

Π’Π°ΠΊΠ° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚ Π½Π΅ΠΆΠ΅Π»Π°Π½ΠΈ отклонСния ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ Π² Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² Π²ΠΈΡ‚Ρ€ΠΈΠ½ΠΈΡ‚Π΅ Π½Π° Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ.

Π©ΠΎ сС отнася Π΄ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, DBT прСдоставя ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° добавянС, вСрсиониранС ΠΈ разпространСниС Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π΄ΠΎΡ€ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ.Β 

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° добавянСто Π½Π° тСстовС ΠΈ докумСнтация Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ»:

Β - name: fct_orders
Β   description: Π’Π°Π·ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° основна информация Π·Π° ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠΈΡ‚Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ някои ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈ Ρ„Π°ΠΊΡ‚ΠΈ Π½Π° Π±Π°Π·Π° плащания
Β   columns:
Β Β Β  - name: order_id
Β Β Β Β Β  tests:
Β Β Β Β Β Β Β  - unique # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° уникалност Π½Π° стойноститС
Β Β Β Β Β Β Β  - not_null # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° null
Β Β Β Β Β  description: Π’ΠΎΠ²Π° Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π° ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ°
Β Β Β  - name: customer_id
Β Β Β Β Β  description: Π’ΡŠΠ½ΡˆΠ΅Π½ ΠΊΠ»ΡŽΡ‡ към Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ
Β Β Β Β Β  tests:
Β Β Β Β Β Β Β  - not_null
Β Β Β Β Β Β Β  - relationships: # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ссылочна цялост
Β Β Β Β Β Β Β Β Β Β Β  to: ref('dim_customers')
Β Β Β Β Β Β Β Β Β Β Β  field: customer_id
Β Β Β  - name: order_date
Β Β Β Β Β  description: Π”Π°Ρ‚Π° (UTC), Π½Π° която Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½Π° ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ°Ρ‚Π°
Β Β Β  - name: status
Β Β Β Β Β  description: '{{ doc("orders_status") }}'
Β Β Β Β Β  tests:
Β Β Β Β Β Β Β  - accepted_values: # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° допустими стойности
Β Β Β Β Β Β Β Β Β Β Β  values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']

А Π΅Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°Π·ΠΈ докумСнтация Π½Π° гСнСрирания уСбсайт:

Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ°Ρ‚ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Π”Π°Π½Π½ΠΈ ΠΈ Π‘ΠΌΡƒΠ·ΠΈ

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

Π¦Π΅Π»Ρ‚Π° Π½Π° 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 ΠΈΠ΄Π²Π° с ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ (packages), ΠΊΠΎΠΉΡ‚ΠΎ позволява Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΈ.

Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ:

  • dbt_utils: Ρ€Π°Π±ΠΎΡ‚Π° с Π”Π°Ρ‚Π°/Час, ЗамСститСлни ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, ВСстовС Π½Π° схСма, ΠŸΠΈΠ²ΠΎΡ‚/ДСформация ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ
  • Π“ΠΎΡ‚ΠΎΠ²ΠΈ шаблони Π·Π° Π²ΠΈΡ‚Ρ€ΠΈΠ½ΠΈ Π·Π° Ρ‚Π°ΠΊΠΈΠ²Π° услуги ΠΊΠ°Ρ‚ΠΎ Snowplow ΠΈ StripeΒ 
  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π° Π”Π°Π½Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ RedshiftΒ 
  • Logging β€” ΠœΠΎΠ΄ΡƒΠ» Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° DBT

Π‘ пълния списък Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ Π½Π° dbt hub.

ΠžΡ‰Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ

Π’ΡƒΠΊ Ρ‰Π΅ опиша няколко Π΄Ρ€ΡƒΠ³ΠΈ интСрСсни особСности ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π°Π· ΠΈ Π΅ΠΊΠΈΠΏΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Π”Π°Π½Π½ΠΈ Π² 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 Π΄Π½ΠΈ ΠΈ Π½Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅. ВоСст, ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Ρ‚Π΅Π·ΠΈ срСди Ρ‰Π΅ бъдС ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΈ Ρ‰Π΅ изисква ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ рСсурси. ΠŸΡ€ΠΈ стартиранС Π² срСда prod условиСто Π·Π° Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ Ρ‰Π΅ бъдС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½ΠΎ.

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

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,
                dist_style=none|all|even,
                dist_key=none|String) }}

Π›ΠΎΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° стартирания Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ

На всяко изпълнСниС Π½Π° ΠΌΠΎΠ΄Π΅Π» ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Ρ…ΡƒΠΊΠΎΠ²Π΅ (hooks), ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΏΡ€Π΅Π΄ΠΈ стартиранС ΠΈΠ»ΠΈ Π²Π΅Π΄Π½Π°Π³Π° слСд Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π°:

Β Β Β pre-hook: "{{ logging.log_model_start_event() }}"
   post-hook: "{{ logging.log_model_end_event() }}"

ΠœΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Π·Π° Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ записванСто Π½Π° всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, ΠΏΠΎ която впослСдствиС ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΎΠ΄ΠΈΡ‚ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΈΡ‚Π΅ области (bottlenecks).

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°Π±Π»ΠΎΡ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅ Π² Looker:

Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ°Ρ‚ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Π”Π°Π½Π½ΠΈ ΠΈ Π‘ΠΌΡƒΠ·ΠΈ

Автоматизация Π½Π° обслуТванСто Π½Π° Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° макрос, ΠΊΠΎΠΉΡ‚ΠΎ създава 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 ~ " ΠΎΡ‚ " ~ 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 ~ " Π’Π°ΠΊΡƒΡƒΠΌΠ½ΠΎ почистванС Π½Π° " ~ relation_to_vacuum) }}
           {% do run_query("VACUUM " ~ relation_to_vacuum ~ " BOOST") %}
           {{ dbt_utils.log_info(message_prefix ~ " АнализиранС Π½Π° " ~ 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 ~ " Π—Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ " ~ relation_to_vacuum ~ " Π·Π° " ~ total_seconds ~ "s") }}
       {% else %}
           {{ dbt_utils.log_info(message_prefix ~ ' ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π½Π΅ Π½Π° ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ "' ~ row.values() | join ('"."') ~ '" Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°') }}
       {% endif %}
  
   {% endfor %}
  
{% endmacro %}

DBT Cloud

Има Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° DBT ΠΊΠ°Ρ‚ΠΎ услуга (Managed Service). Π’ΠΊΠ»ΡŽΡ‡Π²Π°:

  • Web IDE Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊ
  • ЛСсСн ΠΈ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅
  • УСбсайт с докумСнтация Π½Π° вашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
  • Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° CI (ΠΠ΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅)

Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ°Ρ‚ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Π”Π°Π½Π½ΠΈ ΠΈ Π‘ΠΌΡƒΠ·ΠΈ

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

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

Data Build Tool ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ°Ρ‚ Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Π”Π°Π½Π½ΠΈ ΠΈ Π‘ΠΌΡƒΠ·ΠΈ

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡΡ‚Π°, слСдвани ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° DBT, сС Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°Ρ‚ Ρ‚Π°ΠΊΠ°:

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

  • Най-Π²Π°ΠΆΠ½Π°Ρ‚Π° инфраструктура Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½ΠΈ трябва Π΄Π° сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° ΠΎΡ‚ общността Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚ΠΎ софтуСр с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄.
  • НС само инструмСнтитС Π·Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°, Π½ΠΎ ΠΈ ΠΊΠΎΠ΄ΡŠΡ‚ всС ΠΏΠΎ-чСсто Ρ‰Π΅ станС ΠΏΡ€ΠΈΡ‚Π΅ΠΆΠ°Π½ΠΈΠ΅ Π½Π° Open Source общността.

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

Π—Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС интСрСсуват, ΠΈΠΌΠ° видСозапис Π½Π° ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ ΡƒΡ€ΠΎΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Π΄ΠΎΡ… ΠΏΡ€Π΅Π΄ΠΈ няколко мСсСца Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° открития ΡƒΡ€ΠΎΠΊ Π² OTUS β€” Data Build Tool Π·Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Amazon Redshift..

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

  • АрхитСктурни ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π·Π° прилоТСния Π½Π° Π“ΠΎΠ»Π΅ΠΌΠΈ Π”Π°Π½Π½ΠΈ.
  • ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° със Spark ΠΈ Spark Streaming.
  • Π˜Π·ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ инструмСнти Π·Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ.
  • БъздаванС Π½Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡Π½ΠΈ Π²ΠΈΡ‚Ρ€ΠΈΠ½ΠΈ Π² DWH.
  • ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ NoSQL: HBase, Cassandra, ElasticSearch.
  • ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π½Π° организация Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ оркСстрация.Β 
  • Π€ΠΈΠ½Π°Π»Π΅Π½ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚: ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ всички умСния Π·Π°Π΅Π΄Π½ΠΎ ΠΏΠΎΠ΄ мСнторска ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ°.

Π›ΠΈΠ½ΠΊΠΎΠ²Π΅:

  1. DBT докумСнтация β€” Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. β€” ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация.
  2. Какво Ρ‚ΠΎΡ‡Π½ΠΎ Π΅ dbt? β€” ΠžΠ±Π·ΠΎΡ€Π½Π° статия Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° DBT.Β 
  3. Data Build Tool Π·Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Amazon Redshift. β€” YouTube, Запис Π½Π° открития ΡƒΡ€ΠΎΠΊ Π½Π° OTUS.
  4. Π—Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ с Greenplum. β€” Най-близкият ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ ΡƒΡ€ΠΎΠΊ 15 ΠΌΠ°ΠΉ 2020 Π³.
  5. ΠšΡƒΡ€Ρ ΠΏΠΎ Data Engineering. β€” OTUS.
  6. Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° зрял Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡Π΅Π½ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс. β€” ПоглСд Π²ΡŠΡ€Ρ…Ρƒ Π±ΡŠΠ΄Π΅Ρ‰Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π΄Π°Π½Π½ΠΈ ΠΈ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°.
  7. Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π·Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ° с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄. β€” Π•Π²ΠΎΠ»ΡŽΡ†ΠΈΡ Π½Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° ΠΈ влияниСто Π½Π° Open Source.
  8. ΠΠ΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ тСстванС с dbtCloud. β€” ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° DBT.
  9. Π—Π°ΠΏΠΎΡ‡Π²Π°Π½Π΅ с DBT ΡƒΡ€ΠΎΠΊ. β€” ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Π‘Ρ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ° инструкции Π·Π° самостоятСлна Ρ€Π°Π±ΠΎΡ‚Π°.
  10. Магазин Jaffle β€” Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Github DBT β€” Github, ΠΊΠΎΠ΄ Π½Π° учСбния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

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

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster