DBT¶
Oppsett av dbt prosjekter¶
Vi har laget et ferdig oppsett av et dbt prosjekt tilpasset NAV dvh. Enten lag et nytt repo basert på dvh_template. Deretter må dbt_template kopieres inn for å få integrert dbt prosjektet.
Resten av denne siden omhandler manuelt oppsett av dbt-oracle uten virteul. Følg denne guiden hvis du ikke ønsker automatisk oppsett i Visual Studio Code.
Oppsett av sertifikater til pip¶
Til vanlig bruker pip sitt eget sertifikat for å validere at vi laster ned
pakker fra riktig server. Siden VDI bruker en webproxy for å
kommunisere med omverdenen vill vi få en feilmeling ved pip install xxx
.
Error
13:42:24 Encountered an error: External connection exception occurred:
HTTPSConnectionPool(host='hub.getdbt.com', port=443): Max retries exceeded
with url: /api/v1/index.json (Caused by SSLError(SSLCertVerificationError(1,
'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get
local issuer certificate (_ssl.c:1108)')))
For å fikse feilen kan vi installere pakkene setuptools-scm
og pip-system-certs
som får
pip til å bruke Windows Certificate Store istedenfor.
pip install setuptools-scm pip-system-certs --trusted-host pypi.org --trusted-host files.pythonhosted.org
Det finnes en offisiell oracle adapter for dbt v1.x. Gjerne start med å ta en titt på denne installasjonsguiden først.
Installasjon¶
dbt kan installeres sammen med oracle adapteren med kommandoen:
pip install dbt-oracle
Nedlasting feiler
$ pip install dbt-oracle
WARNING: 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/
...
Could 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)')))
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:
...
Building wheels for collected packages: cx-Oracle
Building wheel for cx-Oracle (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for cx-Oracle (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [8 lines of output]
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
warnings.warn(f"File {path!r} cannot be found")
pip_system_certs: ERROR: could not register module: No module named 'wrapt'
running bdist_wheel
running build
running build_ext
building 'cx_Oracle' extension
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/
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for cx-Oracle
Failed to build cx-Oracle
ERROR: Could not build wheels for cx-Oracle, which is required to install pyproject.toml-based projects
...
Opprette nytt dbt prosjekt for Oracle fra scratc¶
Hvis du ikke ønsker å ta i bruk standardprosjektet, men heller kjøre dbt init
er det noen ting som kan skape uforståelige feilmeldinger:
Quoting¶
Quoting av databasenavn må aktiveres i dbt_project.yml
siden databasenenavnene til dvh-databasene er med små bokstaver (eks. dwhu1). Hvis ikke dette gjøres kommer det feilmeling som sier noe slikt som approximate match
For å skru på quoting må
følgende settes i dbt_project.yml
:
quoting:
database: true
Hemmeligheter ved kjøring fra utviklerimage¶
Av sikkerhetshensyn anbefaler vi og oracle å bruke miljøvariabler for å holde på 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å toppnivå i dbt-prosjektmappen, eksempel navikt/dvh_template/dbt/profiles.yml
Merk at navn på profil er profilnavnet det henvises til i dbt_project.yml
<navn på profil>:
target: "{{env_var('DBT_DB_TARGET')}}"
...
Når profilen er på plass i prosjektmappen kan du teste at dbt fungerer.
Teste dbt installasjonen¶
Etter at dbt er på plass kan du verifisere at dbt fungerer ved å kjøre .\setup_db_user.ps1
etterfulgt av dbt debug
fra prosjektmappen. Er det et nytt prosjekt må du
opprette profiles.yml først.
.\setup_db_user.ps1
må kjøres hver gang en starter en ny terminal eller
ønsker å bytte target (db). Scriptet vill midlertidlig opprette miljøvariablene
i terminal-sesjonen for target, brukernavn, passord, schema og peke dbt mot
profiles.yml i prosjektmappen.
Success
$ .\setup_db_user.ps1
Target db: U <eventuelt Q,R eller P>
Schema:
cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
Credential
$ dbt debug
09:15:08 Running with dbt=1.1.1
dbt version: 1.1.1
python version: 3.8.10
python path: c:\users\****\appdata\local\programs\python\python38\python.exe
os info: Windows-10-10.0.19044-SP0
Using profiles.yml file at C:\Users\****\git\dvh-sykefravar-dmx\profiles.yml
Using dbt_project.yml file at C:\Users\****\git\dvh-sykefravar-dmx\dbt_project.yml
09:15:08 oracle adapter: Running in cx mode
Configuration:
profiles.yml file [OK found and valid]
dbt_project.yml file [OK found and valid]
Required dependencies:
- git [OK found]
Connection:
user: ****
database: dwhu1
schema: ****
protocol: tcp
host: dm07-scan.adeo.no
port: 1521
tns_name: None
service: dwhu1
connection_string: None
shardingkey: []
supershardingkey: []
cclass: None
purity: None
Connection test: [OK connection ok]
All checks passed!
DBT er nå klart til bruk.
Error
Connection test: [ERROR]
2 checks failed:
Error 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"
dbt was unable to connect to the specified database.
The database returned the following error:
>Database Error
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
Check your database credentials and try again. For more information, visit:
https://docs.getdbt.com/docs/configure-your-profile
Oracle client library er mest sannsynlig ikke installert.