nlextract / NLExtract

Convert (ETL) and visualize free Dutch geo-datasets.
https://nlextract.nl
GNU General Public License v3.0
149 stars 84 forks source link

Omgevingsvariabelen gebruiken voor argumenten #348

Closed Robkromwijk closed 5 months ago

Robkromwijk commented 2 years ago

Wij gebruiken NLextract voor meerdere registraties (BAG, BGT, BRT). Per registratie is er eigen *.args betanden voor de input parameters, waardoor deze op meerdere plaatsen moeten worden bijgehouden. Onze voorkeur zou hebben om met omgevingsvariabelen te werken in onze OTAP-straat, zodat de paramterwaardes maar op 1 plek hoeft worden bijgehouden.

Daarvoor zouden de *.args bestanden deze omgevingsvariabelen moeten kunnen inlezen. Is dit al mogelijk? Zo ja, hoe werkt dit? Zo nee, dan een feature voor op de backlog wat mij betreft.

justb4 commented 2 years ago

Het gebruik van environment variabelen wordt al ondersteund. Althans heb dit zelf ooit in een Kubernetes project gebruikt met Stetl (basis ETL framework van NLExtract), zie bijv hier https://github.com/smartemission/kubernetes-se/tree/master/smartemission/cronjobs.

Het is een faciliteit van Stetl, ik meen zelfs dat e.e.a. gemixed kan worden, dus zowel uit environment als een .args bestand, er zijn wel conventies, om name-clashes te voorkomen:

Dit is een gebruikelijke conventie in de Docker wereld. Zie net dat dit ook netjes gedocumenteerd is: https://www.stetl.org/en/latest/using.html#reusable-stetl-configs

Robkromwijk commented 2 years ago

Hoewel ik niet gecharmeerd ben van het feit dat de omgevingsvariabelen moeten beginnen met stetl_, lost dit inderdaad wel mijn issue op.

Ik kies ervoor om stetl package te installeren en rechtstreeks aan te roepen. Op deze manier kan ik de nl-extract onaangepast laten, zodat bij een eventuele nieuwe versie ik geen aanpassingen binnen deze package hoef te doen

stetl -c $p_nlextract_dir/bgt/etl/conf/etl-imgeo-v2.1.1.cfg -a $p_nlextract_dir/bgt/etl/options/default.args -a host=$DB_HOST -a port=$DB_PORT -a database=$DB_NAME -a user=$DB_USER -a password=$DB_PASSWORD -a schema=$DB_SCHEMA -a input_dir=/Users/robkromwijk/git/basisstatistiek_bronnen/data/bgtnl/20220419 -a spatial_extent=

Robkromwijk commented 2 years ago

Helaas krijg ik nog wel foutmelding:

2022-04-20 10:34:32,043 util INFO Found lxml.etree, native XML parsing, fabulous! 2022-04-20 10:34:32,281 util INFO Found GDAL/OGR Python bindings, super!! 2022-04-20 10:34:32,295 main INFO Stetl version = 2.0 2022-04-20 10:34:32,303 main INFO Found args file at: /Users/robkromwijk/git/basisstatistiek_bronnen/syntax/bgtnl/../../src/nlextract-1.5.3/bgt/etl/options/default.args 2022-04-20 10:34:32,304 ETL INFO INIT - Stetl version is 2.0 2022-04-20 10:34:32,304 ETL INFO Config/working dir = /Users/robkromwijk/git/basisstatistiek_bronnen/src/nlextract-1.5.3/bgt/etl/conf 2022-04-20 10:34:32,304 ETL INFO Reading config_file = /Users/robkromwijk/git/basisstatistiek_bronnen/syntax/bgtnl/../../src/nlextract-1.5.3/bgt/etl/conf/etl-imgeo-v2.1.1.cfg 2022-04-20 10:34:32,305 ETL INFO Substituting 11 args in config file from args_dict: ['gfs_template', 'multi_opts', 'database', 'host', 'temp_dir', 'user', 'port', 'schema', 'password', 'spatial_extent', 'input_dir'] 2022-04-20 10:34:32,305 ETL INFO Substituting args OK 2022-04-20 10:34:32,306 ETL INFO START 2022-04-20 10:34:32,306 util INFO Timer start: total ETL 2022-04-20 10:34:32,306 chain INFO Assembling Chain: input_sql_pre|schema_name_filter|output_postgres... 2022-04-20 10:34:32,329 input INFO cfg = {'class': 'stetl.inputs.fileinput.StringFileInput', 'file_path': 'sql/create-schema.sql,sql/drop-tables-v2.1.1.sql,sql/drop-final-tables-v2.1.1.sql'} 2022-04-20 10:34:32,329 fileinput INFO file_list=[] 2022-04-20 10:34:32,329 factory ERROR cannot create object instance from class 'stetl.inputs.fileinput.StringFileInput' e=File list is empty!!

justb4 commented 2 years ago

Hoewel ik niet gecharmeerd ben van het feit dat de omgevingsvariabelen moeten beginnen met stetl_, lost dit inderdaad wel mijn issue op.

Dit is toch echt de conventie voor veel (Docker) componenten, zeker in een Kubernetes-omgeving. Anders gaan namen "clashen" bijv als een variable "HOST" heet o.i.d. veel voorbeelden bijv Grafana heeft GF_.

Ik kies ervoor om stetl package te installeren en rechtstreeks aan te roepen. Op deze manier kan ik de nl-extract onaangepast laten, zodat bij een eventuele nieuwe versie ik geen aanpassingen binnen deze package hoef te doen

Ik weet niet of dit verstandig is: de Stetl versie die met NLExtract meekomt als Git Submodule is verzekerd te werken met alle NLExtract processen.

stetl -c $p_nlextract_dir/bgt/etl/conf/etl-imgeo-v2.1.1.cfg -a $p_nlextract_dir/bgt/etl/options/default.args -a host=$DB_HOST -a port=$DB_PORT -a database=$DB_NAME -a user=$DB_USER -a password=$DB_PASSWORD -a schema=$DB_SCHEMA -a input_dir=/Users/robkromwijk/git/basisstatistiek_bronnen/data/bgtnl/20220419 -a spatial_extent=

Kan niet zien wat hier fout gaat, maar lijkt alsof the input bestanden niet worden gevonden.

Robkromwijk commented 2 years ago

Hi @justb4 , inderdaad kunnen de input bestanden niet gevonden worden. De relatieve paden in etl-imgeo-v2.1.1.cfg kunnen niet vinden, omdat stetl niet weet relatief vanaf welke map.

Om de meegeleverde stetl te draaien, moet ik toch onderstaande commando's gebruiken? Stetl lijkt niet gevonden, maar met "pip install stetl" wel. Daarnaast vormen de relatieve paden nog steeds het probleem voor een succesvolle run.

export STETL_HOME=$p_current_dir/../../src/nlextract-1.5.3/externals/stetl

python $STETL_HOME/stetl/main.py -c $p_nlextract_dir/bgt/etl/conf/etl-imgeo-v2.1.1.cfg -a $p_nlextract_dir/bgt/etl/options/default.args -a host=$BSK_DB_HOST -a port=$BSK_DB_PORT -a database=$BSK_DB_NAME -a user=$BSK_DB_USER -a password=$BSK_DB_PASSWORD -a schema=adhoc -a input_dir=/Users/robkromwijk/git/basisstatistiek_bronnen/data/bgtnl/20220419 -a spatial_extent=