如果一定要用kettle解决的话,写个shell,自动解析excel,然后创建目标表。或者重写kettle的控件。kettle工具安装很简单,从官网上下载下来之后,直接解压到制定的盘符下即可(前提是你配置了JAVA的环境变量,path,classpath)。
在WINDOWS环境下双击Spoonbat文件,出现如下图:
image
点击如图所示的图标,进行本地文件导入的配置
image
选择红色线框下的选项,点击确定
image
按照上面的 *** 作,点击确定即可。
image
image
直接点击关闭即可
image
通过上面两个地方的任意一个都可以创建一个数据转换的工程。
image
从左边的输入中选择Excel输入拖动到右边的地方,双击显示的图标。
image
按照如上的 *** 作步骤,选择好要导入数据的Excel,然后选择工作表。
image
然后点击获取工作表名称
image
点击确定
image
接着配置字段的显示。
image
点击确定,这样Excel输入的配置就配置好了。
接下来配置表输出(即将Excel中的数据导出到目标的数据库中的表中,注意这里数据库中表的字段最好和excel表中的字段一致,这样接下来的数据字段映射就比较方便了)
image
从右边的输出中将表输出拖动到右边
image
建立两者之间的连接关系(将鼠标放到Excel输入上,会出现选项,将鼠标放到对应的选项上,然后拖动鼠标到表输出中
出现蓝色线条既可)
image
数据连接成功后,选择将数据导入到目标表的表的配置
image
然后选择数据库字段,进行字段映射的配置
image
这样将字段全部加入到最右边的方框中,点击确定。
image
点击确定就可以了,这样整个配置就结束了。点击启动就可以了
image
。这样在数据库中相对应的表中就可以查看到数据
linux 下,可以使用cli程序把csv文件导入到数据库。具体代码如下:
$ORACLE_HOME/bin/sqlplus -S username/password@instanceName > /dev/null 2>&1 <<!!#对sqlplus作一些设置,使之只输出我们需要的文本
set echo off
set pagesize 0
set verify off
set feedback off
set termout off
set linesize 3000
set trimspool on
#查询输出到临时文件
spool /tmp/some_tmpcsv
#select语句
select column1||','||column2||','||column3
from some_table where condition
spool off
#这里可以添加多个查询,且每个查询可输出到不同的文件,如下面注释
#spool /tmp/some_tmpcsv
#select column1||','||column2||','||column3
#from some_table where condition
#spool off
set markup HTML off
quit
!!
#计算记录总行数,如果是0则不发邮件
NUM=`cat /tmp/some_tmpcsv | wc -l`
if[ $NUM -gt 0 ]
then
#先写excel的每列的title
echo 'Title_Of_Column1, Title_Of_Column2, Title_Of_ColumnN' > /tmp/attachementcsv
#数据正文
cat /tmp/some_tmpcsv >> /tmp/attachementcsv
#发邮件
(
echo "From: user@somehostcom"
echo "To: user1@somehostcom"
echo "MIME-Version: 10"
echo "Content-Type: multipart/mixed;"
echo ' boundary="A_Boundary_Name_You_Can_Change_It"'
echo "Subject: Subject"
echo ""
echo ""
#附件分隔符,上面的boundary前面加--
echo "--A_Boundary_Name_You_Can_Change_It"
echo 'Content-Transfer-Encoding: x-uuencode'
echo 'Content-Type: text/csv;'
echo ' name="attachementcsv"'
echo 'Content-Disposition: attachment;'
echo ' filename="attachementcsv"'
echo ""
uuencode /tmp/attachementcsv attachementcsv
echo "--A_Boundary_Name_You_Can_Change_It"
#附件结束
) | mailx -t
fi
#删除临时文件
rm -f /tmp/csv
exit 0
在kettle常常有处理从一个源数据中做转换做转换的时候, 需要去查另一个数据库
这种问题遇到数据小时候还好办 但是数据魇 时候就麻烦来了
下面针对三种情况做具体情况的选择办法
先上一个图
[img]
[/img]
1 当需要转换的数据特别大的时候, 例如: 10W条以上或者100W条以上时
上图中,hadoop数据导入,导入的数据如果够多,例如100W条以上,其中一个字段需要查询数据库中查询,而这个字段的类型并不多,例如只有10个类型或者数据库中就只有这10个类型那么,可以走线路2, 并且线路2中的 "使用缓存" 可以打勾,也可以不打当然你这个源里的数据太多,打上当然最好了因为省得再去你的数据库里再查
但是当源里的数据类型还是只有10个类型,但是你的数据库里面存了有10000条记录时,怎么办
有两种解决办法:
1)线路2:并且查询节点中的 "使用缓存" 不能打勾
2)线路1,并在"带条件的结果查询供流查询使用" 这个结点中,用一个SQL,过滤一下数据,然后尽可能地把那里包括的这些记录查出来这样在流里的比对时也很快很多必竟是在内存里做运算了
2 查另一个数据库的数据量大时,而你的源数据不大
最好的选择是
线路1,并在"带条件的结果查询供流查询使用" 这个结点中,用一个SQL,过滤一下数据,然后尽可能地把那里包括的这些记录查出来这样在流里的比对时也很快很多必竟是在内存里做运算了
3 当两个数据源都非常大时(最不想遇到的)
这种情况是最不想遇到的办法
一种选择:
1)线路2中的 "使用缓存" 打勾
当然还有别的更复杂但是会更快的办法适用场景比较少,不再详细写了
好评赠送Kettle软件包61-8(1)2,免费下载
sd59
kettle 是纯 java 开发,开源的 ETL工具,用于数据库间的数据迁移 。可以在 Linux、windows、unix 中运行。有图形界面,也有命令脚本还可以二次开发。
引言
作为资深的DBA同胞你是否在工作中也存在这样的情况呢?公司要搭建数据平台,首要的工作就是把旧库的数据导入到新库中,虽然各种数据库都提供了导入导出的工具,但是数据需要存储到各个地方,MongoDB、HBase、MySQL、Oracle等各种各样的不同数据库,同步起来就有一些困难了。那么如何做好两个数据库之间、不同类型的数据库之间的相互迁移转换呢?
今天小编就常用的数据库同步、迁移转换工具进行一个汇总,以便大家在需要的时候,选择到合适的工具完成自己的工作~
一、SQLyog
SQLyog简介
SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用SQLyog可以快速直观地让你从世界的任何角落通过网络来维护远端的MySQL数据库。它也是小编工作一直使用的MySQL管理客户端工具哦。
SQLyog特点
方便快捷的数据库同步与数据库结构同步工具;
易用的数据库、数据表备份与还原功能;
支持导入与导出XML、HTML、CSV等多种格式的数据;
直接运行批量SQL脚本文件,速度极快;
新版本更是增加了强大的数据迁移
二、Navicat
Navicat简介
Navicat是一套快速、可靠并且价格相当便宜的数据库管理工具,Navicat提供多达 7 种语言供客户选择,被认为是最受欢迎的数据库前端用户界面工具。它可以用来对本地或远程的 MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL 数据库进行管理及开发。
Navicat支持功能
数据模型
数据传输
数据同步
结构同步
导入、导出、备份、还原、报表创建工具及计划以协助管理数据
三、Ottor
Ottor简介
Otttor是由阿里巴巴开源的一个数据同步产品,它的最初的目的是为了解决跨国异地整个机房的架构为双A,两边均可写。开发时间长达7年,并持续到现在。目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步,在最新的v4213已经支持mysql57以及阿里云提供的RDS数据库。小编已经在实际项目中使用。
Ottor特点
基于Canal开源产品,获取数据库增量日志数据。 (什么是Canal,详情查看>
打开kettle,定义数据源
1
kettle中定义两个数据源,其中“DS_ERP”是来源数据库,“DS_ODS”是用于同步的数据库
END
新建转换,用于同步某一张表
1
新建一个转换(执行SQL脚本--->>表输入--->>表输出)
执行SQL脚本:删除DS_ODS库中已经存在的数据
表输入:查询DS_ERP库中的数据
表输出:将“表输入”中的结果输出到DS_ODS库中
2
执行SQL脚本:删除DS_ODS库中已经存在的数据
${qy_table_name}:这个是参数,指同步的表名
3
表输入:查询DS_ERP库中的数据
${qy_table_name}:这个是参数,指同步的表名
4
表输出:将“表输入”中的结果输出到DS_ODS库中
${qy_table_name}:这个是参数,指同步的表名
END
新建转换,用于获取需要同步的表名
1
新建一个转换(文本文件输入--->>复制结果到记录)
文本文件输入:通过读取指定txt文件,获取所有要同步的表。(这里也可以通过其他方式获取,例如通过sql查询数据库系统表)
2
指定txt文件路径
3
定义txt文件中的字段名,同上一步中定义的参数名
4
txt中定义需要同步的表,每行一张表名
END
新建任务,实现批量同步
新建任务,调用前面的转换
其中,同步表的转换需要设置循环执行,并将获取到的表名传递到转换内部
以上就是关于使用kettle把excel文件导入到数据库时,怎么自动建立一张目标表全部的内容,包括:使用kettle把excel文件导入到数据库时,怎么自动建立一张目标表、kettle抽取linux下csv文件到Windows下数据库、kettle可以在同一个数据库里进行数据转换吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)