diff --git a/404.html b/404.html index 82e8952..4580201 100644 --- a/404.html +++ b/404.html @@ -12,7 +12,7 @@ - + diff --git "a/Installasjon-p\303\245-VDI/dbt-power-user/index.html" "b/Installasjon-p\303\245-VDI/dbt-power-user/index.html" index 41db77d..caaa4d0 100644 --- "a/Installasjon-p\303\245-VDI/dbt-power-user/index.html" +++ "b/Installasjon-p\303\245-VDI/dbt-power-user/index.html" @@ -18,7 +18,7 @@ - + diff --git "a/Installasjon-p\303\245-VDI/dbt/index.html" "b/Installasjon-p\303\245-VDI/dbt/index.html" index ae04430..d456d56 100644 --- "a/Installasjon-p\303\245-VDI/dbt/index.html" +++ "b/Installasjon-p\303\245-VDI/dbt/index.html" @@ -18,7 +18,7 @@ - + diff --git "a/Installasjon-p\303\245-VDI/git/index.html" "b/Installasjon-p\303\245-VDI/git/index.html" index 9692c17..b48b0a1 100644 --- "a/Installasjon-p\303\245-VDI/git/index.html" +++ "b/Installasjon-p\303\245-VDI/git/index.html" @@ -18,7 +18,7 @@ - + diff --git "a/Installasjon-p\303\245-VDI/installere/index.html" "b/Installasjon-p\303\245-VDI/installere/index.html" index 74b881c..253571e 100644 --- "a/Installasjon-p\303\245-VDI/installere/index.html" +++ "b/Installasjon-p\303\245-VDI/installere/index.html" @@ -18,7 +18,7 @@ - + diff --git "a/Installasjon-p\303\245-VDI/miljovariabler/index.html" "b/Installasjon-p\303\245-VDI/miljovariabler/index.html" index 625ebab..84535d0 100644 --- "a/Installasjon-p\303\245-VDI/miljovariabler/index.html" +++ "b/Installasjon-p\303\245-VDI/miljovariabler/index.html" @@ -18,7 +18,7 @@ - + diff --git "a/Installasjon-p\303\245-VDI/oracle-client-library/index.html" "b/Installasjon-p\303\245-VDI/oracle-client-library/index.html" index 21b4735..6b6679b 100644 --- "a/Installasjon-p\303\245-VDI/oracle-client-library/index.html" +++ "b/Installasjon-p\303\245-VDI/oracle-client-library/index.html" @@ -14,7 +14,7 @@ - + diff --git "a/Installasjon-p\303\245-VDI/pip-og-oppsett/index.html" "b/Installasjon-p\303\245-VDI/pip-og-oppsett/index.html" index c8f8dcf..006bf96 100644 --- "a/Installasjon-p\303\245-VDI/pip-og-oppsett/index.html" +++ "b/Installasjon-p\303\245-VDI/pip-og-oppsett/index.html" @@ -18,7 +18,7 @@ - + diff --git "a/Installasjon-p\303\245-VDI/python/index.html" "b/Installasjon-p\303\245-VDI/python/index.html" index e0bf354..bc0934c 100644 --- "a/Installasjon-p\303\245-VDI/python/index.html" +++ "b/Installasjon-p\303\245-VDI/python/index.html" @@ -18,7 +18,7 @@ - + diff --git "a/Installasjon-p\303\245-VDI/sqlfluff/index.html" "b/Installasjon-p\303\245-VDI/sqlfluff/index.html" index 23d3e75..7760b3a 100644 --- "a/Installasjon-p\303\245-VDI/sqlfluff/index.html" +++ "b/Installasjon-p\303\245-VDI/sqlfluff/index.html" @@ -18,7 +18,7 @@ - + diff --git "a/Installasjon-p\303\245-VDI/vscode/index.html" "b/Installasjon-p\303\245-VDI/vscode/index.html" index 108fb09..663009d 100644 --- "a/Installasjon-p\303\245-VDI/vscode/index.html" +++ "b/Installasjon-p\303\245-VDI/vscode/index.html" @@ -18,7 +18,7 @@ - + diff --git a/arkitektur/materialisering/index.html b/arkitektur/materialisering/index.html index 1804324..3c85b71 100644 --- a/arkitektur/materialisering/index.html +++ b/arkitektur/materialisering/index.html @@ -18,7 +18,7 @@ - + diff --git a/arkitektur/materialisering_spenn/index.html b/arkitektur/materialisering_spenn/index.html new file mode 100644 index 0000000..4e900fb --- /dev/null +++ b/arkitektur/materialisering_spenn/index.html @@ -0,0 +1,1345 @@ + + + + + + + + + + + + + + + + + + + + + Materialiseringsstrategi i Team Spenn - dbt i NAV + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

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:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
MaterialiseringKommentar
StagingephemeralStaging-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.
IntermediateviewIntermediate-modellene blir materialisert som view fordi de har kompleks logikk og kjører ikke for tregt.
Martsincremental og viewFaktatabeller og aggregater (både brede og åpne aggregater som skal deles og konsumeres) blir materialisert som hhv. incremental og view. Faktatabeller, som ofte inneholder store datamengder, blir materialisert som incremental for å redusere kjøre- og lagringstiden. Aggregater blir materialisert som view, og ikke som incremental, 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 = ['kolonne_1', 'kolonne_2'],
+    merge_exclude_columns = ['kolonne_1', 'kolonne_2', ...],
+    ...
+  )
+}}
+
+select ...
+
+For å legge til nye rader benytter vi is_incremental()-makroen: +
select ...
+where 
+{% if is_incremental() %}
+kolonne_dato_kilde > (select max(kolonne_dato_target) from {{ this }})
+{% endif %}
+

+

Utfordringer med materialized view

+

Vi forsøkte å materialisere aggregatene våre 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"

+ + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/arkitektur/style_guide/index.html b/arkitektur/style_guide/index.html index bcacb90..a837d83 100644 --- a/arkitektur/style_guide/index.html +++ b/arkitektur/style_guide/index.html @@ -18,7 +18,7 @@ - + diff --git a/dokumentasjon/dokumentasjon/index.html b/dokumentasjon/dokumentasjon/index.html index aed2f3f..5630342 100644 --- a/dokumentasjon/dokumentasjon/index.html +++ b/dokumentasjon/dokumentasjon/index.html @@ -18,7 +18,7 @@ - + diff --git a/dokumentasjon/index.html b/dokumentasjon/index.html index 1eb084e..6f2d619 100644 --- a/dokumentasjon/index.html +++ b/dokumentasjon/index.html @@ -18,7 +18,7 @@ - + diff --git a/dokumentasjon/overview/index.html b/dokumentasjon/overview/index.html index bfd6eee..35df1f8 100644 --- a/dokumentasjon/overview/index.html +++ b/dokumentasjon/overview/index.html @@ -18,7 +18,7 @@ - + diff --git a/feilsoking/feilsoking/index.html b/feilsoking/feilsoking/index.html index 87b3873..7ffd286 100644 --- a/feilsoking/feilsoking/index.html +++ b/feilsoking/feilsoking/index.html @@ -18,7 +18,7 @@ - + diff --git a/index.html b/index.html index 6003042..44580c6 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ - + diff --git a/prosjekter/bomlo-dbt/index.html b/prosjekter/bomlo-dbt/index.html index 9972e12..4a1569d 100644 --- a/prosjekter/bomlo-dbt/index.html +++ b/prosjekter/bomlo-dbt/index.html @@ -16,7 +16,7 @@ - + diff --git a/prosjekter/dvh-sykefravar-dmx/index.html b/prosjekter/dvh-sykefravar-dmx/index.html index 98f7ab2..8aa9b0b 100644 --- a/prosjekter/dvh-sykefravar-dmx/index.html +++ b/prosjekter/dvh-sykefravar-dmx/index.html @@ -18,7 +18,7 @@ - + diff --git a/prosjekter/dvh_arb_cv/index.html b/prosjekter/dvh_arb_cv/index.html index 1244787..d625392 100644 --- a/prosjekter/dvh_arb_cv/index.html +++ b/prosjekter/dvh_arb_cv/index.html @@ -18,7 +18,7 @@ - + diff --git a/prosjekter/dvh_arb_permittering/index.html b/prosjekter/dvh_arb_permittering/index.html index 569f2e2..aec7186 100644 --- a/prosjekter/dvh_arb_permittering/index.html +++ b/prosjekter/dvh_arb_permittering/index.html @@ -18,7 +18,7 @@ - + diff --git a/prosjekter/dvh_arb_person/index.html b/prosjekter/dvh_arb_person/index.html index 7ffe796..8240153 100644 --- a/prosjekter/dvh_arb_person/index.html +++ b/prosjekter/dvh_arb_person/index.html @@ -18,7 +18,7 @@ - + diff --git a/prosjekter/dvh_arb_styrke_ssb/index.html b/prosjekter/dvh_arb_styrke_ssb/index.html index 8be4e46..6075137 100644 --- a/prosjekter/dvh_arb_styrke_ssb/index.html +++ b/prosjekter/dvh_arb_styrke_ssb/index.html @@ -18,7 +18,7 @@ - + diff --git a/prosjekter/dvh_arb_tiltak/index.html b/prosjekter/dvh_arb_tiltak/index.html index d27c0bb..02fca28 100644 --- a/prosjekter/dvh_arb_tiltak/index.html +++ b/prosjekter/dvh_arb_tiltak/index.html @@ -14,7 +14,7 @@ - + diff --git a/prosjekter/index.html b/prosjekter/index.html index 8589aac..e9525a2 100644 --- a/prosjekter/index.html +++ b/prosjekter/index.html @@ -18,7 +18,7 @@ - + diff --git a/prosjekter/nystol/vdl-regnskapsdata/index.html b/prosjekter/nystol/vdl-regnskapsdata/index.html index d3b25c2..703398f 100644 --- a/prosjekter/nystol/vdl-regnskapsdata/index.html +++ b/prosjekter/nystol/vdl-regnskapsdata/index.html @@ -18,7 +18,7 @@ - + diff --git a/search/search_index.json b/search/search_index.json index bbb08df..75c6948 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introduksjon til dbt","text":"

dbt (data build tool) er et SQL basert transformasjonsvekt\u00f8y som lar deg modularisere og skrive testbar SQL kode. dbt s\u00f8rger for at SQLene blir kj\u00f8rt i riktig rekkef\u00f8lge slik at sluttproduktet blir oppdatert korrekt.

En SQL fil i dbt blir kalt en modell i dbt. Modeller kan materialiseres p\u00e5 ulike m\u00e5ter. Som view, tabell eller rett og slett en SQL snutt som kan gjenbrukes i flere modeller etter DRY-prinsippet.

dbt er IKKE et extract-load verkt\u00f8y. Det betyr at dataene som skal transformeres allerede m\u00e5 ligge i databasen dbt er koblet til. dbt krever alts\u00e5 at data er lastet p\u00e5 forh\u00e5nd, med feks en pythonjobb eller kafkakonsument. Dataene trenger ikke n\u00f8dvendigvis ligge i samme komponentskjema eller samme BigQuery prosjekt. S\u00e5 lenge dataene er tilgjengelig p\u00e5 samme database og dbt service brukeren har tilgang til \u00e5 lese dataene er du good to go.

dbt kommer b\u00e5de i som open source i form av dbt-core og i en egen cloud versjon, dbt cloud. Cloud versjonen st\u00f8tter kun skydatabaser som feks. BigQuery og Snowflake. dbt Cloud kan derfor ikke brukes mot Oracle onprem databasen til datavarehus. For datasett som befinner seg p\u00e5 datamarkedsplassen i BigQuery, kan dbt Cloud v\u00e6re en mulighet.

For Oracle on-prem benytter vi dbt-oracle som er en python pakke som baserer seg p\u00e5 dbt-core. Oracle er ikke offisielt st\u00f8ttet av dbt, men Oracle har tatt ansvar for community connectoren og og blir aktiv vedlikeholdt og fortl\u00f8pende oppdatert til siste versjon av dbt-core. For \u00e5 n\u00e5 on-prem Oracle m\u00e5 vi som kjent benytte utviklerimage. Denne guiden tar for seg installasjon og oppsett av dbt-oracle p\u00e5 vdi utvikler gjennom Visual Studio Code.

"},{"location":"#lenker","title":"Lenker","text":"

F\u00f8r du g\u00e5r gjennom detaljene p\u00e5 hvordan dbt b\u00f8r settes opp er det lurt \u00e5 bli kjent med hvordan dbt fungerer. Nedenfor er det et knippe nyttige lenker som hjelper deg med \u00e5 komme igang og l\u00e6re de viktigste kommandoene og funksjonene i dbt.

"},{"location":"#kurs-dbt-fundamentals","title":"Kurs - dbt fundamentals","text":"

Det er sterkt anbefalt \u00e5 starte med \u00e5 g\u00e5 gjennom fundamentals kurset til dbt labs. Dette kurset bruker dbt cloud, men mesteparten av innholdet kan overf\u00f8res til dbt-core. Bruk gjerne GCP dev milj\u00f8et til teamet for \u00e5 sette opp testprosjektet i BigQuery, men husk p\u00e5 \u00e5 slette ressursene i etterkant

"},{"location":"#designprinsipper","title":"Designprinsipper","text":"

How to design a dbt model from scratch. Hvordan b\u00f8r du tenke n\u00e5 du designer nye modeller med dbt? Det er fort gjort \u00e5 bomme p\u00e5 f\u00f8rste fors\u00f8k, og det koster mye tid.

"},{"location":"#dimensjonsmodellering","title":"Dimensjonsmodellering","text":"

Kimball er fortsatt relevant med dbt. Building a Kimball dimensional model with dbt

"},{"location":"#bok","title":"Bok","text":"

Det er nylig (juni 2023) lansert en bok om Data Engineering with dbt. Boken inneholder instroduksjon til data engineering generelt og endelt om ulike skydatabaser i tillegg til grunnleggende bruk av dbt. Kanskje den mest interessante delen er kapittel 8 som omhandler testing med dbt.

"},{"location":"#nyttige-lenker","title":"Nyttige lenker","text":"

dbt's egne guider: Lessons

Community basert samling av lenker: awsome-dbt

"},{"location":"#hvorfor-skal-jeg-bruke-dbt-jeg-kan-jo-kjre-sql-med-python","title":"Hvorfor skal jeg bruke dbt? Jeg kan jo kj\u00f8re SQL med Python","text":"

Det er riktig. Dersom du bare skal kj\u00f8re noen enkle SQL sp\u00f8rringer er det kanskje like greit \u00e5 sette opp en Pythonjobb som kj\u00f8rer SQLen for deg. Men med en gang antall sp\u00f8rringer eller kompleksiteten p\u00e5 sp\u00f8rringene \u00f8ker vil dbt hjelpe med med \u00e5 strukturere koden og holde oversikt over rekkef\u00f8lgen. Det er ikke uvanlig at en komponent best\u00e5r av 30 eller flere SQL filer som avhenger av hverandre.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt-power-user/","title":"dbt Power User","text":"

dbt Power User er en VS Code extension, og gir oss en rekke nyttige verkt\u00f8y, som f.eks.:

dbt Power User p\u00e5 GitHub

"},{"location":"Installasjon-p%C3%A5-VDI/dbt-power-user/#installasjon-og-oppsett","title":"Installasjon og oppsett","text":"

Installeres via VS Code Marketplace, f\u00f8lg installasjonsrutinene til Altimate

"},{"location":"Installasjon-p%C3%A5-VDI/dbt-power-user/#utover-standardinstallasjon-ma-flgende-hensyn-tas-for-bruk-pa-vdi-utvikler-og-mot-oracle-dvh","title":"Utover standardinstallasjon m\u00e5 f\u00f8lgende hensyn tas for bruk p\u00e5 VDI Utvikler og mot Oracle DVH:","text":"

dbt Power User krever at man setter opp milj\u00f8variabler med credentials via PowerShell, f\u00f8r VS Code startes opp i samme PowerShell-sesjon. Dette gj\u00f8re med skriptet start_vscode_dbt.ps1

F\u00f8lg denne guiden for \u00e5 sette opp Visual Studio Code med riktige milj\u00f8variable:

  1. Klon dette repoet: https://github.com/navikt/dbt-i-nav/ til en lokal mappe p\u00e5 utivklerimage/VDI

  2. Lag en snarvei p\u00e5 skrivebordet til start_vscode_dbt.ps1 som n\u00e5 ligger lokalt p\u00e5 VDI (inne i mappen du nettopp klonet) slik:

  3. H\u00f8yreklikk p\u00e5 den nye snarveien og velg Egenskaper

  4. Skriptet er generelt og krever at stien til et gyldig dbt-prosjekt settes som argument i tillegg til schemanavnet dbt skal bruke som proxy. Fyll derfor inn f\u00f8lgende tekst i M\u00e5l: powershell.exe -noexit -ExecutionPolicy Bypass -File \"C:\\sti til dbt-i-nav\\start_vscode_dbt.ps1\" c:\\sti\\til\\dbt-prosjekt\\ databaseskjemanavn og juster i forhold til stiene p\u00e5 ditt image.

  5. Kopier snarveien og endre stiene for hvert dbt prosjekt du vil sette opp

  6. Start Visual Stusdio Code ved \u00e5 dobbeltklikke p\u00e5 snarveien.

  7. Det hender skriptet oppdateres, s\u00e5 det er lurt \u00e5 hente siste kode fra github innimellom.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt-power-user/#oracle-oppsett-for-preview-query","title":"Oracle oppsett for Preview query","text":"

Preview query-template m\u00e5 endres for Oracle-bruk: 1. \u00c5pne Settings ved \u00e5 trykke CTRL + , 2. S\u00f8k etter dbt.queryTemplate 3. Endre skript til select * from ({query}) where ROWNUM <= {limit}

Ref.: #dbtquerytemplate-for-oracle

"},{"location":"Installasjon-p%C3%A5-VDI/dbt-power-user/#erfaringer-feil-som-har-oppstatt-ved-bruk-av-dbt-power-user","title":"Erfaringer - feil som har oppst\u00e5tt ved bruk av dbt Power User:","text":""},{"location":"Installasjon-p%C3%A5-VDI/dbt/","title":"DBT","text":""},{"location":"Installasjon-p%C3%A5-VDI/dbt/#oppsett-av-dbt-prosjekter","title":"Oppsett av dbt prosjekter","text":"

Vi har laget et ferdig oppsett av et dbt prosjekt tilpasset NAV dvh. Enten lag et nytt repo basert p\u00e5 dvh_template. Deretter m\u00e5 dbt_template kopieres inn for \u00e5 f\u00e5 integrert dbt prosjektet.

Resten av denne siden omhandler manuelt oppsett av dbt-oracle uten virteul. F\u00f8lg denne guiden hvis du ikke \u00f8nsker automatisk oppsett i Visual Studio Code.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#oppsett-av-sertifikater-til-pip","title":"Oppsett av sertifikater til pip","text":"

Til vanlig bruker pip sitt eget sertifikat for \u00e5 validere at vi laster ned pakker fra riktig server. Siden VDI bruker en webproxy for \u00e5 kommunisere med omverdenen vill vi f\u00e5 en feilmeling ved pip install xxx.

Error

13:42:24  Encountered an error: External connection exception occurred:\nHTTPSConnectionPool(host='hub.getdbt.com', port=443): Max retries exceeded\nwith url: /api/v1/index.json (Caused by SSLError(SSLCertVerificationError(1,\n'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get\nlocal issuer certificate (_ssl.c:1108)')))\n

For \u00e5 fikse feilen kan vi installere pakkene setuptools-scm og pip-system-certs som f\u00e5r pip til \u00e5 bruke Windows Certificate Store istedenfor.

pip install setuptools-scm pip-system-certs --trusted-host pypi.org --trusted-host  files.pythonhosted.org\n

Det finnes en offisiell oracle adapter for dbt v1.x. Gjerne start med \u00e5 ta en titt p\u00e5 denne installasjonsguiden f\u00f8rst.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#installasjon","title":"Installasjon","text":"

dbt kan installeres sammen med oracle adapteren med kommandoen:

pip install dbt-oracle\n

Nedlasting feiler

$ pip install dbt-oracle\nWARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)'))': /simple/dbt-oracle/\n\n...\n\nCould not fetch URL https://pypi.org/simple/dbt-oracle/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/dbt-oracle/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)')))\n

Sjekk om du har gjort oppsett av sertifikater til pip.

Installasjon feiler

I noen tilfeller har vi opplevd at Microsoft Visual C++ mangler. Feilmeldingen kan se slik ut:

...\nBuilding wheels for collected packages: cx-Oracle\nBuilding wheel for cx-Oracle (pyproject.toml) ... error\nerror: subprocess-exited-with-error\n\n\u00d7 Building wheel for cx-Oracle (pyproject.toml) did not run successfully.\n\u2502 exit code: 1\n\u2570\u2500> [8 lines of output]\n      C:\\Users\\RA_S167159\\AppData\\Local\\Temp\\pip-build-env-lh09agh5\\overlay\\Lib\\site-packages\\setuptools\\config\\expand.py:144: UserWarning: File 'C:\\\\Users\\\\RA_S167159\\\\AppData\\\\Local\\\\Temp\\\\pip-install-ki6mcccg\\\\cx-oracle_5a1e160a6cb5498187fe05d5b5637d8c\\\\README.md' cannot be found\n        warnings.warn(f\"File {path!r} cannot be found\")\n    pip_system_certs: ERROR: could not register module: No module named 'wrapt'\n    running bdist_wheel\n    running build\n    running build_ext\n    building 'cx_Oracle' extension\n    error: Microsoft Visual C++ 14.0 or greater is required. Get it with \"Microsoft C++ Build Tools\": https://visualstudio.microsoft.com/visual-cpp-build-tools/\n    [end of output]\n\nnote: This error originates from a subprocess, and is likely not a problem with pip.\nERROR: Failed building wheel for cx-Oracle\nFailed to build cx-Oracle\nERROR: Could not build wheels for cx-Oracle, which is required to install pyproject.toml-based projects\n...\n
Last ned og installer Build Tools. F\u00f8lg gjerne guiden her: Fixed: Microsoft Visual C++ 14.0 Is Required Error Husk \u00e5 restarte VDI etter installasjon.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#opprette-nytt-dbt-prosjekt-for-oracle-fra-scratc","title":"Opprette nytt dbt prosjekt for Oracle fra scratc","text":"

Hvis du ikke \u00f8nsker \u00e5 ta i bruk standardprosjektet, men heller kj\u00f8re dbt init er det noen ting som kan skape uforst\u00e5elige feilmeldinger:

"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#quoting","title":"Quoting","text":"

Quoting av databasenavn m\u00e5 aktiveres i dbt_project.yml siden databasenenavnene til dvh-databasene er med sm\u00e5 bokstaver (eks. dwhu1). Hvis ikke dette gj\u00f8res kommer det feilmeling som sier noe slikt som approximate match

For \u00e5 skru p\u00e5 quoting m\u00e5 f\u00f8lgende settes i dbt_project.yml:

quoting:\n  database: true\n
"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#hemmeligheter-ved-kjring-fra-utviklerimage","title":"Hemmeligheter ved kj\u00f8ring fra utviklerimage","text":"

Av sikkerhetshensyn anbefaler vi og oracle \u00e5 bruke milj\u00f8variabler for \u00e5 holde p\u00e5 hemmeligheter. Vi har derfor laget et script og profiles.yml som kan ligge i dbt-prosjektet.

Scriptet kan lastes ned fra navikt/dvh_template/dbt/setup_db_user.ps1.

profiles.yml skal opprettes i p\u00e5 toppniv\u00e5 i dbt-prosjektmappen, eksempel navikt/dvh_template/dbt/profiles.yml Merk at navn p\u00e5 profil er profilnavnet det henvises til i dbt_project.yml

<navn p\u00e5 profil>:\n  target: \"{{env_var('DBT_DB_TARGET')}}\"\n ...\n

N\u00e5r profilen er p\u00e5 plass i prosjektmappen kan du teste at dbt fungerer.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#teste-dbt-installasjonen","title":"Teste dbt installasjonen","text":"

Etter at dbt er p\u00e5 plass kan du verifisere at dbt fungerer ved \u00e5 kj\u00f8re .\\setup_db_user.ps1 etterfulgt av dbt debug fra prosjektmappen. Er det et nytt prosjekt m\u00e5 du opprette profiles.yml f\u00f8rst.

.\\setup_db_user.ps1 m\u00e5 kj\u00f8res hver gang en starter en ny terminal eller \u00f8nsker \u00e5 bytte target (db). Scriptet vill midlertidlig opprette milj\u00f8variablene i terminal-sesjonen for target, brukernavn, passord, schema og peke dbt mot profiles.yml i prosjektmappen.

Success

$ .\\setup_db_user.ps1\nTarget db: U <eventuelt Q,R eller P>\nSchema:\n\ncmdlet Get-Credential at command pipeline position 1\nSupply values for the following parameters:\nCredential\n\n$ dbt debug\n09:15:08  Running with dbt=1.1.1\ndbt version: 1.1.1\npython version: 3.8.10\npython path: c:\\users\\****\\appdata\\local\\programs\\python\\python38\\python.exe\nos info: Windows-10-10.0.19044-SP0\nUsing profiles.yml file at C:\\Users\\****\\git\\dvh-sykefravar-dmx\\profiles.yml\nUsing dbt_project.yml file at C:\\Users\\****\\git\\dvh-sykefravar-dmx\\dbt_project.yml\n\n09:15:08  oracle adapter: Running in cx mode\nConfiguration:\n  profiles.yml file [OK found and valid]\n  dbt_project.yml file [OK found and valid]\n\nRequired dependencies:\n- git [OK found]\n\nConnection:\n  user: ****\n  database: dwhu1\n  schema: ****\n  protocol: tcp\n  host: dm07-scan.adeo.no\n  port: 1521\n  tns_name: None\n  service: dwhu1\n  connection_string: None\n  shardingkey: []\n  supershardingkey: []\n  cclass: None\n  purity: None\n  Connection test: [OK connection ok]\n\nAll checks passed!\n

DBT er n\u00e5 klart til bruk.

Error

Connection test: [ERROR]\n\n2 checks failed:\nError from git --help: Could not find command, ensure it is in the user's PATH and that the user has permissions to run it: \"git\"\n\ndbt was unable to connect to the specified database.\nThe database returned the following error:\n\n  >Database Error\n  DPI-1047: Cannot locate a 64-bit Oracle Client library: \"failed to get message for Windows Error 126\". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help\n\nCheck your database credentials and try again. For more information, visit:\nhttps://docs.getdbt.com/docs/configure-your-profile\n

Oracle client library er mest sannsynlig ikke installert.

"},{"location":"Installasjon-p%C3%A5-VDI/git/","title":"Git","text":"

F\u00f8lg guiden p\u00e5 confluence og legg til milj\u00f8variabler der det kreves. Pass p\u00e5 \u00e5 f\u00f8lge denne guiden til punkt og prikke. Mange problemer har kommet av at noen punkter her er avglemt.

"},{"location":"Installasjon-p%C3%A5-VDI/installere/","title":"Installere dbt-oracle p\u00e5 VDI","text":""},{"location":"Installasjon-p%C3%A5-VDI/installere/#forutsetninger","title":"Forutsetninger","text":"

For \u00e5 kunne utvikle dbt mot oracle m\u00e5 man ha tilgang til utviklerimage som er et VDI som kj\u00f8rer i i NAV datahall. Dette er for \u00e5 kunne f\u00e5 kontakt med Oracle databaser. Du m\u00e5 ogs\u00e5 har f\u00e5tt en eller felere databasebrukere og det er nyttig \u00e5 kunne koble seg opp mot databasene med SQL Developer. Se f\u00f8lgende lenker:

"},{"location":"Installasjon-p%C3%A5-VDI/installere/#installasjon-av-dbt-oracle","title":"Installasjon av dbt-oracle","text":"

For \u00e5 installere dbt-core for Oracle m\u00e5 du installere f\u00f8lgende:

  1. Python 3.11.x
  2. PIP og oppsett av dbt-milj\u00f8
  3. Git / GitHub Desktop
  4. dbt
"},{"location":"Installasjon-p%C3%A5-VDI/installere/#anbefalinger","title":"Anbefalinger","text":"

For en god utvikleropplevelse anbefaler vi deg \u00e5 ha f\u00f8lgende installert:

"},{"location":"Installasjon-p%C3%A5-VDI/miljovariabler/","title":"Legge til milj\u00f8variabler","text":"
  1. S\u00f8k etter milj\u00f8variabler
  2. Klikk p\u00e5: Rediger milj\u00f8bariabler for kontoen din
  1. Trykk p\u00e5 Ny...
  2. Gi variabelen et navn i Variabelnavn.
  3. Skriv inn path til programmet i Variabelverdi
  4. Trykk OK
  1. Marker Path variabelen
  2. Trykk Rediger...
  1. Trykk Ny
  2. Skriv inn navnet p\u00e5 variabelen du opprettet med syntaksen %<variabelnavn>% eks: %PIP%
  3. Trykk OK
  1. Trykk OK

Note

Husk at du m\u00e5 lukke cmd (ledetekst) og \u00e5pne p\u00e5 nytt for at endringen skal tre i kraft.

"},{"location":"Installasjon-p%C3%A5-VDI/oracle-client-library/","title":"Oracle client library","text":"

Note

Dette steget utg\u00e5r hvis du bruker thin mode (tynnklient som ikke trenger klientbiblioteket. Introdusert i dbt-oracle 1.1.1). Det anbefales \u00e5 bruke thin mode, da kj\u00f8ring av kode g\u00e5r en del raskere.

Dette finnes p\u00e5 fellesdisken og mappen programvare\\oracle\\ og kan kopieres lokalt. Det er er instantclient-basiclite-windows som benyttes.

Oppdater PATH milj\u00f8variabelen med path til oracle client library. Eksmpel:

C:\\data\\instantclient-basiclite-windows\\instantclient_19_11\n

Note

Se legg til milj\u00f8variabler hvis du ikke vet hvordan du oppdatere PATH.

"},{"location":"Installasjon-p%C3%A5-VDI/pip-og-oppsett/","title":"PIP og og tilgang til PyPI","text":"
pip --version\n
"},{"location":"Installasjon-p%C3%A5-VDI/pip-og-oppsett/#feilsk-sjekk-om-du-har-pip","title":"Feils\u00f8k: Sjekk om du har PIP","text":"

Har du installert python, s\u00e5 har du nesten sikkert ogs\u00e5 pip. Men dersom overst\u00e5ende feiler, kj\u00f8r pip --version for \u00e5 se om pip er tilgjengelig:

pip --version\n

Success

pip --version\n\npip 21.1.1 from c:\\users\\*****\\appdata\\local\\programs\\python\\python38\\lib\\site-packages\\pip (python 3.8)\n

Fortsett til Git / GitHub Desktop

Failure

pip --version\n\n'pip' is not recognized as an internal or external command, operable program or batch file.\n

Kj\u00f8r py -3 -m ensurepip for \u00e5 se om pip allerede eksisterer.

Looking in links: c:\\Users\\****\\AppData\\Local\\Temp\\tmp4r6s0n91\nRequirement already satisfied: setuptools in c:\\users\\****\\appdata\\local\\programs\\python\\pythonXX\\lib\\site-packages (58.1.0)\nRequirement already satisfied: pip in c:\\users\\****\\appdata\\local\\programs\\python\\pythonXX\\lib\\site-packages (21.2.4)\n

I dette tilfelle m\u00e5 milj\u00f8variabelen PATH oppdateres. Bruk gjerne Fil utforsker for \u00e5 finne riktig path men normalt ligger PIP under:

c:\\users\\<brukernavn>\\appdata\\local\\programs\\python\\pythonXX\\scripts\n

Info

Se legg til milj\u00f8variabler hvis du ikke vet hvordan du oppdatere PATH.

Husk at du m\u00e5 lukke og \u00e5pne cmd (ledetekst) etter path variabel er lagt inn. Du kan n\u00e5 verifisere at pip er tilgjengelig ved \u00e5 kj\u00f8re pip --version.

"},{"location":"Installasjon-p%C3%A5-VDI/python/","title":"Python","text":"

Sjekk om Python er installert med py --version. dbt-versjon 1.4 og senere st\u00f8tter Python-versjon 3.11, for en tidligere dbt-versjon m\u00e5 Python-versjon v\u00e6re >= 3.8 og < 3.11.

Last eventuelt ned python 3.11.x og installer ved \u00e5 f\u00f8lge installsjonsveiviseren.

G\u00e5 til Windows \"Ledetekst\"/\"Command prompt\" og skriv f\u00f8lgende.

py --version\n

Hvis py ikke fungerer, kan det hende at det heter python:

python --version\n

Success

$ py --version\n\nPython 3.8.10\n

Fortsett til PIP

Failure

$ py --version\n\nPython 3.6.4\n
For gammel version av Python

Last ned Python

Failure

$ py --version\n\npython is not recognized as an internal or external command, operable program, or batch file\n

Python er ikke installert

Last ned Python

"},{"location":"Installasjon-p%C3%A5-VDI/sqlfluff/","title":"SQLFluff","text":"

SQLFluff er en linter som hjelper oss med \u00e5 formattere SQL-koden p\u00e5 en fornuftig m\u00e5te.

"},{"location":"Installasjon-p%C3%A5-VDI/sqlfluff/#installering-av-sqlfluff","title":"Installering av SQLFluff","text":"
pip install sqlfluff sqlfluff-templater-dbt\n
"},{"location":"Installasjon-p%C3%A5-VDI/vscode/","title":"Visual Studio Code","text":"

Bruk https://code.visualstudio.com/download, velg Windows versjonen. Last ned, pakk ut og start programmet code. F\u00f8lg instruksjonene ved innstalleringen.

"},{"location":"Installasjon-p%C3%A5-VDI/vscode/#anbefalte-extensions","title":"Anbefalte extensions","text":""},{"location":"arkitektur/materialisering/","title":"Materialiseringsstrategier","text":"

Hva er materialiseringer i dbt?. dbt-oracle st\u00f8tter alle former for materialisering.

Generelt er det en god ide \u00e5 f\u00f8lge Best practices for materializations fra dbt labs.

Det er likevel noen avvik:

  1. Staging modeller b\u00f8r hovedsakelig v\u00e6re views.
  2. Intermediate ved kompleks logikk. Kj\u00f8r views n\u00e5r du kan. N\u00e5r views g\u00e5r for tregt, har du tre valg:
    1. Kj\u00f8re table materialiseringer. tabeller blir droppet, purget og rekj\u00f8rt med alt innhold fra sp\u00f8rringen i modellfilen. Ikke lurt ved ved st\u00f8rre mengder data, b\u00e5de ytelsesmessig og lagring i flere lag.
    2. Incrememental. Tabellen bevares og nye endrede rader blir lagt til med merge.
    3. Delta last med table models ... trenger POC
  3. Marts skal v\u00e6re stabil. Det er her alle sp\u00f8rringer fra konsumenter kj\u00f8res, og det er viktig for basen \u00e5 opparbeide statistikk p\u00e5 sp\u00f8rringer som kj\u00f8rer ofte.
  4. Skal du skrive om en gammel l\u00f8sning til dbt? Ikke skriv om l\u00f8pet og sats p\u00e5 at alt skal blir 100% likt. Du kan ve\u00e6re sikekr p\u00e5 at data (oppslag mot avhengigheter) har endret seg siden forrige gang dataene har blitt kj\u00f8rt opp. Spesielt med tanke p\u00e5 at patching og rekj\u00f8ring med forskjellig logikk har blitt gjort gjennom tidene.
"},{"location":"arkitektur/style_guide/","title":"DBT Stil Guide","text":"

forket fra https://github.com/dbt-labs/corp/blob/main/dbt_style_guide.md

"},{"location":"arkitektur/style_guide/#modell-naming","title":"Modell Naming","text":"

V\u00e5r modellere organiserers inn i tre hovedgrupper: staging, marts, base/intermediate. See f\u00f8lgnede diskusjon. The navngiving blir som f\u00f8lger:

\u251c\u2500\u2500 dbt_project.yml\n\u2514\u2500\u2500 models\n    \u251c\u2500\u2500 marts\n    |   \u2514\u2500\u2500 core\n    |       \u251c\u2500\u2500 mellomlager\n    |       |   \u251c\u2500\u2500 mellomlager.yml\n    |       |   \u251c\u2500\u2500 posteringer__unionisert.sql\n    |       |   \u2514\u2500\u2500 posteringer__gruppert.sql\n    |       \u251c\u2500\u2500 core.docs\n    |       \u251c\u2500\u2500 dim_artskonti\n    |           \u251c\u2500\u2500 dim_artskonti.yml\n    |           \u2514\u2500\u2500 dim_artskonti.sql\n    |       \u251c\u2500\u2500 dim_konstnadssteder\n    |           \u251c\u2500\u2500 dim_konstnadssteder.yml\n    |           \u2514\u2500\u2500 dim_konstnadssteder.sql\n    |       \u2514\u2500\u2500 fak_hovedbok_posteringer\n    |           \u251c\u2500\u2500 fak_hovedbok_posteringer.yml\n    |           \u2514\u2500\u2500 fak_hovedbok_posteringer.sql\n    \u2514\u2500\u2500 staging\n        \u2514\u2500\u2500 oebs\n            \u251c\u2500\u2500 base\n            |   \u251c\u2500\u2500 base.yml\n            |   \u2514\u2500\u2500 base__oebs_kontoplan.sql\n            \u251c\u2500\u2500 src_oebs.yml\n            \u251c\u2500\u2500 src_oebs.docs\n            \u251c\u2500\u2500 stg_oebs__posteringerslinjer\n            |   \u251c\u2500\u2500 stg_oebs__posteringerslinjer.yml\n            |   \u2514\u2500\u2500 stg_oebs__posteringerslinjer.sql\n            \u251c\u2500\u2500 stg_oebs__budjsett_balanser\n            |   \u251c\u2500\u2500 stg_oebs__budjsett_balanser.yml\n            |   \u2514\u2500\u2500 stg_oebs__budjsett_balanser.sql\n
- All objekter oppgis p\u00e5 flertallsform, slik som: stg_oebs__hovedbok_posteringslinjer, stg_oebs__artskonti, etc. - Basetabeller prefikses med base__, slik som: base__<source>_<object> - Mellomlagringstabeller skal avsluttes med et fortidsverb som indikerer hvilken handling som er gjort p\u00e5 objektet, slik som: hovedbok_posteringslinjer__filtrert_budsjett - Datatorg, eller marter, er fordelt mellom faktaer (uforandelig, verb) og dimensjoner (foranderlig, subjekt) og prefikses med fak_ og dim_, henholdvis. - Staged strukter inneholder alle kolonner fra r\u00e5-tabellen og utvides med avledede kolonner, for \u00e5 angi naturlig n\u00f8kler, hashed n\u00f8kler, omd\u00f8ping av kolonnenavn, etc.

"},{"location":"arkitektur/style_guide/#model-konfigurasjon","title":"Model konfigurasjon","text":"

{{\n  config(\n    materialized = 'table',\n    sort = 'id',\n    dist = 'id'\n  )\n}}\n
- Marter b\u00f8r alltid configureres som tabeller - med mindre det er sv\u00e6rt gode grunner til \u00e5 ikke gj\u00f8re det.

"},{"location":"arkitektur/style_guide/#dbt-konvensjoner","title":"DBT konvensjoner","text":""},{"location":"arkitektur/style_guide/#tester","title":"Tester","text":""},{"location":"arkitektur/style_guide/#navngivining-og-felt-konvensjoner","title":"Navngivining og felt konvensjoner","text":""},{"location":"arkitektur/style_guide/#cteer","title":"CTEer","text":"

For mer informasjon om hvorfor vi bruker CTEer, see f\u00f8lgende post. Kortversjonen er at det hjelper oss \u00e5 samle kildene \u00f8verst, gj\u00f8re enkle transformasjoner og joiner i midten og se resultatet nederst. Oracle skal st\u00f8tte passthrough slik at masse wither p\u00e5 rad ikke p\u00e5virker ytelsen.

WITH\n\nhendelser AS (\n\n    ...\n\n),\n\n-- CTE comments go here\nfiltrerte_hendelser AS (\n\n    ...\n\n),\n\nendelig AS (\n\n    SELECT * FROM filtrerte_hendelser\n\n),\n\n\nSELECT * FROM endelig\n
"},{"location":"arkitektur/style_guide/#sql-stil-guide","title":"SQL stil guide","text":""},{"location":"arkitektur/style_guide/#eksempel-sql","title":"Eksempel SQL","text":"
WITH\n\nmin_data AS (\n\n    SELECT * FROM {{ ref('min_data') }}\n\n),\n\nen_cte AS (\n\n    SELECT * FROM {{ ref('en_cte') }}\n\n),\n\nen_cte_agg AS (\n\n    SELECT\n        id,\n        SUM(felt_4) AS total_felt_4,\n        MAX(felt_5) AS max_felt_5\n\n    FROM en_cte\n    GROUP BY 1\n\n),\n\nendelig AS (\n\n    SELECT [DISITNCT]\n        min_data.felt_1,\n        min_data.felt_2,\n        min_data.felt_3,\n\n        -- Bruk linjeshift for visuelt separere kalkulasjoner inn i blokker.\n        CASE\n            WHEN min_data.kansellerings_dato IS NULL\n                AND min_data.utgangs_dato is not null\n                THEN utgangsdato_date\n            WHEN my_data.kansellerings_dato IS NULL\n                THEN my_data.start_dato + 7\n            ELSE my_data.kansellerings_date\n        END AS kansellerings_dato,\n\n        en_cte_agg.total_felt_4,\n        en_cte_agg.max_felt_5\n\n    FROM min_data\n    LEFT JOIN en_cte_agg  \n        ON min_data.id = en_cte_agg.id\n    WHERE min_data.felt_1 = 'abc'\n        AND (\n            min_data.felt_2 = 'def' OR\n            min_data.felt_2 = 'ghi'\n        )\n    HAVING COUNT(*) > 1\n\n)\n\nSELECT * FROM final\n
"},{"location":"arkitektur/style_guide/#yaml-stil-guide","title":"YAML stil guide","text":""},{"location":"arkitektur/style_guide/#eksample-yaml","title":"Eksample YAML","text":"
version: 2\n\nmodels:\n  - name: hendelser\n    columns:\n      - name: pk_hendelser\n        description: Dette er n prim\u00e6rn\u00f8kkel\n        tests:\n          - unique\n          - not_null\n\n      - name: hendelse_ts \n        description: \"N\u00e5r hendelse skjedde i UTC (eg. 2018-01-01 12:00:00)\"\n        tests:\n          - not_null\n\n      - name: fk_brukere\n        description: Brukeren som st\u00e5 for hendelsen \n        tests:\n          - not_null\n          - relationships:\n              to: ref('brukere')\n              field: pk_brukere\n
"},{"location":"arkitektur/style_guide/#jinja-stil-guide","title":"Jinja stil guide","text":""},{"location":"arkitektur/style_guide/#farger-i-lineage","title":"Farger i lineage","text":"

I lineagen f\u00e5r source-blobber en lys gr\u00f8nn farge, mens alt annet blir lys bl\u00e5. I .yml-filene kan dette endres med node_color-attributten under +docs til en modell eller en mappe. For \u00e5 skille enklere mellom staging, intermediate og marts har vi valgt f\u00f8lgende som en standard, men dette kan du endre som du vil:

# i dbt_project.yml\nmodels:\n  ...\n    staging:\n      +docs:\n        node_color: '#054710' # m\u00f8rk gr\u00f8nn farge\n\n    intermediate:\n      +docs:\n        node_color: '#0E4870' # m\u00f8rk bl\u00e5 farge\n\n    marts: # standard dbt-lysebl\u00e5-farge\n    ...\n

node_color-attributten st\u00f8tter b\u00e5de fargenavn (red) og hex-koder med anf\u00f8rselstegn (\"#cd7f32\"). Se https://docs.getdbt.com/reference/resource-configs/docs for mer informasjon.

"},{"location":"dokumentasjon/","title":"Dokumentajson","text":"

Dokumentasjon for produkter finner du p\u00e5 DBT Docs by nada

"},{"location":"dokumentasjon/dokumentasjon/","title":"Dokumentasjon","text":""},{"location":"dokumentasjon/dokumentasjon/#tabelldokumentasjon","title":"Tabelldokumentasjon","text":"

Tabellene konfigureres og dokumenteres i yml filene i hver mappe i prosjektet. Kommentarer kan settes p\u00e5 b\u00e5de tabellniv\u00e5 og kolonneniv\u00e5. Les mer her.

"},{"location":"dokumentasjon/dokumentasjon/#persist-docs","title":"Persist docs","text":"

dbt-oracle har st\u00f8tte for \u00e5 skrive kommentarer til databasen. Som andre konfig, kan det settes p\u00e5 prosjektniv\u00e5, mappeniv\u00e5 eller modellniv\u00e5. For \u00e5 sette det p\u00e5 prosjektniv\u00e5, legg til f\u00f8lgende i dbt_project.yml

models:\n  +persist_docs:\n    relation: true\n    columns: true\n

En ting \u00e5 v\u00e6re oppmerksom p\u00e5 n\u00e5r persist_docs er aktivert er at kolonnenavn i modellen m\u00e5 v\u00e6re det samme som definert i yml filen.

ORA-00904

ORA-00904: \"KOLONNE\": invalid identifier\n
SELECT\n  kolonne\nFROM ...\n
- name: kolonne_navn\n  description: ...\n

Her har Oracle fors\u00f8kt \u00e5 skrive kommentar til en kolonne som ikke eksisterer. Sammenlign modell og yml fil og sjekk at navnet p\u00e5 kolonnen er lik.

"},{"location":"dokumentasjon/dokumentasjon/#overskrive-overview","title":"Overskrive overview","text":"

Komponentdokumentasjonen kan integreres i dbt dokumentasjonen. I dbt/models folderen m\u00e5 det opprettes en overview.md fil. Bruk gjerne overview.md som mal

"},{"location":"dokumentasjon/dokumentasjon/#deployere-dokumentasjon","title":"Deployere dokumentasjon","text":"

Hver gang kommandoen dbt docs kj\u00f8res, genereres det tre filer i target mappa under dbt prosjektmappa: index.hml, catalog.json og manifest.json. Disse filene er statiske og inneholder alt som trengs for \u00e5 publisere en versjon av dokumentasjonen p\u00e5 en webserver.

Github pages har slik st\u00f8tte. Publsiering til github pages kan gj\u00f8res p\u00e5 flere m\u00e5ter, men kanskje enklest er det \u00e5 bruke en github action:

# Simple workflow for dbt docs content to GitHub Pages\nname: Deploy dbt docs to GitHub Pages\n\non:\n  push:\n    branches: [\"master\"]\n    paths:\n      - docs/**\n\n  workflow_dispatch:\n\n\npermissions:\n  contents: read\n  pages: write\n  id-token: write\n\n# Allow one concurrent deployment\nconcurrency:\n  group: \"pages\"\n  cancel-in-progress: true\n\njobs:\n  deploy:\n    environment:\n      name: github-pages\n      url: ${{ steps.deployment.outputs.page_url }}\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n      - name: Setup Pages\n        uses: actions/configure-pages@v2\n      - name: Upload artifact\n        uses: actions/upload-pages-artifact@v1\n        with:\n          path: 'docs'\n      - name: Deploy to GitHub Pages\n        id: deployment\n        uses: actions/deploy-pages@v1\n
  1. Importer overst\u00e5ende github action i .workflow
  2. Kj\u00f8r kommandoen dbt docs generate
  3. Lag en docs mappe p\u00e5 roten av repoet, hvis det ikke allerede finnes.
  4. Kopier over filene index.hml, catalog.json og manifest.json fra target mappen til docs mappen.
  5. Commit og push til main branchen.
  6. Docen blir automatisk publisert av github action, til url spesifisert av jobben.
"},{"location":"dokumentasjon/overview/","title":"Overview","text":"

{% docs overview %}

"},{"location":"dokumentasjon/overview/#xxx-komponenten","title":"XXX - komponenten","text":""},{"location":"dokumentasjon/overview/#formal","title":"Form\u00e5l","text":"

Overordnet beskrivelse av form\u00e5l med l\u00f8sningen

"},{"location":"dokumentasjon/overview/#komponentbeskrivelse","title":"Komponentbeskrivelse","text":""},{"location":"dokumentasjon/overview/#struktur-pa-repo","title":"Struktur p\u00e5 repo","text":"

Lenke til dokumentasjon p\u00e5 confluence

Vi har f\u00f8lgende mapper: - db (medf\u00f8lgende readme) - install (her ligger ddl filer per tabell/view. Ogs\u00e5 dcl-filer som gir grants) - patch (hvert script har jira-kode som prefiks og kort forklaring/tabellnavn). N\u00e5r man endrer en tabell her m\u00e5 man ogs\u00e5 endre den i install-filen) - utils (kanskje, hvis man trenger det) - dbt - dbt prosjektet. dette er stien der man kj\u00f8rer dbt kommandoer.

"},{"location":"dokumentasjon/overview/#overordnet-design","title":"Overordnet design","text":""},{"location":"dokumentasjon/overview/#dataflyt-diagram","title":"Dataflyt-diagram","text":"

Dataflyten finnes ved \u00e5 klikke p\u00e5 det bl\u00e5 ikonet nederst til h\u00f8yre p\u00e5 siden

# DAG task kilde m\u00e5l kommentar"},{"location":"dokumentasjon/overview/#databasebeskrivelse","title":"Databasebeskrivelse","text":"

En oversikt over de viktigste tabellene

Tabell/Views Beskrivelse tabell1 besk tabell2 besk"},{"location":"dokumentasjon/overview/#databasescript","title":"Databasescript","text":"

Referanser til hvor databasescriptene befinner seg

"},{"location":"dokumentasjon/overview/#drift","title":"Drift","text":""},{"location":"dokumentasjon/overview/#workflows-og-kjretidspunkt","title":"Workflows og kj\u00f8retidspunkt","text":"

Inneholder informasjon om viktige punkter for kj\u00f8retider

"},{"location":"dokumentasjon/overview/#tilgangsstyring","title":"Tilgangsstyring","text":"

Er det noen spesielle rettigheter som kreves for denne komponenten?

"},{"location":"dokumentasjon/overview/#overvaking-og-datakvalitet","title":"Overv\u00e5king og datakvalitet","text":""},{"location":"dokumentasjon/overview/#datakvalitet","title":"Datakvalitet","text":"

Det kj\u00f8res datakvalitetsm\u00e5linger for disse tabellene

"},{"location":"dokumentasjon/overview/#overvaking","title":"Overv\u00e5king","text":"

F\u00f8lgende Sitescope-monitorer kj\u00f8res for denne komponenten.

"},{"location":"dokumentasjon/overview/#sikkerhet-og-personvern","title":"Sikkerhet og personvern","text":"

Inneholder detaljer rundt f.eks tilgang

Det er ikke utarbeidet PVK for denne komponenten.

H\u00e5ndtering av kode 6 og 7: Under arbeid

"},{"location":"dokumentasjon/overview/#backlog","title":"Backlog","text":"

Lenke til jira-oversikt?

"},{"location":"dokumentasjon/overview/#dbt-docs-brukerguide","title":"dbt docs - brukerguide","text":""},{"location":"dokumentasjon/overview/#navigasjon","title":"Navigasjon","text":"

Du kan bruke navigasjonsfanene Project og Database p\u00e5 venstre side av vinduet for \u00e5 utforske modellene i komponenten.

"},{"location":"dokumentasjon/overview/#prosjektfane","title":"Prosjektfane","text":"

Prosjekt-fanen speiler katalogstrukturen til dbt-prosjektet ditt. I denne fanen kan du se alle modeller definert i dbt-prosjektet ditt, samt modeller importert fra dbt-pakker.

"},{"location":"dokumentasjon/overview/#database-fanen","title":"Database-fanen","text":"

Fanen Database viser ogs\u00e5 modellene dine, men i et format som ser mer ut som en databaseutforsker. Denne utsikten viser relasjoner (tabeller og visninger) gruppert i databaseskjemaer. Merk at ephemeral modeller ikke vises i dette grensesnittet, da de ikke finnes i databasen.

"},{"location":"dokumentasjon/overview/#grafutforskning","title":"Grafutforskning","text":"

Du kan klikke p\u00e5 det bl\u00e5 ikonet nederst til h\u00f8yre p\u00e5 siden for \u00e5 se lineage til modellene dine.

P\u00e5 modellsidene vil du se de n\u00e6rmeste foreldrene og barna til modellen du utforsker. Ved \u00e5 klikke p\u00e5 Expand. knappen \u00f8verst til h\u00f8yre i denne avstamningsruten, vil du kunne se alle modellene som brukes til \u00e5 bygge, eller er bygget fra, modellen du utforsker.

N\u00e5r den er utvidet, vil du kunne bruke --select og --exclude modellvalgsyntaks for \u00e5 filtrere modeller i grafen. For mer informasjon om modellvalg, sjekk ut dbt docs.

Merk at du ogs\u00e5 kan h\u00f8yreklikke p\u00e5 modeller for \u00e5 filtrere og utforske grafen interaktivt.

"},{"location":"dokumentasjon/overview/#mer-info","title":"Mer info","text":"

{% enddocs %}

"},{"location":"feilsoking/feilsoking/","title":"Feils\u00f8king","text":"

Samleside for vanlige feilsistuasjoner som kan oppst\u00e5 med dbt og Oracle i NAV

"},{"location":"feilsoking/feilsoking/#incremental","title":"Incremental","text":""},{"location":"feilsoking/feilsoking/#ora-00955-det-finnes-allerede-et-objekt-med-det-navnet","title":"ORA-00955: det finnes allerede et objekt med det navnet","text":"

???

"},{"location":"feilsoking/feilsoking/#ora-00904-kolonne-invalid-identifier","title":"ORA-00904: \"KOLONNE\": invalid identifier","text":"

Dersom persist_docs er aktivert i dbt_project.yml, ta en titt p\u00e5 siden om Dokumentasjon.

"},{"location":"feilsoking/feilsoking/#kobling-mot-oracle-database","title":"Kobling mot oracle database","text":""},{"location":"feilsoking/feilsoking/#dpy-2029-https_proxy-requires-use-of-the-tcps-protocol","title":"DPY-2029: https_proxy requires use of the tcps protocol","text":"

Bytte fra thin mode til cx mode. I outputen du f\u00e5r i terminalen, sjekk hvilken mode du kj\u00f8rer i. Kj\u00f8rer du i thin mode endr det til cx mode. Dette gj\u00f8res ved \u00e5 bruke Oracle Instant Client. Sett path til Oracle Instant Client i milj\u00f8veriabler og slett ORA_PYTHON_DRIVER_TYPE=thin fra milj\u00f8variabler.

"},{"location":"prosjekter/","title":"Prosjekter","text":"

Her finner du en oversikt over noen dbt-prosjekter. Dokumentasjon for produkter finner du p\u00e5 DBT Docs by nada

"},{"location":"prosjekter/bomlo-dbt/","title":"bomlo-dbt","text":"

Eies av PO Helse

"},{"location":"prosjekter/bomlo-dbt/#formal","title":"Form\u00e5l","text":"

DBT-prosjekt for Team B\u00f8mlo.

"},{"location":"prosjekter/bomlo-dbt/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #team-b\u00f8mlo-v\u00e6rs\u00e5god

"},{"location":"prosjekter/dvh-sykefravar-dmx/","title":"dvh-sykefravar-dmx","text":"

Eies av Team Sykefrav\u00e6r

"},{"location":"prosjekter/dvh-sykefravar-dmx/#formal","title":"Form\u00e5l","text":"

Analysetorg brukt til syfo (sykefrav\u00e6rsoppfoling)

"},{"location":"prosjekter/dvh-sykefravar-dmx/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-team-sykefrav\u00e6r

"},{"location":"prosjekter/dvh_arb_cv/","title":"dvh_arb_cv","text":"

Eies av A-Team

"},{"location":"prosjekter/dvh_arb_cv/#formal","title":"Form\u00e5l","text":"

Siste versjon av CV-elementer og jobb\u00f8nsker per person registrert arbeidss\u00f8ker NAV.

"},{"location":"prosjekter/dvh_arb_cv/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-a-team

"},{"location":"prosjekter/dvh_arb_permittering/","title":"dvh_arb_permittering","text":"

Eies av A-Team

"},{"location":"prosjekter/dvh_arb_permittering/#formal","title":"Form\u00e5l","text":"

NAV har behov for \u00e5 samle statistikk for oversikt over permitterte arbeidss\u00f8kere og forh\u00e5ndsmelding om permittering og masseoppsigelser.

Arbeidsgivere som vurderer \u00e5 g\u00e5 til masseoppsigelser eller permitteringer, gir melding om dette til NAV. Fra 2020 blir disse meldingene sendt inn elektronisk til NAV, og registreres i l\u00f8sningen Permittering.

Dekker i f\u00f8rste omgang forh\u00e5ndsmelding om permittering, dvs n\u00e5r virksomheter permittere over 10 personer s\u00e5 skal de melde til NAV p\u00e5 forh\u00e5nd.

"},{"location":"prosjekter/dvh_arb_permittering/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-a-team

"},{"location":"prosjekter/dvh_arb_person/","title":"dvh_arb_person","text":"

Eies av A-Team

"},{"location":"prosjekter/dvh_arb_person/#formal","title":"Form\u00e5l","text":"

Arbeidsmakedsstatistikken.

"},{"location":"prosjekter/dvh_arb_person/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-a-team

"},{"location":"prosjekter/dvh_arb_styrke_ssb/","title":"dvh_arb_styrke_ssb","text":"

Eies av A-Team

"},{"location":"prosjekter/dvh_arb_styrke_ssb/#formal","title":"Form\u00e5l","text":"

Komponenten leser data inn fra SSB i to forskjellige l\u00f8p:

"},{"location":"prosjekter/dvh_arb_styrke_ssb/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-a-team

"},{"location":"prosjekter/dvh_arb_tiltak/","title":"dvh_arb_tiltak","text":"

Eies av Team Oppf\u00f8lging Eies av Team Oppf\u00f8lging)

"},{"location":"prosjekter/dvh_arb_tiltak/#formal","title":"Form\u00e5l","text":"

Brukes i Tiltaks- og oppf\u00f8lgingsstatistikken.

"},{"location":"prosjekter/dvh_arb_tiltak/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-oppf\u00f8lging

"},{"location":"prosjekter/nystol/vdl-regnskapsdata/","title":"vdl-regnskapsdata","text":"

Eies av Team-VDL

"},{"location":"prosjekter/nystol/vdl-regnskapsdata/#formal","title":"Form\u00e5l","text":"

Analysedata av hovedbok

"},{"location":"prosjekter/nystol/vdl-regnskapsdata/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #virksomhetsdatalaget

"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introduksjon til dbt","text":"

dbt (data build tool) er et SQL basert transformasjonsvekt\u00f8y som lar deg modularisere og skrive testbar SQL kode. dbt s\u00f8rger for at SQLene blir kj\u00f8rt i riktig rekkef\u00f8lge slik at sluttproduktet blir oppdatert korrekt.

En SQL fil i dbt blir kalt en modell i dbt. Modeller kan materialiseres p\u00e5 ulike m\u00e5ter. Som view, tabell eller rett og slett en SQL snutt som kan gjenbrukes i flere modeller etter DRY-prinsippet.

dbt er IKKE et extract-load verkt\u00f8y. Det betyr at dataene som skal transformeres allerede m\u00e5 ligge i databasen dbt er koblet til. dbt krever alts\u00e5 at data er lastet p\u00e5 forh\u00e5nd, med feks en pythonjobb eller kafkakonsument. Dataene trenger ikke n\u00f8dvendigvis ligge i samme komponentskjema eller samme BigQuery prosjekt. S\u00e5 lenge dataene er tilgjengelig p\u00e5 samme database og dbt service brukeren har tilgang til \u00e5 lese dataene er du good to go.

dbt kommer b\u00e5de i som open source i form av dbt-core og i en egen cloud versjon, dbt cloud. Cloud versjonen st\u00f8tter kun skydatabaser som feks. BigQuery og Snowflake. dbt Cloud kan derfor ikke brukes mot Oracle onprem databasen til datavarehus. For datasett som befinner seg p\u00e5 datamarkedsplassen i BigQuery, kan dbt Cloud v\u00e6re en mulighet.

For Oracle on-prem benytter vi dbt-oracle som er en python pakke som baserer seg p\u00e5 dbt-core. Oracle er ikke offisielt st\u00f8ttet av dbt, men Oracle har tatt ansvar for community connectoren og og blir aktiv vedlikeholdt og fortl\u00f8pende oppdatert til siste versjon av dbt-core. For \u00e5 n\u00e5 on-prem Oracle m\u00e5 vi som kjent benytte utviklerimage. Denne guiden tar for seg installasjon og oppsett av dbt-oracle p\u00e5 vdi utvikler gjennom Visual Studio Code.

"},{"location":"#lenker","title":"Lenker","text":"

F\u00f8r du g\u00e5r gjennom detaljene p\u00e5 hvordan dbt b\u00f8r settes opp er det lurt \u00e5 bli kjent med hvordan dbt fungerer. Nedenfor er det et knippe nyttige lenker som hjelper deg med \u00e5 komme igang og l\u00e6re de viktigste kommandoene og funksjonene i dbt.

"},{"location":"#kurs-dbt-fundamentals","title":"Kurs - dbt fundamentals","text":"

Det er sterkt anbefalt \u00e5 starte med \u00e5 g\u00e5 gjennom fundamentals kurset til dbt labs. Dette kurset bruker dbt cloud, men mesteparten av innholdet kan overf\u00f8res til dbt-core. Bruk gjerne GCP dev milj\u00f8et til teamet for \u00e5 sette opp testprosjektet i BigQuery, men husk p\u00e5 \u00e5 slette ressursene i etterkant

"},{"location":"#designprinsipper","title":"Designprinsipper","text":"

How to design a dbt model from scratch. Hvordan b\u00f8r du tenke n\u00e5 du designer nye modeller med dbt? Det er fort gjort \u00e5 bomme p\u00e5 f\u00f8rste fors\u00f8k, og det koster mye tid.

"},{"location":"#dimensjonsmodellering","title":"Dimensjonsmodellering","text":"

Kimball er fortsatt relevant med dbt. Building a Kimball dimensional model with dbt

"},{"location":"#bok","title":"Bok","text":"

Det er nylig (juni 2023) lansert en bok om Data Engineering with dbt. Boken inneholder instroduksjon til data engineering generelt og endelt om ulike skydatabaser i tillegg til grunnleggende bruk av dbt. Kanskje den mest interessante delen er kapittel 8 som omhandler testing med dbt.

"},{"location":"#nyttige-lenker","title":"Nyttige lenker","text":"

dbt's egne guider: Lessons

Community basert samling av lenker: awsome-dbt

"},{"location":"#hvorfor-skal-jeg-bruke-dbt-jeg-kan-jo-kjre-sql-med-python","title":"Hvorfor skal jeg bruke dbt? Jeg kan jo kj\u00f8re SQL med Python","text":"

Det er riktig. Dersom du bare skal kj\u00f8re noen enkle SQL sp\u00f8rringer er det kanskje like greit \u00e5 sette opp en Pythonjobb som kj\u00f8rer SQLen for deg. Men med en gang antall sp\u00f8rringer eller kompleksiteten p\u00e5 sp\u00f8rringene \u00f8ker vil dbt hjelpe med med \u00e5 strukturere koden og holde oversikt over rekkef\u00f8lgen. Det er ikke uvanlig at en komponent best\u00e5r av 30 eller flere SQL filer som avhenger av hverandre.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt-power-user/","title":"dbt Power User","text":"

dbt Power User er en VS Code extension, og gir oss en rekke nyttige verkt\u00f8y, som f.eks.:

dbt Power User p\u00e5 GitHub

"},{"location":"Installasjon-p%C3%A5-VDI/dbt-power-user/#installasjon-og-oppsett","title":"Installasjon og oppsett","text":"

Installeres via VS Code Marketplace, f\u00f8lg installasjonsrutinene til Altimate

"},{"location":"Installasjon-p%C3%A5-VDI/dbt-power-user/#utover-standardinstallasjon-ma-flgende-hensyn-tas-for-bruk-pa-vdi-utvikler-og-mot-oracle-dvh","title":"Utover standardinstallasjon m\u00e5 f\u00f8lgende hensyn tas for bruk p\u00e5 VDI Utvikler og mot Oracle DVH:","text":"

dbt Power User krever at man setter opp milj\u00f8variabler med credentials via PowerShell, f\u00f8r VS Code startes opp i samme PowerShell-sesjon. Dette gj\u00f8re med skriptet start_vscode_dbt.ps1

F\u00f8lg denne guiden for \u00e5 sette opp Visual Studio Code med riktige milj\u00f8variable:

  1. Klon dette repoet: https://github.com/navikt/dbt-i-nav/ til en lokal mappe p\u00e5 utivklerimage/VDI

  2. Lag en snarvei p\u00e5 skrivebordet til start_vscode_dbt.ps1 som n\u00e5 ligger lokalt p\u00e5 VDI (inne i mappen du nettopp klonet) slik:

  3. H\u00f8yreklikk p\u00e5 den nye snarveien og velg Egenskaper

  4. Skriptet er generelt og krever at stien til et gyldig dbt-prosjekt settes som argument i tillegg til schemanavnet dbt skal bruke som proxy. Fyll derfor inn f\u00f8lgende tekst i M\u00e5l: powershell.exe -noexit -ExecutionPolicy Bypass -File \"C:\\sti til dbt-i-nav\\start_vscode_dbt.ps1\" c:\\sti\\til\\dbt-prosjekt\\ databaseskjemanavn og juster i forhold til stiene p\u00e5 ditt image.

  5. Kopier snarveien og endre stiene for hvert dbt prosjekt du vil sette opp

  6. Start Visual Stusdio Code ved \u00e5 dobbeltklikke p\u00e5 snarveien.

  7. Det hender skriptet oppdateres, s\u00e5 det er lurt \u00e5 hente siste kode fra github innimellom.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt-power-user/#oracle-oppsett-for-preview-query","title":"Oracle oppsett for Preview query","text":"

Preview query-template m\u00e5 endres for Oracle-bruk: 1. \u00c5pne Settings ved \u00e5 trykke CTRL + , 2. S\u00f8k etter dbt.queryTemplate 3. Endre skript til select * from ({query}) where ROWNUM <= {limit}

Ref.: #dbtquerytemplate-for-oracle

"},{"location":"Installasjon-p%C3%A5-VDI/dbt-power-user/#erfaringer-feil-som-har-oppstatt-ved-bruk-av-dbt-power-user","title":"Erfaringer - feil som har oppst\u00e5tt ved bruk av dbt Power User:","text":""},{"location":"Installasjon-p%C3%A5-VDI/dbt/","title":"DBT","text":""},{"location":"Installasjon-p%C3%A5-VDI/dbt/#oppsett-av-dbt-prosjekter","title":"Oppsett av dbt prosjekter","text":"

Vi har laget et ferdig oppsett av et dbt prosjekt tilpasset NAV dvh. Enten lag et nytt repo basert p\u00e5 dvh_template. Deretter m\u00e5 dbt_template kopieres inn for \u00e5 f\u00e5 integrert dbt prosjektet.

Resten av denne siden omhandler manuelt oppsett av dbt-oracle uten virteul. F\u00f8lg denne guiden hvis du ikke \u00f8nsker automatisk oppsett i Visual Studio Code.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#oppsett-av-sertifikater-til-pip","title":"Oppsett av sertifikater til pip","text":"

Til vanlig bruker pip sitt eget sertifikat for \u00e5 validere at vi laster ned pakker fra riktig server. Siden VDI bruker en webproxy for \u00e5 kommunisere med omverdenen vill vi f\u00e5 en feilmeling ved pip install xxx.

Error

13:42:24  Encountered an error: External connection exception occurred:\nHTTPSConnectionPool(host='hub.getdbt.com', port=443): Max retries exceeded\nwith url: /api/v1/index.json (Caused by SSLError(SSLCertVerificationError(1,\n'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get\nlocal issuer certificate (_ssl.c:1108)')))\n

For \u00e5 fikse feilen kan vi installere pakkene setuptools-scm og pip-system-certs som f\u00e5r pip til \u00e5 bruke Windows Certificate Store istedenfor.

pip install setuptools-scm pip-system-certs --trusted-host pypi.org --trusted-host  files.pythonhosted.org\n

Det finnes en offisiell oracle adapter for dbt v1.x. Gjerne start med \u00e5 ta en titt p\u00e5 denne installasjonsguiden f\u00f8rst.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#installasjon","title":"Installasjon","text":"

dbt kan installeres sammen med oracle adapteren med kommandoen:

pip install dbt-oracle\n

Nedlasting feiler

$ pip install dbt-oracle\nWARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)'))': /simple/dbt-oracle/\n\n...\n\nCould not fetch URL https://pypi.org/simple/dbt-oracle/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/dbt-oracle/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)')))\n

Sjekk om du har gjort oppsett av sertifikater til pip.

Installasjon feiler

I noen tilfeller har vi opplevd at Microsoft Visual C++ mangler. Feilmeldingen kan se slik ut:

...\nBuilding wheels for collected packages: cx-Oracle\nBuilding wheel for cx-Oracle (pyproject.toml) ... error\nerror: subprocess-exited-with-error\n\n\u00d7 Building wheel for cx-Oracle (pyproject.toml) did not run successfully.\n\u2502 exit code: 1\n\u2570\u2500> [8 lines of output]\n      C:\\Users\\RA_S167159\\AppData\\Local\\Temp\\pip-build-env-lh09agh5\\overlay\\Lib\\site-packages\\setuptools\\config\\expand.py:144: UserWarning: File 'C:\\\\Users\\\\RA_S167159\\\\AppData\\\\Local\\\\Temp\\\\pip-install-ki6mcccg\\\\cx-oracle_5a1e160a6cb5498187fe05d5b5637d8c\\\\README.md' cannot be found\n        warnings.warn(f\"File {path!r} cannot be found\")\n    pip_system_certs: ERROR: could not register module: No module named 'wrapt'\n    running bdist_wheel\n    running build\n    running build_ext\n    building 'cx_Oracle' extension\n    error: Microsoft Visual C++ 14.0 or greater is required. Get it with \"Microsoft C++ Build Tools\": https://visualstudio.microsoft.com/visual-cpp-build-tools/\n    [end of output]\n\nnote: This error originates from a subprocess, and is likely not a problem with pip.\nERROR: Failed building wheel for cx-Oracle\nFailed to build cx-Oracle\nERROR: Could not build wheels for cx-Oracle, which is required to install pyproject.toml-based projects\n...\n
Last ned og installer Build Tools. F\u00f8lg gjerne guiden her: Fixed: Microsoft Visual C++ 14.0 Is Required Error Husk \u00e5 restarte VDI etter installasjon.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#opprette-nytt-dbt-prosjekt-for-oracle-fra-scratc","title":"Opprette nytt dbt prosjekt for Oracle fra scratc","text":"

Hvis du ikke \u00f8nsker \u00e5 ta i bruk standardprosjektet, men heller kj\u00f8re dbt init er det noen ting som kan skape uforst\u00e5elige feilmeldinger:

"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#quoting","title":"Quoting","text":"

Quoting av databasenavn m\u00e5 aktiveres i dbt_project.yml siden databasenenavnene til dvh-databasene er med sm\u00e5 bokstaver (eks. dwhu1). Hvis ikke dette gj\u00f8res kommer det feilmeling som sier noe slikt som approximate match

For \u00e5 skru p\u00e5 quoting m\u00e5 f\u00f8lgende settes i dbt_project.yml:

quoting:\n  database: true\n
"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#hemmeligheter-ved-kjring-fra-utviklerimage","title":"Hemmeligheter ved kj\u00f8ring fra utviklerimage","text":"

Av sikkerhetshensyn anbefaler vi og oracle \u00e5 bruke milj\u00f8variabler for \u00e5 holde p\u00e5 hemmeligheter. Vi har derfor laget et script og profiles.yml som kan ligge i dbt-prosjektet.

Scriptet kan lastes ned fra navikt/dvh_template/dbt/setup_db_user.ps1.

profiles.yml skal opprettes i p\u00e5 toppniv\u00e5 i dbt-prosjektmappen, eksempel navikt/dvh_template/dbt/profiles.yml Merk at navn p\u00e5 profil er profilnavnet det henvises til i dbt_project.yml

<navn p\u00e5 profil>:\n  target: \"{{env_var('DBT_DB_TARGET')}}\"\n ...\n

N\u00e5r profilen er p\u00e5 plass i prosjektmappen kan du teste at dbt fungerer.

"},{"location":"Installasjon-p%C3%A5-VDI/dbt/#teste-dbt-installasjonen","title":"Teste dbt installasjonen","text":"

Etter at dbt er p\u00e5 plass kan du verifisere at dbt fungerer ved \u00e5 kj\u00f8re .\\setup_db_user.ps1 etterfulgt av dbt debug fra prosjektmappen. Er det et nytt prosjekt m\u00e5 du opprette profiles.yml f\u00f8rst.

.\\setup_db_user.ps1 m\u00e5 kj\u00f8res hver gang en starter en ny terminal eller \u00f8nsker \u00e5 bytte target (db). Scriptet vill midlertidlig opprette milj\u00f8variablene i terminal-sesjonen for target, brukernavn, passord, schema og peke dbt mot profiles.yml i prosjektmappen.

Success

$ .\\setup_db_user.ps1\nTarget db: U <eventuelt Q,R eller P>\nSchema:\n\ncmdlet Get-Credential at command pipeline position 1\nSupply values for the following parameters:\nCredential\n\n$ dbt debug\n09:15:08  Running with dbt=1.1.1\ndbt version: 1.1.1\npython version: 3.8.10\npython path: c:\\users\\****\\appdata\\local\\programs\\python\\python38\\python.exe\nos info: Windows-10-10.0.19044-SP0\nUsing profiles.yml file at C:\\Users\\****\\git\\dvh-sykefravar-dmx\\profiles.yml\nUsing dbt_project.yml file at C:\\Users\\****\\git\\dvh-sykefravar-dmx\\dbt_project.yml\n\n09:15:08  oracle adapter: Running in cx mode\nConfiguration:\n  profiles.yml file [OK found and valid]\n  dbt_project.yml file [OK found and valid]\n\nRequired dependencies:\n- git [OK found]\n\nConnection:\n  user: ****\n  database: dwhu1\n  schema: ****\n  protocol: tcp\n  host: dm07-scan.adeo.no\n  port: 1521\n  tns_name: None\n  service: dwhu1\n  connection_string: None\n  shardingkey: []\n  supershardingkey: []\n  cclass: None\n  purity: None\n  Connection test: [OK connection ok]\n\nAll checks passed!\n

DBT er n\u00e5 klart til bruk.

Error

Connection test: [ERROR]\n\n2 checks failed:\nError from git --help: Could not find command, ensure it is in the user's PATH and that the user has permissions to run it: \"git\"\n\ndbt was unable to connect to the specified database.\nThe database returned the following error:\n\n  >Database Error\n  DPI-1047: Cannot locate a 64-bit Oracle Client library: \"failed to get message for Windows Error 126\". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help\n\nCheck your database credentials and try again. For more information, visit:\nhttps://docs.getdbt.com/docs/configure-your-profile\n

Oracle client library er mest sannsynlig ikke installert.

"},{"location":"Installasjon-p%C3%A5-VDI/git/","title":"Git","text":"

F\u00f8lg guiden p\u00e5 confluence og legg til milj\u00f8variabler der det kreves. Pass p\u00e5 \u00e5 f\u00f8lge denne guiden til punkt og prikke. Mange problemer har kommet av at noen punkter her er avglemt.

"},{"location":"Installasjon-p%C3%A5-VDI/installere/","title":"Installere dbt-oracle p\u00e5 VDI","text":""},{"location":"Installasjon-p%C3%A5-VDI/installere/#forutsetninger","title":"Forutsetninger","text":"

For \u00e5 kunne utvikle dbt mot oracle m\u00e5 man ha tilgang til utviklerimage som er et VDI som kj\u00f8rer i i NAV datahall. Dette er for \u00e5 kunne f\u00e5 kontakt med Oracle databaser. Du m\u00e5 ogs\u00e5 har f\u00e5tt en eller felere databasebrukere og det er nyttig \u00e5 kunne koble seg opp mot databasene med SQL Developer. Se f\u00f8lgende lenker:

"},{"location":"Installasjon-p%C3%A5-VDI/installere/#installasjon-av-dbt-oracle","title":"Installasjon av dbt-oracle","text":"

For \u00e5 installere dbt-core for Oracle m\u00e5 du installere f\u00f8lgende:

  1. Python 3.11.x
  2. PIP og oppsett av dbt-milj\u00f8
  3. Git / GitHub Desktop
  4. dbt
"},{"location":"Installasjon-p%C3%A5-VDI/installere/#anbefalinger","title":"Anbefalinger","text":"

For en god utvikleropplevelse anbefaler vi deg \u00e5 ha f\u00f8lgende installert:

"},{"location":"Installasjon-p%C3%A5-VDI/miljovariabler/","title":"Legge til milj\u00f8variabler","text":"
  1. S\u00f8k etter milj\u00f8variabler
  2. Klikk p\u00e5: Rediger milj\u00f8bariabler for kontoen din
  1. Trykk p\u00e5 Ny...
  2. Gi variabelen et navn i Variabelnavn.
  3. Skriv inn path til programmet i Variabelverdi
  4. Trykk OK
  1. Marker Path variabelen
  2. Trykk Rediger...
  1. Trykk Ny
  2. Skriv inn navnet p\u00e5 variabelen du opprettet med syntaksen %<variabelnavn>% eks: %PIP%
  3. Trykk OK
  1. Trykk OK

Note

Husk at du m\u00e5 lukke cmd (ledetekst) og \u00e5pne p\u00e5 nytt for at endringen skal tre i kraft.

"},{"location":"Installasjon-p%C3%A5-VDI/oracle-client-library/","title":"Oracle client library","text":"

Note

Dette steget utg\u00e5r hvis du bruker thin mode (tynnklient som ikke trenger klientbiblioteket. Introdusert i dbt-oracle 1.1.1). Det anbefales \u00e5 bruke thin mode, da kj\u00f8ring av kode g\u00e5r en del raskere.

Dette finnes p\u00e5 fellesdisken og mappen programvare\\oracle\\ og kan kopieres lokalt. Det er er instantclient-basiclite-windows som benyttes.

Oppdater PATH milj\u00f8variabelen med path til oracle client library. Eksmpel:

C:\\data\\instantclient-basiclite-windows\\instantclient_19_11\n

Note

Se legg til milj\u00f8variabler hvis du ikke vet hvordan du oppdatere PATH.

"},{"location":"Installasjon-p%C3%A5-VDI/pip-og-oppsett/","title":"PIP og og tilgang til PyPI","text":"
pip --version\n
"},{"location":"Installasjon-p%C3%A5-VDI/pip-og-oppsett/#feilsk-sjekk-om-du-har-pip","title":"Feils\u00f8k: Sjekk om du har PIP","text":"

Har du installert python, s\u00e5 har du nesten sikkert ogs\u00e5 pip. Men dersom overst\u00e5ende feiler, kj\u00f8r pip --version for \u00e5 se om pip er tilgjengelig:

pip --version\n

Success

pip --version\n\npip 21.1.1 from c:\\users\\*****\\appdata\\local\\programs\\python\\python38\\lib\\site-packages\\pip (python 3.8)\n

Fortsett til Git / GitHub Desktop

Failure

pip --version\n\n'pip' is not recognized as an internal or external command, operable program or batch file.\n

Kj\u00f8r py -3 -m ensurepip for \u00e5 se om pip allerede eksisterer.

Looking in links: c:\\Users\\****\\AppData\\Local\\Temp\\tmp4r6s0n91\nRequirement already satisfied: setuptools in c:\\users\\****\\appdata\\local\\programs\\python\\pythonXX\\lib\\site-packages (58.1.0)\nRequirement already satisfied: pip in c:\\users\\****\\appdata\\local\\programs\\python\\pythonXX\\lib\\site-packages (21.2.4)\n

I dette tilfelle m\u00e5 milj\u00f8variabelen PATH oppdateres. Bruk gjerne Fil utforsker for \u00e5 finne riktig path men normalt ligger PIP under:

c:\\users\\<brukernavn>\\appdata\\local\\programs\\python\\pythonXX\\scripts\n

Info

Se legg til milj\u00f8variabler hvis du ikke vet hvordan du oppdatere PATH.

Husk at du m\u00e5 lukke og \u00e5pne cmd (ledetekst) etter path variabel er lagt inn. Du kan n\u00e5 verifisere at pip er tilgjengelig ved \u00e5 kj\u00f8re pip --version.

"},{"location":"Installasjon-p%C3%A5-VDI/python/","title":"Python","text":"

Sjekk om Python er installert med py --version. dbt-versjon 1.4 og senere st\u00f8tter Python-versjon 3.11, for en tidligere dbt-versjon m\u00e5 Python-versjon v\u00e6re >= 3.8 og < 3.11.

Last eventuelt ned python 3.11.x og installer ved \u00e5 f\u00f8lge installsjonsveiviseren.

G\u00e5 til Windows \"Ledetekst\"/\"Command prompt\" og skriv f\u00f8lgende.

py --version\n

Hvis py ikke fungerer, kan det hende at det heter python:

python --version\n

Success

$ py --version\n\nPython 3.8.10\n

Fortsett til PIP

Failure

$ py --version\n\nPython 3.6.4\n
For gammel version av Python

Last ned Python

Failure

$ py --version\n\npython is not recognized as an internal or external command, operable program, or batch file\n

Python er ikke installert

Last ned Python

"},{"location":"Installasjon-p%C3%A5-VDI/sqlfluff/","title":"SQLFluff","text":"

SQLFluff er en linter som hjelper oss med \u00e5 formattere SQL-koden p\u00e5 en fornuftig m\u00e5te.

"},{"location":"Installasjon-p%C3%A5-VDI/sqlfluff/#installering-av-sqlfluff","title":"Installering av SQLFluff","text":"
pip install sqlfluff sqlfluff-templater-dbt\n
"},{"location":"Installasjon-p%C3%A5-VDI/vscode/","title":"Visual Studio Code","text":"

Bruk https://code.visualstudio.com/download, velg Windows versjonen. Last ned, pakk ut og start programmet code. F\u00f8lg instruksjonene ved innstalleringen.

"},{"location":"Installasjon-p%C3%A5-VDI/vscode/#anbefalte-extensions","title":"Anbefalte extensions","text":""},{"location":"arkitektur/materialisering/","title":"Materialiseringsstrategier","text":"

Hva er materialiseringer i dbt?. dbt-oracle st\u00f8tter alle former for materialisering.

Generelt er det en god ide \u00e5 f\u00f8lge Best practices for materializations fra dbt labs.

Det er likevel noen avvik:

  1. Staging modeller b\u00f8r hovedsakelig v\u00e6re views.
  2. Intermediate ved kompleks logikk. Kj\u00f8r views n\u00e5r du kan. N\u00e5r views g\u00e5r for tregt, har du tre valg:
    1. Kj\u00f8re table materialiseringer. tabeller blir droppet, purget og rekj\u00f8rt med alt innhold fra sp\u00f8rringen i modellfilen. Ikke lurt ved ved st\u00f8rre mengder data, b\u00e5de ytelsesmessig og lagring i flere lag.
    2. Incrememental. Tabellen bevares og nye endrede rader blir lagt til med merge.
    3. Delta last med table models ... trenger POC
  3. Marts skal v\u00e6re stabil. Det er her alle sp\u00f8rringer fra konsumenter kj\u00f8res, og det er viktig for basen \u00e5 opparbeide statistikk p\u00e5 sp\u00f8rringer som kj\u00f8rer ofte.
  4. Skal du skrive om en gammel l\u00f8sning til dbt? Ikke skriv om l\u00f8pet og sats p\u00e5 at alt skal blir 100% likt. Du kan ve\u00e6re sikekr p\u00e5 at data (oppslag mot avhengigheter) har endret seg siden forrige gang dataene har blitt kj\u00f8rt opp. Spesielt med tanke p\u00e5 at patching og rekj\u00f8ring med forskjellig logikk har blitt gjort gjennom tidene.
"},{"location":"arkitektur/materialisering_spenn/","title":"Materialiseringsstrategi i Team Spenn","text":"

Form\u00e5let med denne strategien er \u00e5 unng\u00e5 droppe og deretter opprette datavarehusobjekter hver gang et dbt-l\u00f8p kj\u00f8res da dette er ugunstig mhp. DMO. Derfor har table-materialisering blitt faset ut i v\u00e5re prosjekter. F\u00f8lgende materialiseringer blir derfor tatt i bruk p\u00e5 tvers av v\u00e5re dbt-l\u00f8p:

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 \u00e5 lagre dataene fysisk. Intermediate view Intermediate-modellene blir materialisert som view fordi de har kompleks logikk og kj\u00f8rer ikke for tregt. Marts incremental og view Faktatabeller og aggregater (b\u00e5de brede og \u00e5pne aggregater som skal deles og konsumeres) blir materialisert som hhv. incremental og view. Faktatabeller, som ofte inneholder store datamengder, blir materialisert som incremental for \u00e5 redusere kj\u00f8re- og lagringstiden. Aggregater blir materialisert som view, og ikke som incremental, da de ikke inneholder mye data og mangler unike n\u00f8kler. Hvis aggregatene begynner \u00e5 ta for lang tid \u00e5 kj\u00f8re 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)."},{"location":"arkitektur/materialisering_spenn/#mer-om-var-incremental-materialisering-i-marts","title":"Mer om v\u00e5r incremental-materialisering i Marts","text":"

Vi bruker unique_key-konfigurasjonen for \u00e5 finne rader fra en tidligere kj\u00f8ring med samme unike ID. Dette gj\u00f8r det mulig \u00e5 oppdatere eksisterende rader i stedet for \u00e5 legge dem til som nye:

{{\n  config(\n    materialized = 'incremental',\n    unique_key = ['kolonne_1', 'kolonne_2'],\n    merge_exclude_columns = ['kolonne_1', 'kolonne_2', ...],\n    ...\n  )\n}}\n\nselect ...\n
For \u00e5 legge til nye rader benytter vi is_incremental()-makroen:
select ...\nwhere \n{% if is_incremental() %}\nkolonne_dato_kilde > (select max(kolonne_dato_target) from {{ this }})\n{% endif %}\n

"},{"location":"arkitektur/materialisering_spenn/#utfordringer-med-materialized-view","title":"Utfordringer med materialized view","text":"

Vi fors\u00f8kte \u00e5 materialisere aggregatene v\u00e5re som materialized view, men st\u00f8tte p\u00e5 flere begrensninger: - Modeller som bruker denne materialiseringen krever materialized view log p\u00e5 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\u00e5 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\"

"},{"location":"arkitektur/style_guide/","title":"DBT Stil Guide","text":"

forket fra https://github.com/dbt-labs/corp/blob/main/dbt_style_guide.md

"},{"location":"arkitektur/style_guide/#modell-naming","title":"Modell Naming","text":"

V\u00e5r modellere organiserers inn i tre hovedgrupper: staging, marts, base/intermediate. See f\u00f8lgnede diskusjon. The navngiving blir som f\u00f8lger:

\u251c\u2500\u2500 dbt_project.yml\n\u2514\u2500\u2500 models\n    \u251c\u2500\u2500 marts\n    |   \u2514\u2500\u2500 core\n    |       \u251c\u2500\u2500 mellomlager\n    |       |   \u251c\u2500\u2500 mellomlager.yml\n    |       |   \u251c\u2500\u2500 posteringer__unionisert.sql\n    |       |   \u2514\u2500\u2500 posteringer__gruppert.sql\n    |       \u251c\u2500\u2500 core.docs\n    |       \u251c\u2500\u2500 dim_artskonti\n    |           \u251c\u2500\u2500 dim_artskonti.yml\n    |           \u2514\u2500\u2500 dim_artskonti.sql\n    |       \u251c\u2500\u2500 dim_konstnadssteder\n    |           \u251c\u2500\u2500 dim_konstnadssteder.yml\n    |           \u2514\u2500\u2500 dim_konstnadssteder.sql\n    |       \u2514\u2500\u2500 fak_hovedbok_posteringer\n    |           \u251c\u2500\u2500 fak_hovedbok_posteringer.yml\n    |           \u2514\u2500\u2500 fak_hovedbok_posteringer.sql\n    \u2514\u2500\u2500 staging\n        \u2514\u2500\u2500 oebs\n            \u251c\u2500\u2500 base\n            |   \u251c\u2500\u2500 base.yml\n            |   \u2514\u2500\u2500 base__oebs_kontoplan.sql\n            \u251c\u2500\u2500 src_oebs.yml\n            \u251c\u2500\u2500 src_oebs.docs\n            \u251c\u2500\u2500 stg_oebs__posteringerslinjer\n            |   \u251c\u2500\u2500 stg_oebs__posteringerslinjer.yml\n            |   \u2514\u2500\u2500 stg_oebs__posteringerslinjer.sql\n            \u251c\u2500\u2500 stg_oebs__budjsett_balanser\n            |   \u251c\u2500\u2500 stg_oebs__budjsett_balanser.yml\n            |   \u2514\u2500\u2500 stg_oebs__budjsett_balanser.sql\n
- All objekter oppgis p\u00e5 flertallsform, slik som: stg_oebs__hovedbok_posteringslinjer, stg_oebs__artskonti, etc. - Basetabeller prefikses med base__, slik som: base__<source>_<object> - Mellomlagringstabeller skal avsluttes med et fortidsverb som indikerer hvilken handling som er gjort p\u00e5 objektet, slik som: hovedbok_posteringslinjer__filtrert_budsjett - Datatorg, eller marter, er fordelt mellom faktaer (uforandelig, verb) og dimensjoner (foranderlig, subjekt) og prefikses med fak_ og dim_, henholdvis. - Staged strukter inneholder alle kolonner fra r\u00e5-tabellen og utvides med avledede kolonner, for \u00e5 angi naturlig n\u00f8kler, hashed n\u00f8kler, omd\u00f8ping av kolonnenavn, etc.

"},{"location":"arkitektur/style_guide/#model-konfigurasjon","title":"Model konfigurasjon","text":"

{{\n  config(\n    materialized = 'table',\n    sort = 'id',\n    dist = 'id'\n  )\n}}\n
- Marter b\u00f8r alltid configureres som tabeller - med mindre det er sv\u00e6rt gode grunner til \u00e5 ikke gj\u00f8re det.

"},{"location":"arkitektur/style_guide/#dbt-konvensjoner","title":"DBT konvensjoner","text":""},{"location":"arkitektur/style_guide/#tester","title":"Tester","text":""},{"location":"arkitektur/style_guide/#navngivining-og-felt-konvensjoner","title":"Navngivining og felt konvensjoner","text":""},{"location":"arkitektur/style_guide/#cteer","title":"CTEer","text":"

For mer informasjon om hvorfor vi bruker CTEer, see f\u00f8lgende post. Kortversjonen er at det hjelper oss \u00e5 samle kildene \u00f8verst, gj\u00f8re enkle transformasjoner og joiner i midten og se resultatet nederst. Oracle skal st\u00f8tte passthrough slik at masse wither p\u00e5 rad ikke p\u00e5virker ytelsen.

WITH\n\nhendelser AS (\n\n    ...\n\n),\n\n-- CTE comments go here\nfiltrerte_hendelser AS (\n\n    ...\n\n),\n\nendelig AS (\n\n    SELECT * FROM filtrerte_hendelser\n\n),\n\n\nSELECT * FROM endelig\n
"},{"location":"arkitektur/style_guide/#sql-stil-guide","title":"SQL stil guide","text":""},{"location":"arkitektur/style_guide/#eksempel-sql","title":"Eksempel SQL","text":"
WITH\n\nmin_data AS (\n\n    SELECT * FROM {{ ref('min_data') }}\n\n),\n\nen_cte AS (\n\n    SELECT * FROM {{ ref('en_cte') }}\n\n),\n\nen_cte_agg AS (\n\n    SELECT\n        id,\n        SUM(felt_4) AS total_felt_4,\n        MAX(felt_5) AS max_felt_5\n\n    FROM en_cte\n    GROUP BY 1\n\n),\n\nendelig AS (\n\n    SELECT [DISITNCT]\n        min_data.felt_1,\n        min_data.felt_2,\n        min_data.felt_3,\n\n        -- Bruk linjeshift for visuelt separere kalkulasjoner inn i blokker.\n        CASE\n            WHEN min_data.kansellerings_dato IS NULL\n                AND min_data.utgangs_dato is not null\n                THEN utgangsdato_date\n            WHEN my_data.kansellerings_dato IS NULL\n                THEN my_data.start_dato + 7\n            ELSE my_data.kansellerings_date\n        END AS kansellerings_dato,\n\n        en_cte_agg.total_felt_4,\n        en_cte_agg.max_felt_5\n\n    FROM min_data\n    LEFT JOIN en_cte_agg  \n        ON min_data.id = en_cte_agg.id\n    WHERE min_data.felt_1 = 'abc'\n        AND (\n            min_data.felt_2 = 'def' OR\n            min_data.felt_2 = 'ghi'\n        )\n    HAVING COUNT(*) > 1\n\n)\n\nSELECT * FROM final\n
"},{"location":"arkitektur/style_guide/#yaml-stil-guide","title":"YAML stil guide","text":""},{"location":"arkitektur/style_guide/#eksample-yaml","title":"Eksample YAML","text":"
version: 2\n\nmodels:\n  - name: hendelser\n    columns:\n      - name: pk_hendelser\n        description: Dette er n prim\u00e6rn\u00f8kkel\n        tests:\n          - unique\n          - not_null\n\n      - name: hendelse_ts \n        description: \"N\u00e5r hendelse skjedde i UTC (eg. 2018-01-01 12:00:00)\"\n        tests:\n          - not_null\n\n      - name: fk_brukere\n        description: Brukeren som st\u00e5 for hendelsen \n        tests:\n          - not_null\n          - relationships:\n              to: ref('brukere')\n              field: pk_brukere\n
"},{"location":"arkitektur/style_guide/#jinja-stil-guide","title":"Jinja stil guide","text":""},{"location":"arkitektur/style_guide/#farger-i-lineage","title":"Farger i lineage","text":"

I lineagen f\u00e5r source-blobber en lys gr\u00f8nn farge, mens alt annet blir lys bl\u00e5. I .yml-filene kan dette endres med node_color-attributten under +docs til en modell eller en mappe. For \u00e5 skille enklere mellom staging, intermediate og marts har vi valgt f\u00f8lgende som en standard, men dette kan du endre som du vil:

# i dbt_project.yml\nmodels:\n  ...\n    staging:\n      +docs:\n        node_color: '#054710' # m\u00f8rk gr\u00f8nn farge\n\n    intermediate:\n      +docs:\n        node_color: '#0E4870' # m\u00f8rk bl\u00e5 farge\n\n    marts: # standard dbt-lysebl\u00e5-farge\n    ...\n

node_color-attributten st\u00f8tter b\u00e5de fargenavn (red) og hex-koder med anf\u00f8rselstegn (\"#cd7f32\"). Se https://docs.getdbt.com/reference/resource-configs/docs for mer informasjon.

"},{"location":"dokumentasjon/","title":"Dokumentajson","text":"

Dokumentasjon for produkter finner du p\u00e5 DBT Docs by nada

"},{"location":"dokumentasjon/dokumentasjon/","title":"Dokumentasjon","text":""},{"location":"dokumentasjon/dokumentasjon/#tabelldokumentasjon","title":"Tabelldokumentasjon","text":"

Tabellene konfigureres og dokumenteres i yml filene i hver mappe i prosjektet. Kommentarer kan settes p\u00e5 b\u00e5de tabellniv\u00e5 og kolonneniv\u00e5. Les mer her.

"},{"location":"dokumentasjon/dokumentasjon/#persist-docs","title":"Persist docs","text":"

dbt-oracle har st\u00f8tte for \u00e5 skrive kommentarer til databasen. Som andre konfig, kan det settes p\u00e5 prosjektniv\u00e5, mappeniv\u00e5 eller modellniv\u00e5. For \u00e5 sette det p\u00e5 prosjektniv\u00e5, legg til f\u00f8lgende i dbt_project.yml

models:\n  +persist_docs:\n    relation: true\n    columns: true\n

En ting \u00e5 v\u00e6re oppmerksom p\u00e5 n\u00e5r persist_docs er aktivert er at kolonnenavn i modellen m\u00e5 v\u00e6re det samme som definert i yml filen.

ORA-00904

ORA-00904: \"KOLONNE\": invalid identifier\n
SELECT\n  kolonne\nFROM ...\n
- name: kolonne_navn\n  description: ...\n

Her har Oracle fors\u00f8kt \u00e5 skrive kommentar til en kolonne som ikke eksisterer. Sammenlign modell og yml fil og sjekk at navnet p\u00e5 kolonnen er lik.

"},{"location":"dokumentasjon/dokumentasjon/#overskrive-overview","title":"Overskrive overview","text":"

Komponentdokumentasjonen kan integreres i dbt dokumentasjonen. I dbt/models folderen m\u00e5 det opprettes en overview.md fil. Bruk gjerne overview.md som mal

"},{"location":"dokumentasjon/dokumentasjon/#deployere-dokumentasjon","title":"Deployere dokumentasjon","text":"

Hver gang kommandoen dbt docs kj\u00f8res, genereres det tre filer i target mappa under dbt prosjektmappa: index.hml, catalog.json og manifest.json. Disse filene er statiske og inneholder alt som trengs for \u00e5 publisere en versjon av dokumentasjonen p\u00e5 en webserver.

Github pages har slik st\u00f8tte. Publsiering til github pages kan gj\u00f8res p\u00e5 flere m\u00e5ter, men kanskje enklest er det \u00e5 bruke en github action:

# Simple workflow for dbt docs content to GitHub Pages\nname: Deploy dbt docs to GitHub Pages\n\non:\n  push:\n    branches: [\"master\"]\n    paths:\n      - docs/**\n\n  workflow_dispatch:\n\n\npermissions:\n  contents: read\n  pages: write\n  id-token: write\n\n# Allow one concurrent deployment\nconcurrency:\n  group: \"pages\"\n  cancel-in-progress: true\n\njobs:\n  deploy:\n    environment:\n      name: github-pages\n      url: ${{ steps.deployment.outputs.page_url }}\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n      - name: Setup Pages\n        uses: actions/configure-pages@v2\n      - name: Upload artifact\n        uses: actions/upload-pages-artifact@v1\n        with:\n          path: 'docs'\n      - name: Deploy to GitHub Pages\n        id: deployment\n        uses: actions/deploy-pages@v1\n
  1. Importer overst\u00e5ende github action i .workflow
  2. Kj\u00f8r kommandoen dbt docs generate
  3. Lag en docs mappe p\u00e5 roten av repoet, hvis det ikke allerede finnes.
  4. Kopier over filene index.hml, catalog.json og manifest.json fra target mappen til docs mappen.
  5. Commit og push til main branchen.
  6. Docen blir automatisk publisert av github action, til url spesifisert av jobben.
"},{"location":"dokumentasjon/overview/","title":"Overview","text":"

{% docs overview %}

"},{"location":"dokumentasjon/overview/#xxx-komponenten","title":"XXX - komponenten","text":""},{"location":"dokumentasjon/overview/#formal","title":"Form\u00e5l","text":"

Overordnet beskrivelse av form\u00e5l med l\u00f8sningen

"},{"location":"dokumentasjon/overview/#komponentbeskrivelse","title":"Komponentbeskrivelse","text":""},{"location":"dokumentasjon/overview/#struktur-pa-repo","title":"Struktur p\u00e5 repo","text":"

Lenke til dokumentasjon p\u00e5 confluence

Vi har f\u00f8lgende mapper: - db (medf\u00f8lgende readme) - install (her ligger ddl filer per tabell/view. Ogs\u00e5 dcl-filer som gir grants) - patch (hvert script har jira-kode som prefiks og kort forklaring/tabellnavn). N\u00e5r man endrer en tabell her m\u00e5 man ogs\u00e5 endre den i install-filen) - utils (kanskje, hvis man trenger det) - dbt - dbt prosjektet. dette er stien der man kj\u00f8rer dbt kommandoer.

"},{"location":"dokumentasjon/overview/#overordnet-design","title":"Overordnet design","text":""},{"location":"dokumentasjon/overview/#dataflyt-diagram","title":"Dataflyt-diagram","text":"

Dataflyten finnes ved \u00e5 klikke p\u00e5 det bl\u00e5 ikonet nederst til h\u00f8yre p\u00e5 siden

# DAG task kilde m\u00e5l kommentar"},{"location":"dokumentasjon/overview/#databasebeskrivelse","title":"Databasebeskrivelse","text":"

En oversikt over de viktigste tabellene

Tabell/Views Beskrivelse tabell1 besk tabell2 besk"},{"location":"dokumentasjon/overview/#databasescript","title":"Databasescript","text":"

Referanser til hvor databasescriptene befinner seg

"},{"location":"dokumentasjon/overview/#drift","title":"Drift","text":""},{"location":"dokumentasjon/overview/#workflows-og-kjretidspunkt","title":"Workflows og kj\u00f8retidspunkt","text":"

Inneholder informasjon om viktige punkter for kj\u00f8retider

"},{"location":"dokumentasjon/overview/#tilgangsstyring","title":"Tilgangsstyring","text":"

Er det noen spesielle rettigheter som kreves for denne komponenten?

"},{"location":"dokumentasjon/overview/#overvaking-og-datakvalitet","title":"Overv\u00e5king og datakvalitet","text":""},{"location":"dokumentasjon/overview/#datakvalitet","title":"Datakvalitet","text":"

Det kj\u00f8res datakvalitetsm\u00e5linger for disse tabellene

"},{"location":"dokumentasjon/overview/#overvaking","title":"Overv\u00e5king","text":"

F\u00f8lgende Sitescope-monitorer kj\u00f8res for denne komponenten.

"},{"location":"dokumentasjon/overview/#sikkerhet-og-personvern","title":"Sikkerhet og personvern","text":"

Inneholder detaljer rundt f.eks tilgang

Det er ikke utarbeidet PVK for denne komponenten.

H\u00e5ndtering av kode 6 og 7: Under arbeid

"},{"location":"dokumentasjon/overview/#backlog","title":"Backlog","text":"

Lenke til jira-oversikt?

"},{"location":"dokumentasjon/overview/#dbt-docs-brukerguide","title":"dbt docs - brukerguide","text":""},{"location":"dokumentasjon/overview/#navigasjon","title":"Navigasjon","text":"

Du kan bruke navigasjonsfanene Project og Database p\u00e5 venstre side av vinduet for \u00e5 utforske modellene i komponenten.

"},{"location":"dokumentasjon/overview/#prosjektfane","title":"Prosjektfane","text":"

Prosjekt-fanen speiler katalogstrukturen til dbt-prosjektet ditt. I denne fanen kan du se alle modeller definert i dbt-prosjektet ditt, samt modeller importert fra dbt-pakker.

"},{"location":"dokumentasjon/overview/#database-fanen","title":"Database-fanen","text":"

Fanen Database viser ogs\u00e5 modellene dine, men i et format som ser mer ut som en databaseutforsker. Denne utsikten viser relasjoner (tabeller og visninger) gruppert i databaseskjemaer. Merk at ephemeral modeller ikke vises i dette grensesnittet, da de ikke finnes i databasen.

"},{"location":"dokumentasjon/overview/#grafutforskning","title":"Grafutforskning","text":"

Du kan klikke p\u00e5 det bl\u00e5 ikonet nederst til h\u00f8yre p\u00e5 siden for \u00e5 se lineage til modellene dine.

P\u00e5 modellsidene vil du se de n\u00e6rmeste foreldrene og barna til modellen du utforsker. Ved \u00e5 klikke p\u00e5 Expand. knappen \u00f8verst til h\u00f8yre i denne avstamningsruten, vil du kunne se alle modellene som brukes til \u00e5 bygge, eller er bygget fra, modellen du utforsker.

N\u00e5r den er utvidet, vil du kunne bruke --select og --exclude modellvalgsyntaks for \u00e5 filtrere modeller i grafen. For mer informasjon om modellvalg, sjekk ut dbt docs.

Merk at du ogs\u00e5 kan h\u00f8yreklikke p\u00e5 modeller for \u00e5 filtrere og utforske grafen interaktivt.

"},{"location":"dokumentasjon/overview/#mer-info","title":"Mer info","text":"

{% enddocs %}

"},{"location":"feilsoking/feilsoking/","title":"Feils\u00f8king","text":"

Samleside for vanlige feilsistuasjoner som kan oppst\u00e5 med dbt og Oracle i NAV

"},{"location":"feilsoking/feilsoking/#incremental","title":"Incremental","text":""},{"location":"feilsoking/feilsoking/#ora-00955-det-finnes-allerede-et-objekt-med-det-navnet","title":"ORA-00955: det finnes allerede et objekt med det navnet","text":"

???

"},{"location":"feilsoking/feilsoking/#ora-00904-kolonne-invalid-identifier","title":"ORA-00904: \"KOLONNE\": invalid identifier","text":"

Dersom persist_docs er aktivert i dbt_project.yml, ta en titt p\u00e5 siden om Dokumentasjon.

"},{"location":"feilsoking/feilsoking/#kobling-mot-oracle-database","title":"Kobling mot oracle database","text":""},{"location":"feilsoking/feilsoking/#dpy-2029-https_proxy-requires-use-of-the-tcps-protocol","title":"DPY-2029: https_proxy requires use of the tcps protocol","text":"

Bytte fra thin mode til cx mode. I outputen du f\u00e5r i terminalen, sjekk hvilken mode du kj\u00f8rer i. Kj\u00f8rer du i thin mode endr det til cx mode. Dette gj\u00f8res ved \u00e5 bruke Oracle Instant Client. Sett path til Oracle Instant Client i milj\u00f8veriabler og slett ORA_PYTHON_DRIVER_TYPE=thin fra milj\u00f8variabler.

"},{"location":"prosjekter/","title":"Prosjekter","text":"

Her finner du en oversikt over noen dbt-prosjekter. Dokumentasjon for produkter finner du p\u00e5 DBT Docs by nada

"},{"location":"prosjekter/bomlo-dbt/","title":"bomlo-dbt","text":"

Eies av PO Helse

"},{"location":"prosjekter/bomlo-dbt/#formal","title":"Form\u00e5l","text":"

DBT-prosjekt for Team B\u00f8mlo.

"},{"location":"prosjekter/bomlo-dbt/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #team-b\u00f8mlo-v\u00e6rs\u00e5god

"},{"location":"prosjekter/dvh-sykefravar-dmx/","title":"dvh-sykefravar-dmx","text":"

Eies av Team Sykefrav\u00e6r

"},{"location":"prosjekter/dvh-sykefravar-dmx/#formal","title":"Form\u00e5l","text":"

Analysetorg brukt til syfo (sykefrav\u00e6rsoppfoling)

"},{"location":"prosjekter/dvh-sykefravar-dmx/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-team-sykefrav\u00e6r

"},{"location":"prosjekter/dvh_arb_cv/","title":"dvh_arb_cv","text":"

Eies av A-Team

"},{"location":"prosjekter/dvh_arb_cv/#formal","title":"Form\u00e5l","text":"

Siste versjon av CV-elementer og jobb\u00f8nsker per person registrert arbeidss\u00f8ker NAV.

"},{"location":"prosjekter/dvh_arb_cv/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-a-team

"},{"location":"prosjekter/dvh_arb_permittering/","title":"dvh_arb_permittering","text":"

Eies av A-Team

"},{"location":"prosjekter/dvh_arb_permittering/#formal","title":"Form\u00e5l","text":"

NAV har behov for \u00e5 samle statistikk for oversikt over permitterte arbeidss\u00f8kere og forh\u00e5ndsmelding om permittering og masseoppsigelser.

Arbeidsgivere som vurderer \u00e5 g\u00e5 til masseoppsigelser eller permitteringer, gir melding om dette til NAV. Fra 2020 blir disse meldingene sendt inn elektronisk til NAV, og registreres i l\u00f8sningen Permittering.

Dekker i f\u00f8rste omgang forh\u00e5ndsmelding om permittering, dvs n\u00e5r virksomheter permittere over 10 personer s\u00e5 skal de melde til NAV p\u00e5 forh\u00e5nd.

"},{"location":"prosjekter/dvh_arb_permittering/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-a-team

"},{"location":"prosjekter/dvh_arb_person/","title":"dvh_arb_person","text":"

Eies av A-Team

"},{"location":"prosjekter/dvh_arb_person/#formal","title":"Form\u00e5l","text":"

Arbeidsmakedsstatistikken.

"},{"location":"prosjekter/dvh_arb_person/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-a-team

"},{"location":"prosjekter/dvh_arb_styrke_ssb/","title":"dvh_arb_styrke_ssb","text":"

Eies av A-Team

"},{"location":"prosjekter/dvh_arb_styrke_ssb/#formal","title":"Form\u00e5l","text":"

Komponenten leser data inn fra SSB i to forskjellige l\u00f8p:

"},{"location":"prosjekter/dvh_arb_styrke_ssb/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-a-team

"},{"location":"prosjekter/dvh_arb_tiltak/","title":"dvh_arb_tiltak","text":"

Eies av Team Oppf\u00f8lging Eies av Team Oppf\u00f8lging)

"},{"location":"prosjekter/dvh_arb_tiltak/#formal","title":"Form\u00e5l","text":"

Brukes i Tiltaks- og oppf\u00f8lgingsstatistikken.

"},{"location":"prosjekter/dvh_arb_tiltak/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #dv-oppf\u00f8lging

"},{"location":"prosjekter/nystol/vdl-regnskapsdata/","title":"vdl-regnskapsdata","text":"

Eies av Team-VDL

"},{"location":"prosjekter/nystol/vdl-regnskapsdata/#formal","title":"Form\u00e5l","text":"

Analysedata av hovedbok

"},{"location":"prosjekter/nystol/vdl-regnskapsdata/#dokumentasjon","title":"Dokumentasjon","text":"

slack: #virksomhetsdatalaget

"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 7d091eb..2e5caf1 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,106 +2,110 @@ https://navikt.github.io/dbt-i-nav/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/Installasjon-p%C3%A5-VDI/dbt-power-user/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/Installasjon-p%C3%A5-VDI/dbt/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/Installasjon-p%C3%A5-VDI/git/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/Installasjon-p%C3%A5-VDI/installere/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/Installasjon-p%C3%A5-VDI/miljovariabler/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/Installasjon-p%C3%A5-VDI/oracle-client-library/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/Installasjon-p%C3%A5-VDI/pip-og-oppsett/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/Installasjon-p%C3%A5-VDI/python/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/Installasjon-p%C3%A5-VDI/sqlfluff/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/Installasjon-p%C3%A5-VDI/vscode/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/arkitektur/materialisering/ - 2024-10-09 + 2024-10-15 + + + https://navikt.github.io/dbt-i-nav/arkitektur/materialisering_spenn/ + 2024-10-15 https://navikt.github.io/dbt-i-nav/arkitektur/style_guide/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/dokumentasjon/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/dokumentasjon/dokumentasjon/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/dokumentasjon/overview/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/feilsoking/feilsoking/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/prosjekter/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/prosjekter/bomlo-dbt/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/prosjekter/dvh-sykefravar-dmx/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/prosjekter/dvh_arb_cv/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/prosjekter/dvh_arb_permittering/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/prosjekter/dvh_arb_person/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/prosjekter/dvh_arb_styrke_ssb/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/prosjekter/dvh_arb_tiltak/ - 2024-10-09 + 2024-10-15 https://navikt.github.io/dbt-i-nav/prosjekter/nystol/vdl-regnskapsdata/ - 2024-10-09 + 2024-10-15 \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 18b8c1a..546290c 100644 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ