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读取环境变量的方法和自定义类分享
Nov 22 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
Python之循环结构
Jan 15 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
numpy.where() 用法详解
May 27 Python
python分割一个文本为多个文本的方法
Jul 22 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
python2 对excel表格操作完整示例
Feb 23 Python
Django model.py表单设置默认值允许为空的操作
May 19 Python
python爬虫可以爬什么
Jun 16 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
Jupyter notebook 更改文件打开的默认路径操作
May 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
PHP-FPM实现性能优化
2016/03/31 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
监控微信小程序中的慢HTTP请求过程详解
2019/07/05 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
python中执行shell命令的几个方法小结
2014/09/18 Python
python字典排序实例详解
2015/05/20 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
基于Python实现粒子滤波效果
2020/12/01 Python
财务与信息服务专业推荐信
2013/11/28 职场文书
《颐和园》教学反思
2014/02/26 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
父母对孩子的寄语
2014/04/09 职场文书
经典演讲稿开场白
2014/08/25 职场文书
给老婆的保证书
2015/01/16 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
安全学习心得体会范文
2016/01/18 职场文书
导游词之天津古文化街
2019/11/09 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书