Init
This commit is contained in:
10
udpak_semistruktur/.env.example
Normal file
10
udpak_semistruktur/.env.example
Normal 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
34
udpak_semistruktur/.gitignore
vendored
Normal 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
|
||||||
89
udpak_semistruktur/README.md
Normal file
89
udpak_semistruktur/README.md
Normal 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).
|
||||||
16
udpak_semistruktur/requirements.txt
Normal file
16
udpak_semistruktur/requirements.txt
Normal 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
|
||||||
0
udpak_semistruktur/tests/__init__.py
Normal file
0
udpak_semistruktur/tests/__init__.py
Normal file
0
udpak_semistruktur/udpak_semistruktur.py
Normal file
0
udpak_semistruktur/udpak_semistruktur.py
Normal file
0
udpak_semistruktur/udpak_semistruktur/__init__.py
Normal file
0
udpak_semistruktur/udpak_semistruktur/__init__.py
Normal file
0
udpak_semistruktur/udpak_semistruktur/config.py
Normal file
0
udpak_semistruktur/udpak_semistruktur/config.py
Normal file
0
udpak_semistruktur/udpak_semistruktur/db.py
Normal file
0
udpak_semistruktur/udpak_semistruktur/db.py
Normal file
0
udpak_semistruktur/udpak_semistruktur/ddl.py
Normal file
0
udpak_semistruktur/udpak_semistruktur/ddl.py
Normal file
0
udpak_semistruktur/udpak_semistruktur/utils.py
Normal file
0
udpak_semistruktur/udpak_semistruktur/utils.py
Normal file
Reference in New Issue
Block a user