Deferring in dbt core: Bespaar jezelf tijd en hoofdpijn

Door Atzmon Ben Binyamin op Oct 18, 2024 9:15:00 AM

<span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" style="" data-hs-cos-general-type="meta_field" data-hs-cos-type="text" >Deferring in dbt core: Bespaar jezelf tijd en hoofdpijn</span>

dbt is een bekende databouwtool waarmee je analytics meer kunt benaderen als spelen met LEGO-blokjes en minder als tanden trekken. Maar zelfs met dbt zijn er enkele trucjes, zoals uitstellen in dbt Core, waarmee je veel tijd kunt besparen, vooral wanneer je werkt tussen productie- en ontwikkelomgevingen. Door gebruik te maken van uitstellen kunnen we je workflow stroomlijnen, zodat we ons kunnen richten op nieuwe modellen terwijl we naadloos gebruik kunnen maken van productiegegevens zonder het gedoe van het opnieuw uitvoeren van elke afhankelijkheid.

De strijd tussen productie en ontwikkeling

Stel je voor: je bent een nieuw model aan het testen, maar in plaats van te wachten tot al die vervelende langzame afhankelijkheden opnieuw worden uitgevoerd, zou je willen dat je gewoon kon vertrouwen op wat er al in productie is, je dingen kon testen en verder kon gaan met je leven. Gelukkig voor ons doet deferral precies dat.

Dus, wat is uitstellen? Je kunt het zien als beleefd tegen dbt zeggen, "Hé, ik heb mijn ontwikkelingsmodel hier, maar voor al het andere, kun je het uit productie halen zodat ik niet het hele gegevensuniversum opnieuw hoef te doen?".
Een meer verfijnde manier om hetzelfde te zeggen zou kunnen zijn, defer is een functie die je toelaat om een subset van modellen of tests te draaien zonder dat je al hun upstream afhankelijkheden moet herbouwen.

Hoe Defer werkt in dbt Core

  • Manifest bestand: Defer vertrouwt op een manifest.json bestand dat wordt gegenereerd tijdens een productie run. Dit bestand bevat metadata over alle modellen in je project.
  • Referentie resolutie: Wanneer je defer gebruikt, lost dbtfuncties anders. In plaats van upstream modellen te bouwen, gebruikt het de productie metadata om de benodigde gegevens te vinden.
  • Gebruik van de opdrachtregel: In dbt Core activeer je defer met behulp van command line flags:
    dbt run --defer --state /path/to/production/manifest.json
  • Selectief model uitvoeren: Je kunt uitstellen combineren met modelselectie om alleen specifieke modellen uit te voeren:
    dbt run --models my_model+ --defer --state /path/to/production/manifest.json
    Hierdoor worden mijn_model en zijn downstream modellen uitgevoerd en worden andere modellen uitgesteld naar productie.

Stap 1: Een productiemanifest genereren

Om te beginnen moet je je project in productie compileren om een manifest.json te maken. Dit bestand is in feite een kaart van uw productiemodellen - uw trouwe hulpje bij het uitstellen.

dbt compileren --doel prod

Deze opdracht maakt een manifest.json bestand in de target/ directory. Nu hebben we onze productiemap en kan de magie beginnen.
Maar eerst willen we het kopiëren en het target_prod noemen. Nu hebben we de productiemap beschikbaar.

cp -r target_prod

Stap 2: Tijd voor Uitstel!

In uw ontwikkelomgeving begint de pret met de --defer en --state vlaggen. Je hoeft geen speciale macro's in te voeren of te gaan knutselen in je dbt_project.yml bestand. Nee, houd gewoon je model SQL-bestanden zoals ze zijn en stel uit naar productie als een pro.

dbt run --defer --state /target_prod/manifest.json

Met dit commando zeggen we tegen dbt: "Ik vind het prima om mijn lokale modellen te draaien, maar voor al het andere, laten we gewoon de productieversies gebruiken, oké?

Stap 3: Selectief worden met modelruns

Wil je specifieke modellen testen en de rest uitstellen tot productie? Geen probleem. Gebruik gewoon de vlag --models samen met deferral:

dbt run --models my_model+ --defer --state /target_prod/manifest.json

Nu zullen alleen mijn_model en zijn downstream vrienden lokaal draaien, terwijl de rest wordt uitgesteld naar productie.

Stap 4: Testen zonder te wachten

We kunnen onze modellen ook testen met productiegegevens zonder alles opnieuw uit te voeren.

dbt test --defer --state /target_prod/manifest.json

Hierdoor kunt u uw energie richten op het testen van de gegevens die er toe doen, terwijl u de dingen overslaat die al gezegend zijn door de productie.

Waarom uitstellen een spelwisselaar is

Weet je wat er gebeurt als je stopt met het opnieuw uitvoeren van je hele pijplijn voor elke kleine verandering? Je wint tijd - kostbare, kostbare tijd. In plaats van te wachten tot de datagoden je toelachen en alles opnieuw compileren, kun je slimmer, sneller en efficiënter werken. Je modellen uitstellen betekent snellere iteratie, kortere testcycli en minder "Duurde het echt 45 minuten om dit uit te voeren?

Uitstellen in dbt Power User Extension voor VSCode

Als je de dbt power user vscode extensie gebruikt, kun je profiteren van de 'uitstellen' functie. Wanneer je de functie 'uitstellen naar productie' inschakelt:

  1. De extensie verwijst naar upstream modellen uit de productieomgeving
  2. Alleen de modellen waar je actief aan werkt worden gebouwd in de ontwikkelomgeving.
  3. Dit creëert een hybride omgeving waarin sommige modellen uit productie komen en andere uit ontwikkeling.

Gebruik in de extensie

Om de defer functionaliteit in de dbt Power User extensie te gebruiken:

  1. Open het paneel Acties in VSCode
  2. Zoek de schuifknop om 'Uitstellen naar productie' in te schakelen
  3. Wanneer ingeschakeld, zal de statusbalk 'DEFER' weergeven.

Meer over deze functie en het gebruik ervan vind je in deze video.

Klaar om de werklast uit te stellen?

Vanuit zakelijk oogpunt gaat de mogelijkheid tot uitstellen in dbt Core niet alleen over het versnellen van ontwikkeling, maar ook over het verhogen van de operationele efficiëntie. Door het minimaliseren van de tijd die wordt besteed aan repetitieve taken zoals het opnieuw uitvoeren van afhankelijkheden, kan uw team zich richten op het sneller leveren van inzichten, waardoor uiteindelijk de besluitvorming in de hele organisatie wordt versneld.

Deferral in dbt Core is een eenvoudige, maar krachtige tool die je uren kan besparen en je dataworkflow op gang kan houden. Wij denken dat u er in een mum van tijd mee aan de slag kunt, zodat u de gegevensheld kunt zijn die uw bedrijf nodig heeft.

Dus waarom zou je het niet proberen? Je hebt niets te verliezen, behalve die lange, frustrerende wachttijden.

Werk samen met een van onze consultants en maximaliseer het effect van uw gegevens.

Neem contact met ons op en we helpen je meteen.