Flow is a PHP-based, strongly typed ETL (Extract, Transform, Load) and asynchronous data processing framework with low memory consumption thanks to its generator-based architecture.
Tip
In case of any questions, feel free to join our Discrod Server
Thanks to its rich collection of adapters, Flow can read and write data between sources and destinations while applying defined transformations on the fly.
<?php
declare(strict_types=1);
use function Flow\ETL\Adapter\Parquet\{from_parquet, to_parquet};
use function Flow\ETL\DSL\{data_frame, lit, ref, sum, to_output, overwrite};
use Flow\ETL\Filesystem\SaveMode;
require __DIR__ . '/vendor/autoload.php';
data_frame()
->read(from_parquet(__DIR__ . '/orders_flow.parquet'))
->select('created_at', 'total_price', 'discount')
->withEntry('created_at', ref('created_at')->cast('date')->dateFormat('Y/m'))
->withEntry('revenue', ref('total_price')->minus(ref('discount')))
->select('created_at', 'revenue')
->groupBy('created_at')
->aggregate(sum(ref('revenue')))
->sortBy(ref('created_at')->desc())
->withEntry('daily_revenue', ref('revenue_sum')->round(lit(2))->numberFormat(lit(2)))
->drop('revenue_sum')
->write(to_output(truncate: false))
->withEntry('created_at', ref('created_at')->toDate('Y/m'))
->saveMode(overwrite())
->write(to_parquet(__DIR__ . '/daily_revenue.parquet'))
->run();
$ php daily_revenue.php
+------------+---------------+
| created_at | daily_revenue |
+------------+---------------+
| 2023/10 | 206,669.74 |
| 2023/09 | 227,647.47 |
| 2023/08 | 237,027.31 |
| 2023/07 | 240,111.05 |
| 2023/06 | 225,536.35 |
| 2023/05 | 234,624.74 |
| 2023/04 | 231,472.05 |
| 2023/03 | 231,697.36 |
| 2023/02 | 211,048.97 |
| 2023/01 | 225,539.81 |
+------------+---------------+
10 rows
Flow PHP is sponsored by:
- Blackfire - the best PHP profiling and monitoring tool!