Extracts
Read from various data sources.
Transforms
Shape and optimize for your needs.
Loads
Store and secure in one of many available data sinks.
Examples:
                            ▶
                            ▼
                            composer.json
                        
                        {
    "name": "flow-php/examples",
    "description": "Flow PHP - Examples",
    "license": "MIT",
    "type": "library",
    "require": {
        "flow-php/etl": "1.x-dev"
    },
    "minimum-stability": "dev"
}code.php<?php
declare(strict_types=1);
use function Flow\ETL\DSL\{data_frame,
    from_rows,
    lit,
    match_cases,
    match_condition,
    ref,
    row,
    rows,
    string_entry,
    to_stream
};
use function Flow\Types\DSL\type_integer;
require __DIR__ . '/vendor/autoload.php';
data_frame()
    ->read(
        from_rows(
            rows(
                row(string_entry('string', 'string-with-dashes')),
                row(string_entry('string', '123')),
                row(string_entry('string', '14%')),
                row(string_entry('string', '+14')),
                row(string_entry('string', ''))
            )
        )
    )
    ->withEntry(
        'string',
        match_cases(
            [
                match_condition(ref('string')->contains('-'), ref('string')->strReplace('-', ' ')),
                match_condition(ref('string')->call('is_numeric'), ref('string')->cast(type_integer())),
                match_condition(ref('string')->endsWith('%'), ref('string')->strReplace('%', '')->cast(type_integer())),
                match_condition(ref('string')->startsWith('+'), ref('string')->strReplace('+', '')->cast(type_integer())),
            ],
            default: lit('DEFAULT')
        )
    )
    ->write(to_stream(__DIR__ . '/output.txt', truncate: false))
    ->run();
Output
+--------------------+
|             string |
+--------------------+
| string with dashes |
|                123 |
|                 14 |
|                 14 |
|            DEFAULT |
+--------------------+
5 rows