python ETL工具 pyetl


Posted in Python onJune 07, 2020

pyetl是一个纯python开发的ETL框架, 相比sqoop, datax 之类的ETL工具,pyetl可以对每个字段添加udf函数,使得数据转换过程更加灵活,相比专业ETL工具pyetl更轻量,纯python代码操作,更加符合开发人员习惯

安装

pip3 install pyetl

使用示例

数据库表之间数据同步

from pyetl import Task, DatabaseReader, DatabaseWriter
reader = DatabaseReader("sqlite:///db1.sqlite3", table_name="source")
writer = DatabaseWriter("sqlite:///db2.sqlite3", table_name="target")
Task(reader, writer).start()

数据库表到hive表同步

from pyetl import Task, DatabaseReader, HiveWriter2
reader = DatabaseReader("sqlite:///db1.sqlite3", table_name="source")
writer = HiveWriter2("hive://localhost:10000/default", table_name="target")
Task(reader, writer).start()

数据库表同步es

from pyetl import Task, DatabaseReader, ElasticSearchWriter
reader = DatabaseReader("sqlite:///db1.sqlite3", table_name="source")
writer = ElasticSearchWriter(hosts=["localhost"], index_name="tartget")
Task(reader, writer).start()

原始表目标表字段名称不同,需要添加字段映射

添加

# 原始表source包含uuid,full_name字段
reader = DatabaseReader("sqlite:///db.sqlite3", table_name="source")
# 目标表target包含id,name字段
writer = DatabaseWriter("sqlite:///db.sqlite3", table_name="target")
# columns配置目标表和原始表的字段映射关系
columns = {"id": "uuid", "name": "full_name"}
Task(reader, writer, columns=columns).start()

字段的udf映射,对字段进行规则校验、数据标准化、数据清洗等

# functions配置字段的udf映射,如下id转字符串,name去除前后空格
functions={"id": str, "name": lambda x: x.strip()}
Task(reader, writer, columns=columns, functions=functions).start()

继承Task类灵活扩展ETL任务

import json
from pyetl import Task, DatabaseReader, DatabaseWriter

class NewTask(Task):
  reader = DatabaseReader("sqlite:///db.sqlite3", table_name="source")
  writer = DatabaseWriter("sqlite:///db.sqlite3", table_name="target")
  
  def get_columns(self):
    """通过函数的方式生成字段映射配置,使用更灵活"""
    # 以下示例将数据库中的字段映射配置取出后转字典类型返回
    sql = "select columns from task where name='new_task'"
    columns = self.writer.db.read_one(sql)["columns"]
    return json.loads(columns)
   
  def get_functions(self):
    """通过函数的方式生成字段的udf映射"""
    # 以下示例将每个字段类型都转换为字符串
    return {col: str for col in self.columns}
   
  def apply_function(self, record):
    """数据流中对一整条数据的udf"""
    record["flag"] = int(record["id"]) % 2
    return record

  def before(self):
    """任务开始前要执行的操作, 如初始化任务表,创建目标表等"""
    sql = "create table destination_table(id int, name varchar(100))"
    self.writer.db.execute(sql)
  
  def after(self):
    """任务完成后要执行的操作,如更新任务状态等"""
    sql = "update task set status='done' where name='new_task'"
    self.writer.db.execute(sql)

NewTask().start()

目前已实现Reader和Writer列表

 

Reader 介绍
DatabaseReader 支持所有关系型数据库的读取
FileReader 结构化文本数据读取,如csv文件
ExcelReader Excel表文件读取

Writer 介绍
DatabaseWriter 支持所有关系型数据库的写入
ElasticSearchWriter 批量写入数据到es索引
HiveWriter 批量插入hive表
HiveWriter2 Load data方式导入hive表(推荐)
FileWriter 写入数据到文本文件

项目地址pyetl

总结

到此这篇关于python ETL工具 pyetl的文章就介绍到这了,更多相关python ETL工具 pyetl内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python爬虫实现简单的爬取有道翻译功能示例
Jul 13 Python
python使用插值法画出平滑曲线
Dec 15 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
Python定时任务APScheduler的实例实例详解
Jul 22 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
python中count函数简单的实例讲解
Feb 06 Python
在python中使用nohup命令说明
Apr 16 Python
Python的历史与优缺点整理
May 26 Python
什么是python的列表推导式
May 26 Python
python开发人人对战的五子棋小游戏
May 02 Python
python框架flask入门之路由及简单实现方法
Jun 07 #Python
python框架flask入门之环境搭建及开启调试
Jun 07 #Python
python实现一次性封装多条sql语句(begin end)
Jun 06 #Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 #Python
解决python 执行sql语句时所传参数含有单引号的问题
Jun 06 #Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 #Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 #Python
You might like
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
JS 遮照层实现代码
2010/03/31 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
JavaScript中var的重要性实例分析
2019/07/09 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
python语言元素知识点详解
2019/05/15 Python
python实现最小二乘法线性拟合
2019/07/19 Python
python实现倒计时小工具
2019/07/29 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
商务英语专业求职信范文
2014/01/28 职场文书
新农村建设汇报材料
2014/08/15 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
扬州个园导游词
2015/02/06 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL