Skip to main content

Stetl provides transformation for spatial data

Project description

# Stetl - Streaming ETL

Stetl, streaming ETL, pronounced "staedl", is a lightweight ETL-framework for the conversion of rich (as GML)
geospatial data conversion. Stetl is Open Source (GNU GPL v3).

## Documentation

The main website and documentation can be found on http://stetl.org (or http://stetl.readthedocs.org).
Read a 5-minute introduction here: http://www.slideshare.net/justb4/5-minute-intro-to-setl and a longer presentation
here: http://www.slideshare.net/justb4/stetl-foss4g20131024v1.
Stetl was presented at several occasions like the
FOSS4G 2013 in Nottingham http://2013.foss4g.org.

## Origins
Stetl originated in the INSPIRE-FOSS project (www.inspire-foss.org)
and was created by Just van den Broecke. Since Stetl evolved into a wider use like
transforming Dutch GML-based datasets such as IMGEO/BGT (Large Scale Topography)
and IMKAD/BRK (Cadastral Data) it has now a repo of its own.

## Design

Stetl basically glues together existing parsing and transformation tools like GDAL/OGR (ogr2ogr) and XSLT.
By using native tools like libxml and libxslt (via Python lxml) Stetl is speed-optimized.

Stetl has a similar design as Spring (Java) and other modern frameworks based on IoC (Inversion of Control, http://en.wikipedia.org/wiki/Inversion_of_Control).
A configuration file (in Python config format) specifies your chain of ETL steps.
This chain is formed by a series of Python modules/objects and their parameters. These are
symbolically specified in the config file. You just invoke etl.py the main program with a config file.
The config file specifies the input modules (e.g. PostGIS), transformers (e.g. XSLT) and outputs (e.g. a GML file or even
WFS-T a geospatial protocol to publish GML to a server).

Stetl has been proven to handle 10's of millions of objects without any memory issues.
This is achieved through a technique called "streaming and splitting".
For example: using the OgrPostgisInput module an GML stream can be generated from the database.
A component called the GmlSplitter can split this stream into managable chunks (like 20000 features)
and feed this upstream into the ETL chain.

## Examples

Stetl has been found in particularly useful for INSPIRE-related transformations and other complex GML-related ETL.

See examples under the examples dir.

Another example in http://code.google.com/p/inspire-foss/source/browse/trunk/etl/NL.Kadaster/Addresses
(Dutch Addresses (BAG) to INSPIRE Addresses)

## Contributing

Anyone and everyone is welcome to contribute. Please take a moment to
review the [guidelines for contributing](CONTRIBUTING.md).

* [Bug reports](CONTRIBUTING.md#bugs)
* [Feature requests](CONTRIBUTING.md#features)
* [Pull requests](CONTRIBUTING.md#pull-requests)

## Finally

The word "stetl" is also an alternative writing for "shtetl":
http://en.wikipedia.org/wiki/Stetl : "...Material things were neither disdained nor
extremely praised in the shtetl. Learning and education were the ultimate measures of worth in the eyes of the community,
while money was secondary to status..."




Changes
=======


v1.0.9 - 17 june 2016
---------------------

See https://github.com/justb4/stetl/issues?q=milestone%3A%22Version+1.0.9%22+is%3Aclosed

Highlights:

- Substitutable config options in properties file (-a arg)
- Docker support via Stetl Docker image
- Generic ogr2ogr Input Component enhancement

v1.0.8 - 2 july 2015
--------------------

See https://github.com/justb4/stetl/issues?q=milestone%3A%22Version+1.0.8%22

- generic OgrOutput component
- Apache Log File Input

v1.0.7 - 24 nov 2014
--------------------

- start of Stetl Format conversion Filter
- generic OgrInput component
- SQLite Input component
- BAG to INSPIRE Addresses example with Jinja2 Templating Filter
- Jinja2 Filter refinements

v1.0.6 - 5 sept 2014
--------------------

- allow spatial_extent in OGROutput Top10NL example
- httpinput more robust
- Packet: new type 'record', as Python dict structure
- httpinput: ApacheDirInput, input data from Apache index listing
- dboutput: PostgresInsertOutput, insert single record into Postgres
- component: add before_/after_invoke and after_chain_invoke() for intercepting
- filters: start of Python Templating filters: simple string and Jinja2 templating
- Packet: new type 'struct' basically a free form dict, the result of reading CSV
- input: CSV file input
- new examples: 9_string_templating and 10_jinja2_templating
- start stetl --doc option to print class configuration info
- config: start of adding meta attribute config info via class vars of type Attr

v1.0.5 - 19 feb 2014
--------------------

- cater for strange lxml parse error: https://bugs.launchpad.net/lxml/+bug/1185701
- more Dutch BGT (large scale topo) examples by thijsbrentjens

v1.0.4 - 23 sept 2013
---------------------

- more documention
- Dutch BGT (Basis Registratie Grootschalige Topografie) example
- Ordnance Survey Mastermap example
- strip XML namespaces option to XmlElementStreamerFileInput

v1.0.1 v1.0.3 - aug/sept 2013
-----------------------------
Minor changes to enable distribution.


v1.0.0 - june 2013
------------------

- First version
- Add to Python Package Index (#3).

Credits
=======

Stetl is written by:

* Just van den Broecke (http://www.justobjects.nl)

This project would not be possible without the great work of Frank Warmerdam and other
GDAL/OGR developers (http://gdal.org).

Plus the people that brought Python, PostGIS (like Paul Ramsey), lxml and the libs
like GEOS, Proj, libxml2 and libxslt.

We are mainly standing on the shoulders of these giants.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Stetl-1.0.9.tar.gz (6.2 MB view details)

Uploaded Source

File details

Details for the file Stetl-1.0.9.tar.gz.

File metadata

  • Download URL: Stetl-1.0.9.tar.gz
  • Upload date:
  • Size: 6.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for Stetl-1.0.9.tar.gz
Algorithm Hash digest
SHA256 e5f9cff93003e1e8877fbafa912812b5e89b63d0517cdc82b0534e5424ed0700
MD5 ce62b97640bbe91282c4dcc9c61af14d
BLAKE2b-256 9973f70e8ab002d4cd94a0e6bf4dd0cc0d243fa7b02ff74176b4751f656c7e4c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page