精华内容
下载资源
问答
  • ETL技术

    2015-10-20 19:19:38
    1、ETL的定义 ETL分别是“Extract”、“ Transform” 、“Load”三个单词的首字母缩写也就是“抽取”、“转换”、“装载”,但我们日常往往简称其为数据抽取。 ETL是BI/DW(商务智能/数据仓库)的核心和灵魂...

    1、ETL的定义

    ETL分别是Extract“ Transform” Load三个单词的首字母缩写也就是抽取转换装载,但我们日常往往简称其为数据抽取。

    ETLBI/DW(商务智能/数据仓库)的核心和灵魂,按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的重要步骤。

    ETL包含了三方面:

    抽取:将数据从各种原始的业务系统中读取出来,这是所有工作的前提。

    转换:按照预先设计好的规则将抽取得数据进行转换,使本来异构的数据格式能统一起来。

    装载:将转换完的数据按计划增量或全部导入到数据仓库中。

     

    2、为什么需要ETL?

    因为目前运行的应用系统是用户花费了很大精力和财力构建的、不可替代的系统,尤其系统中的数据是非常之宝贵。但由于不同原始数据库中的数据的来源、格式不一样,导致了系统实施、数据整合出现问题。ETL就是用来解决这一问题的。


    3、ETL工具之Kettle

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

    Kettle中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。

    Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。

    Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

    Kettle可以在http://kettle.pentaho.org/网站下载到。


    展开全文
  • 文章从ETL的概念出发,简要分析了当前ETL中用到的一些基本技术,为ETL系统的开发和ETL技术的应用提供一些参考。1.ETL简介随着企业信息化建设的发展,巨大的投资为企业建立了众多的信息系统,以帮助企业进行内外部...
  • ETL技术及应用 实例

    2011-03-31 11:33:24
    ET技术及应用ET技术及应用ETL技术及应用 实例ETL技术及应用 实例ETL技术及应用 实例ETL技术及应用 实例ETL技术及应用 实例ETL技术及应用 实例ETL技术及应用 实例
  • PAGE iv 大数据ETL技术方案 目 录 TOC \o "1-3" \h \z \u 1 ETL介绍 1 2 ETL工具介绍 2 2.1 Kettle 2 2.1.1 Kettle介绍 2 2.1.2 Kettle连接各种数据源 4 2.2 Sqoop工具使用不需要安装orc客户端 21 2.2.1 简介 21 ...
  • Hadoop与ETL技术在视频数据中的应用,Hadoop与ETL技术在视频数据中的应用
  • 第3章 ETL技术;内 容; 在构建商业智能系统的时候如何正确有效地将分散在各个不同数据源中的信息整合到系统中成为了整个系统成败的关键直接影响到系统的运行效率和最终结果ETL正是解决这一问题的有力工具 ETL是指把...
  • ETL技术入门之ETL初认识 分类: etl2014-07-10 23:11 3021人阅读 评论(2) 收藏 举报 数据仓库商业价值etlbi 目录(?)[-] ETL是什么先说下背景知识下面给下ETL的详细解释定义现在来看下...
     

    ETL技术入门之ETL初认识

    分类: etl 3021人阅读 评论(2) 收藏 举报

    目录(?)[-]

    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、 每个步骤的耗时、速度 、平均每秒多少行、 总共插入了多少记录数等。

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

    展开全文
  • 基于ETL 技术的装备大数据治理应用 韩戈白,等 基于ETL 技术的装备大数据治理应用 Application of ETL Technology in Equipment Big Data Governance 韩戈白,王博,陈迪,杨绍雄中国电子科技集团公司第二十八研究所,...
  • ETL技术在电信行业KPI监视系统中的应用,栾华华,,随着电信业在宽带化、智能化、个人化和综合化的方向上的迅猛发展,作为保障电信网络正常运行和提高网络服务质量的运营支撑系统
  • 基于DTS组件的B/S模式数据仓库的ETL技术研究,邱云飞,邵良杉,数据仓库中的数据不是传统数据库中数据的简单堆积,它是一个复杂的容纳数据集成的系统工程,为决策者提供访问、分析及共享信息的能�
  • kettle -ETL技术

    2009-08-17 17:14:16
    为了给下个项目做个准备工作,我的下个项目主要就是数据抽取这一块,整个系统中的数据都是从其他系统中通过日钟传输过来的,所以为了解决数据的导入问题,我们要在这个项目用ETL技术,ETL(extract,transform,load)...
    为了给下个项目做个准备工作,我的下个项目主要就是数据抽取这一块,整个系统中的数据都是从其他系统中通过日钟传输过来的,所以为了解决数据的导入问题,我们要在这个项目用ETL技术,ETL(extract,transform,load)数据的抽取,转换,和导入。数据的抽取有很多种来源,比如说:直接从数据库中拿,从文本文件中获取,或者从execl文件中获取等,第二个重要的步骤就是转换,我们获取的数据必须转换成我们合法的数据,怎么说呢,就像你有很多水果,但是顾客想要的是好的水果,坏的我不要,在ETL中我们就要对数据进行清洗了,清洗好的数据,我们再进行转化就成为我们想要的数据咯,说到这里,大家估计明白了一点了,ETL其实是一个很抽象的概念,我们所要做的,就是怎么去理解他的思想,理解了他,你就对他了解了一半,还一半我们该怎么半呢?毫无疑问当然是实践咯!
    ETL技术有很多的框架来支撑这项技术,比如说非常流行的kettle,还有oracle的,具体的叫什么我也忘记了。
    现在就让我来给大家讲讲kettle是怎么工作的吧!
    下载一个kettle有很多中方式,你可以使用svn下载,也可以从kettle的官方网站下载。如果你还不知道怎么下载,那就来我的网站下载吧,我等会会给大家上传一个kettle 的,我的这个是kettle 3.0.2的。
    package test;

    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;

    import org.pentaho.di.core.Const;
    import org.pentaho.di.core.KettleEnvironment;
    import org.pentaho.di.core.NotePadMeta;
    import org.pentaho.di.core.database.Database;
    import org.pentaho.di.core.database.DatabaseMeta;
    import org.pentaho.di.core.exception.KettleException;
    import org.pentaho.di.core.logging.LogWriter;
    import org.pentaho.di.core.util.EnvUtil;
    import org.pentaho.di.trans.StepLoader;
    import org.pentaho.di.trans.Trans;
    import org.pentaho.di.trans.TransHopMeta;
    import org.pentaho.di.trans.TransMeta;
    import org.pentaho.di.trans.step.StepMeta;
    import org.pentaho.di.trans.step.StepMetaInterface;
    import org.pentaho.di.trans.steps.selectvalues.SelectValuesMeta;
    import org.pentaho.di.trans.steps.tableinput.TableInputMeta;
    import org.pentaho.di.trans.steps.tableoutput.TableOutputMeta;


    /**
    * Class created to demonstrate the creation of transformations on-the-fly.
    *
    * @author Matt
    *
    */
    public class TransBuilder
    {
    public static final String[] databasesXML = {
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
    "<connection>" +
    "<name>target</name>" +
    "<server>localhost</server>" +
    "<type>MYSQL</type>" +
    "<access>Native</access>" +
    "<database>test</database>" +
    "<port>3306</port>" +
    "<username>root</username>" +
    "<password>12345</password>" +
    "</connection>",

    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
    "<connection>" +
    "<name>source</name>" +
    "<server>localhost</server>" +
    "<type>MYSQL</type>" +
    "<access>Native</access>" +
    "<database>test</database>" +
    "<port>3306</port>" +
    "<username>root</username>" +
    "<password>12345</password>" +
    "</connection>"
    };

    /**
    * Creates a new Transformation using input parameters such as the tablename to read from.
    * @param transformationName The name of the transformation
    * @param sourceDatabaseName The name of the database to read from
    * @param sourceTableName The name of the table to read from
    * @param sourceFields The field names we want to read from the source table
    * @param targetDatabaseName The name of the target database
    * @param targetTableName The name of the target table we want to write to
    * @param targetFields The names of the fields in the target table (same number of fields as sourceFields)
    * @return A new transformation
    * @throws KettleException In the rare case something goes wrong
    */
    public static final TransMeta buildCopyTable(String transformationName, String sourceDatabaseName, String sourceTableName, String[] sourceFields, String targetDatabaseName, String targetTableName, String[] targetFields) throws KettleException
    {
    EnvUtil.environmentInit();
    try
    {
    //
    // Create a new transformation...
    //
    TransMeta transMeta = new TransMeta();
    transMeta.setName(transformationName);

    // Add the database connections
    for (int i=0;i<databasesXML.length;i++)
    {
    DatabaseMeta databaseMeta = new DatabaseMeta(databasesXML[i]);
    transMeta.addDatabase(databaseMeta);
    }

    DatabaseMeta sourceDBInfo = transMeta.findDatabase(sourceDatabaseName);
    DatabaseMeta targetDBInfo = transMeta.findDatabase(targetDatabaseName);


    //
    // Add a note
    //
    String note = "Reads information from table [" + sourceTableName+ "] on database [" + sourceDBInfo + "]" + Const.CR;
    note += "After that, it writes the information to table [" + targetTableName + "] on database [" + targetDBInfo + "]";
    NotePadMeta ni = new NotePadMeta(note, 150, 10, -1, -1);
    transMeta.addNote(ni);

    //
    // create the source step...
    //
    String fromstepname = "read from [" + sourceTableName + "]";
    TableInputMeta tii = new TableInputMeta();
    tii.setDatabaseMeta(sourceDBInfo);
    String selectSQL = "SELECT "+Const.CR;
    for (int i=0;i<sourceFields.length;i++)
    {
    if (i>0) selectSQL+=", "; else selectSQL+=" ";
    selectSQL+=sourceFields[i]+Const.CR;
    }
    selectSQL+="FROM "+sourceTableName;
    tii.setSQL(selectSQL);

    StepLoader steploader = StepLoader.getInstance();

    String fromstepid = steploader.getStepPluginID(tii);
    StepMeta fromstep = new StepMeta(fromstepid, fromstepname, (StepMetaInterface) tii);
    fromstep.setLocation(150, 100);
    fromstep.setDraw(true);
    fromstep.setDescription("Reads information from table [" + sourceTableName + "] on database [" + sourceDBInfo + "]");
    transMeta.addStep(fromstep);

    //
    // add logic to rename fields
    // Use metadata logic in SelectValues, use SelectValueInfo...
    //
    SelectValuesMeta svi = new SelectValuesMeta();
    svi.allocate(0, 0, sourceFields.length);
    for (int i = 0; i < sourceFields.length; i++)
    {
    svi.getMeta()[i].setName(sourceFields[i]);
    svi.getMeta()[i].setRename(targetFields[i]);
    }

    String selstepname = "Rename field names";
    String selstepid = steploader.getStepPluginID(svi);
    StepMeta selstep = new StepMeta(selstepid, selstepname, (StepMetaInterface) svi);
    selstep.setLocation(350, 100);
    selstep.setDraw(true);
    selstep.setDescription("Rename field names");
    transMeta.addStep(selstep);

    TransHopMeta shi = new TransHopMeta(fromstep, selstep);
    transMeta.addTransHop(shi);
    fromstep = selstep;

    //
    // Create the target step...
    //
    //
    // Add the TableOutputMeta step...
    //
    String tostepname = "write to [" + targetTableName + "]";
    TableOutputMeta toi = new TableOutputMeta();
    toi.setDatabaseMeta(targetDBInfo);
    toi.setTablename(targetTableName);
    toi.setCommitSize(200);
    toi.setTruncateTable(true);

    String tostepid = steploader.getStepPluginID(toi);
    StepMeta tostep = new StepMeta(tostepid, tostepname, (StepMetaInterface) toi);
    tostep.setLocation(550, 100);
    tostep.setDraw(true);
    tostep.setDescription("Write information to table [" + targetTableName + "] on database [" + targetDBInfo + "]");
    transMeta.addStep(tostep);

    //
    // Add a hop between the two steps...
    //
    TransHopMeta hi = new TransHopMeta(fromstep, tostep);
    transMeta.addTransHop(hi);

    // OK, if we're still here: overwrite the current transformation...
    return transMeta;
    }
    catch (Exception e)
    {
    throw new KettleException("An unexpected error occurred creating the new transformation", e);
    }
    }

    /**
    * 1) create a new transformation
    * 2) save the transformation as XML file
    * 3) generate the SQL for the target table
    * 4) Execute the transformation
    * 5) drop the target table to make this program repeatable
    *
    * @param args
    */
    public static void main(String[] args) throws Exception
    {
    KettleEnvironment.init();

    // Init the logging...
    //
    LogWriter.getInstance("TransBuilder.log", true, LogWriter.LOG_LEVEL_DETAILED);

    // The parameters we want, optionally this can be
    String fileName = "NewTrans.xml";
    String transformationName = "Test Transformation";
    String sourceDatabaseName = "source";
    String sourceTableName = "customer";
    String sourceFields[] = {
    "id",
    "customernr",
    "name",
    "firstname"
    };

    String targetDatabaseName = "target";
    String targetTableName = "cust";
    String targetFields[] = {
    "id",
    "custNo",
    "lastName",
    "firstName"
    };


    // Generate the transformation.
    TransMeta transMeta = TransBuilder.buildCopyTable(
    transformationName,
    sourceDatabaseName,
    sourceTableName,
    sourceFields,
    targetDatabaseName,
    targetTableName,
    targetFields
    );

    // Save it as a file:
    String xml = transMeta.getXML();
    DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File(fileName)));
    dos.write(xml.getBytes("UTF-8"));
    dos.close();
    System.out.println("Saved transformation to file: "+fileName);

    // OK, What's the SQL we need to execute to generate the target table?
    String sql = transMeta.getSQLStatementsString();

    // Execute the SQL on the target table:
    Database targetDatabase = new Database(transMeta.findDatabase(targetDatabaseName));
    targetDatabase.connect();
    targetDatabase.execStatements(sql);

    // Now execute the transformation...
    Trans trans = new Trans(transMeta);
    trans.execute(null);
    trans.waitUntilFinished();

    // For testing/repeatability, we drop the target table again
    targetDatabase.execStatement("drop table "+targetTableName);
    targetDatabase.disconnect();
    }


    }
    展开全文
  • 怎么将ETL技术落地

    2020-12-18 20:21:19
    ETL概述 ETL(Extraction-Transformation-Loading)是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据,ETL是BI...
        

    ETL概述

    ETL(Extraction-Transformation-Loading)是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据, ETL是BI(商业智能)项目重要的一个环节。

     

     

     

    数据治理流程

     

    数据挖掘一般是指从大量的数据中通过算法搜索隐藏于其中信息的过程。它通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来实现上述目标。它的分析方法包括:分类、估计、预测、相关性分组或关联规则、聚类和复杂数据类型挖掘。

     

     

    1)数据的采集

    首先得有数据,数据的收集有两个方式,第一个方式是拿,专业点的说法叫抓取或者爬取,例如搜索引擎就是这么做的,它把网上的所有的信息都下载到它的数据中心,然后你一搜才能搜出来。

     

    2)数据的传输

    一般会通过队列方式进行,因为数据量实在是太大了,数据必须经过处理才会有用,可是系统处理不过来,只好排好队,慢慢的处理。

     

    3)数据的存储

    现在数据就是金钱,掌握了数据就相当于掌握了钱。要不然网站怎么知道你想买什么呢?就是因为它有你历史的交易的数据,这个信息可不能给别人,十分宝贵,所以需要存储下来。

     

    4)数据的清洗和分析

    上面存储的数据是原始数据,原始数据多是杂乱无章的,有很多垃圾数据在里面,因而需要清洗和过滤,得到一些高质量的数据。对于高质量的数据,就可以进行分析,从而对数据进行分类,或者发现数据之间的相互关系,得到知识。

     

    注:第三与第四个步骤,现存后清洗和先清洗再存,在真是的业务场景中可以适当互换。

     

    5)数据的检索和挖掘

    检索就是搜索,所谓外事问google,内事问百度。挖掘,仅仅搜索出来已经不能满足人们的要求了,还需要从信息中挖掘出相互的关系。

     

    6)数据的加载与应用

    怎么友好的展示与传递给用户为数据挖掘工作做好闭环。

     

    数据治理工具类

    1)数据采集工具

    1、针对日志文件类

    工具

    定义

    Logstash

    Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到所选择的目的地。

    Filebeat

    Filebeat 作为一个轻量级的日志传输工具可以将日志推送到中心 Logstash。

    Fluentd

    Fluentd 创建的初衷主要是尽可能的使用 JSON 作为日志输出,所以传输工具及其下游的传输线不需要猜测子字符串里面各个字段的类型。这样,它为几乎所有的语言都提供库,即可以将它插入到自定义的程序中。

    Logagent

    Logagent 是 Sematext 提供的传输工具,它用来将日志传输到 Logsene(一个基于SaaS 平台的 Elasticsearch API)。

    Rsylog

    绝大多数 Linux 发布版本默认的守护进程,rsyslog 读取并写入 /var/log/messages。它可以提取文件、解析、缓冲(磁盘和内存)以及将它们传输到多个目的地,包括 Elasticsearch 。可以从此处找到如何处理 Apache 以及系统日志。

    Logtail

    阿里云日志服务的生产者,目前在阿里集团内部机器上运行,经过3年多时间的考验,目前为阿里公有云用户提供日志收集服务。

     

    关于详解日志采集工具Logstash、Filebeat、Fluentd、Logagent、Rsylog和Logtail在优势、劣势

     

    2、针对爬虫类

     

    页面下载 --> 页面解析 --> 数据存储

    (1)页面下载器

    对于下载器而言,python的库requests能满足大部分测试+抓取需求,进阶工程化scrapy,动态网页优先找API接口,如果有简单加密就破解,实在困难就使用splash渲染。

    (2)页面解析器

    ①BeautifulSoup(入门级):Python爬虫入门BeautifulSoup模块

    ②pyquery(类似jQuery):Python爬虫:pyquery模块解析网页

    ③lxml:Python爬虫:使用lxml解析网页内容

    ④parsel:Extract text using CSS or XPath selectors

    ⑤scrapy的Selector (强烈推荐, 比较高级的封装,基于parsel)

    ⑥选择器(Selectors):python爬虫:scrapy框架xpath和css选择器语法

    --------------------- 

    总结:

    解析器直接使用scrapy的Selector 就行,简单、直接、高效。

    (3)数据存储

    ①txt文本:Python全栈之路:文件file常用操作

    ②csv文件:python读取写入csv文件

    ③sqlite3 (python自带):Python编程:使用数据库sqlite3

    ④MySQL:SQL:pymysql模块读写mysql数据

    ⑤MongoDB:Python编程:mongodb的基本增删改查操作

    --------------------- 

    总结:

    数据存储没有什么可深究的,按照业务需求来就行,一般快速测试使用MongoDB,业务使用MySQL

    (4)其他工具

    ①execjs :执行js

    Python爬虫:execjs在python中运行javascript代码

    ②pyv8: 执行js

    mac安装pyv8模块-JavaScript翻译成python

    ③html5lib

    Python爬虫:scrapy利用html5lib解析不规范的html文本

     

    2)数据清洗工具

    1、DataWrangler

    基于网络的服务是斯坦福大学的可视化组设计来清洗和重排数据的.文本编辑非常简单。例如,当我选择大标题为“Reported crime in Alabama”的样本数据的某行的“Alabama”,然后选择另一组数据的“Alaska”,它会建议提取每州的名字。把鼠标停留在建议上,就可以看到用红色突出显示的行。

    2、Google Refine

    它可以导入导出多种格式的数据,如标签或逗号分隔的文本文件、Excel、XML和JSON文件。Refine设有内置算法,可以发现一些拼写不一样但实际上应分为一组的文本。导入你的数据后,选择编辑单元格->聚类,编辑,然后选择要用的算法。数据选项,提供快速简单的数据分布概貌。这个功能可以揭示那些可能由于输入错误导致的异常——例如,工资记录不是80,000美元而竟然是800,000美元;或指出不一致的地方——例如薪酬数据记录之间的差异,有的是计时工资,有的是每周支付,有的是年薪。除了数据管家功能,Google Refine还提供了一些有用的分析工具,例如排序和筛选。

    3、Logstash

    Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理。

    3)数据存储工具

    数据存储主要分为结构化数据的存储和非结构化数据的存储。

    1、结构化数据

    (1)定义

    一般指存储在数据库中,具有一定逻辑结构和物理结构的数据,最为常见的是存储在关系数据库中的数据;非结构化数据:一般指结构化数据以外的数据,这些数据不存储在数据库中,而是以各种类型的文本形式存放,其中Web上的一些数据(内嵌于HTML或XML标记中)又具有一定的逻辑结构和物理结构,被称为半结构数据。

    (2)存储系统

    目前比较成熟的结构化存储系统有Oracle、MySQL、Hadoop等。

    2、非结构化数据

    (1)定义

    非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、XML, HTML、各类报表、图像和音频/视频信息等等。

    (2)存储方式

    1)使用文件系统存储文件,而在数据库中存储访问路径。这种方式的优点是实现简单,不需要DBMS的高级功能,但是这种方式无法实现文件的事务性访问,不便于数据备份和恢复,不便于数据迁移等; 

    2)使用阿里云OSS的文件存储功能。

    4)数据计算工具

    数据计算分为实时计算、在线计算、离线计算。

    1、数据实时计算

    Apache Storm

    2、数据在线计算

    Elasticsearch

    MySQL

    3、数据离线计算

    HaDoop Hive

     

    5)数据分析工具

    1、对数据矩阵科学计算:Python的numpy库

    2、对数据切片等常规处理:强大的pandas库

    3、对数据建模处理:sklearn库

    6)数据加载工具

    1、数据的可视化处理:Python中的matplotlib和seaborn库

    2、常用的BI可视化工具:Tableu和帆软

    3、ECharts

    ——————————————

    阅读推荐

    【大厂】基于rabbitMQ消息中心技术方案

    【干货】一篇文章讲透数据挖掘

    深度探讨知识图谱建模

    【数据中台】数据中心建设规划

    【流媒体】ffmpeg+HLS实现直播与回放

    技术不能凌驾于业务,但可以引导业务

    说框架设计思路

    老王说架构

    FaaS技术架构

    从URL到看到网页的过程

    展开全文
  • ETL技术入门之ETL初认识,数据仓库

    千次阅读 2017-11-08 17:01:18
    ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。 ETL是...
  • ETL是什么 ETL是Extract Transform Load三个英文单词的缩写 中文意思就是抽取、转换、加载。说到ETL就必须提到数据仓库。 先说下背景知识: 信息是现代企业的重要资源,是企业运用科学管理、决策分析...
  • 其实对于这个议题,需要从客户需求本身说起,...如果我们能往前再进一步,很多时候,日志中心的建设,不仅仅为运维监控负责,也为业务运营负责,所以一个日志中心产品具备基本的大数据ETL能力是很有必要的。交代了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,593
精华内容 637
关键字:

etl技术