Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ecourtial/6d905fd13daef37ad65fa63e5acff95e to your computer and use it in GitHub Desktop.
Save ecourtial/6d905fd13daef37ad65fa63e5acff95e to your computer and use it in GitHub Desktop.
An example of multiple sources aggregation with PHP-ETL
<?php
declare(strict_types=1);
namespace App\Service;
use Wizaplace\Etl\Etl;
use Wizaplace\Etl\Extractors\Aggregator;
use Wizaplace\Etl\Extractors\Csv as CsvExtractor;
use Wizaplace\Etl\Extractors\Json as JsonExtractor;
use Wizaplace\Etl\Loaders\CsvLoader;
class DummyService
{
/** @var \Wizaplace\Etl\Extractors\Json */
private $jsonExtractor;
/** @var \Wizaplace\Etl\Extractors\Csv */
private $csvExtractor;
/** @var \Wizaplace\Etl\Loaders\CsvLoader */
private $csvLoader;
/** @var \Wizaplace\Etl\Etl */
private $csvEtl;
/** @var \Wizaplace\Etl\Etl */
private $jsonEtl;
/** @var \Wizaplace\Etl\Etl */
private $etlAggregator;
/** @var \Wizaplace\Etl\Extractors\Aggregator */
private $aggregator;
public function __construct(
Etl $csvEtl,
Etl $jsonEtl,
Etl $etlAggregator,
CsvExtractor $csvExtractor,
JsonExtractor $jsonExtractor,
CsvLoader $csvLoader,
Aggregator $aggregator
) {
$this->csvEtl = $csvEtl;
$this->jsonEtl = $jsonEtl;
$this->etlAggregator = $etlAggregator;
$this->csvExtractor = $csvExtractor;
$this->csvLoader = $csvLoader;
$this->jsonExtractor = $jsonExtractor;
$this->aggregator = $aggregator;
}
public function process(): int
{
$outputCsvFile = 'assets/tuto/output.csv';
($this->etlAggregator)
->extract(
$this->aggregator,
[
$this->getCsvEtl(),
$this->getJsonEtl(),
],
[
'index' => ['id'],
'columns' => ['id','email','subscriptionNumber'],
'strict' => true
]
)
->load(
$this->csvLoader,
$outputCsvFile
)
->run()
;
return 0;
}
private function getCsvEtl()
{
$inputFile = 'assets/tuto/customers.csv';
return $this->csvEtl
->extract(
$this->csvExtractor,
$inputFile,
[
'throwError' => true,
'delimiter' => ';',
'columns' => ['id', 'email']
]
)
->toIterator();
}
private function getJsonEtl()
{
$inputFile = 'assets/tuto/customers.json';
return $this->jsonEtl
->extract(
$this->jsonExtractor,
$inputFile
)
->toIterator();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment