Bygger PX-filer og Saved Query-filer fra metadata og datagrunnlag.
Prosjektet leser metadata og tabellfiler, og produserer:
- PX-filer (
.px) - Saved Query-filer (
.sqaog.sqs) - Produksjonslogg (
log/production_log.jsonl)
Kjøringen er inkrementell: hvis input ikke har endret seg siden forrige kjøring, hopper den over unødvendig bygging.
run.pykallerpxpyfactory.__main__.go().PXMain.mainprep()leser argumenter, gjør eventuellclean, sjekker endringer og forbereder metadata.- For hvert dataprodukt bygges PX-innhold og filer skrives.
- Saved Query-filer genereres.
- Produksjonslogg skrives, og deploy kan trigges.
pxpyfactory/file_io.py delegerer all IO til valgt backend.
I lokal modus brukes mapper i repo:
input_bucket/for inputoutput_bucket/for output
Stier som starter med px/ eller sq/ skrives i output_bucket/. Andre stier leses fra input_bucket/.
I GCS-modus brukes bucket-navn fra config:
pxpyfactory.config.gcs.BUCKET_INPUTpxpyfactory.config.gcs.BUCKET_OUTPUT
Samme sti-logikk gjelder her: px/ og sq/ rutes til output, resten til input.
Bytt import i pxpyfactory/file_io.py:
Lokal:
# import pxpyfactory.file_io_gcs as _backend
import pxpyfactory.file_io_local as _backendGCS:
import pxpyfactory.file_io_gcs as _backend
# import pxpyfactory.file_io_local as _backend- Lokal modus:
input_bucket/common_meta.xlsxinput_bucket/stats/*.csv(tabellfiler)input_bucket/stats/*_meta.csv(tabellspesifikk metadata)
- GCS-modus:
<input-bucket>/common_meta.xlsx<input-bucket>/stats/*.csv<input-bucket>/stats/*_meta.csv
Valg av DATA, STUB, HEADING og TIMEVAL hentes nå primært fra tabellspesifikk metadata i *_meta.csv (ikke fra kolonnefeltene i Excel-arket for dataprodukter).
I *_meta.csv brukes rader med TYPE=CS og kolonnene:
KEYWORD(DATA,STUB,HEADING,TIMEVAL)VALUE(kommaseparert liste)
Eksempel:
TYPE,KEYWORD,VALUE
CS,DATA,"ANTALL#0#personer,PROSENT#1#%"
CS,STUB,KJONN
CS,HEADING,"ALDER,TID"
CS,TIMEVAL,TIDFormat for DATA-verdi:
- Del 1: kolonnenavn
- Del 2 (valgfri): precision
- Del 3 (valgfri): unit
Delimiter er #, altså KOLONNE#PRECISION#UNIT.
Eksempel:
ANTALL#0#personergir:data_list:ANTALLdata_precision_list:0data_units_list:personer
Fallback-regler:
- Hvis
DATAmangler iCS, velges datakolonne(r) automatisk basert på antall unike verdier. - Hvis
STUBmangler iCS, velges første tilgjengelige ikke-data-kolonne. - Hvis
HEADINGmangler iCS, brukes resterende kolonner somHEADING. - Hvis antall precision/enheter ikke matcher antall data-kolonner, fylles resterende med
None.
Eksempler under er for PowerShell på Windows.
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txtHvis du kjører i GCS-modus må du i tillegg autentisere mot Google Cloud (ADC), for eksempel:
gcloud auth login --update-adcpython run.pyArgumenter leses som key=value eller flagg uten verdi.
python run.py build=all print=1python run.py build=agg_bt_px_mottaker_fylke no_deploy print=2python run.py clean build=allpython run.py test build=all print=3python run.py deploy environment=dev branch=mainbuild=all: bygg alle tabellerbuild=<TABLEID eller TABLEID_RAW>: bygg kun én tabellclean: slett innhold i output/sq før byggtest: skriv resultat til konsoll i stedet for å skrive filertest_full: somtest, men skriver hele filinnholdprint=<nivå>: loggnivå (høyere tall gir mer logging)no_deploy: hopp over deploy selv om filer er byggetdeploy: tving deployenvironment=<navn>: deploy-miljøbranch=<navn>: branch for deploy
Deploy bruker GitHub Actions dispatch og krever miljøvariabel:
GITHUB_TOKEN_PX
Denne kan settes i miljøet eller i .env.
- Bruk
print=2ellerprint=3ved feilsøking. - Bruk
build=<tableid>for rask iterasjon på én tabell. - Bruk
testellertest_fullnår du vil validere output uten å skrive filer. - Start i lokal modus når du utvikler, og bytt til GCS-modus når du vil kjøre mot bucket-data.