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).
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
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:
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
-- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ:
-- ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ (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:
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:
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
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.
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:
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)
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.
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