Composable ETL Logic Layer
Project description
PETaL - Python Extract Transform and Load
A framework to compose custom ETLs on top of a logical floor.
Follow along in the /examples directory to build up arbitrary pipelines.
(This is modeled on Airflow's DAG Operator model for intuitive composition in Python.)
01. Trivial Case
# The most trivial pipeline possible
with Pipeline("01_noop") as dag: # Define the pipeline context manager, inner block gets scoped to this object
source = EmptySource("empty_source") # Define operators
sink = NoOpSink("no_op_sink")
source >> sink # Compose the operators into a DAG
dag.run()
02. Simple Case - Single ETL Step
# A single ETL step
with Pipeline("02_copy_file_to_file") as dag:
read_logs = FileReader("read_logs", file_path="../data/example_input.txt")
pattern_filter = RegexFilter("filter_info", pattern="^INFO")
write_to_file = FileWriter("write_file", file_path="../data/example_output.txt")
read_logs >> pattern_filter >> write_to_file
dag.run()
03. One Source, Multiple Sinks
with Pipeline("03_splitting_streams_to_multiple_destinations") as dag:
read_logs = FileReader("read_logs", file_path="../data/example_input.txt")
# Fan-out operator that can be used to split the stream into multiple threads
splitter = Splitter("split")
# One branch will be just a direct copy
write_to_file_unfiltered = FileWriter("write_unfiltered", file_path="../data/example_output_unfiltered.txt")
# The other branch will be nice and filtered
pattern_filter = RegexFilter("filter_info", pattern="^INFO")
write_to_file_filtered = FileWriter("write_filtered", file_path="../data/example_output_filtered.txt")
# Read the logs into the splitter...
read_logs >> splitter
# ...then read as many branches from the splitter as you want
splitter >> pattern_filter >> write_to_file_filtered
splitter >> write_to_file_unfiltered
dag.run()
Theory
There are 3 types of Operators - Sources, Sinks, and Non-Terminal Operators. Pipelines in Petal are wrappers around arbitrary Directed Acyclic Graphs (DAGs). A Pipeline is constructed from a DAG and has the following invariants:
- It must have at least 1 Operator satisfying each of the terminal operator types (ie. at least 1 Source and 1 Sink).
- Operators are directional (data flows in a particular direction within the Operator).
- Each Operator has a unique ID and a reference to its upstream and downstream Operators.
- There are no cycles in the graph.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file petal_etl_composer-0.1.2.tar.gz.
File metadata
- Download URL: petal_etl_composer-0.1.2.tar.gz
- Upload date:
- Size: 8.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67c99b510dddade4152167c68764563689d687246b22f69afaccad6c383d2cc4
|
|
| MD5 |
9306ecd7baa1247c754f301d0b5da6bd
|
|
| BLAKE2b-256 |
29ab39f238749ce018793d2cb038763c2b9f413d8b144275b6e9f1ff28a5f571
|
File details
Details for the file petal_etl_composer-0.1.2-py3-none-any.whl.
File metadata
- Download URL: petal_etl_composer-0.1.2-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ac1a0f1d2677f25a6a12178e4020c668e7e6debb650a2b8c68036789e5f5461
|
|
| MD5 |
bea08b3d4c8184890b65cf89d0c8f11e
|
|
| BLAKE2b-256 |
0372d97550d9c05a86e82186c0da26b38c59771ef07665d38da6e57ebb6bc222
|