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按行读取文件的简单实现方法
Jun 22 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
python中set()函数简介及实例解析
Jan 09 Python
使用python 3实现发送邮件功能
Jun 15 Python
Django model序列化为json的方法示例
Oct 16 Python
python中logging模块的一些简单用法的使用
Feb 22 Python
Python PyInstaller安装和使用教程详解
Jan 08 Python
Python新手如何理解循环加载模块
May 29 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 Python
Django封装交互接口代码
Jul 12 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
Python APScheduler执行使用方法详解
Dec 10 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
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
Promise扫盲贴
2019/06/24 Javascript
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
跟老齐学Python之折腾一下目录
2014/10/24 Python
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
Python 从相对路径下import的方法
2018/12/04 Python
pyshp创建shp点文件的方法
2018/12/31 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
详细分析Python垃圾回收机制
2020/07/01 Python
浅析Python的命名空间与作用域
2020/11/25 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
this关键字的作用
2016/01/30 面试题
美术专业学生个人自我评价
2013/09/19 职场文书
优秀员工个人的自我评价
2013/11/29 职场文书
30岁生日感言
2014/01/25 职场文书
竞聘书模板
2014/03/31 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
培训讲师开场白
2015/06/01 职场文书
欠条范文
2015/07/03 职场文书
好人好事新闻稿
2015/07/17 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS