ProHoster > blog > Gweinyddiaeth > 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).
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
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:
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
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:
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:
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
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.
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:
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)
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.
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.
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