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获取GY-85九轴模块信息示例
Dec 05 Python
Python调用命令行进度条的方法
May 05 Python
Python中字典的基础知识归纳小结
Aug 19 Python
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 Python
对python 多个分隔符split 的实例详解
Dec 20 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
python retrying模块的使用方法详解
Sep 25 Python
python分布式编程实现过程解析
Nov 08 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
Python监听剪切板实现方法代码实例
Nov 11 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 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
2021年最新CPU天梯图
2021/03/04 数码科技
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
web打印小结
2017/01/11 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
Vue中props的详解
2019/05/16 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
TensorFlow如何实现反向传播
2018/02/06 Python
浅谈Django的缓存机制
2018/08/23 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
python绘制彩虹图
2019/12/16 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
银行会计财务工作个人的自我评价
2013/10/29 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
孩子教育的心得体会
2014/09/01 职场文书
教师求职简历自我评价
2015/03/10 职场文书
新闻稿标题
2015/07/18 职场文书