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 相关文章推荐
用map函数来完成Python并行任务的简单示例
Apr 02 Python
Python 模拟购物车的实例讲解
Sep 11 Python
代码分析Python地图坐标转换
Feb 08 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
Python关于excel和shp的使用在matplotlib
Jan 03 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python程序输出无内容的解决方式
Apr 09 Python
python操作redis数据库的三种方法
Sep 10 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 Python
Python绘制地图神器folium的新人入门指南
May 23 Python
Pandas 稀疏数据结构的实现
Jul 25 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
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
三种php连接access数据库方法
2013/11/11 PHP
PHP文件读取功能的应用实例
2015/05/08 PHP
浅谈PHP封装CURL
2019/03/06 PHP
phpStorm2020 注册码
2020/09/17 PHP
一些不错的js函数ajax
2008/08/20 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
Python解析树及树的遍历
2016/02/03 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
django-csrf使用和禁用方式
2020/03/13 Python
python的launcher用法知识点总结
2020/08/07 Python
python mock测试的示例
2020/10/19 Python
白酒市场开发计划书
2014/01/09 职场文书
学校募捐倡议书
2014/05/14 职场文书
学校师德师风整改措施
2014/10/27 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书