ETL是什么
ETL是Extract Transform Load三个英文单词的缩写 中文意思就是抽取、转换、载入。说到ETL就必须提到数据仓库。
先说下背景知识:
信息是现代企业的重要资源,是企业运用科学管理、决策分析的基础。
眼下。大多数企业花费大量的资金和时间来构建联机事务处理OLTP的业务系统和办公自己主动化系统(比如电信行业的各种运营支撑系统、购物站点系统)。用来记录事务处理的各种相关数据。
据统计,数据量每2~3年时间就会成倍增长,这些数据蕴含着巨大的商业价值,而企业所关注的通常仅仅占在总数据量的2%~4%左右。因此。企业仍然没有最大化地利用已存在的数据资源,以致于浪费了很多其它的时间和资金,也失去制定关键商业决策的最佳契机。
在这个背景下。可以给企业全部级别的决策制定过程提供支持的全部类型数据的战略集合应运而生,他就是数据仓库。数据仓库的英文简写是Data Warehouse。
数据仓库就是把OLTP系统产生的数据 整合到一起 发掘当中的商业价值和提供决策支持用。举个电信行业的样例 电信有系统每天会有客户投诉的信息、宽带群体性障碍、客户号码的停机恢复时间记录等等。
这些数据都在各自的生产环境系统里面。他们每一个月会把这些数据整合到一起处理加工到数据仓库里面形成报表 当中有一个功能是可以对哪些用户有离网销号的倾向做出大概的推断。这就是数据仓库的价值所在。
那么怎么把数据弄到数据仓库里去呢,当中用到的一个技术就是ETL。
以下给下ETL的详解定义:
ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)作为DW的核心和灵魂。可以依照统一的规则集成并提高数据的价值,是负责完毕数据从数据源向目标数据仓库转化的过程。是实施数据仓库的重要步骤。假设说数据仓库的模型设计是一座大厦的设计蓝图,数据是砖瓦的话。那么ETL就是建设大厦的过程。在整个项目中最难部分是用户需求分析和模型设计,而ETL规则设计和实施则是工作量最大的,约占整个项目的60%~80%,这是国内外从众多实践中得到的普遍共识。
ETL是数据抽取(Extract)、清洗(Cleaning)、转换(Transform)、装载(Load)的过程。是构建数据仓库的重要一环。用户从数据源抽取出所需的数据。经过数据清洗,终于依照预先定义好的数据仓库模型。将数据载入到数据仓库中去。
于是,企业怎样通过各种技术手段,并把数据转换为信息、知识,已经成了提高其核心竞争力的主要瓶颈。而ETL则是基本的一个技术手段。
做数据仓库系统。ETL是关键的一环。说大了,ETL是数据整合解决方式,说小了。就是倒数据的工具。
如今来说说ETL技术用到的工具,经常使用的有Informatica、Datastage、Beeload、Kettle等。
眼下仅仅用过kettle。所以这里仅仅对kettle做描写叙述。
kettle是一款国外开源的ETL工具,纯java编写,能够在Window、Linux、Unix上执行,kettle 3版本号须要安装 3以上都是绿色版无需安装。
提醒的是kettle执行 须要机器有JRE环境
Kettle这个ETL工具集。它同意你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描写叙述你想做什么。
Kettle中有两种脚本文件,transformation和job,transformation完毕针对数据的基础转换。job则完毕整个工作流的控制。
如今来看下kettle的transformation文件,一个最简单的E过程样例(windows环境)
上图文件的功能就是就是把oracle数据库一个表的数据抽取到还有一表里面。
左边的图标叫表输入 右边的叫表输出 中间绿色的线代表数据流向。
表输入和表输出可由左边的菜单条里 鼠标拖动出。
双击打开表输入是这种:
上图左边的是打开表输入的界面
步骤名称: 即是图标以下显示的名字 能够随便填
获取sql查询语句:点击后 会树状形式展示oracle的表视图 等 选中双击后 点自己会加入到空白的sql框内。
数据库连接: 一開始没有 须要新建 有了就能够编辑了 点击编辑后会弹出上图右边的页面
connection name :连接起个名字 能够使数据ip地址 加实例名
connection type :是选择你要查询的数据库类型 mysql oracle等等
method access:是选择驱动类型 选择那个JDBC就能够了
server host name :是数据库的ip地址
dbname :是数据库实例名
Port number:是port号
再以下就是username password了。
填好全部的信息后 能够点击test測试下能不能成功连接。
成功连接就可以点击确定 界面就会回到上面的左图
sql 以下的空框 是用来写你想要获取数据的sql语句(也能够由那个获取查询sqlbutton自己主动获取) 写好后 能够点击预览 (行数选少点)看下数据可正常。假设能预览数据 说明你的表输入就配好了。
上图左边
ennable lazy conversion 勾上后就表示延迟转换:这样在从数据库读取的数据就能保持原有字符集。不会默认强制使用utf8。
replace variables in :表示假设sql框里的sql有变量的时候 会使用环境变量替代它 像table_201407 这样带日期的固定格式表名 能够使用这个实现自己主动化
记录数量限制:默觉得0 若设为大于0的不论什么值 则不管sql怎么写的 输入表仅仅有设置的行数那么多。
如今来看表输出:
上图左边为双击打开表输出的 界面。
步骤名称:表输出图标以下显示的名字 可用数据库ip username 表名
数据库连接 :没有须要新建 能够新建几个 新建好的能够编辑
target schema :目标表或者视图的用户
目标表:能够自己输入。也能够从浏览里面选择
提交记录数量:批量一次提交的数据量或者非批量插入数据量的限制值
裁剪表:插入之前 有 truncate 操作。
忽略插入错误 :这是非批量插入的功能。非批量插入时 若有一天数据插入报错 后面的数据还能够正常插入。
使用批量插入:点上即是批量 否则为非批量。
PV数据库连接的编辑后 会弹出上图右图 与表输入的一样 填写数据库的tns信息 及usernamepassword。点击test能够连接后 点击确定
回到上图左边界面 再点击确定 即配好了一个转换 点击执行后:
能够从日志看 该转换有没有finished、 每一个步骤的耗时、速度 、平均每秒多少行、 总共插入了多少记录数等。