Uirlis Tógála Sonraí nó an rud atá coitianta idir Data Warehouse agus Smoothie

Uirlis Tógála Sonraí nó an rud atá coitianta idir Data Warehouse agus Smoothie
Cad iad na prionsabail a bhfuil Stóras Sonraí idéalach tógtha orthu?

Fócas ar luach gnó agus anailísíocht in éagmais cód pláta coire. DWH a bhainistiú mar bhunachar cód: leagan, athbhreithniú, tástáil uathoibrithe agus CI. Modúlacht, fairsingeacht, foinse oscailte agus pobal. Doiciméadú éasca le húsáid agus léirshamhlú spleáchais (Líníocht Sonraí).

Tuilleadh faoi seo go léir agus faoi ról DBT san éiceachóras Big Data & Analytics - fáilte romhat chuig cat.

Всем привет

Artemy Kozyr i dteagmháil. Le breis is 5 bliana tá mé ag obair le stórais sonraí, ag tógáil ETL/ELT, chomh maith le hanailísíocht sonraí agus léirshamhlú. Tá mé ag obair i láthair na huaire Rothach, bím ag múineadh ag OTUS ar chúrsa Innealtóir Sonraí, agus inniu ba mhaith liom alt a scríobh mé ag súil leis an tús a roinnt leat rollú nua don chúrsa.

Forbhreathnú

Baineann creat DBT leis an acrainm T san ELT (Sliocht - Trasfhoirmigh - Luchtaigh).

Le teacht ar bhunachair shonraí anailíse táirgiúla agus inscálaithe mar BigQuery, Redshift, Snowflake, ní raibh aon chiall le claochluithe a dhéanamh lasmuigh den Stóras Sonraí. 

Ní dhéanann DBT sonraí a íoslódáil ó fhoinsí, ach cuireann sé deiseanna iontacha ar fáil chun oibriú le sonraí atá luchtaithe cheana féin isteach sa Stóráil (i Stóráil Inmheánach nó Seachtrach).

Uirlis Tógála Sonraí nó an rud atá coitianta idir Data Warehouse agus Smoothie
Is é príomhchuspóir DBT an cód a ghlacadh, é a thiomsú i SQL, na horduithe a fhorghníomhú san ord ceart sa Stór.

Struchtúr Tionscadal DBT

Níl sa tionscadal ach eolairí agus comhaid nach bhfuil iontu ach 2 chineál:

  • Múnla (.sql) - aonad claochlaithe curtha in iúl ag ceist SELECT
  • Comhad cumraíochta (.yml) - paraiméadair, socruithe, tástálacha, doiciméadú

Ag leibhéal bunúsach, tá an obair struchtúrtha mar seo a leanas:

  • Ullmhaíonn an t-úsáideoir cód samhail in aon IDE áisiúil
  • Ag baint úsáide as an CLI, seoltar samhlacha, tiomsaíonn DBT an cód múnla i SQL
  • Déantar an cód SQL tiomsaithe a rith sa Stóráil i seicheamh tugtha (graf)

Seo an chuma a bheadh ​​ar rith ón CLI:

Uirlis Tógála Sonraí nó an rud atá coitianta idir Data Warehouse agus Smoothie

Tá gach rud SELECT

Is gné mharfach é seo den chreat Uirlis Tógála Sonraí. I bhfocail eile, déanann DBT achoimriú ar an gcód go léir a bhaineann le do cheisteanna a chur i bhfeidhm sa Store (athruithe ó na horduithe CREATE, INSERT, Update, DELETE ALTER, DEONTAIS, ...).

Is éard atá i gceist le haon samhail ná ceist SELECT amháin a scríobh a shainíonn an tacar sonraí a thagann as.

Sa chás seo, is féidir le loighic an chlaochlaithe a bheith il-leibhéil agus sonraí ó roinnt samhlacha eile a chomhdhlúthú. Sampla de shamhail a thógfaidh taispeántas ordaithe (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

Cad iad na rudaí suimiúla atá le feiceáil anseo?

An Chéad: Úsáidte CTE (Sloinn Tábla Coitianta) - chun cód a eagrú agus a thuiscint ina bhfuil go leor claochluithe agus loighic ghnó

Dara: Is meascán de SQL agus teanga é cód múnla Jinja (teanga templating).

Úsáideann an sampla lúb do chun an méid do gach modh íocaíochta a shonraítear sa slonn a ghiniúint leagtha. Úsáidtear an fheidhm freisin tag — an cumas tagairt a dhéanamh do mhúnlaí eile laistigh den chód:

  • Le linn tiomsú tag déanfar é a thiontú go pointeoir sprice chuig tábla nó radharc sa Stóráil
  • tag ligeann duit graf spleáchais samhail a thógáil

Go díreach Jinja cuireann sé féidearthachtaí beagnach gan teorainn le DBT. Is iad na cinn is coitianta a úsáidtear:

  • Má tá / ráitis eile - ráitis brainse
  • Le haghaidh lúb - timthriallta
  • Athróga
  • Macra - ag cruthú macraí

Ábharization: Tábla, Amharc, Incriminteach

Is cur chuige í an straitéis ábharthachta ar dá réir a stórálfar an tacar sonraí múnla dá réir sa Stóráil.

I dtéarmaí bunúsacha is é:

  • Tábla - tábla fisiciúil sa Stóráil
  • Amharc - amharc, tábla fíorúil i Stóráil

Tá straitéisí cur i bhfeidhm níos casta ann freisin:

  • Incriminteach - luchtú incriminteach (de táblaí fíricí móra); cuirtear línte nua leis, nuashonraítear línte athraithe, glantar línte scriosta 
  • Ephemeral - ní thagann an tsamhail i gcrích go díreach, ach glacann sé páirt mar CTE i samhlacha eile
  • Aon straitéisí eile is féidir leat tú féin a chur leis

Chomh maith le straitéisí ábharthachta, tá deiseanna ann chun Stórálacha ar leith a bharrfheabhsú, mar shampla:

  • Snowflake: Táblaí neamhbhuan, Iompar Cumaisc, Cnuasú táblaí, Deontais cóipeála, tuairimí slán
  • Redshift: Distkey, Sortkey (interleaved, cumaisc), Radhairc Ceangailteacha Déanacha
  • Ceist Mhór: Deighilt agus braisliú boird, Iompar Cumaisc, Criptiú KMS, Lipéid & Clibeanna
  • Spark: Formáid comhaid (iontlaise, csv, json, orc, deilt), partition_by, clustered_by, buicéid, incriminteach_strategy

Tacaítear leis na Stórais seo a leanas faoi láthair:

  • postgres
  • Redshift
  • Ceist Mhór
  • Snowflake
  • Presto (i bpáirt)
  • Spark (i bpáirt)
  • Microsoft SQL Server (oiriúntóir pobail)

Déanaimis ár múnla a fheabhsú:

  • Déanaimis a líonadh incriminteach (Incriminteach)
  • Cuirimis eochracha deighilte agus sórtála le haghaidh 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

Graf spleáchais samhail

Is crann spleáchais é freisin. Tugtar DAG (Graf Aicmileach Dírithe) air freisin.

Tógann DBT graf bunaithe ar chumraíocht na múnlaí tionscadail go léir, nó ina áit sin, naisc tag() laistigh de mhúnlaí le samhlacha eile. Má tá graf agat is féidir na rudaí seo a leanas a dhéanamh:

  • Samhlacha reatha san ord ceart
  • Comhthreomhar le foirmiú aghaidh stórais
  • Rith foghraf treallach 

Sampla de léirshamhlú graif:

Uirlis Tógála Sonraí nó an rud atá coitianta idir Data Warehouse agus Smoothie
Is samhail é gach nód den ghraf; sonraítear imill an ghraif leis an slonn tag.

Cáilíocht Sonraí agus Doiciméadúchán

Chomh maith leis na samhlacha a ghiniúint iad féin, ceadaíonn DBT duit roinnt boinn tuisceana a thástáil maidir leis an tacar sonraí a eascraíonn as, mar shampla:

  • Ní Null
  • Uathúil
  • Ionracas Tagartha - sláine tagartha (mar shampla, comhfhreagraíonn customer_id sa tábla orduithe d'aitheantas i dtábla na gcustaiméirí)
  • Ag meaitseáil leis an liosta luachanna inghlactha

Is féidir do thástálacha féin (tástálacha sonraí saincheaptha) a chur leis, mar shampla, mar shampla, % diall ioncaim le táscairí ó lá, seachtain, mí ó shin. Féadfaidh aon toimhde a fhoirmítear mar cheist SQL a bheith ina thástáil.

Ar an mbealach seo, is féidir leat diallais nach dteastaíonn agus earráidí i sonraí a fháil sna fuinneoga Stórais.

I dtéarmaí doiciméadaithe, cuireann DBT meicníochtaí ar fáil chun meiteashonraí agus tuairimí a shuimiú, a leagan agus a dháileadh ag an tsamhail agus fiú leibhéil aitreabúide. 

Seo an chuma atá ar thástálacha agus ar dhoiciméadú a chur leis ag leibhéal an chomhaid chumraíochta:

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

Agus seo an chuma atá ar an doiciméadú seo ar an suíomh Gréasáin ginte:

Uirlis Tógála Sonraí nó an rud atá coitianta idir Data Warehouse agus Smoothie

Macraí agus Modúil

Ní hé cuspóir DBT an oiread sin a bheith ina shraith scripteanna SQL, ach bealach cumhachtach agus saibhir ó thaobh gné a sholáthar d’úsáideoirí chun a gcuid claochluithe féin a thógáil agus na modúil seo a dháileadh.

Is tacair de thógálacha agus de shlabhraí iad Macraí ar féidir a ghlaoch mar fheidhmeanna laistigh de mhúnlaí. Ligeann Macraí duit SQL a athúsáid idir samhlacha agus tionscadail de réir phrionsabal innealtóireachta TIRIM (Ná Déan Tú Féin).

Sampla macra:

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

Agus a úsáidí:

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

Tagann DBT le bainisteoir pacáiste a ligeann d’úsáideoirí modúil aonair agus macraí a fhoilsiú agus a athúsáid.

Ciallaíonn sé seo a bheith in ann leabharlanna a luchtú agus a úsáid mar:

  • dbt_utils: ag obair le Dáta/Am, Eochracha Ionaid, tástálacha Scéimre, Pivot/Unpivot agus daoine eile
  • Teimpléid taispeántais réidh-déanta le haghaidh seirbhísí ar nós Sreabhadh sneachta и Stripe 
  • Leabharlanna do Stórais Sonraí ar leith, e.g. Redshift 
  • Logáil — Modúl chun oibríocht DBT a logáil

Is féidir liosta iomlán de na pacáistí a fháil ag mol dbt.

Gnéithe fiú níos mó

Anseo déanfaidh mé cur síos ar roinnt gnéithe agus feidhmiúcháin suimiúla eile a úsáideann an fhoireann agus mé chun Stóras Sonraí a thógáil ann Rothach.

Timpeallachtaí rite ama a scaradh DEV - TEST - PROD

Fiú amháin laistigh den bhraisle DWH céanna (laistigh de scéimeanna éagsúla). Mar shampla, ag baint úsáide as an slonn seo a leanas:

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

Deir an cód seo go litriúil: le haghaidh timpeallachtaí dev, tástáil, ci sonraí a ghlacadh ach amháin le haghaidh na 3 lá deiridh agus nach bhfuil níos mó. Is é sin, beidh reáchtáil sna timpeallachtaí seo i bhfad níos tapúla agus beidh níos lú acmhainní ag teastáil. Nuair a reáchtáil ar an timpeallacht táirge déanfar neamhaird ar riocht an scagaire.

Ábharization le ionchódú colún malartach

Is DBMS columnar é Redshift a ligeann duit halgartaim chomhbhrú sonraí a shonrú do gach colún ar leith. Má roghnaítear na halgartaim is fearr is féidir an spás diosca a laghdú 20-50%.

Macra redshift.compress_table fhorghníomhóidh sé an t-ordú COMHRÚCHÁIN ANALYZE, cruthaigh tábla nua leis na halgartaim ionchódaithe colún molta, eochracha deighilte sonraithe (dist_key) agus eochracha sórtála (sort_key), aistrigh na sonraí chuige, agus, más gá, scrios an seanchóip.

Síniú Macra:

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

Ritheann múnla logáil

Is féidir leat crúcaí a cheangal le gach forghníomhú den mhúnla, a dhéanfar roimh an seoladh nó díreach tar éis cruthú an mhúnla a chríochnú:

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

Tabharfaidh an modúl logála deis duit na meiteashonraí riachtanacha go léir a thaifeadadh i dtábla ar leith, ar féidir iad a úsáid ina dhiaidh sin chun scrogaill a iniúchadh agus a anailísiú.

Seo an chuma atá ar an deais bunaithe ar logáil sonraí in Looker:

Uirlis Tógála Sonraí nó an rud atá coitianta idir Data Warehouse agus Smoothie

Uathoibriú Cothabháil Stórála

Má úsáideann tú roinnt síntí ar fheidhmiúlacht an Taisc a úsáidtear, mar UDF (Feidhmeanna Sainmhínithe Úsáideoir), tá sé an-áisiúil na feidhmeanna seo a leagan, rialú rochtana agus rolladh amach uathoibrithe na n-eisiúintí nua a dhéanamh in DBT.

Bainimid úsáid as UDF i Python chun hashes, fearainn ríomhphoist agus díchódú bitmask a ríomh.

Sampla de mhacra a chruthaíonn UDF ar aon timpeallacht fhorghníomhaithe (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 %}

Ag Wheely úsáidimid Amazon Redshift, atá bunaithe ar PostgreSQL. Maidir le Redshift, tá sé tábhachtach staitisticí a bhailiú go rialta ar tháblaí agus spás diosca a shaoradh - na horduithe ANAILÍS agus folúis, faoi seach.

Chun seo a dhéanamh, déantar na horduithe ón macra redshift_maintenance a fhorghníomhú gach oíche:

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

Scamall DBT

Is féidir DBT a úsáid mar sheirbhís (Seirbhís Bainistithe). San áireamh:

  • IDE Gréasáin chun tionscadail agus samhlacha a fhorbairt
  • Cumraíocht agus sceidealú poist
  • Rochtain shimplí agus áisiúil ar logaí
  • Láithreán gréasáin le doiciméadú do thionscadal
  • CI a nascadh (Comhtháthú Leanúnach)

Uirlis Tógála Sonraí nó an rud atá coitianta idir Data Warehouse agus Smoothie

Conclúid

Éiríonn sé chomh taitneamhach agus tairbheach DWH a ullmhú agus a ól le smoothie a ól. Tá DBT comhdhéanta de Jinja, síntí úsáideora (modúil), tiomsaitheoir, seiceadóir, agus bainisteoir pacáiste. Trí na gnéithe seo a chur le chéile gheobhaidh tú timpeallacht oibre iomlán do do Shonraí Sonraí. Is ar éigean atá bealach níos fearr chun claochlú a bhainistiú laistigh de DWH inniu.

Uirlis Tógála Sonraí nó an rud atá coitianta idir Data Warehouse agus Smoothie

Tá na tuairimí a leanann forbróirí DBT le chéile mar seo a leanas:

  • Is é Cód, ní GUI, an t-astarraingt is fearr chun loighic anailíse casta a chur in iúl
  • Ba cheart go n-oiriúnódh oibriú le sonraí na cleachtais is fearr in innealtóireacht bogearraí (Innealtóireacht Bogearraí)

  • Ba cheart go mbeadh an bonneagar sonraí ríthábhachtach á rialú ag an bpobal úsáideoirí mar bhogearraí foinse oscailte
  • Ní hamháin go mbeidh uirlisí anailíse, ach freisin cód, ina maoin de chuid an phobail Foinse Oscailte

Tá na bunchreidimh seo tar éis táirge a úsáid a úsáideann breis agus 850 cuideachta sa lá atá inniu ann, agus tá siad mar bhunús le go leor síntí spreagúla a chruthófar amach anseo.

Dóibh siúd a bhfuil suim acu ann, tá físeán de cheacht oscailte a thug mé cúpla mí ó shin mar chuid de cheacht oscailte ag OTUS - Uirlis Tógála Sonraí le haghaidh Stóráil Redshift Amazon.

Chomh maith le DBT agus Ollstóráil Sonraí, mar chuid den chúrsa Innealtóra Sonraí ar an ardán OTUS, múineann mo chomhghleacaithe agus mé féin ranganna ar roinnt ábhar ábhartha agus nua-aimseartha eile:

  • Coincheapa Ailtireachta d'Fheidhmchláir Mhórshonraí
  • Cleachtaigh le Spark agus Spark Streaming
  • Modhanna agus uirlisí a iniúchadh chun foinsí sonraí a lódáil
  • Taispeántais anailíse a thógáil in DWH
  • Coincheapa NoSQL: HBase, Cassandra, ElasticSearch
  • Prionsabail na monatóireachta agus na ceolfhoirne 
  • Tionscadal Deiridh: na scileanna go léir a chur le chéile faoi thacaíocht mheantóireachta

Naisc:

  1. Doiciméadú DBT - Réamhrá — Doiciméadacht oifigiúil
  2. Cad é, go díreach, dbt? — Athbhreithnigh alt le duine d'údair DBT 
  3. Uirlis Tógála Sonraí le haghaidh Stóráil Redshift Amazon — YouTube, Taifeadadh ceacht oscailte OTUS
  4. Cur aithne ar Greenplum — Is é an 15 Bealtaine 2020 an chéad cheacht oscailte eile
  5. Cúrsa Innealtóireacht Sonraí —ÓTUS
  6. Sreabhadh Oibre Anailíseach Lánfhásta a Thógáil — Súil ar thodhchaí sonraí agus anailísíochta
  7. Tá sé in am le haghaidh anailísí foinse oscailte — Forás na hanailísíochta agus tionchar Foinse Oscailte
  8. Comhtháthú Leanúnach agus Tástáil Uathoibrithe Tógála le dbtCloud — Prionsabail thógáil CI ag baint úsáide as DBT
  9. Tús a chur le teagasc DBT — Cleachtadh, treoracha céim ar chéim le haghaidh obair neamhspleách
  10. Siopa Jaffle - Github DBT Teagaisc — Github, cód tionscadail oideachais

Tuilleadh eolais faoin gcúrsa.

Foinse: will.com

Add a comment