Bootstrap

ETL简介以及使用ETL(Kettle)进行数据接入的具体例子

目录

ETL介绍

ETL简介

ETL包含的三部分

ETL基本概念

ETL资源库

ETL变量

业务表梳理以及接入规划

数据接入流程

业务表梳理

ETL任务规范

接入规划

数据接入中的方便工具

具体例子

导出生产表信息

1、ORACLE

2、MYSQL

ETL数据增量抽取任务开发

1、ORACLE通用流程

ORACLE通用流程图所需建立临时表

2、接口接入流程举例

3、文件数据从FTP获取、解压、解析与入库流程举例

任务调度


ETL介绍

ETL简介

ETLExtratctionTransformation and Loading)是构建数据仓库的基础技术,也是批量数据交换的基础技术,是将数据从源抽取、转换、整合、清洗并加载到目标的过程。

ETL包含的三部分

  1. 一.数据抽取:即确定数据源,采集原始数据,通过不同的数据接口,从不同的数据源中抽取数据。
  2. 二.数据转换:指接收来自不同系统的输入并将其转换成目标需要的格式的过程,包括数据的各种统计、合并、汇总、查询、过滤、排序、函数计算、合并拆分、转换等。数据清洗是对抽取的数据进行有效性检查,从中去除无效、重复、错误记录的过程。
  3. .   数据装载:负责将数据按照目标数据库元数据定义的表结构装入目标系统,即对经过前几步清洗和转换后的数据进行存储。

ETL基本概念

  • 步骤:ETL的基本构成块,最小的功能单位。
  • 转换:由多个步骤组成的业务处理流程。
  • 作业:由多个步骤和转换组成的业务流程。
  • 跳:步骤之间的关系,也可以看做步骤间的缓存。

ETL资源库

用来保存转换和作业的数据库。

ETL变量

命名参数:
变量的一种,作为转换或作业参数使用。
通过改变命名参数,可以实现流程的复用。

业务表梳理以及接入规划

数据接入流程

业务表梳理

ETL任务规范

接入规划

数据接入中的方便工具

1Excel

2、文本编辑器

具体例子

导出生产表信息

1、ORACLE

with tmp as (
SELECT 
	A.CONSTRAINT_NAME tmp1,
	A.table_name tmp2,
	A.COLUMN_NAME tmp3
FROM
	all_cons_columns A,
	all_constraints b 
WHERE
	A.CONSTRAINT_NAME = b.CONSTRAINT_NAME 
	AND b.constraint_type = 'P'
	-- AND A.OWNER = 'XRAPUSER'
	-- AND A.TABLE_NAME = 'AGZX_HLWPJ'
)SELECT 
       '62.64.13.44'       AS IP
      ,'xxx'               AS SYS
      ,A.OWNER
      ,A.TABLE_NAME        AS TABLE_NAME_EN      --英文表名
      ,B.COMMENTS          AS TABLE_NAME_CN      --中文表名
      ,A.COLUMN_ID                               --字段序号
      ,A.COLUMN_NAME       AS COLUMN_NAME_EN     --字段名称
      ,C.COMMENTS          AS COLUMN_NAME_CN     --字段注释
      ,A.DATA_TYPE               --字段类型
      ,A.CHAR_LENGTH             --字段长度
      ,A.DATA_LENGTH             --数据长度
      ,A.DATA_PRECISION          --数据精度
      ,A.DATA_SCALE              --小数位
	  ,case when tmp.tmp1 is not null then 'Y' else null end as primary_key
 FROM ALL_TAB_COLUMNS A          --表与字段信息
 
 LEFT JOIN ALL_TAB_COMMENTS B   --表名信息
   ON B.OWNER = A.OWNER
  AND B.TABLE_NAME = A.TABLE_NAME

 LEFT JOIN ALL_COL_COMMENTS C   --字段名信息
   ON C.OWNER = A.OWNER
  AND C.TABLE_NAME = A.TABLE_NAME 
  AND C.COLUMN_NAME = A.COLUMN_NAME
  
 left join tmp 
   on tmp.tmp2 = A.TABLE_NAME 
  and tmp.tmp3 = A.COLUMN_NAME
 
WHERE A.OWNER = 'XRAPUSER' 
ORDER BY A.OWNER,A.TABLE_NAME,A.COLUMN_ID 

2、MYSQL

SELECT 
       "62.64.39.135"      AS IP
      ,"sfbz"               AS SYS
      ,TABLE_SCHEMA
      ,TABLE_NAME        AS TABLE_NAME_EN      		
      ," "          AS TABLE_NAME_CN     						
      ,ORDINAL_POSITION                           		
      ,COLUMN_NAME       AS COLUMN_NAME_EN   				
      ,COLUMN_COMMENT          AS COLUMN_NAME_CN  
      ,DATA_TYPE               											
      ,CHARACTER_MAXIMUM_LENGTH            					
      ,CHARACTER_OCTET_LENGTH            						
      ,NUMERIC_PRECISION        											
      ,NUMERIC_SCALE            									
	  ," " as primary_key
		,COLUMN_TYPE
 FROM information_schema.columns  
  where table_name like "result_%" and table_schema="dzzyk" order by TABLE_NAME_EN ,ORDINAL_POSITION

ETL数据增量抽取任务开发

下列例子中的KTR流程,思路打通,其实开发还是比较顺畅,如果有需要下面流程参考的大佬可以一起交流,关于Kettle具体使用各个组件的方法,后续可以再出文章介绍。

1、ORACLE通用流程

本流程主要是使用Oracle的ORA_ROW_SCN字段来做增量的,可以参考。

当然,具体要使用这个流程的话,还有中间表需要建立:

ORACLE通用流程图所需建立临时表

2、接口接入流程举例

全量请求证件号码接口,数据入库

增量请求抓拍数据接口,数据入库:

3、文件数据从FTP获取、解压、解析与入库流程举例

任务调度

对CS端开发的任务进行周期性、一次性调度。

;