Python-Bonobo 入门教程:创建你的第一个ETL任务
【免费下载链接】bonobo Extract Transform Load for Python 3.5+ 项目地址: https://gitcode.com/gh_mirrors/bo/bonobo
什么是Bonobo?
Bonobo是一个轻量级的Python ETL(提取、转换、加载)框架,专为数据管道设计。它提供了简单直观的API,让开发者能够快速构建数据处理流程。Bonobo特别适合中小规模的数据处理任务,它的设计哲学是"简单至上"。
环境准备
在开始使用Bonobo之前,你需要确保:
- 安装Python 3.5或更高版本
- 建议使用虚拟环境(virtualenv)隔离项目依赖
安装Bonobo非常简单,只需运行:
pip install bonobo
安装完成后,可以通过以下命令验证安装是否成功:
bonobo version
创建第一个ETL任务
Bonobo从0.6版本开始,提供了快速创建简单ETL任务的命令:
bonobo init tutorial.py
这个命令会创建一个名为tutorial.py的文件,其中包含一个基本的ETL任务结构。运行这个文件:
python tutorial.py
你会看到类似以下的输出:
Hello
World
- extract in=1 out=2 [done]
- transform in=2 out=2 [done]
- load in=2 [done]
恭喜!你刚刚运行了第一个Bonobo ETL任务。
理解Bonobo的核心概念
转换(Transformations)
在Bonobo中,转换是数据处理的基本单元,它们是简单的Python可调用对象(如函数)。转换分为几种类型:
- 提取器(Extractors):生成数据但不接收输入
- 转换器(Transformers):接收输入,处理后产生输出
- 加载器(Loaders):接收输入但不产生输出
图(Graphs)
图是由转换组成的网络,通过有向连接定义数据流。你可以将图视为数据处理的管道,数据从源头流向目的地,在流动过程中被各种转换处理。
可视化任务图
Bonobo支持将任务图可视化,这有助于理解复杂的数据流。首先需要安装Graphviz软件(不是Python包),然后运行:
bonobo inspect --graph tutorial.py | dot -Tpng -o tutorial.png
这会生成一个PNG图像,显示你的ETL任务的数据流结构。
代码解析
让我们深入分析tutorial.py中的代码:
1. 导入
import bonobo
Bonobo的主要API都包含在顶层命名空间中。初学者应该专注于使用这些API,它们也是最稳定的。
2. 提取阶段
def extract():
yield 'hello'
yield 'world'
这是一个生成器函数,作为数据源。它不接收输入,只产生输出。在实际应用中,提取器可能从数据库、文件或API获取数据。
3. 转换阶段
def transform(*args):
yield tuple(
map(str.title, args)
)
这个转换器接收输入,对每个输入行应用str.title函数,然后产生输出。这是最通用的转换类型。
4. 加载阶段
def load(*args):
print(*args)
加载器接收输入但不产生输出。在实际应用中,加载器可能将数据写入数据库、文件或发送到API。
5. 图工厂
def get_graph(**options):
graph = bonobo.Graph()
graph.add_chain(extract, transform, load)
return graph
这个函数创建并配置一个bonobo.Graph实例,将各个转换连接成数据处理链。
6. 服务工厂
def get_services(**options):
return {}
服务工厂用于连接外部系统,我们将在后续教程中详细介绍。
7. 主程序块
if __name__ == '__main__':
parser = bonobo.get_argument_parser()
with bonobo.parse_args(parser) as options:
bonobo.run(
get_graph(**options),
services=get_services(**options)
)
这是程序的入口点,负责解析命令行参数并运行ETL任务。
理解输出
运行ETL任务时,控制台输出包含两部分:
- 任务输出:来自
print等函数的实际输出 - 执行状态:显示在
sys.stderr上,包含每个节点的执行情况
状态行的格式为:[状态字符] 节点名称 in=输入数 out=输出数 [状态]
状态字符含义:
- " ":未开始
- "-":已完成
- "+":正在运行
- "!":运行出错
添加延迟观察执行过程
为了更清楚地观察执行过程,可以在转换函数中添加延迟:
import time
def extract():
time.sleep(5)
yield 'hello'
time.sleep(5)
yield 'world'
def transform(*args):
time.sleep(5)
yield tuple(map(str.title, args))
def load(*args):
time.sleep(5)
print(*args)
这样你可以看到状态随着时间变化的过程。
总结
通过本教程,你学会了:
- 如何创建新的ETL任务
- 如何检查任务内容
- ETL任务文件的基本结构
- 如何执行ETL任务
- 如何解读控制台输出
现在你已经掌握了Bonobo的基础知识,可以开始构建自己的数据管道了!
【免费下载链接】bonobo Extract Transform Load for Python 3.5+ 项目地址: https://gitcode.com/gh_mirrors/bo/bonobo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



