Python-Bonobo 入门教程:创建你的第一个ETL任务

Python-Bonobo 入门教程:创建你的第一个ETL任务

【免费下载链接】bonobo Extract Transform Load for Python 3.5+ 【免费下载链接】bonobo 项目地址: https://gitcode.com/gh_mirrors/bo/bonobo

什么是Bonobo?

Bonobo是一个轻量级的Python ETL(提取、转换、加载)框架,专为数据管道设计。它提供了简单直观的API,让开发者能够快速构建数据处理流程。Bonobo特别适合中小规模的数据处理任务,它的设计哲学是"简单至上"。

环境准备

在开始使用Bonobo之前,你需要确保:

  1. 安装Python 3.5或更高版本
  2. 建议使用虚拟环境(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可调用对象(如函数)。转换分为几种类型:

  1. 提取器(Extractors):生成数据但不接收输入
  2. 转换器(Transformers):接收输入,处理后产生输出
  3. 加载器(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任务时,控制台输出包含两部分:

  1. 任务输出:来自print等函数的实际输出
  2. 执行状态:显示在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)

这样你可以看到状态随着时间变化的过程。

总结

通过本教程,你学会了:

  1. 如何创建新的ETL任务
  2. 如何检查任务内容
  3. ETL任务文件的基本结构
  4. 如何执行ETL任务
  5. 如何解读控制台输出

现在你已经掌握了Bonobo的基础知识,可以开始构建自己的数据管道了!

【免费下载链接】bonobo Extract Transform Load for Python 3.5+ 【免费下载链接】bonobo 项目地址: https://gitcode.com/gh_mirrors/bo/bonobo

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值