Materialiseringsstrategi i Team Spenn¶
Formålet med denne strategien er å unngå droppe og deretter opprette datavarehusobjekter hver gang et dbt-løp kjøres da dette er ugunstig mhp. DMO. Derfor har table
-materialisering blitt faset ut i våre prosjekter. Følgende materialiseringer blir derfor tatt i bruk på tvers av våre dbt-løp:
Materialisering | Kommentar | |
---|---|---|
Staging | ephemeral |
Staging-modellene blir materialisert som ephemeral fordi de kun fungerer som simple transformasjoner som ikke skal eksponeres for sluttbrukeren. Det er heller ikke behov for å lagre dataene fysisk. |
Intermediate | view |
Intermediate-modellene blir materialisert som view fordi de har kompleks logikk og kjører ikke for tregt. |
Marts | incremental og view |
Faktatabeller, som ofte inneholder store datamengder, blir materialisert som incremental for å redusere kjøre- og lagringstiden. Aggregater (både brede og åpne aggregater som skal deles og konsumeres) blir materialisert som view da de ikke inneholder mye data og mangler unike nøkler. Hvis aggregatene begynner å ta for lang tid å kjøre som view , kan de alternativt materialiseres som incremental (gitt at duplikater ikke er et problem for modellen og/eller at unique_key eksisterer) eller som materialized view (se utfordringer nevnt nedenfor). |
Mer om vår incremental-materialisering i Marts¶
Vi bruker unique_key
-konfigurasjonen for å finne rader fra en tidligere kjøring med samme unike ID. Dette gjør det mulig å oppdatere eksisterende rader i stedet for å legge dem til som nye:
{{
config(
materialized = 'incremental',
unique_key = ['fk_person1', 'aarmnd'],
merge_exclude_columns = ['fk_person1', 'aarmnd', ...],
...
)
}}
select ...
is_incremental()
-makroen:
select ...
where
{% if is_incremental() %}
aarmnd > (select max(aarmnd) from {{ this }})
{% endif %}
Utfordringer med materialized view¶
Vi forsøkte å materialisere våre aggregater som materialized view
, men støtte på flere begrensninger:
- Modeller som bruker denne materialiseringen krever
materialized view log
på parent-/master-modeller. - Modeller som bruker denne materialiseringen blir automatisk satt til "forced refresh" i Oracle - se tabell 5-3 under seksjon 5.3.7 "About refresh Options for Materialized Views" for refresh-definisjoner.
- Det er flere restriksjoner for "fast refresh" på
materialized view
:- 5.3.7.4 "General Restrictions on Fast Refresh"
- 5.3.7.5 "Restrictions on Fast Refresh on Materialized Views with Joins Only"
- 5.3.7.6 "Restrictions on Fast Refresh on Materialized Views with Aggregates"