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解析中国天气网的天气数据
Mar 21 Python
Python3基础之输入和输出实例分析
Aug 18 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
python简易远程控制单线程版
Jun 20 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
Python3.4 splinter(模拟填写表单)使用方法
Oct 13 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
Anaconda使用IDLE的实现示例
Sep 23 Python
python3爬虫中多线程的优势总结
Nov 24 Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 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设计聊天室步步通
2006/10/09 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
Python 文件和输入输出小结
2013/10/09 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
python抓取百度首页的方法
2015/05/19 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
LODI女鞋在线商店:阿利坎特的鞋类品牌
2019/02/15 全球购物
你常见到的runtime exception
2016/09/05 面试题
安全生产先进个人材料
2014/02/06 职场文书
大学生就业策划书范文
2014/04/04 职场文书
寒假家长评语大全
2014/04/16 职场文书
分家协议书
2014/04/21 职场文书
铁路安全事故反思
2014/04/26 职场文书
审计班子对照检查材料
2014/08/27 职场文书
金融保险专业求职信
2014/09/03 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
同意转租证明
2015/06/24 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python