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下自己编写web框架的一些要点
Apr 29 Python
分享Python开发中要注意的十个小贴士
Aug 30 Python
从CentOS安装完成到生成词云python的实例
Dec 01 Python
Python发送http请求解析返回json的实例
Mar 26 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
May 07 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
python 输出所有大小写字母的方法
Jan 02 Python
Python面向对象进阶学习
May 21 Python
利用python对mysql表做全局模糊搜索并分页实例
Jul 12 Python
Python异常处理机制结构实例解析
Jul 23 Python
使用Python判断一个文件是否被占用的方法教程
Dec 16 Python
python 批量压缩图片的脚本
Jun 02 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
apache mysql php 源码编译使用方法
2012/05/03 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
js日期联动示例
2014/05/02 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
python根据距离和时长计算配速示例
2014/02/16 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
python实现字符串和日期相互转换的方法
2015/05/13 Python
python中input()与raw_input()的区别分析
2016/02/27 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
Python 查看文件的编码格式方法
2017/12/21 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
python语音识别实践之百度语音API
2018/08/30 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
python从子线程中获得返回值的方法
2019/01/30 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
鲜花方阵解说词
2014/02/13 职场文书
小学五年级学生评语
2014/04/22 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
python实现的web监控系统
2021/04/27 Python