ProHoster > Blag > Riarachán > 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).
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
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:
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:
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:
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:
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
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.
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:
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)
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.
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.
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: