jrmgx / etl-package
ETL:提取、转换、加载
v1.2.1
2023-03-03 12:41 UTC
Requires
- php: ^8.1
- ext-mbstring: *
- doctrine/dbal: ^3.6
- symfony/config: ^6.2
- symfony/dependency-injection: ^6.2
- symfony/expression-language: ^6.2
- symfony/http-client: ^6.2
- symfony/property-access: ^6.2
- twig/twig: ^3.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.14
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
- symfony/finder: ^6.2
- symfony/yaml: ^6.2
README
此为正在进行中的工作
此包将允许您
- 提取来自指定源的数据
- 转换数据以满足您的需求
- 加载结果到指定的目的地
它基于以下描述的简单配置文件。
基本示例
在这个基本示例中
- 我们从本地仓库获取CSV文件
- 我们对数据进行了一些转换
- 我们将转换后的数据以JSON格式发送到API
Yaml是可选的,它也可以是一个普通的PHP数组。
extract: pull: type: file uri: ./demo/data_in.csv read: format: csv options: trim: true transform: filter: type: query options: where: 'Age > :min' parameters: min: 30 mapping: type: expressive map: out.name: in.Name out.sex: in.Sex out.age_in_sec: 'in.Age * 365 * 24 * 60 * 60' load: write: format: json push: type: http uri: https://webhook.site/f24c112b-8344-4fe3-a9e5-53baf36c912f options: headers: 'Authorization': 'Basic 9e222b3b7647c7'
配置
在ETL部分,所有配置都集中在一个文件中,该文件描述了每个步骤。
但由于可读性的考虑,文档已经被拆分,每个组件都有自己的页面。
提取器
提取器负责从源中提取和读取数据。
提取:负责从其源(本地文件、API或数据库等)提取数据。
读取:给定提取阶段获取的资源,读取它并将其转换为后续处理的规范数组。
通常,提取和读取部分是独立的,但对于某些类型的资源(如数据库),它们需要协同工作(提取将建立并处理连接,读取将从该连接获取数据)。
转换器
转换器负责过滤和转换给定的数据。
过滤:给定数据,应用特定的过滤逻辑。
映射:给定数据,将输出字段与输入字段关联,可选地进行转换。
链式操作
有时您可能想利用多个转换器,您可以通过在 transformers
部分添加多个条目来实现。
transformers: first_transform: # This name does not matter, but it has to be unique mapping: type: simple map: out.name: in.Name out.sex: in.Sex out.size: in.Height second_transform: # This name does not matter, but it has to be unique filter: type: query options: where: 'size > :size' parameters: size: 2 mapping: type: expressive map: out.name: in.name out.sex: in.sex out.squared: 'in.size * in.size'
加载器
加载器负责写入和推送数据。
写入:给定数据,将其写入并转换为指定的格式/类型。
推送:给定写入阶段获取的资源,将其推送到配置的源。
通常,写入和推送部分是独立的,但对于某些类型的资源(如数据库),它们需要协同工作(写入准备数据,推送处理连接)。
在您的项目中使用它
Symfony或通过依赖注入
在Symfony项目中,您可以将以下行添加到您的 services.yaml
中以使其工作
Jrmgx\Etl\: resource: '../vendor/jrmgx/etl-package/src/' exclude: - '../vendor/jrmgx/etl-package/src/Config/'
这将所有内容注册为服务,然后您可以像这样注入 Etl
class YourService { public function __construct(private readonly Etl $etl) { } public function yourMethod(): void { // Yaml is optional, you can provide an array instead $configFile = Yaml::parseFile(__DIR__.'/../../config/etl.yaml'); $config = new Config($configFile, __DIR__ . '/../../'); $this->etl->execute($config); } }
在其他使用依赖注入的项目中,这应该非常相似。
手动设置
待办事项
添加自定义提取器/转换器/加载器
实现自定义提取器
...
实现自定义转换器
...
实现自定义加载器
...
开发环境
安装项目
...
运行项目
...
测试和代码风格
...
许可
MIT
归属
data_in.csv
数据来源: https://people.sc.fsu.edu/~jburkardt/data/csv/csv.html