Offeryn Adeiladu Data neu beth sy'n gyffredin rhwng Data Warehouse a Smoothie

Offeryn Adeiladu Data neu beth sy'n gyffredin rhwng Data Warehouse a Smoothie
Ar ba egwyddorion y mae Warws Data delfrydol wedi'i adeiladu?

Canolbwyntiwch ar werth busnes a dadansoddeg yn absenoldeb cod plât boeler. Rheoli DWH fel sylfaen god: fersiwn, adolygu, profi awtomataidd a CI. Modiwlaidd, estynadwy, ffynhonnell agored a chymuned. Dogfennaeth hawdd ei defnyddio a delweddu dibyniaeth (Llinell Ddata).

Mwy am hyn i gyd ac am rôl DBT yn ecosystem Big Data & Analytics - croeso i gath.

Helo i gyd

Mae Artemy Kozyr mewn cysylltiad. Am fwy na 5 mlynedd rwyf wedi bod yn gweithio gyda warysau data, adeiladu ETL/ELT, yn ogystal â dadansoddeg data a delweddu. Rwy'n gweithio i mewn ar hyn o bryd Olwynog, Rwy'n dysgu yn OTUS ar gwrs Peiriannydd Data, a heddiw rwyf am rannu gyda chi erthygl a ysgrifennais gan ragweld y dechrau cofrestriad newydd ar gyfer y cwrs.

Adolygiad byr

Mae'r fframwaith DBT yn ymwneud â'r T yn yr acronym ELT (Detholiad - Trawsnewid - Llwyth).

Gyda dyfodiad cronfeydd data dadansoddol cynhyrchiol a graddadwy fel BigQuery, Redshift, Snowflake, nid oedd unrhyw ddiben gwneud trawsnewidiadau y tu allan i'r Warws Data. 

Nid yw DBT yn lawrlwytho data o ffynonellau, ond mae'n darparu cyfleoedd gwych ar gyfer gweithio gyda data sydd eisoes wedi'i lwytho i mewn i'r Storfa (mewn Storio Mewnol neu Allanol).

Offeryn Adeiladu Data neu beth sy'n gyffredin rhwng Data Warehouse a Smoothie
Prif bwrpas DBT yw cymryd y cod, ei lunio yn SQL, gweithredu'r gorchmynion yn y dilyniant cywir yn y Storfa.

Strwythur Prosiect DBT

Mae'r prosiect yn cynnwys cyfeiriaduron a ffeiliau o 2 fath yn unig:

  • Model (.sql) - uned drawsnewid a fynegir gan ymholiad SELECT
  • Ffeil ffurfweddu (.yml) - paramedrau, gosodiadau, profion, dogfennaeth

Ar lefel sylfaenol, mae’r gwaith wedi’i strwythuro fel a ganlyn:

  • Mae'r defnyddiwr yn paratoi cod model mewn unrhyw IDE cyfleus
  • Gan ddefnyddio'r CLI, mae modelau'n cael eu lansio, mae DBT yn crynhoi'r cod model yn SQL
  • Mae'r cod SQL a luniwyd yn cael ei weithredu yn y Storio mewn dilyniant penodol (graff)

Dyma sut y gallai rhedeg o'r CLI edrych:

Offeryn Adeiladu Data neu beth sy'n gyffredin rhwng Data Warehouse a Smoothie

Mae popeth yn SELECT

Mae hon yn nodwedd hynod o'r fframwaith Offeryn Adeiladu Data. Mewn geiriau eraill, mae DBT yn crynhoi'r holl god sy'n gysylltiedig â gwireddu'ch ymholiadau i'r Storfa (amrywiadau o'r gorchmynion CREATE, INSERT, Update, DELETE ALTER, GRANT, ...).

Mae unrhyw fodel yn golygu ysgrifennu un ymholiad SELECT sy'n diffinio'r set ddata sy'n deillio ohono.

Yn yr achos hwn, gall y rhesymeg trawsnewid fod yn aml-lefel a chydgrynhoi data o sawl model arall. Enghraifft o fodel a fydd yn adeiladu arddangosfa archeb (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

Pa bethau diddorol allwn ni eu gweld yma?

Yn gyntaf: Defnyddiwyd CTE (Mynegiadau Tabl Cyffredin) - i drefnu a deall cod sy'n cynnwys llawer o drawsnewidiadau a rhesymeg busnes

Ail: Mae cod enghreifftiol yn gymysgedd o SQL ac iaith Jinja (iaith temptio).

Mae'r enghraifft yn defnyddio dolen ar gyfer i gynhyrchu'r swm ar gyfer pob dull talu a nodir yn yr ymadrodd gosod. Defnyddir y swyddogaeth hefyd cyf — y gallu i gyfeirio at fodelau eraill yn y cod:

  • Yn ystod llunio cyf yn cael ei drawsnewid i bwyntydd targed i fwrdd neu olygfa yn Storage
  • cyf yn eich galluogi i adeiladu graff dibyniaeth model

Yn union Jinja yn ychwanegu posibiliadau bron yn ddiderfyn i DBT. Y rhai a ddefnyddir amlaf yw:

  • Os / arall datganiadau - datganiadau cangen
  • Ar gyfer dolenni
  • Newidynnau
  • Macro - creu macros

Deunyddoli: Tabl, Gweld, Cynyddrannol

Mae strategaeth berthnasu yn ddull y bydd y set canlyniadol o ddata model yn cael ei storio yn y Storage yn unol â hi.

Mewn termau sylfaenol mae'n:

  • Tabl - tabl corfforol yn y Storio
  • Gweld - gweld, bwrdd rhithwir yn Storage

Mae yna hefyd strategaethau gwireddu mwy cymhleth:

  • Cynyddrannol - llwytho cynyddrannol (o dablau ffeithiau mawr); llinellau newydd yn cael eu hychwanegu, llinellau wedi'u newid yn cael eu diweddaru, llinellau dileu yn cael eu clirio 
  • Byrhoedlog - nid yw'r model yn cael ei wireddu'n uniongyrchol, ond mae'n cymryd rhan fel CTE mewn modelau eraill
  • Unrhyw strategaethau eraill y gallwch chi eu hychwanegu eich hun

Yn ogystal â strategaethau gwireddu, mae cyfleoedd i optimeiddio Storfeydd penodol, er enghraifft:

  • Snowflake: Tablau dros dro, Uno ymddygiad, Clystyru tablau, Grantiau copïo, Golygfeydd diogel
  • Redshift: Distkey, Sortkey (interleaved, compound), Late Binding Views
  • BigQuery: Rhaniad tabl a chlystyru, Uno ymddygiad, KMS Encryption, Labeli & Tagiau
  • Spark: Fformat ffeil (parquet, csv, json, orc, delta), rhaniad_by, clwstwr_by, bwcedi, strategaeth_cynyddrannol

Mae'r Storfeydd canlynol yn cael eu cefnogi ar hyn o bryd:

  • postgres
  • Redshift
  • BigQuery
  • Snowflake
  • Presto (yn rhannol)
  • Gwreichionen (yn rhannol)
  • Gweinydd Microsoft SQL (addasydd cymunedol)

Gadewch i ni wella ein model:

  • Gadewch i ni wneud ei lenwad yn gynyddrannol (Cynyddol)
  • Gadewch i ni ychwanegu allweddi segmentu a didoli ar gyfer 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

Graff dibyniaeth model

Mae hefyd yn goeden dibyniaeth. Fe'i gelwir hefyd yn DAG (Graff Acyclic Cyfeiriedig).

Mae DBT yn adeiladu graff yn seiliedig ar gyfluniad pob model prosiect, neu yn hytrach, cyf() dolenni o fewn modelau i fodelau eraill. Mae cael graff yn caniatáu ichi wneud y pethau canlynol:

  • Modelau rhedeg yn y dilyniant cywir
  • Parallelization o ffurfio blaen siop
  • Rhedeg isgraff mympwyol 

Enghraifft o ddelweddu graff:

Offeryn Adeiladu Data neu beth sy'n gyffredin rhwng Data Warehouse a Smoothie
Mae pob nod o'r graff yn fodel; mae ymylon y graff wedi'u pennu gan y mynegiad cyf.

Ansawdd Data a Dogfennaeth

Yn ogystal â chynhyrchu'r modelau eu hunain, mae DBT yn caniatáu ichi brofi nifer o ragdybiaethau am y set ddata sy'n deillio o hynny, megis:

  • Ddim yn Nwl
  • Unigryw
  • Uniondeb Cyfeirnod - uniondeb cyfeiriadol (er enghraifft, mae customer_id yn y tabl archebion yn cyfateb i id yn y tabl cwsmeriaid)
  • Paru'r rhestr o werthoedd derbyniol

Mae'n bosibl ychwanegu eich profion eich hun (profion data personol), megis, er enghraifft, gwyriad % o refeniw gyda dangosyddion o ddiwrnod, wythnos, mis yn ôl. Gall unrhyw dybiaeth a luniwyd fel ymholiad SQL ddod yn brawf.

Yn y modd hwn, gallwch ddal gwyriadau diangen a gwallau mewn data yn y ffenestri Warws.

O ran dogfennaeth, mae DBT yn darparu mecanweithiau ar gyfer ychwanegu, fersiwn, a dosbarthu metadata a sylwadau ar y model a hyd yn oed lefelau priodoledd. 

Dyma sut olwg sydd ar ychwanegu profion a dogfennaeth ar lefel y ffeil ffurfweddu:

 - 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']

A dyma sut olwg sydd ar y ddogfennaeth hon ar y wefan a gynhyrchir:

Offeryn Adeiladu Data neu beth sy'n gyffredin rhwng Data Warehouse a Smoothie

Macros a Modiwlau

Nid dod yn set o sgriptiau SQL yw pwrpas DBT yn gymaint, ond darparu dull pwerus a chyfoethog o nodweddion i ddefnyddwyr adeiladu eu trawsnewidiadau eu hunain a dosbarthu'r modiwlau hyn.

Setiau o luniadau ac ymadroddion yw macros y gellir eu galw'n ffwythiannau o fewn modelau. Mae Macros yn caniatáu ichi ailddefnyddio SQL rhwng modelau a phrosiectau yn unol ag egwyddor peirianneg SYCH (Peidiwch ag Ailadrodd Eich Hun).

Enghraifft 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 %}

A'i ddefnydd:

{% set column_name = 'product' %}
select
 product,
 {{ rename_category(column_name) }} -- вызов макроса
from my_table

Daw DBT gyda rheolwr pecyn sy'n caniatáu i ddefnyddwyr gyhoeddi ac ailddefnyddio modiwlau a macros unigol.

Mae hyn yn golygu gallu llwytho a defnyddio llyfrgelloedd fel:

  • dbt_utils: gweithio gyda Dyddiad/Amser, Allweddi Amnewidiol, Profion Sgema, Pivot/Unpivot ac eraill
  • Templedi arddangos parod ar gyfer gwasanaethau megis Llif eira и Streip 
  • Llyfrgelloedd ar gyfer Storfeydd Data penodol, e.e. Redshift 
  • Logio — Modiwl ar gyfer cofnodi gweithrediad DBT

Mae rhestr gyflawn o becynnau ar gael yn both dbt.

Hyd yn oed mwy o nodweddion

Yma byddaf yn disgrifio ychydig o nodweddion a gweithrediadau diddorol eraill y mae'r tîm a minnau'n eu defnyddio i adeiladu Warws Data ynddo Olwynog.

Gwahanu amgylcheddau amser rhedeg DEV - PRAWF - PROD

Hyd yn oed o fewn yr un clwstwr DWH (o fewn cynlluniau gwahanol). Er enghraifft, gan ddefnyddio'r ymadrodd canlynol:

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 -%}
 
)

Mae'r cod hwn yn dweud yn llythrennol: ar gyfer amgylcheddau dev, prawf, ci cymryd data yn unig ar gyfer y 3 diwrnod diwethaf a dim mwy. Hynny yw, bydd rhedeg yn yr amgylcheddau hyn yn llawer cyflymach a bydd angen llai o adnoddau. Wrth redeg ar yr amgylchedd prod bydd cyflwr yr hidlydd yn cael ei anwybyddu.

Deunyddoli gydag amgodio colofn bob yn ail

Mae Redshift yn DBMS colofnol sy'n eich galluogi i osod algorithmau cywasgu data ar gyfer pob colofn unigol. Gall dewis yr algorithmau gorau posibl leihau gofod disg 20-50%.

Macro redshift.compress_table yn gweithredu'r gorchymyn ANALYZE COMPRESSION, yn creu tabl newydd gyda'r algorithmau amgodio colofn a argymhellir, allweddi segmentu penodedig (dist_key) ac allweddi didoli (sort_key), yn trosglwyddo'r data iddo, ac, os oes angen, yn dileu'r hen gopi.

Llofnod 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) }}

Logio model yn rhedeg

Gallwch atodi bachau i bob gweithrediad y model, a fydd yn cael ei weithredu cyn ei lansio neu yn syth ar ôl i'r model gael ei greu:

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

Bydd y modiwl logio yn eich galluogi i gofnodi'r holl fetadata angenrheidiol mewn tabl ar wahân, y gellir ei ddefnyddio wedyn i archwilio a dadansoddi tagfeydd.

Dyma sut olwg sydd ar y dangosfwrdd yn seiliedig ar logio data yn Looker:

Offeryn Adeiladu Data neu beth sy'n gyffredin rhwng Data Warehouse a Smoothie

Awtomeiddio Cynnal a Chadw Storio

Os ydych chi'n defnyddio rhai estyniadau o ymarferoldeb y Storfa a ddefnyddir, fel UDF (Swyddogaethau Diffiniedig Defnyddiwr), yna mae fersiwn o'r swyddogaethau hyn, rheoli mynediad, a chyflwyno datganiadau newydd yn awtomataidd yn gyfleus iawn i'w wneud yn DBT.

Rydym yn defnyddio UDF yn Python i gyfrifo hashes, parthau e-bost, a datgodio masgiau did.

Enghraifft o facro sy'n creu UDF ar unrhyw amgylchedd gweithredu (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 %}

Yn Wheely rydym yn defnyddio Amazon Redshift, sy'n seiliedig ar PostgreSQL. Ar gyfer Redshift, mae'n bwysig casglu ystadegau ar fyrddau yn rheolaidd a rhyddhau lle ar y ddisg - y gorchmynion DADANSODDIAD a VACUUM, yn y drefn honno.

I wneud hyn, mae'r gorchmynion o'r macro redshift_maintenance yn cael eu gweithredu bob nos:

{% 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 %}

Cwmwl DBT

Mae'n bosibl defnyddio DBT fel gwasanaeth (Gwasanaeth a Reolir). Wedi'i gynnwys:

  • DRhA Gwe ar gyfer datblygu prosiectau a modelau
  • Ffurfweddu ac amserlennu swyddi
  • Mynediad syml a chyfleus i logiau
  • Gwefan gyda dogfennaeth eich prosiect
  • Cysylltu CI (Integreiddio Parhaus)

Offeryn Adeiladu Data neu beth sy'n gyffredin rhwng Data Warehouse a Smoothie

Casgliad

Mae paratoi a bwyta DWH yn dod yr un mor bleserus a buddiol ag yfed smwddi. Mae DBT yn cynnwys Jinja, estyniadau defnyddwyr (modiwlau), casglwr, ysgutor, a rheolwr pecyn. Trwy roi'r elfennau hyn at ei gilydd rydych chi'n cael amgylchedd gwaith cyflawn ar gyfer eich Warws Data. Go brin fod ffordd well o reoli trawsnewid o fewn DWH heddiw.

Offeryn Adeiladu Data neu beth sy'n gyffredin rhwng Data Warehouse a Smoothie

Mae'r credoau a ddilynir gan ddatblygwyr DBT wedi'u llunio fel a ganlyn:

  • Cod, nid GUI, yw'r tynnu gorau ar gyfer mynegi rhesymeg ddadansoddol gymhleth
  • Dylai gweithio gyda data addasu arferion gorau mewn peirianneg meddalwedd (Peirianneg Meddalwedd)

  • Dylai seilwaith data hanfodol gael ei reoli gan y gymuned defnyddwyr fel meddalwedd ffynhonnell agored
  • Bydd nid yn unig offer dadansoddeg, ond hefyd cod yn dod yn eiddo fwyfwy i'r gymuned Ffynhonnell Agored

Mae’r credoau craidd hyn wedi silio cynnyrch a ddefnyddir gan dros 850 o gwmnïau heddiw, ac maent yn sail i lawer o estyniadau cyffrous a fydd yn cael eu creu yn y dyfodol.

I'r rhai sydd â diddordeb, mae fideo o wers agored a roddais ychydig fisoedd yn ôl fel rhan o wers agored yn OTUS - Offeryn Adeiladu Data ar gyfer Storio Redshift Amazon.

Yn ogystal â DBT a Warws Data, fel rhan o’r cwrs Peiriannydd Data ar y platfform OTUS, mae fy nghydweithwyr a minnau’n addysgu dosbarthiadau ar nifer o bynciau perthnasol a modern eraill:

  • Cysyniadau Pensaernïol ar gyfer Cymwysiadau Data Mawr
  • Ymarfer gyda Spark and Spark Streaming
  • Archwilio dulliau ac offer ar gyfer llwytho ffynonellau data
  • Adeiladu arddangosfeydd dadansoddol yn DWH
  • Cysyniadau NoSQL: HBase, Cassandra, ElasticSearch
  • Egwyddorion monitro ac offeryniaeth 
  • Prosiect Terfynol: rhoi'r holl sgiliau at ei gilydd dan gefnogaeth mentora

Cyfeiriadau:

  1. Dogfennaeth DBT - Cyflwyniad — Dogfennaeth swyddogol
  2. Beth, yn union, yw dbt? — Adolygu erthygl gan un o awduron DBT 
  3. Offeryn Adeiladu Data ar gyfer Storio Redshift Amazon — YouTube, Recordio gwers agored OTUS
  4. Dod i adnabod Greenplum — Y wers agored nesaf yw Mai 15, 2020
  5. Cwrs Peirianneg Data —OTUS
  6. Adeiladu Llif Gwaith Dadansoddeg Aeddfed — Golwg ar ddyfodol data a dadansoddeg
  7. Mae'n amser ar gyfer dadansoddeg ffynhonnell agored — Esblygiad dadansoddeg a dylanwad Ffynhonnell Agored
  8. Integreiddio Parhaus a Phrofi Adeiladu Awtomataidd gyda dbtCloud — Egwyddorion adeiladu CI gan ddefnyddio DBT
  9. Dechrau arni gyda thiwtorial DBT — Ymarfer, cyfarwyddiadau cam wrth gam ar gyfer gwaith annibynnol
  10. Siop Jaffle — Tiwtorial DBT Github — Github, cod prosiect addysgol

Dysgwch fwy am y cwrs.

Ffynhonnell: hab.com

Ychwanegu sylw