python实现数据仓库ETL
2012-04-05 23:11
781 查看
通常讲的数据仓库ETL, 可以分为ETL和ELT两种实现方式. ELT是在加载到仓库后, 再做数据转换. ETL 是在加载之前完成转换, 落地的数据就是转换后的样子了.
ELT多使用在MPP架构的数据仓库平台上, 比如Teradata, greenplum, 主要考虑点是, MPP数据仓库数据处理能力强, 在加载后再做转换, 可以充分利用这一优势. 另外, Extract和Load过程很简单, 且数据仓库厂商提供unloading/loading的命令行工具一般具有并行处理能力, 所以直接用这些命令行工具满足. 至于转换部分过程, 多为通过sql查询出stage区新加的记录, 然后做一些运算, 最后再拼sql将计算后的数据放在另一个区.
如果数据仓库是建在Oracle/SQL Server这类架构数据库上, 多采用ETL方式, 将转换放在数据仓库外运行, 以减轻数据仓库的压力. ETL过程也多选购商业软件, 比如Datastage, SSIS.
在ELT方案中, python也可大有作为. 即使是使用数据仓库厂商提供的命令行工具做Extracting和Loading, python仍可以作为胶水. 拼sql, python的三引号字符串以及字符串操作都超强, 很适合.
在ETL方案中, 使用python完成流程控制自然是很轻松的, 所以关键点是, 提供一个高效的基于记录行的pipeline执行机制, 以及如何提供较高的执行效率. 下面有几个开源项目还不错, 值得在项目中一试. 其实甚至不用什么额外的开源项目, 用标准库也很容易做transform的, 因为python内建支持sqlite, 接下来无需多讲了.
基于pipeline的开源项目:
(推荐度*****) petl, http://petl.readthedocs.org/en/latest/
http://pypi.python.org/pypi/petl http://pypi.python.org/pypi/petlx
特点是: 项目活跃度较高; 文档很不错; 支持多种数据源; 支持iterator(具有lazy加载机制); 很容易学习.
(推荐度****) pygrametl, http://pygrametl.org/ http://people.cs.aau.dk/~chr/pygrametl/ ,
特点是: 文档全, 有用户实例. 我看了写代码, 代码质量很高; 作者实现了基于维度建模思想的几个转换组件, 支持cpython/jpython, 很容易学习.
(推荐度***) pyf, http://pyfproject.org
特点是: 具有web 页面, 功能很眩. 大量使用python generator机制, 其本身也是基于flow based programming. 学习难度较大.
ETL往往也要关注执行效率, 关于python并行处理, 单机上, CPython当然要选择multiprocessing方式, 一来可充分利用多核, 同时编程难度也不大. 要是将多个任务分配在几个机器执行, 我认为选用久经考验的gearman最合适, 不仅能提供负载均衡, 而且可以改善可用性.
ELT多使用在MPP架构的数据仓库平台上, 比如Teradata, greenplum, 主要考虑点是, MPP数据仓库数据处理能力强, 在加载后再做转换, 可以充分利用这一优势. 另外, Extract和Load过程很简单, 且数据仓库厂商提供unloading/loading的命令行工具一般具有并行处理能力, 所以直接用这些命令行工具满足. 至于转换部分过程, 多为通过sql查询出stage区新加的记录, 然后做一些运算, 最后再拼sql将计算后的数据放在另一个区.
如果数据仓库是建在Oracle/SQL Server这类架构数据库上, 多采用ETL方式, 将转换放在数据仓库外运行, 以减轻数据仓库的压力. ETL过程也多选购商业软件, 比如Datastage, SSIS.
在ELT方案中, python也可大有作为. 即使是使用数据仓库厂商提供的命令行工具做Extracting和Loading, python仍可以作为胶水. 拼sql, python的三引号字符串以及字符串操作都超强, 很适合.
在ETL方案中, 使用python完成流程控制自然是很轻松的, 所以关键点是, 提供一个高效的基于记录行的pipeline执行机制, 以及如何提供较高的执行效率. 下面有几个开源项目还不错, 值得在项目中一试. 其实甚至不用什么额外的开源项目, 用标准库也很容易做transform的, 因为python内建支持sqlite, 接下来无需多讲了.
基于pipeline的开源项目:
(推荐度*****) petl, http://petl.readthedocs.org/en/latest/
http://pypi.python.org/pypi/petl http://pypi.python.org/pypi/petlx
特点是: 项目活跃度较高; 文档很不错; 支持多种数据源; 支持iterator(具有lazy加载机制); 很容易学习.
(推荐度****) pygrametl, http://pygrametl.org/ http://people.cs.aau.dk/~chr/pygrametl/ ,
特点是: 文档全, 有用户实例. 我看了写代码, 代码质量很高; 作者实现了基于维度建模思想的几个转换组件, 支持cpython/jpython, 很容易学习.
(推荐度***) pyf, http://pyfproject.org
特点是: 具有web 页面, 功能很眩. 大量使用python generator机制, 其本身也是基于flow based programming. 学习难度较大.
ETL往往也要关注执行效率, 关于python并行处理, 单机上, CPython当然要选择multiprocessing方式, 一来可充分利用多核, 同时编程难度也不大. 要是将多个任务分配在几个机器执行, 我认为选用久经考验的gearman最合适, 不仅能提供负载均衡, 而且可以改善可用性.
相关文章推荐
- 设计并实现数据仓库ETL过程(IBM讲座)
- 4000 python语言 实现数据仓库开发
- 4000 python语言 实现数据仓库开发
- 设计并实现数据仓库ETL过程(IBM讲座)
- 设计并实现数据仓库ETL过程(IBM讲座)
- 灵活有效的数据仓库解决方案,第3部分:设计并实现仓库ETL过程
- Python-基于数据驱动模式的自动化测试框架搭建的的逐步实现(一)
- 实现数据仓库的七个步骤、七个禁忌、七种思路
- Python实现导出数据生成excel报表的方法示例
- 数据归一化以及Python实现方式
- 使用scipy实现最小二乘法,以及通过曲线对数据进行拟合(Python)
- 中小型企业商业智能平台的开发和实现(数据仓库、BI系统、真实项目实战)
- 数据仓库之 ETL
- 机器学习与数据挖掘系列算法之--knn的python实现
- Python3实现的爬虫爬取数据并存入mysql数据库操作示例
- [python]使用python实现Hadoop MapReduce程序:计算一组数据的均值和方差
- Python 网络爬虫5 ---- 第一次实现抓取数据并且存放到mysql数据库中
- 通过SSIS设计ETL来将Oracle/DB2/Sybase等数据源的数据定期导入到数据仓库(一)
- 简单Python脚本实现数据导出Excel格式的尝试
- 数据仓库建模与ETL实践技巧