Instrumentum aedificate vel quod commune est inter Data CELLA et Smoothie

Instrumentum aedificate vel quod commune est inter Data CELLA et Smoothie
Quibus principiis est specimen Data CELLA aedificata?

Focus in negotio valoris et analyticorum in codice boilerplate deficiente. DWH administrandi ut codebase: versiones, recensio, probatio automated et CI. Modularis, extensibilis, fons et communitas aperta. User-amica documenta ac dependentia visualisation (Data Lineage).

Plura de his et de munere DBT in Big Data & Analytics ecosystematis - grata cat.

salve omnes

Artemy Kozyr in tactu est. Plus quam 5 annos laboravi cum notitia apothecarum, aedificationis ETL/ELT, necnon notitiarum analyticorum et visualisationum. I am working in wheelyDoco cursum ad OTUS Data ipsumet hodie articulum tecum communicare volo, quem in antecessum scripsi initio novus numerus ad cursum.

synopsis

De compage DBT omnia de T in ELT (Extract - Transform - Load) acronym.

Adventu tam fertilis et scalabiles databases analyticae sicut BigQuery, Redshift, Snowflake, punctum transmutationes extra Data CELLA facere non erat. 

DBT notitias ex fontibus non dat, sed magnas opportunitates praebet operandi cum notitia quae iam in repono (in Repono Interno vel Externo).

Instrumentum aedificate vel quod commune est inter Data CELLA et Smoothie
Praecipuum propositum DBT est codicem sumere, in SQL compilare, mandata recta serie in Repositorio exequi.

DBT Project Structure

Propositum constat directoriis et scriniis tantum 2 specierum:

  • Exemplar (.sql) - unitas mutationis expressa per interrogationem selectam
  • Configurationis fasciculus (.yml) - parametri, occasus, probationes, documenta

In gradu fundamentali, opus hoc modo exsistit:

  • Usoris exemplar codice aliquo convenienti IDE preparat
  • Utens CLI, exempla emittuntur, exemplar codicis DBT componit in SQL
  • Composuit SQL signum fit in at in data serie (graph)

Ecce quid de CLI currit simile:

Instrumentum aedificate vel quod commune est inter Data CELLA et Smoothie

Omnia enim SELECT

Hoc est homicida notam instrumenti instrumenti aedificandi Datae. Aliis verbis, DBT totum codicem abstrahit cum quaestionibus materialibus in Store (variationes mandatorum CREO, INSERT, UPDATE, ALTER DELETE, CONCEDE, ...).

Quodlibet exemplar involvit scripturam unam interrogationem SELECTAE quae inde notitias definitas definit.

In hoc casu, logica transformatio multi- gradatim ac solidare notitias ex pluribus aliis exemplaribus potest. Exemplum exemplar quod ordinem showcase aedificabit (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

Quid interesting res hic videmus?

Primum: CTE (Expressiones Tabulae Communis) - ordinare et intelligere codicem qui continet multam conversionum et logicam negotiationem.

Secundum: Exemplar codicem mixtum SQL et lingua est Jinja (tempting language).

Exemplum utitur loop quia generare quantitatem singulis solutionis modum determinatum locutionis Set. Munus etiam usus est ref - facultas referendi alia exempla in codice:

  • Per compilationem ref convertetur ad signum monstratorem ad mensam vel visum in at
  • ref patitur te aedificare exemplar dependentia graph

nimirum Jinja addit fere infinitas facultates DBT. Vulgo usui sunt;

  • Si / aliud constitutiones - ramus propositiones
  • Ad ansas - circuitus
  • Variabilium
  • Macro - partum macros

Materialization: Tabula, Visum, Incremental

Materializationis militaris accessus est secundum quem inde copia notitiarum exemplarium in repono.

In fundamentalibus verbis scriptum est:

  • Mensa - physica in tabula repono
  • View - view, virtual table in at storage

Sunt etiam magis implicatae rationes materializationis;

  • Incremental - incremental loading (of large fact tables); novae lineae additae sunt, lineae mutatae renovantur, lineae deletae purgantur 
  • Exemplar ephemerale non directe materiat, sed participat ut CTE in aliis exemplaribus
  • Alia consilia potes addere te ipsum

Praeter rationes materializationes, opportunitates optimizationis pro repono specificatis, exempli gratia:

  • Aureus: Mensae caducae, mores Merge, Mensam pampineam, dona Effingo, Secure opiniones
  • redshift: Distkey, Sortkey (interleaved, composita), Late Binding Views
  • BigQuery: Tabula partitionis & ligaturae, Merge mores, KMS Encryption, Labels & Tags
  • scintillam: forma fasciculi (parquet, csv, json, orc, delta), partition_by, glomered_by, situla, incremental_strategy

Sequenti Storages sunt currently suscepit:

  • postgres
  • redshift
  • BigQuery
  • Aureus
  • Domine Deus (ex parte)
  • Scintilla (ex parte)
  • Microsoft SQL Servo (communitatis adaptor)

Exemplar nostrum emendamus:

  • Inebriemur incremental (Incremental)
  • Addamus justo ac voluptua claves 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

Exemplar graph dependentiae

Est etiam arbor dependentia. Notum est etiam quod DAG (Dirige Graph Acyclic).

DBT graphum aedificat in configuratione omnium exemplorum projectorum, vel potius ref() nexus in exemplaribus aliis exemplaribus. Habens lacinia purus permittit te facere sequentia:

  • Exempla currit in vnum
  • Parallelization of storefront formation
  • Currens aliquod subgraph 

Exemplum graph visualizationis:

Instrumentum aedificate vel quod commune est inter Data CELLA et Smoothie
Quisque nodi graphi exemplar est, margines graphi specificantur ab expressione ref.

Data Quality and Documentation

Praeter formas ipsas exempla, DBT tibi permittit probare plurium suppositionum (asserumtionum) de notitia quae inde prolata, ut:

  • Non Null
  • Unique
  • Integritas relatio - integritas referentialis (exempli gratia, customer_id in mandatis mensa respondet id in mensa clientium)
  • Matching the list of gratum values

Possibile est tuas proprias probationes addere (consuetudo probationum notitiarum), ut, exempli gratia, % deviatio vectigalium cum indicibus ex die, septimana, mense elapso. Quaelibet suppositio ex interrogatione SQL proposita facta test fieri potest.

Hoc modo, errores et errores inutiles capere potes in notitia in fenestris CELLA.

DBT in terminis documentorum machinas praebet ad exemplar metadatas et commentationes addendi, versionis ac distribuendi ac etiam attributorum gradus. 

Hic est quod addendo probationes et documenta spectat sicut in gradu configurationis fasciculi:

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

Et hinc est quod haec documenta spectat sicut in loco genito:

Instrumentum aedificate vel quod commune est inter Data CELLA et Smoothie

Macros et Modules

Propositum DBT non tantum est ut scriptorum SQL copia fiat, sed ut users valida et opulenta media praebeat ad suas transmutationes aedificandas et ad hos modulos distribuendos.

Macros structurarum et locutionum copiae sunt quae quasi functiones intra exempla dici possunt. Macros permittit te ut reuse SQL inter exempla et incepta pro arido (noli te ipsum repetas) ipsum principium.

Exemplum Macronis;

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

et usus eius;

{% set column_name = 'product' %}
select
 product,
 {{ rename_category(column_name) }} -- Π²Ρ‹Π·ΠΎΠ² макроса
from my_table

DBT venit cum villico involucro qui utentes admittit ad edendum et reuse singulos modulorum ac macronum.

Hoc modo bibliothecas onerare et uti posse, ut:

  • dbt_utils: operandi cum Date/Tempore, Surrogata Clavium, Schema probationum, Pivot/Unpivot et aliorum
  • Paratus facta showcase templates pro officiis ut Snowplow ΠΈ livorem 
  • Librarii pro certis Datae Stores, exempli causa redshift 
  • logging - OMNIBUS logging DBT operandi

A completum album of packages potest inveniri in dbt hub.

Etiam magis features

Hic paucas alias lineamenta interesting et operas quas manipulus describam et utar ad aedificandum Data CELLA in wheely.

Separatio ambitus runtimorum DEV TEST - PROD

etiam intra eundem DWH botrum (infra schedulas varias). Verbi gratia utens hac voce;

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

Hoc signum ad litteram dicit: nam ambitus dev, test, ci ut data tantum pro ultimis 3 diebus et non plus. Hoc est, cursus in his ambitibus multo velocius erit et pauciores facultates requiret. Cum currit in environment PRODI colum conditio ignorabitur.

Materialization alternis columnae modum translitterandi

Redshift columnaris DBMS est quae permittit te ut algorithms datam comprimat pro singulis singulae columnae. Optima algorithms eligens per 20-50% minuere potest orbis tractus.

Macro redshift.compress_table ANALYZE CONPRESSIO mandatum faciet, novam tabulam cum columna suadeo algorithms descriptam, clavium segmentationum definitam (dist_key) et claves voluptua (sort_key), datas ad eam transferet et, si opus est, vetus exemplar delebit.

Macro subscriptio:

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

Logging exemplum decurrit

Singulis exemplaribus exsecutioni mandare potes hamos, quae ante launch vel statim post effectionem exemplaris perficientur;

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

Modulus logging tibi permittit referre omnia metadata necessaria in mensa separata, quae postea ad audiendum et analyses ampullas adhibenda erit.

Hoc est quod ashboardday similis secundum logging notitia in Looker:

Instrumentum aedificate vel quod commune est inter Data CELLA et Smoothie

Automation repono Sustentacionem

Si extensiones aliquas functionis usitatis Repositorii uteris, ut UDF (Functiones Definitae User), harum functionum versiones, accessum imperium, et automated e novarum emissiones volutiones facillime facere in DBT est.

In Pythone UDF utimur ad hashes, electronicas regiones, et bitmask decoctionem computare.

Exemplum tortor, quod in ambitu quamlibet executione efficiat UDF (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 %}

In Whely Amazon Redshift utimur, quae in PostgreSQL fundatur. Pro Redshift, interest statisticas in tabulis regulariter colligere et orbis tractus liberare - ANALYZE et VACUUM mandata, respectively.

Ad hoc faciendum imperata ut tortor e redshift_maintenance singulis noctibus exerceantur

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

Potest uti DBT ut servitium (Managed Service). Continetur:

  • Web IDE in explicandis inceptis et exemplaribus
  • Job configuratione et scheduling
  • Simplex et opportunus aditus ad omnia
  • Website cum documenta tua project
  • Connectens CI (Continuous Integration)

Instrumentum aedificate vel quod commune est inter Data CELLA et Smoothie

conclusio,

Praeparans et consumens DWH fit quasi iucundus et utilis quam potus venuste. DBT constat ex Jinja, extensiones usoris (modules), compilator, executor, et involucrum procurator. Haec elementa simul ponens, ambitum laboratum habes pro Data CELLA tua. Melior fere via est ad hodiernam DWH mutationem administrandam.

Instrumentum aedificate vel quod commune est inter Data CELLA et Smoothie

Opiniones sequentes tincidunt DBT formantur hoc modo:

  • Codex, non GUI, optima est abstractio ad logicam analyticam multiplici exprimendam
  • Operatio cum data debet accommodare ad optima exercitia in software engineering (Software Engineering)

  • Critica notitia infrastructura a communitate usoris utentis fonte aperto coerceri debet
  • Non solum instrumenta analytica, sed etiam codicem magis magisque proprietas communitatis Open Sources fiet

Hae nuclei opiniones gignunt opus quod hodie super 850 societates adhibetur, et fundamentum faciunt multas extensiones excitandas quae in futurum creabuntur.

Pro his, quorum interest, video lectionem apertam esse quam paucis abhinc mensibus partem dedi lectionis apertae apud OTUS - Data tool pro Amazon Redshift PRAECLUSIO.

Praeter DBT et Data Warehousing, ut partem Engineering cursus in OTUS suggestu, collegae mei et classes doceo in pluribus aliis argumentis et modernis pertinentibus;

  • Architectural Conceptus pro Big Data Applications
  • Exercere cum scintilla et scintilla Streaming
  • Explorandi methodi et instrumenta onerandis data fontibus
  • Building analytical showcases in DWH
  • NoSQL notiones: HBase, Cassandra, ElasticSearch
  • Principia vigilantia et orchestration 
  • Final Project: ponens omnes artes simul sub auxilio mentoring

references:

  1. DBT Documenta - Introductio - Official documenta
  2. Quid istuc dbt? - Recognoscere articulum unum ex auctoribus DBT 
  3. Data tool pro Amazon Redshift PRAECLUSIO β€” YouTube, Recordatio lectionis apertae OTUS
  4. Ut cognoscat Greenplum - Proxima lectio aperta est XV Maii, MMXX
  5. Data Engineering Course -OTUS
  6. Mature Analytics Workflow Building - A inviso futurorum notitiarum et analyticorum
  7. Tempus est aperta fonte analytica - Evolutio analyticorum et influentia Patens
  8. Continua Integration et Automated aedificate Testis cum dbtCloud - Principia aedificationem CI utens DBT
  9. Questus coepi cum DBT consequat - Practice, GRADATUS instructiones ad sui iuris opus
  10. Jaffle tabernam β€” Github DBT Tutorial - Github, educational project code

Plura de cursus.

Source: www.habr.com