ETL技术入门之ETL初认识

ETL技术入门之ETL初认识

分类: etl 3021人阅读 评论(2) 收藏 举报
数据仓库商业价值etlbi

目录(?)[-]

  1. ETL是什么
  2. 先说下背景知识
  3. 下面给下ETL的详细解释定义
  4. 现在来看下kettle的transformation文件一个最简单的E过程例子windows环境
    1. 上图左边的是打开表输入的界面
      1. 步骤名称 即是图标下面显示的名字 可以随便填
      2. 获取sql查询语句点击后 会树状形式展示oracle的表视图 等 选中双击后 点自己会添加到空白的sql框内
      3. 数据库连接 一开始没有 需要新建 有了就可以编辑了 点击编辑后会弹出上图右边的页面
      4. connection name 连接起个名字 可以使数据ip地址 加实例名
      5. connection type 是选择你要查询的数据库类型 mysql oracle等等
      6. method access是选择驱动类型 选择那个JDBC就可以了
      7. server host name 是数据库的ip地址
      8. dbname 是数据库实例名
      9. Port number是端口号
      10. 再下面就是用户名 密码了
    2. 上图左边
      1. ennable lazy conversion 勾上后就表示延迟转换这样在从数据库读取的数据就能保持原有字符集不会默认强制使用utf8
      2. replace variables in 表示如果sql框里的sql有变量的时候 会使用环境变量替代它 像table_201407 这样带日期的固定格式表名 可以使用这个实现自动化
      3. 记录数量限制默认为0 若设为大于0的任何值 则无论sql怎么写的 输入表只有设置的行数那么多
    3. 上图左边为双击打开表输出的 界面
      1. 步骤名称表输出图标下面显示的名字 可用数据库ip 用户名 表名
      2. 数据库连接 没有需要新建 可以新建几个 新建好的可以编辑
      3. target schema 目标表或者视图的用户
      4. 目标表可以自己输入也可以从浏览里面选择
      5. 提交记录数量批量一次提交的数据量或者非批量插入数据量的限制值
      6. 裁剪表插入之前 有 truncate 操作
      7. 忽略插入错误 这是非批量插入的功能非批量插入时 若有一天数据插入报错 后面的数据还可以正常插入
      8. 使用批量插入点上即是批量 否则为非批量
      9. 点击数据库连接的编辑后 会弹出上图右图 与表输入的一样 填写数据库的tns信息 及用户名密码点击test可以连接后 点击确定

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:是端口号 

再下面就是用户名 密码了。


填好所有的信息后 可以点击test测试下能不能成功连接。成功连接即可点击确定 界面就会回到上面的左图


sql 下面的空框 是用来写你想要获取数据的sql语句(也可以由那个获取查询sql按钮自动获取) 写好后 可以点击预览 (行数选少点)看下数据可正常。如果能预览数据 说明你的表输入就配好了。

上图左边

ennable lazy conversion 勾上后就表示延迟转换:这样在从数据库读取的数据就能保持原有字符集,不会默认强制使用utf8。

replace variables in :表示如果sql框里的sql有变量的时候 会使用环境变量替代它 像table_201407 这样带日期的固定格式表名 可以使用这个实现自动化

记录数量限制:默认为0 若设为大于0的任何值 则无论sql怎么写的 输入表只有设置的行数那么多。


现在来看表输出:

上图左边为双击打开表输出的 界面。

步骤名称:表输出图标下面显示的名字 可用数据库ip 用户名 表名

数据库连接 :没有需要新建 可以新建几个 新建好的可以编辑

target schema :目标表或者视图的用户

目标表:可以自己输入,也可以从浏览里面选择

提交记录数量:批量一次提交的数据量或者非批量插入数据量的限制值

裁剪表:插入之前 有 truncate 操作。

忽略插入错误 :这是非批量插入的功能,非批量插入时 若有一天数据插入报错 后面的数据还可以正常插入。

使用批量插入:点上即是批量 否则为非批量。

点击数据库连接的编辑后 会弹出上图右图 与表输入的一样 填写数据库的tns信息 及用户名密码。点击test可以连接后 点击确定


回到上图左边界面 再点击确定 即配好了一个转换 点击运行后:



可以从日志看 该转换有没有finished、 每个步骤的耗时、速度 、平均每秒多少行、 总共插入了多少记录数等。

版权声明:本文为博主原创文章,未经博主允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ActiveSupport::Concern 和 gem 'name_of_person'(300✨) 的内部运行机制分析

理解ActiveRecord::Concern: 参考:include和extend的区别: https://www.cnblogs.com/chentianwei/p/9408963.html 传统的模块看起来像: module Mdef self.included(base)# base(一个类)扩展了一个模块"ClassMethods", b…

Python 3.8.0a2 发布,面向对象编程语言

百度智能云 云生态狂欢季 热门云产品1折起>>> Python 3.8.0a2 发布了,这是 3.8 系列计划中 4 个 alpha 版本的第 2 个。 alpha 版本旨在更加易于测试新功能和 bug 修复状态,以及发布流程。在 alpha 阶段会添加新功能,直到 beta 阶…

基于plotly数据可视化_如何使用Plotly进行数据可视化

基于plotly数据可视化The amount of data in the world is growing every second. From sending a text to clicking a link, you are creating data points for companies to use. Insights that can be drawn from this collection of data can be extremely valuable. Every…

ESLint简介

ESLint简介 ESLint是一个用来识别 ECMAScript 并且按照规则给出报告的代码检测工具,使用它可以避免低级错误和统一代码的风格。如果每次在代码提交之前都进行一次eslint代码检查,就不会因为某个字段未定义为undefined或null这样的错误而导致服务崩溃&…

数据科学与大数据是什么意思_什么是数据科学?

数据科学与大数据是什么意思Data Science is an interdisciplinary field that uses a combination of code, statistical analysis, and algorithms to gain insights from structured and unstructured data.数据科学是一个跨学科领域,它结合使用代码,…

C#制作、打包、签名、发布Activex全过程

一、前言 最近有这样一个需求,需要在网页上面启动客户端的软件,软件之间的通信、调用,单单依靠HTML是无法实现了,因此必须借用Activex来实现。由于本人主要擅长C#,自然本文给出了用C#实现的范例,本文的预期…

用Python创建漂亮的交互式可视化效果

Plotly is an interactive Python library that provides a wide range of visualisations accessible through a simple interface.Plotly是一个交互式Python库,通过简单的界面即可提供广泛的可视化效果。 There are many different visualisation libraries avai…

Hadoop 2.0集群配置详细教程

Hadoop 2.0集群配置详细教程 前言 Hadoop2.0介绍 Hadoop是 apache 的开源 项目,开发的主要目的是为了构建可靠,可拓展 scalable ,分布式的系 统, hadoop 是一系列的子工程的 总和,其中包含 1. hadoop common &#xff…

php如何减缓gc_管理信息传播-使用数据科学减缓错误信息的传播

php如何减缓gcWith more people now than ever relying on social media to stay updated on current events, there is an ethical responsibility for hosting companies to defend against false information. Disinformation, which is a type of misinformation that is i…

[UE4]删除UI:Remove from Parent

同时要将保存UI的变量清空,以释放占用的系统内存 转载于:https://www.cnblogs.com/timy/p/9842206.html

BZOJ2503: 相框

Description P大的基础电路实验课是一个无聊至极的课。每次实验,T君总是提前完成,管理员却不让T君离开,T君只能干坐在那儿无所事事。先说说这个实验课,无非就是把几根导线和某些元器件(电阻、电容、电感等)…

泰坦尼克号 数据分析_第1部分:泰坦尼克号-数据分析基础

泰坦尼克号 数据分析My goal was to get a better understanding of how to work with tabular data so I challenged myself and started with the Titanic -project. I think this was an excellent way to learn the basics of data analysis with python.我的目标是更好地了…

vba数组dim_NDArray — —一个基于Java的N-Dim数组工具包

vba数组dim介绍 (Introduction) Within many development languages, there is a popular paradigm of using N-Dimensional arrays. They allow you to write numerical code that would otherwise require many levels of nested loops in only a few simple operations. Bec…

关于position的四个标签

四个标签是static,relative,absolute,fixed。 static 该值是正常流,并且是默认值,因此你很少看到(如果存在的话)指定该值。 relative:框的位置能够相对于它在正常流中的位置有所偏移…

python算法和数据结构_Python中的数据结构和算法

python算法和数据结构To至 Leonardo da Vinci达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this article is to give you a panorama of data structures and algorithms in Python. This topic is very important for a Data Scientist in order to help …

CSS:元素塌陷问题

2019独角兽企业重金招聘Python工程师标准>>> 描述: 在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。但是当子元素设置浮动之后,子元素会完全脱离文档流,此时将会…

Celery介绍及常见错误

celery 情景:用户发起request,并等待response返回。在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验,比如发送邮件、手机验证码等。 使用celery后,情况…

python dash_Dash是Databricks Spark后端的理想基于Python的前端

python dash📌 Learn how to deliver AI for Big Data using Dash & Databricks this recorded webinar with Peter Kim of Plotly and Prasad Kona of Databricks.this通过Plotly的Peter Kim和Databricks的Prasad Kona的网络研讨会了解如何使用Dash&#xff06…

Eclipse 插件开发遇到问题心得总结

Eclipse 插件开发遇到问题心得总结 Posted on 2011-07-17 00:51 季枫 阅读(3997) 评论(0) 编辑 收藏1、Eclipse 中插件开发多语言的实现 为了使用 .properties 文件,需要在 META-INF/MANIFEST.MF 文件中定义: Bundle-Localization: plugin 这样就会…

在Python中查找子字符串索引的5种方法

在Python中查找字符串中子字符串索引的5种方法 (5 Ways to Find the Index of a Substring in Strings in Python) str.find() str.find() str.rfind() str.rfind() str.index() str.index() str.rindex() str.rindex() re.search() re.search() str.find() (str.find()) …