From d83ca7ce31057fd39c5432178a09cd1932a80fd9 Mon Sep 17 00:00:00 2001 From: <> Date: Mon, 18 Dec 2023 14:44:34 +0000 Subject: [PATCH] Deployed 71de538 with MkDocs version: 1.5.3 --- .../vscode/index.html" | 20 +++++++++++------- search/search_index.json | 2 +- sitemap.xml.gz | Bin 455 -> 455 bytes 3 files changed, 13 insertions(+), 9 deletions(-) diff --git "a/Installasjon-p\303\245-VDI/vscode/index.html" "b/Installasjon-p\303\245-VDI/vscode/index.html" index dea075c..7670e97 100644 --- "a/Installasjon-p\303\245-VDI/vscode/index.html" +++ "b/Installasjon-p\303\245-VDI/vscode/index.html" @@ -1331,18 +1331,22 @@
https://github.com/AltimateAI/vscode-dbt-power-user
-dbt Power User gir oss en rekke nyttige verktøy, som f.eks.: -- Auto-complete dbt code -- SQL validator -- Column lineage -- Preview query results
+dbt Power User gir oss en rekke nyttige verktøy, som f.eks.:
+Installeres via VS Code Marketplace, følg installasjonsrutinene til Altimate: https://docs.myaltimate.com/
+Installeres via VS Code Marketplace, følg installasjonsrutinene til Altimate
Utover standardinstallasjon må følgende hensyn tas for bruk på VDI Utvikler og mot Oracle DVH:
NB! dbt Power User krever at man setter opp miljøvariabler med credentials via PowerShell, før VS Code startes opp i samme PowerShell-sesjon. (Espen jobber med et PowerShell script som skal gjøre denne operasjonen enklere)
-Preview query-template må endres til: select * from ({query})\n where ROWNUM <= {limit}
, ref. https://docs.myaltimate.com/setup/optConfig/#dbtquerytemplate-for-oracle
Preview query-template må endres til: select * from ({query})\n where ROWNUM <= {limit}
, ref. #dbtquerytemplate-for-oracle
from google.cloud import secretmanager
, vil gi feil i VDI Utvikler. Begrens initielle imports til grunnleggende behov.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/","title":"DBT","text":"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","title":"Opprette nytt dbt prosjekt for Oracle","text":"Oppsettet av nytt prosjekt er forenklet og tilpasset datavarehus. Det er laget eksempelprosjekt i repo dvh_template for bruk av dbt til komponentskjemaer. dbt prosjektet ligger i en egen branch dbt_template.
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:
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":"C:\\Users\\<brukernavn>\\AppData\\Local\\GitHubDesktop\\bin
For \u00e5 installere dbt m\u00e5 du ha f\u00f8lgende installert:
For en god utvikleropplevelse anbefaler vi deg \u00e5 ha f\u00f8lgende installert:
milj\u00f8variabler
Rediger milj\u00f8bariabler for kontoen din
Ny...
Variabelnavn
.Variabelverdi
OK
Path
variabelenRediger...
Ny
%<variabelnavn>%
eks: %PIP%
OK
OK
Note
Husk at du m\u00e5 lukke cmd
(ledetekst) og \u00e5pne p\u00e5 nytt for at endringen skal tre i kraft.
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 oppsett av python med dbt","text":"Vi har laget et ferdig oppsett av et dbt prosjekt tilpasset NAV dvh. Enten lag et nytt repo basert p\u00e5 dvh_template eller amd_template avhengig av preferanse for komponentoppsett p\u00e5 github. Deretter m\u00e5 dbt_template merges inn for \u00e5 f\u00e5 integrert dbt prosjektet.
F\u00f8lgende script (ogs\u00e5 p\u00e5 github) installerer et virtuelt python milj\u00f8 kun for dette prosjektet.
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 \"Sett opp config fil for pip\"
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\\python38\\lib\\site-packages (58.1.0)\nRequirement already satisfied: pip in c:\\users\\****\\appdata\\local\\programs\\python\\python38\\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\\python38\\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
.
Note
Dette steget skjer automatisk under kj\u00f8ring av setup_python_env.ps1 og er ikke lenger n\u00f8dvendig.
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
"},{"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.10.x og installer ved \u00e5 f\u00f8lge installsjonsveiviseren.
py --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":"Installasjon-p%C3%A5-VDI/vscode/#dbt-power-user","title":"dbt Power User","text":"https://github.com/AltimateAI/vscode-dbt-power-user
dbt Power User gir oss en rekke nyttige verkt\u00f8y, som f.eks.: - Auto-complete dbt code - SQL validator - Column lineage - Preview query results
"},{"location":"Installasjon-p%C3%A5-VDI/vscode/#installasjon-og-oppsett","title":"Installasjon og oppsett","text":"Installeres via VS Code Marketplace, f\u00f8lg installasjonsrutinene til Altimate: https://docs.myaltimate.com/
Utover standardinstallasjon m\u00e5 f\u00f8lgende hensyn tas for bruk p\u00e5 VDI Utvikler og mot Oracle DVH:
NB! dbt Power User krever at man setter opp milj\u00f8variabler med credentials via PowerShell, f\u00f8r VS Code startes opp i samme PowerShell-sesjon. (Espen jobber med et PowerShell script som skal gj\u00f8re denne operasjonen enklere)
Preview query-template m\u00e5 endres til: select * from ({query})\\n where ROWNUM <= {limit}
, ref. https://docs.myaltimate.com/setup/optConfig/#dbtquerytemplate-for-oracle
from google.cloud import secretmanager
, vil gi feil i VDI Utvikler. Begrens initielle imports til grunnleggende behov.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":"dbt_project.yml
.{{\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":"stg_
og base_
sp\u00f8r mot source
er.ref
andre modeller..yml
fil som tester alle modeller i folderen. Navnestandarden skal v\u00e6re <folder-navn>.yml
. unique
og not_null
v\u00e6re testet p\u00e5 prim\u00e6r n\u00f8kkelersnake_case
.pk_<objekt>
, alts\u00e5 pk_dim_person
. fk_<objekt>
, tidsl\u00f8se enhets n\u00f8kkeler angis som ek_<objekt>
og naturlige n\u00f8kkeler angis som lk_<objekt>
. <hendelse>_ts
, e.g. lastet_ts
, og skal v\u00e6re p\u00e5 UTC. for avvikende tidszoner skal tidzonen indikeres ved suffiks, e.g lastet_ts_pt
.er_
eller har_
og uttrykkes med 1 for Ja
og 0 for Nei
._nok
for, flyttalls, bel\u00f8p i kroner, og _orer
for heltall bel\u00f8p i \u00f8rer.ae
, o
og a
.dim_person
skal v\u00e6re pk_dim_person
og ikke pk_bruker
.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.
{{ ref('...') }}
settning skal plasseres i en egen CTE, ved toppen av fila. with\n\nhendelser_vask as (\n\n -- Kommentarer\n -- mer kommentarer\n ...\n)\n
),endelig
CTE som selekterer hele det endelig produktet f\u00f8r modelen avslutted SELECT * FROM endelig
. 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":"WHERE
SELECT
, WHERE
, LEAD
, etc.) med STORE. AS
for \u00e5 aliase tabeller og felt. ORDER BY
og GROUP BY
skal v\u00e6r angitt med nummer i stedet for kolonne navn (se f\u00f8lgende for why). Gruppering b\u00f8r gj\u00f8res p\u00e5 kun noen f\u00e5 kolonne verdier. UNION ALL
fremfor UNION
*JOIN
criterer. Det er ofte vanskelig \u00e5 forst\u00e5 hvor tabellen \"c\" kommer fra.INNER JOIN
instead of JOIN
). Bruk LEFT JOIN
fremfor RIGHT JOIN
Ikke optimaliserer for f\u00e5 linjer kode. Nye linjer er billig, hjerner er dyre
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
LEFT JOIN
fremfor RIGHT JOIN
: SELECT\n reiser.*,\n sjaforer.rating AS driver_rating,\n passasjerer.rating AS rider_rating\n\nFROM resier\nLEFT JOIN personer AS sjaforer\n ON reiser.fk_personer_sjaforer = sjaforer.pk_personer\nLEFT JOIN personer AS passasjerer\n ON reiser.fk_personer_passasjerer = sjaforer.pk_personer\n
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":"{{ slik }}
istedefor {{slik}}
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.
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
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
dbt docs generate
index.hml
, catalog.json
og manifest.json
fra target mappen til docs mappen.{% 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":"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.
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.
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.
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.
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/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:
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/","title":"DBT","text":"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","title":"Opprette nytt dbt prosjekt for Oracle","text":"Oppsettet av nytt prosjekt er forenklet og tilpasset datavarehus. Det er laget eksempelprosjekt i repo dvh_template for bruk av dbt til komponentskjemaer. dbt prosjektet ligger i en egen branch dbt_template.
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:
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":"C:\\Users\\<brukernavn>\\AppData\\Local\\GitHubDesktop\\bin
For \u00e5 installere dbt m\u00e5 du ha f\u00f8lgende installert:
For en god utvikleropplevelse anbefaler vi deg \u00e5 ha f\u00f8lgende installert:
milj\u00f8variabler
Rediger milj\u00f8bariabler for kontoen din
Ny...
Variabelnavn
.Variabelverdi
OK
Path
variabelenRediger...
Ny
%<variabelnavn>%
eks: %PIP%
OK
OK
Note
Husk at du m\u00e5 lukke cmd
(ledetekst) og \u00e5pne p\u00e5 nytt for at endringen skal tre i kraft.
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 oppsett av python med dbt","text":"Vi har laget et ferdig oppsett av et dbt prosjekt tilpasset NAV dvh. Enten lag et nytt repo basert p\u00e5 dvh_template eller amd_template avhengig av preferanse for komponentoppsett p\u00e5 github. Deretter m\u00e5 dbt_template merges inn for \u00e5 f\u00e5 integrert dbt prosjektet.
F\u00f8lgende script (ogs\u00e5 p\u00e5 github) installerer et virtuelt python milj\u00f8 kun for dette prosjektet.
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 \"Sett opp config fil for pip\"
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\\python38\\lib\\site-packages (58.1.0)\nRequirement already satisfied: pip in c:\\users\\****\\appdata\\local\\programs\\python\\python38\\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\\python38\\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
.
Note
Dette steget skjer automatisk under kj\u00f8ring av setup_python_env.ps1 og er ikke lenger n\u00f8dvendig.
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
"},{"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.10.x og installer ved \u00e5 f\u00f8lge installsjonsveiviseren.
py --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":"Installasjon-p%C3%A5-VDI/vscode/#dbt-power-user","title":"dbt Power User","text":"dbt Power User gir oss en rekke nyttige verkt\u00f8y, som f.eks.:
dbt Power User p\u00e5 GitHub
"},{"location":"Installasjon-p%C3%A5-VDI/vscode/#installasjon-og-oppsett","title":"Installasjon og oppsett","text":"Installeres via VS Code Marketplace, f\u00f8lg installasjonsrutinene til Altimate
Utover standardinstallasjon m\u00e5 f\u00f8lgende hensyn tas for bruk p\u00e5 VDI Utvikler og mot Oracle DVH:
NB! dbt Power User krever at man setter opp milj\u00f8variabler med credentials via PowerShell, f\u00f8r VS Code startes opp i samme PowerShell-sesjon. (Espen jobber med et PowerShell script som skal gj\u00f8re denne operasjonen enklere)
Preview query-template m\u00e5 endres til: select * from ({query})\\n where ROWNUM <= {limit}
, ref. #dbtquerytemplate-for-oracle
from google.cloud import secretmanager
, vil gi feil i VDI Utvikler. Begrens initielle imports til grunnleggende behov.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":"dbt_project.yml
.{{\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":"stg_
og base_
sp\u00f8r mot source
er.ref
andre modeller..yml
fil som tester alle modeller i folderen. Navnestandarden skal v\u00e6re <folder-navn>.yml
. unique
og not_null
v\u00e6re testet p\u00e5 prim\u00e6r n\u00f8kkelersnake_case
.pk_<objekt>
, alts\u00e5 pk_dim_person
. fk_<objekt>
, tidsl\u00f8se enhets n\u00f8kkeler angis som ek_<objekt>
og naturlige n\u00f8kkeler angis som lk_<objekt>
. <hendelse>_ts
, e.g. lastet_ts
, og skal v\u00e6re p\u00e5 UTC. for avvikende tidszoner skal tidzonen indikeres ved suffiks, e.g lastet_ts_pt
.er_
eller har_
og uttrykkes med 1 for Ja
og 0 for Nei
._nok
for, flyttalls, bel\u00f8p i kroner, og _orer
for heltall bel\u00f8p i \u00f8rer.ae
, o
og a
.dim_person
skal v\u00e6re pk_dim_person
og ikke pk_bruker
.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.
{{ ref('...') }}
settning skal plasseres i en egen CTE, ved toppen av fila. with\n\nhendelser_vask as (\n\n -- Kommentarer\n -- mer kommentarer\n ...\n)\n
),endelig
CTE som selekterer hele det endelig produktet f\u00f8r modelen avslutted SELECT * FROM endelig
. 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":"WHERE
SELECT
, WHERE
, LEAD
, etc.) med STORE. AS
for \u00e5 aliase tabeller og felt. ORDER BY
og GROUP BY
skal v\u00e6r angitt med nummer i stedet for kolonne navn (se f\u00f8lgende for why). Gruppering b\u00f8r gj\u00f8res p\u00e5 kun noen f\u00e5 kolonne verdier. UNION ALL
fremfor UNION
*JOIN
criterer. Det er ofte vanskelig \u00e5 forst\u00e5 hvor tabellen \"c\" kommer fra.INNER JOIN
instead of JOIN
). Bruk LEFT JOIN
fremfor RIGHT JOIN
Ikke optimaliserer for f\u00e5 linjer kode. Nye linjer er billig, hjerner er dyre
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
LEFT JOIN
fremfor RIGHT JOIN
: SELECT\n reiser.*,\n sjaforer.rating AS driver_rating,\n passasjerer.rating AS rider_rating\n\nFROM resier\nLEFT JOIN personer AS sjaforer\n ON reiser.fk_personer_sjaforer = sjaforer.pk_personer\nLEFT JOIN personer AS passasjerer\n ON reiser.fk_personer_passasjerer = sjaforer.pk_personer\n
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":"{{ slik }}
istedefor {{slik}}
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.
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
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
dbt docs generate
index.hml
, catalog.json
og manifest.json
fra target mappen til docs mappen.{% 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":"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.
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.
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.
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.
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/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:
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.gz b/sitemap.xml.gz index 46f35da8801062cc3222b481a8185564373daa36..54092fcbcd78ed578e00900548faf043628c83b6 100644 GIT binary patch delta 15 WcmX@ke4Lq0zMF&NQq)GagNy(t`vm#` delta 15 WcmX@ke4Lq0zMF%?#BU?pK}G;13j|OA