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中from module import * 的一个坑
Jul 20 Python
Python字符串拼接、截取及替换方法总结分析
Apr 13 Python
Python使用asyncio包处理并发详解
Sep 09 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
Python求正态分布曲线下面积实例
Nov 20 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
Jul 20 Python
Python改变对象的字符串显示的方法
Aug 01 Python
python如何操作mysql
Aug 17 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 Python
python实现学生信息管理系统(面向对象)
Jun 05 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
967 个函式
2006/10/09 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
javascript下function声明一些小结
2007/12/28 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
python装饰器decorator介绍
2014/11/21 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
python生成九宫格图片
2018/11/19 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Django实现发送邮件功能
2019/07/18 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
《兰亭集序》教学反思
2014/02/11 职场文书
《跨越百年的美丽》教学反思
2014/02/11 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
2014年校长工作总结
2014/12/11 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
病假证明模板
2015/06/19 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers