# 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 ``` uudpak_semistruktur/ ├── udpak_semistruktur/ # Python-pakken │ ├── extract/ # Filindlæsning og JSON/XML-traversering │ │ ├── reader.py # Filindlæsning, type- og encoding-detektion │ │ ├── traversal.py # Rekursiv stibaseret navigation i JSON/XML │ │ └── extractor.py # Udtræk af rækker baseret på YAML-konfiguration │ ├── transform/ # Datatransformation │ │ ├── convert.py # Typekonvertering (dato, tal, boolean m.m.) │ │ ├── clean.py # Rensning, linjeskift, tag-stripping, case, filnavn │ │ ├── reshape.py # Flatten, join, where-filter, id-felt, sammensat nøgle │ │ └── hash.py # Hash-beregning af kolonneværdier │ ├── load/ # Skrivning til fil og database │ │ ├── file_writer.py # CSV/TSV-skrivning med retry ved låste filer │ │ └── db_writer.py # Sybase ASE insert via ODBC │ ├── config.py # YAML-indlæsning, validering og expansion │ ├── db.py # Credentials fra pwd.json │ ├── ddl.py # DDL-generering og flyt-scripts til Sybase ASE │ ├── logger.py # Central logging med konfigurerbart logniveau │ └── 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 python udpak_semistruktur.py --config min_config.yaml --DDL python udpak_semistruktur.py --config min_config.yaml --DDL --tmp python udpak_semistruktur.py --config min_config.yaml --DDL --flyt python udpak_semistruktur.py --config min_config.yaml --DDL --flyt_kort ``` ### Vigtigste flag | Flag | Beskrivelse | |---|---| | `--config` | Sti til YAML-konfigurationsfil | | `--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).