`
shiren1118
  • 浏览: 133505 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

发一个我写的ETL(BI)工具perletl开源项目

    博客分类:
  • db
阅读更多

BI--商务智能
DW--数据仓库

一定是未来10年的重头戏。我们知道现在企业级应用越来越多,数据量自然越来越大,尤其以电信,银行,erp,电子商务,社交网络等非常明显。以移动为例,每天n个T的话单数据,以校内网为例,它现在成立了一个数据仓库部门,在招人,使用hive数据库,比如做营销的北京新华信,比如淘宝~~~~~~~业界也是,比如teredata公司推出了pb级别的数据仓库,1pb=1024T,大家可以想象一下pb是个什么概念

数据仓库是面向主题,保存的是历史数据,它不需要事务处理,它需要进行多维分析,也就是说一旦数据进入到数据仓库,它就基本不会改变了
那么它是怎么进入到数据仓库的呢?

答案是ETL(抽取,转换,加载),当然etl的范畴里也包含数据清洗。



this is a pm for ETL,now the first version support DB2,in future,maybe add mysql,Oracle etc

这是我用perl写的perl模块,主要是通过perl操作DB2。内置了很多使用功能,是ETL的好帮手
本模块对容错,事物,连接方式都进行了优化,尤其擅长对db2的各种操作

实用功能:如定时执行任务······
 
Google code上
项目主页:http://code.google.com/p/perletl/
可以用svn检出,地址:svn checkout   http://perletl.googlecode.com/svn/trunk/ perletl-read-only

如不熟悉svn,自行搜索tortoise svn


<hr>

     perl连接DB2方式1:DBI::DBD

       1. 1组成部分

              -getDbHandler 同DBconnect(),建立并获取数据库连接
              -PrepareExecuteSql? 预编译SQL
              -TransRollback? 出错事务回滚
              -disconnect 与DBconnect()相反,销毁数据库连接

       2. 2执行部分

              -executeSQL 执行完SQL要我们手动关闭连接,用于处理多行SQL

              -executeOnceSQL 执行完SQL会自动关闭连接。
              -getSelect 获取结果集,然后自己写while进行处理。(内部无日志版getStatement)
              -getAllCount 获得表中记录总数,参数是表名

              -getCountBySQL 通过SQL获得表中记录总数,参数是SQL,如“select count(0) from mk_vsdm.a”返回的是数组的第一个,所以不要select多个字段

        -dropTables 删除表,如果存在DBI::DBD连接,使用它,没有就用db2cmd删除。可以容错。参数是模式名+表名组成的多个字符串数组,参数可以是1个,也可以是多个
        -isDb2TableExist 检测表名是否存在



    perl连接DB2方式2:

        -run_db2cmd_main 首先会调用setUserAndPasswd获取用户名密码,然后就可以执行SQL


    工具方法:

        -run_cmd 调用bat文件
        -mylog 普通日志打印
        -mySubLog 方法前日志打印,以+号和-号拼成的
        -myTabLog 在mylog日志前多一个tab
        -myStatusLog 执行状态日志打印,在myTabLog基础上,外加3个*号

    日期 :

        -createDir 创建相对路径




    TODO :支持多个connection,很简单写一个newConnection方法,在executeSQL中加connection参数。
 

1
3
分享到:
评论
2 楼 shiren1118 2010-04-13  
#!/usr/bin/perl
##########################################################################
# (c) Copyright Snug sang. 2010 All rights reserved.
#  SourceName   :  DB2Util.pm
#  Description  :  Defines common functions like command line argument checking
#             Also, functions to prepare and execute an SQL statement, and
#               roll back if an error occurs.etc.
#  Author       : Snug sang   <shiren1118@gmail.com>
#  Create_time  :  2010-03-15
#  Modify_time  :  2010-03-17
#
#
#   -getAllCount              获得表中记录总数,参数是表名
#   -getCountBySQL            通过SQL获得表中记录总数,参数是SQL,如“select count(0) from mk_vsdm.a”返回的是数组的第一个,所以不要select多个字段
#
#
#  Execute      :  perl getAccount.pl 20100318
#
#
##########################################################################
select STDERR; $|=1;
select STDOUT; $|=1;

use DBI;
use strict;
use warnings;


# access the module for DB2  Utility functions
use DB2Util;



##########################################################################
# Description : 获得表mk_vsdm.a的记录总数
# Input       : None
# Output      : 表mk_vsdm.a的记录总数 
###########################################################################
sub getAccount{
#sql语句
  my $sql = "select count(0) from mk_vsdm.a";

#执行并获得返回的数值
my @aaa = ETL::getSelect( $sql )->fetchrow();

return $aaa[0];
}

 

 
##########################################################################
# Description : 主方法,脚本入口函数
# Input       : None
# Output      : None
###########################################################################
sub main
{
  #查看当前表中的记录数
  ETL::mylog( "my sub  :".getAccount());

#提取表中所有记录总数
ETL::mylog(  "ETL::getAllCount sub   :".ETL::getAllCount("mk_vsdm.a"));

#通过sql来提取表中所有记录数
ETL::mylog( "ETL::getCountBySQL  sub  :".ETL::getCountBySQL("select count(0) from mk_vsdm.a"));

#关闭连接
ETL::disconnect();

return 0;
}


######################################################################
# program section

# To see if there is one parameter,
# if there is no parameter, exit program
if ( $#ARGV < 0 )
{
   exit(1);
}
# Get the first argument
my $CONTROL_FILE = $ARGV[0];

my $TX_DATE = substr(${CONTROL_FILE},length(${CONTROL_FILE})-8,;
if ( substr(${CONTROL_FILE}, length(${CONTROL_FILE})-3, 3) eq 'dir' ) {
    $TX_DATE = substr(${CONTROL_FILE},length(${CONTROL_FILE})-12,;
};
# init date variables
ETL::initDate($TX_DATE);
my $TX_MONTH=substr($TX_DATE,0,6);
open(STDERR, ">&STDOUT");
my $ret = main();
exit($ret);







1 楼 shiren1118 2010-04-13  
#!/usr/bin/perl
##########################################################################
# (c) Copyright Snug sang. 2010 All rights reserved.
#  SourceName   :  DB2Util.pm
#  Description  :  Defines common functions like command line argument checking 
#             		 Also, functions to prepare and execute an SQL statement, and 
#            		   roll back if an error occurs.etc.
#  Author       : Snug sang   <shrien1118@gmail.com>
#  Create_time  :  2010-03-15
#  Modify_time  :  2010-03-17
#
#								写好一个bat,放到一个sub方法中,然后在main方法中写一个while死循环	 
#								 检测日期equal 某个日期(年月日时分秒)
#
#
#  Execute      :  perl  run_db2cmd.pl  20100318
##########################################################################
select STDERR; $|=1;
select STDOUT; $|=1;

use DBI;
use strict;
use warnings; 


# access the module for DB2  Utility functions
use DB2Util;
 


sub callTask{

  #execute E:\aaa\test.bat
	my $bat=" D:
           cd qw
           call a.bat 
        ";
  
	print $bat;
	
	#正式脚本打开下面注释。
	#调用cmd执行bat脚本
	ETL::run_cmd($bat);
}

  
	
	
sub main
{
  #日期变量
	my $myDay="";
	
	#计数器变量
	my $account=0;
	
	while(1){
		#可能参数列表:
		#year
		#mon
		#day
		#hour
		#minute
		#second
		#weekOfDay
		#yearOfDay
		$myDay=ETL::getTimeBy("hour");
		$account = $account + 1 ;
		 
		sleep(10);
		
		#这里是15点调用callTask()方法,可以在if条件里加15点40分22秒···
		if($myDay eq "15"){
			#方法日志
		  ETL::mySubLog();
			
			#普通日志
		  ETL::mylog("第  $account 次 调用callTask()");
			
			#核心方法,调用bat文件
		  callTask();
			
			#方法日志
			ETL::mySubLog();
		}
		
		#编写退出while条件,即什么时候停止调用
		if($myDay eq "16"){
		
			ETL::mylog("调用callTask() finished");
			
			exit(0);
			
		}
	  
	
	}

	return 0;
}


######################################################################
# program section

# To see if there is one parameter,
# if there is no parameter, exit program
if ( $#ARGV < 0 )
{
   exit(1);
}
# Get the first argument
my $CONTROL_FILE = $ARGV[0];

my $TX_DATE = substr(${CONTROL_FILE},length(${CONTROL_FILE})-8, 8);
if ( substr(${CONTROL_FILE}, length(${CONTROL_FILE})-3, 3) eq 'dir' ) {
    $TX_DATE = substr(${CONTROL_FILE},length(${CONTROL_FILE})-12, 8);
};
# init date variables
ETL::initDate($TX_DATE);
my $TX_MONTH=substr($TX_DATE,0,6);
open(STDERR, ">&STDOUT");
my $ret = main();
exit($ret);



 




相关推荐

    ETL工具,开源,使用需要配置

    总的来说,ETL工具的使用和配置是一个涵盖数据库连接、数据处理逻辑、性能调优等多个方面的重要任务。通过深入理解这些组件和文件的作用,我们可以更好地掌握和运用这些工具,实现数据的高效流转和处理。

    商业与开源BI工具对比分析

    Bizgre 是一个轻量级的 BI 工具,适用于小型项目。 **2.1.2 Openi** Openi 提供了简单易用的数据可视化功能。 **2.1.3 Pentaho** Pentaho 是一个全面的 BI 平台,支持数据集成、报表、仪表板和分析等功能。 **...

    详解BI项目中的ETL

    ETL,全称为Extract, Transform, Load,是数据仓库(DW)建设中不可或缺的一个关键步骤。在BI(Business Intelligence)项目中,ETL扮演着整合数据、为决策支持提供准确信息的角色。通常,ETL约占整个项目工作量的三...

    BI 项目中ETL 设计与探究

    ### BI项目中ETL设计与探究 #### 一、引言 随着信息技术的发展,企业面临着海量数据管理和利用的挑战。商业智能(Business Intelligence,简称BI)作为一种将企业现有数据转化为可利用知识的重要工具,旨在帮助...

    ETL工具 ,基于Kettle实现的Web版ETL工具

    Kettle是一款开源的ETL工具,由Pentaho公司开发,因其强大的数据转换能力和灵活的插件体系而广受赞誉。本项目是基于Kettle实现的Web版ETL工具,旨在提供一种更直观、易用的方式来执行数据处理任务,尤其适合需要进行...

    BI开源报表工具调研报告

    尽管存在一些开源BI套件,如Pentaho、JasperServer等,但它们通常通过集成多个独立工具来实现功能齐全的BI解决方案,这增加了实施和维护的复杂性。 4. 开源BI工具的优势 开源BI工具的优势在于其灵活性、成本效益...

    kettle下载-一款免费开源ETL工具

    Kettle,全称为Pentaho Data Integration(简称PDI),是一款功能强大的开源ETL(Extract, Transform, Load)工具,由社区驱动并免费提供。它允许用户从各种数据源抽取数据,进行清洗、转换和加载到不同的目标系统,...

    ETL开源工具Kettle培训

    Kettle是一款强大的开源ETL(Extract, Transform, Load)工具,源自Pentaho公司,具有元数据驱动的设计理念。它的命名来源于"Kettle E.T.T.L. Environment"的首字母缩写,象征着将各种数据汇聚一堂,再按照特定格式...

    ETL工具以及BI产品

    【ETL工具与BI产品详解】 ETL(提取、转换、加载)工具是构建数据仓库的核心组成部分,其主要任务是从各种不同的数据源中抽取数据,对其进行清洗、转换,然后加载到数据仓库中。数据清洗是确保数据质量的关键步骤,...

    BI ETL ELT Kettle 基础知识中文文档汇总

    BI项目中ETL设计与思考.pdf CTL工具.pdf ETL-开发规范.pdf ETL_--_事实表.pdf ETL_文档.pdf ETL_架构.pdf ETL_调度系统技术方案说明书_V1.0.pdf ETL中的数据清洗设计.pdf ETL交流.pdf ETL培训.ppt ETL...

    阿里开源ETL工具DATAX

    阿里开源的DATAX是一款强大的数据同步工具,主要应用于ETL(Extract-Transform-Load)过程,旨在解决大数据环境中的数据迁移问题。它以其高效、稳定和易用的特点,被广泛应用于阿里巴巴集团内部以及众多外部企业。 ...

    PDI构建开源ETL解决方案_.pdf、开源ETL工具-PentahoKettle使用入门.pdf

    PDI,作为Pentaho BI Suite的一部分,是一款强大的、图形化的ETL工具,以Java编写,支持跨平台操作。其设计理念是提供直观的工作流界面,使得非程序员也能进行复杂的数据集成工作。PDI的灵活性和可扩展性让它在开源...

    BI开源项目现状和对比分析.doc

    - **重量级项目**:Pentaho和SpagoBI是功能齐全的BI平台,集成了众多开源组件,如JfreeReport、Mondrian、Kettle(ETL工具)、Weka等。Pentaho在中国广泛应用,具有丰富的文档和良好的中文支持,开发工具便捷,有...

    ETL工具对比分析

    它包含了一个图形化的开发环境,支持复杂的数据转换和集成。DataStage还集成了IBM的数据质量管理工具,适合需要高性能和企业级安全性的大型组织。 4. **Microsoft SQL Server Integration Services (SSIS)** SSIS...

    基于开源代码的ETL工具的实现

    为解决这一问题,基于开源的ETL工具Kettle,设计并实现了GoData,这是一个能够定制触发规则、根据预定周期自主运行数据交换作业的工具。GoData不仅支持跨节点和跨网段的数据交换,还具备节点监控、错误作业预警以及...

    开源ETL工具Kettle的相关文档

    Kettle,全称为Pentaho Data Integration(PDI),是一款强大的开源ETL(Extract, Transform, Load)工具,广泛应用于数据整合、数据清洗和数据迁移等场景。Kettle由Spoon、Kitchen、Pan等多个组件组成,提供图形化...

    开源的ETL工具-kettle7.1

    Kettle最早是一个开源的ETL(Extract-Transform-Load的缩写)工具,全称为KDE Extraction, Transportation, Transformation and Loading Environment。后来Kettle重命名为Pentaho Data Integration 。 它由Java开发...

    ETL工具信息整理

    - **ETL架构**:数据首先被抽取到一个中间层进行转换和清洗,然后再加载到目标数据仓库中。这种架构的优点包括可以减轻目标数据仓库的负担、实现复杂的数据转换逻辑以及与底层数据存储无关等特点。IBM DataStage 和 ...

    开源工具调研报告

    ### 开源工具调研报告 #### 一、BI系统的简述及分类 商务智能(Business Intelligence,简称BI)系统是一套全面的数据分析与决策支持体系...对于寻求成本效益最大化的企业而言,开源BI工具无疑是一个值得考虑的选择。

Global site tag (gtag.js) - Google Analytics