# 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).