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 相关文章推荐
可用于监控 mysql Master Slave 状态的python代码
Feb 10 Python
总结Python中逻辑运算符的使用
May 13 Python
python和bash统计CPU利用率的方法
Jul 10 Python
Python实现Kmeans聚类算法
Jun 10 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
python mysql断开重连的实现方法
Jul 26 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
Feb 18 Python
Python脚本实现监听服务器的思路代码详解
May 28 Python
浅析python中的del用法
Sep 02 Python
Python常用外部指令执行代码实例
Nov 05 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 Python
Python使用Web框架Flask开发项目
Jun 01 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
数据库的日期格式转换
2006/10/09 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
不错的JS中变量相关的细节分析
2007/08/13 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
javascript截取字符串小结
2015/04/28 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
在Python中执行系统命令的方法示例详解
2017/09/14 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
python进行TCP端口扫描的实现
2018/12/21 Python
python 带时区的日期格式化操作
2020/10/23 Python
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
值传递还是引用传递
2015/02/08 面试题
人力管理专业毕业生求职信
2014/02/27 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
工人先锋号申报材料
2014/12/29 职场文书
个人专业技术总结
2015/03/05 职场文书
演讲开场白台词大全
2015/05/29 职场文书
小学运动会入场词
2015/07/18 职场文书
Vue Element plus使用方法梳理
2022/12/24 Vue.js