第一个ETL任务的开发

  • Last update:  2022-06-30
  • 1. 概述

    本文将设计一个简单的 ETL 任务,将一个数据库中的数据迁移到另外一个数据库中,并对迁移过去的数据进行筛选处理。

    希望您通过这个案例可以了解设计任务时的各种操作,掌握 ETL 任务开发的基本方法。

    2. 示例

    2.1 配置来源数据库

    2.1.1 简介

    1)数据处理人员需要确认已部署好的工程中,是否有自己需要的来源数据库。若没有,则需要新建来源数据库的数据连接。步骤请参见:配置数据连接

    2)来源数据库目前支持的数据库请参见:支持的数据源 文档第二章表格(支持数据读取的为来源数据库)。

    3)使用 Informix 数据库作为来源数据库时,若查询 SQL 中有双引号把字段包裹起来的写法,例如:SELECT "COL1", "COL2" FROM table1;,必须在配置 informix 数据连接时添加DELIMIDENT=Y参数才能正常使用,否则无法自动建表或成功执行对应 SQL。示例 URL:jdbc:informix-sqli://192.168.5.47:9088/fdl:INFORMIXSERVER=demo;DELIMIDENT=Y

    2.1.2 步骤

    本文示例中,使用的来源数据库为默认的 FRDemo 数据连接。如下图所示:

    2.2 配置目标数据库

    2.2.1 简介

    目标数据库用于存储从来源数据库抽取过来的数据,将散落的数据整合后存储到目标数据库中。

    所以在使用数据开发处理数据前,您需要先配置一个目标数据库(新建一个数据连接,连接到该数据库)。

    当前 FineDataLink 支持的目标数据库类型请参见 支持的数据源 文档第二章表格(支持数据写入的为目标数据库)。

    在连接目标数据库时(如何连接数据库请参见:配置数据连接),需要注意:

    • 由于数据开发涉及从来源数据库抽取数据至目标数据库,所以需要指定目标数据库的字符编码、解码格式;

      以 MySQL 数据库举例,我们需要在数据连接的 url 后增加参数 useUnicode=true&characterEncoding=UTF-8,添加参数后的 url 样式:jdbc:mysql://localhost:3306/prep?useUnicode=true&characterEncoding=UTF-8

    • 因为 ETL 任务需要读取目标数据库表结构,所以除 MySQL 类型数据库外,其他三种数据库均需要指定模式。

    • 使用 Informix 数据库作为目标数据库时,必须在配置 informix 数据连接时添加DELIMIDENT=Y参数才能正常使用,否则无法自动建表或成功执行对应 SQL。示例 URL:jdbc:informix-sqli://192.168.5.47:9088/fdl:INFORMIXSERVER=demo;DELIMIDENT=Y

    2.2.2 步骤

    本文示例中,使用的目标数据库为 MySQL 数据连接。如下图所示:

    2.3 创建任务

    点击「数据开发」,在某个文件夹下新建 ETL 任务,任务重命名为简单示例。如下图所示:

    2.4 设计任务

    2.4.1 数据跨库迁移

    实现将 SQLite 数据库下销量表中华东地区的数据全部抽取到 MySQL 数据库下,MySQL 数据库需要新建一张表来保存这些数据。

    1)数据跨库迁移通过「数据同步」节点实现。从节点列表处将一个「数据同步」节点拖到设计界面,点击该节点后下方会显示该节点的设置项。

    2)先设置数据从哪里抽取,设置项选择「数据来源」,数据源类型选择「SQLite」,数据连接选择「FRDemo」。使用 SQL 语句将销量表中所有华东地区的数据取出来:

    select * from 销量 where 地区='华东'

    注:在「数据开发」中使用到的所有数据连接不要随意改名字,改名字会导致「数据开发」中选择的数据连接和数据表丢失。

    SQL 语句写好后可以通过「数据预览」按钮查看取数效果。如下图所示:

    3)再设置数据抽取后保存到哪里去,设置项选择「数据去向」,数据源类型选择「MySQL」,数据连接选择「etlwendy」。

    还需要设置数据保存到哪张表里去,此处直接新建一个表来保存这些数据,目标表选择「自动建表」,表名称填写「salecopy」,如下图所示:

    4)字段映射是调整源表跟目标表字段关系的,此处采用默认设置即可,至此数据同步节点已经设置好。

    2.4.2 数据筛选处理

    实现将 salecopy 中销量大于 600 的数据保存到 MySQL 另一张表中,这张表也要新建,此处用 SQL 语句来建表。

    1)将一个「SQL脚本」节点拖到设计界面,数据源类型选择「MySQL」,数据连接选择「etlwendy」,并在下方填写建表「salesum」的语句。

    建表 SQL 语句如下:

    CREATE TABLE IF NOT EXISTS `salesum` (
    `地区` varchar(255) NULL DEFAULT NULL,
    `销售员` varchar(255) NULL DEFAULT NULL,
    `销量` float NULL DEFAULT NULL 
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

    2)再拖一个「SQL脚本」节点,数据源类型选择「MySQL」,数据连接选择「etlwendy」,填写 SQL 语句将 salecopy 中销量大于 600 的数据插入到 salesum 中去。

    SQL 语句如下:

    insert into salesum(地区,销售员,销量)
    select 地区,销售员,销量 
        from salecopy 
        where 销量>600

    2.4.3 建立节点运行顺序

    通过连线和箭头指向,定义好节点在任务中的运行顺序,操作如下图所示:

    2.4.4 节点重命名

    为了方便以后的节点管理,可以给这些节点都重命名下,这样可以直观看出节点的作用。

    右键节点弹出的选项中,选择「重命名」,然后修改名字点击确定即可。

    节点依次重命名为:销量表抽取数据salesum建表数据筛选处理。如下图所示:

    2.5 运行任务

    点击右上角「保存并运行」,底部日志会显示节点运行情况。如下图所示:

    注:任务运维界面介绍请参见:任务运维;用户若想定期运行任务,可使用 调度配置 功能

    2.6 效果查看

    MySQL 数据库中生成了两个表:

    salecopy:

    salesum:

    Attachment List


    Theme: 数据开发
    前の記事
    次の記事
    • いいね
    • 良くない
    • 閲覧しただけ

    フィードバック

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    反馈已提交

    网络繁忙