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基于pygame实现的font游戏字体(附源码)
Nov 11 Python
基础的十进制按位运算总结与在Python中的计算示例
Jun 28 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
python数据结构之列表和元组的详解
Sep 23 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
详解Python中的各种转义符\n\r\t
Jul 10 Python
django做form表单的数据验证过程详解
Jul 26 Python
python 三元运算符使用解析
Sep 16 Python
在Python中实现函数重载的示例代码
Dec 12 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
python 爬取B站原视频的实例代码
Sep 09 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下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
基于PHP CURL获取邮箱地址的详解
2013/06/03 PHP
php实现文件下载代码分享
2014/08/19 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
使用python统计文件行数示例分享
2014/02/21 Python
python使用Tkinter显示网络图片的方法
2015/04/24 Python
python实现websocket的客户端压力测试
2019/06/25 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
教师校本培训方案
2014/02/26 职场文书
读后感作文评语
2014/12/25 职场文书
领导工作表现评语
2015/01/04 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
html5调用摄像头实例代码
2021/06/28 HTML / CSS