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中的装饰器用法详解
Jan 14 Python
python 网络爬虫初级实现代码
Feb 27 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
Feb 01 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
解决Python selenium get页面很慢时的问题
Jan 30 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
如何写python的配置文件
Jun 07 Python
Python venv虚拟环境配置过程解析
Jul 08 Python
Python绘图之二维图与三维图详解
Aug 04 Python
python计算auc的方法
Sep 09 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
python用字节处理文件实例讲解
Apr 13 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面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
Jquery 一次处理多个ajax请求的代码
2011/09/02 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
JSON Web Tokens的实现原理
2017/04/02 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
如何用python整理附件
2018/05/13 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
python实现加密的方式总结
2020/01/19 Python
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
五年级音乐教学反思
2014/02/06 职场文书
推广普通话演讲稿
2014/05/23 职场文书
红头文件任命书范本
2014/06/05 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
卖房授权委托书样本
2014/10/05 职场文书
学生上课说话检讨书
2014/10/25 职场文书
运动会广播稿200字
2015/08/19 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
小学毕业教师寄语
2019/06/21 职场文书
导游词之凤凰古城
2019/10/22 职场文书