This commit is contained in:
2026-04-02 13:12:25 +02:00
commit bbce45dbe5
21 changed files with 149 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
# Eksempel på miljøvariabler brugt af udpak_semistruktur.
# Kopiér denne fil til .env og udfyld værdierne.
# .env må ALDRIG committes til git.
# Rodmappe til PowerCenter/ETL-miljø (bruges til at finde credentials-fil)
PMROOTDIR=C:\path\to\pmroot
# Kørselsmiljø: prd, pre eller udv
# Bruges til at vælge den rette databaseforbindelse
# ETLENV=udv

34
udpak_semistruktur/.gitignore vendored Normal file
View File

@@ -0,0 +1,34 @@
# Python
__pycache__/
*.py[cod]
*.pyo
*.pyd
.Python
# Virtuelle miljøer
.venv/
venv/
env/
# PyInstaller output
build/
dist/
*.spec
# Miljøvariabler (må aldrig committes)
.env
# Logs og output
*.log
output/
*.csv
*.tsv
# IDE
.vscode/
.idea/
*.swp
# Windows
Thumbs.db
desktop.ini

View File

@@ -0,0 +1,89 @@
# udpak_semistruktur
ETL-værktøj til udtræk og transformation af semistrukturerede data (JSON og XML) til flade filer og Sybase ASE-tabeller.
## Funktionalitet
- Læser JSON- og XML-filer med automatisk encoding-detektion
- Konfigurationsstyret udtræk via YAML
- Datatransformation: typekonvertering, datohåndtering, rensning, tag-stripping m.m.
- Output til flad fil (CSV/TSV) og/eller Sybase ASE via ODBC
- DDL-generering (CREATE TABLE) til Sybase ASE
- Generering af flyt-scripts (DELETE + INSERT) til tmp → base tabelflytning
- Kompileres til Windows-eksekverbar via PyInstaller
## Projektstruktur
```
udpak_semistruktur/
├── udpak_semistruktur/ # Python-pakken
│ ├── extract/ # Filindlæsning og JSON/XML-traversering
│ │ ├── reader.py # Filindlæsning, type- og encoding-detektion
│ │ └── traversal.py # Rekursiv stibaseret udtræk
│ ├── transform/ # Datatransformation
│ │ ├── convert.py # Typekonvertering (dato, tal, boolean m.m.)
│ │ ├── clean.py # Rensning, linjeskift, tag-stripping, case
│ │ └── reshape.py # Flatten, join, where-filter, id-felt
│ ├── load/ # Skrivning til fil og database
│ │ ├── file_writer.py # CSV/TSV-skrivning med retry
│ │ └── db_writer.py # Sybase ASE insert via ODBC
│ ├── config.py # YAML-konfigurationshåndtering og -validering
│ ├── db.py # Databaseforbindelse og credentials
│ ├── ddl.py # DDL-generering og flyt-scripts til Sybase ASE
│ └── utils.py # Fælles hjælpefunktioner
├── tests/ # Unit tests
├── udpak_semistruktur.py # CLI entry point
├── requirements.txt
└── README.md
```
## Krav
- Python (seneste stabile version anbefales)
- Sybase ASE ODBC-driver installeret på målmaskinen (kan ikke bundtes med PyInstaller)
## Installation (udvikling)
```bash
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt
```
## Brug
```bash
python udpak_semistruktur.py --config min_config.yaml --input data.json
python udpak_semistruktur.py --config min_config.yaml --input-liste filer.txt
python udpak_semistruktur.py --config min_config.yaml --input data.xml --DDL
python udpak_semistruktur.py --config min_config.yaml --input data.json --DDL --flyt
```
### Vigtigste flag
| Flag | Beskrivelse |
|---|---|
| `--config` | Sti til YAML-konfigurationsfil |
| `--input` | Sti til enkelt input-fil (JSON eller XML) |
| `--input-liste` | Sti til tekstfil med én input-fil per linje |
| `--DDL` | Generer CREATE TABLE DDL-filer |
| `--tmp` | Generer også `_tmp`-tabelvariant ved DDL |
| `--flyt` | Generer DELETE + INSERT flyt-scripts (fuld kolonteliste) |
| `--flyt_kort` | Generer DELETE + INSERT flyt-scripts (SELECT \*) |
## Kompilering med PyInstaller
```bash
pip install pyinstaller
pyinstaller --onefile udpak_semistruktur.py
```
Den kompilerede `.exe` lægges i `dist/`. Bemærk at Sybase ODBC-driveren skal være installeret separat på målmaskinen.
## Miljøvariabler
Se `.env.example` for en oversigt over anvendte miljøvariabler.
## YAML-konfiguration
Konfigurationen styrer hvilke felter der udtrækkes, hvordan de transformeres og hvor output skrives hen. Se eksempelkonfigurationer i `examples/` (oprettes løbende).

View File

@@ -0,0 +1,16 @@
# Filindlæsning og parsing
xmltodict
charset-normalizer
# HTML/XML tag-stripping
beautifulsoup4
lxml
# Databaseadgang (Sybase ASE via ODBC)
pyodbc
# YAML-konfiguration
pyyaml
# Kompilering til eksekverbar
pyinstaller

View File

View File