Data Build Tool na izay mahazatra eo amin'ny Data Warehouse sy Smoothie
Amin'ny fitsipika inona no amboarina Data Warehouse?
Mifantoha amin'ny sandan'ny orinasa sy ny fanadihadiana raha tsy misy ny code boilerplate. Ny fitantanana ny DWH ho codebase: versioning, review, automated test ary CI. Modular, extensible, open source ary fiaraha-monina. Ny antontan-taratasy mora ampiasaina sy ny fijerena ny fiankinan-doha (Data Lineage).
Bebe kokoa momba izany rehetra izany sy ny andraikitry ny DBT ao amin'ny tontolo iainana Big Data & Analytics - tongasoa eto amin'ny saka.
Salama daholo
Artemy Kozyr dia mifandray. Nandritra ny 5 taona mahery aho no niara-niasa tamin'ny trano fanatobiana data, nanangana ETL/ELT, ary koa ny famakafakana angon-drakitra sy ny fijerena sary. Miasa amin'izao fotoana izao aho Wheely, Mampianatra ao amin'ny OTUS amin'ny taranja iray aho Data Engineer, ary androany aho dia te hizara aminareo lahatsoratra iray izay nosoratako ho fiandrasana ny fanombohana fisoratana anarana vaovao ho an'ny taranja.
Fampahalalana fohy
Ny rafitra DBT dia momba ny T ao amin'ny fanafohezana ELT (Extract - Transform - Load).
Miaraka amin'ny fahatongavan'ireo angona famakafakana mamokatra sy azo esorina toy ny BigQuery, Redshift, Snowflake, dia tsy nisy dikany ny fanaovana fanovana ivelan'ny Data Warehouse.
Ny DBT dia tsy misintona angona avy amin'ny loharano, fa manome fahafahana lehibe hiasa miaraka amin'ny angon-drakitra efa nampidirina tao amin'ny Storage (ao amin'ny fitahirizana anatiny na ivelany).
Ny tanjon'ny DBT dia ny maka ny code, manangona azy ao amin'ny SQL, manatanteraka ny baiko amin'ny filaharana marina ao amin'ny Repository.
DBT Project Structure
Ny tetikasa dia ahitana lahatahiry sy rakitra misy karazany 2 ihany:
Amin'ny ambaratonga fototra, ny asa dia voarafitra toy izao manaraka izao:
Ny mpampiasa dia manomana kaody modely amin'ny IDE mety
Amin'ny fampiasana ny CLI, natomboka ny modely, ny DBT dia manangona ny kaody modely amin'ny SQL
Ny kaody SQL natambatra dia tanterahana ao amin'ny fitahirizana amin'ny filaharana nomena (sary)
Ity ny mety ho endriky ny fandehanana avy amin'ny CLI:
Ny zavatra rehetra dia SELECT
Ity dia singa mahafaty amin'ny rafitra Data Build Tool. Raha lazaina amin'ny teny hafa, ny DBT dia manaisotra ny kaody rehetra mifandraika amin'ny fametrahana ny fanontanianao ao amin'ny fivarotana (fiovaovan'ny baiko CREATE, INSERT, UPDATE, DELETE ALTER, GRANT, ...).
Ny modely rehetra dia misy ny fanoratana fanontaniana SELECT iray izay mamaritra ny angon-drakitra vokarina.
Amin'ity tranga ity, ny lojikan'ny fanovΓ na dia mety ho ambaratonga maro ary manambatra angona avy amin'ny modely maro hafa. Ohatra iray amin'ny maodely iray izay hanangana fampirantiana baiko (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
Inona no zavatra mahaliana hitantsika eto?
Voalohany: CTE (Expression Common Table Expressions) - handaminana sy hahatakatra ny kaody misy fiovana maro sy lojikan'ny fandraharahana.
Faharoa: Ny kaody modely dia fifangaroan'ny SQL sy ny fiteny Jinja (fitenin'ny template).
Ny ohatra dia mampiasa loop ho an'ny hamokatra ny vola isaky ny fomba fandoavam-bola voalaza ao amin'ny fitenenana voatendry. Ny asa ihany koa dia ampiasaina ref - ny fahafahana manondro modely hafa ao anatin'ny kaody:
Nandritra ny fanangonana ref dia hovana ho tondro kendrena ho latabatra na fijerena ao amin'ny Storage
DBT dia manangana grafika mifototra amin'ny fandrindrana ny maodely tetikasa rehetra, na ny marimarina kokoa, ref() rohy ao anatin'ny maodely mankany amin'ny maodely hafa. Ny fananana grafika dia ahafahanao manao ireto zavatra manaraka ireto:
Mihazakazaka modely amin'ny filaharana marina
Fampifanarahana ny fananganana trano fivarotana
Mandehana subgraph tsy misy dikany
Ohatra amin'ny fijerena sary:
Ny node tsirairay amin'ny grafika dia modely; ny sisin'ny grafika dia voafaritra amin'ny alΓ lan'ny fitenenana ref.
Data Quality sy Documentation
Ho fanampin'ny famoronana ireo maodely ho azy ireo, ny DBT dia mamela anao hitsapa vinavina maromaro momba ny angon-drakitra vokarina, toy ny:
Tsy Null
Unique
Reference Integrity - integrity referential (ohatra, customer_id amin'ny latabatra baiko dia mifanandrify amin'ny id amin'ny latabatra mpanjifa)
Mifanaraka amin'ny lisitry ny soatoavina azo ekena
Azo atao ny manampy ny fitsapana anao manokana (fitsapana angon-drakitra manokana), toy ny, ohatra, % fivilian'ny fidiram-bola miaraka amin'ny tondro manomboka amin'ny andro iray, herinandro, iray volana lasa izay. Ny fiheverana rehetra natsangana ho fangatahana SQL dia mety ho lasa fitsapana.
Amin'izany fomba izany dia azonao atao ny misambotra ny fiviliana tsy ilaina sy ny lesoka amin'ny angon-drakitra ao amin'ny varavarankelin'ny Warehouse.
Raha ny momba ny antontan-taratasy, ny DBT dia manome fomba fiasa hanampiana, famoahana ary fizarana metadata sy fanehoan-kevitra amin'ny modely ary na dia ny haavon'ny toetra aza.
Toy izao ny endriky ny fanampim-panadinana sy ny antontan-taratasy eo amin'ny haavon'ny fisie:
- 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']
Ary toy izao ny endrik'ity antontan-taratasy ity amin'ny tranokala novokarina:
Macro sy Modules
Ny tanjon'ny DBT dia tsy dia ny ho lasa andian-tsoratra SQL, fa ny hanomezana ireo mpampiasa fitaovana matanjaka sy manankarena amin'ny fananganana ny fanovana azy manokana sy ny fizarana ireo maody ireo.
Macros dia andiana fananganana sy fitenenana izay azo antsoina hoe asa ao anatin'ny modely. Ny Macros dia mamela anao hampiasa indray ny SQL eo anelanelan'ny maodely sy tetikasa mifanaraka amin'ny fitsipiky ny injeniera DRY (Aza mamerina ny tenanao).
Ohatra 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 %}
Ary ny fampiasana azy:
{% set column_name = 'product' %}
select
product,
{{ rename_category(column_name) }} -- Π²ΡΠ·ΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠ°
from my_table
Ny DBT dia tonga miaraka amin'ny mpitantana fonosana izay ahafahan'ny mpampiasa mamoaka sy mampiasa indray ny maody sy macro tsirairay.
Midika izany fa afaka mameno sy mampiasa tranomboky toy ny:
dbt_utils: miasa miaraka amin'ny Date/Time, Fanalahidin'ny Mpisolo, Fitsapana Schema, Pivot/Unpivot ary ny hafa
Modely fampirantiana efa vita ho an'ny serivisy toy ny Snowplow ΠΈ mivatra
Ny lisitry ny fonosana feno dia azo jerena ao amin'ny dbt hub.
Misy endri-javatra bebe kokoa
Eto aho dia hamaritra endri-javatra mahaliana sy fampiharana vitsivitsy hafa ampiasain'ny ekipa hananganana Data Warehouse Wheely.
Fanasarahana ny tontolo iainana DEV - TEST - PROD
Na dia ao anatin'ny cluster DWH mitovy aza (ao anatin'ny tetika samihafa). Ohatra, mampiasa ity teny manaraka ity:
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 -%}
)
Ity kaody ity dia milaza ara-bakiteny hoe: ho an'ny tontolo iainana dev, fitsapana, ci maka angon-drakitra ihany mandritra ny 3 andro farany ary tsy misy intsony. Izany hoe, ny fandehanana amin'ireo tontolo ireo dia ho haingana kokoa ary mitaky loharanon-karena vitsy kokoa. Rehefa mandeha amin'ny tontolo iainana famokarana ho tsinontsinoavina ny toetry ny sivana.
Materialization miaraka amin'ny fanovΓ na tsanganana mifandimby
Redshift dia DBMS tsanganana izay ahafahanao mametraka algorithm famatrarana data ho an'ny tsanganana tsirairay. Ny fisafidianana algorithm tsara indrindra dia mety hampihena ny habaka kapila amin'ny 20-50%.
Macro redshift.compress_table dia hanatanteraka ny baiko ANALYZE COMPRESSION, mamorona latabatra vaovao miaraka amin'ny algorithm fanodikodinan'ny tsanganana atolotra, ny fanalahidin'ny fizarana (dist_key) ary ny fanalahidin'ny fanasokajiana (sort_key), mamindra ny angon-drakitra ao, ary, raha ilaina, esory ny kopia taloha.
Ny maody fanoratana dia ahafahanao mirakitra ny metadata ilaina rehetra amin'ny tabilao misaraka, izay azo ampiasaina amin'ny fanaraha-maso sy famakafakana ireo bottleneck avy eo.
Toy izao ny endriky ny dashboard mifototra amin'ny angona fidirana ao amin'ny Looker:
Automation ny fitahirizana fikojakojana
Raha mampiasa fanitarana sasany amin'ny fiasan'ny Repository ampiasaina ianao, toy ny UDF (User Defined Functions), dia tena mora atao amin'ny DBT ny famoahana ireo fiasa ireo, ny fanaraha-maso ny fidirana, ary ny famoahana automatique amin'ny famoahana vaovao.
{% 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 %}
Amin'ny Wheely dia mampiasa Amazon Redshift izahay, izay mifototra amin'ny PostgreSQL. Ho an'ny Redshift, zava-dehibe ny manangona tsy tapaka ny antontan'isa eo amin'ny latabatra ary manafaka ny habaka kapila - ny baiko ANALYZE sy VACUUM.
Mba hanaovana izany, ny baiko avy amin'ny macro redshift_maintenance dia tanterahina isaky ny alina:
{% 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 %}
DBT Cloud
Azo atao ny mampiasa DBT ho serivisy (Service Managed). Tafiditra:
Web IDE ho an'ny famolavolana tetikasa sy modely
Fandrindrana asa sy fandaharam-potoana
Fidirana tsotra sy mora amin'ny logs
Tranonkala misy antontan-taratasy momba ny tetikasanao
Mampifandray CI (Continuous Integration)
famaranana
Ny fanomanana sy ny fihinanana DWH dia lasa mahafinaritra sy mahasoa toy ny fisotroana smoothie. DBT dia ahitana Jinja, fanitarana mpampiasa (modules), compiler, mpanatanteraka ary mpitantana fonosana. Amin'ny fampifangaroana ireo singa ireo dia mahazo tontolo miasa feno ho an'ny Data Warehouse ianao. Zara raha misy fomba tsara kokoa hitantana ny fanovana ao anatin'ny DWH ankehitriny.
Ny finoana arahin'ireo mpamorona ny DBT dia voavolavola toy izao manaraka izao:
Code, fa tsy GUI, no abstraction tsara indrindra hanehoana lojika famakafakana sarotra
Ny fiasana amin'ny angona dia tokony hampifanaraka ny fanao tsara indrindra amin'ny injeniera rindrambaiko (Injeniera Software)
Ny fotodrafitrasa angon-drakitra manan-danja dia tokony hofehezin'ny vondrom-piarahamonin'ny mpampiasa ho toy ny rindrambaiko open source
Tsy ny fitaovana analyse ihany, fa ny kaody koa dia ho lasa fananan'ny vondrom-piarahamonina Open Source
Ireo finoana fototra ireo dia niteraka vokatra iray ampiasain'ny orinasa mihoatra ny 850 ankehitriny, ary izy ireo no fototry ny fanitarana mampientam-po maro izay hoforonina amin'ny ho avy.
Ho fanampin'ny DBT sy Data Warehousing, ao anatin'ny taranja Data Engineer amin'ny sehatra OTUS, izaho sy ny mpiara-miasa amiko dia mampianatra kilasy amin'ny lohahevitra hafa mifandraika sy maoderina:
Hevitra ara-javakanto ho an'ny fampiharana angona lehibe
Manaova fanazaran-tena miaraka amin'ny Spark sy Spark Streaming
Mikaroka ny fomba sy ny fitaovana hametahana loharano angona
Manangana seho famakafakana ao amin'ny DWH
Hevitra NoSQL: HBase, Cassandra, ElasticSearch
Fitsipiky ny fanaraha-maso sy ny orkestra
Tetikasa farany: mametraka ny fahaiza-manao rehetra miaraka amin'ny fanohanana ny fanoroana