前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Apache NiFi 实现ETL过程中的数据转换

基于Apache NiFi 实现ETL过程中的数据转换

原创
作者头像
HostenWang
修改2020-11-23 10:29:12
2.3K0
修改2020-11-23 10:29:12
举报
文章被收录于专栏:全栈技术开发全栈技术开发

0 前言

Apache NiFi 是广泛使用的数据流管理工具,也可以实现ETL功能.

本次将讨论如何在NiFi实现ETL过程中实现转换功能,此处以列名转换为例.

1 应用场景

列名转换是ETL过程中常常遇到的场景。例如来源表user的主键id,要求写入目标表user的uid字段内,那么就需要列名转换.

2 方案选型

既然限定在 NiFi 框架内,那么只涉及实现方案选型.

2.1 基于执行自定义SELECT SQL 的 AS 语法

场景

适用于执行定制化SQL的场景,SQL形如

代码语言:javascript
复制
select id as uid from user

实现

处理器组实现如图

2.2 基于QueryRecord 处理器

场景

适用于使用 NiFi 组件生成SQL的场景

优势

  1. 通用性好
  2. 语法规范

实现

QueryRecord 的 SQL 形如

代码语言:javascript
复制
select id as uid from FLOWFILE 

2.3 基于ExecuteGroovyScript 等可以执行脚本语言的处理器

场景

适用于要实现复杂转换,且性能要求不高的场景

实现

实现方式因人而异,原理就是在 Groovy 脚本内解析数据,做列名转换再输出即可

优势

能实现复杂规则,且可以热加载,不需要部署和重启NiFi

劣势

需要学习 nifi groovy 代码的编写方法

2.4 自定义处理器

场景

适用于要实现复杂转换,且性能要求高的场景

实现

类似 2.3 ,但是需要设计覆盖自己业务的转换规则,一般规则不仅有列名转换,还有类型转换,格式转换等复杂业务。

优势

能实现复杂规则

可以覆盖更多业务规则,不仅是列名转换

性能比2.3高很多

劣势

需要部署和重启NiFi

3 当前方案优势

目前项目上使用方案2.2,因为项目上业务简单,直接使用SQL上手容易,便于维护和知识转移

4 当前版本存在的不足及解决方法

QueryRecord SQL 支持功能有限,需要进一步拓展来满足更多业务需求

5 未来规划

  1. 拓展QueryRecord SQL 覆盖更多业务规则
  2. 拓展的同时,同时考虑兼容ANSI SQL的语法、提高出错验证提示的用户体验和SQL的运行性能

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0 前言
  • 1 应用场景
  • 2 方案选型
    • 2.1 基于执行自定义SELECT SQL 的 AS 语法
      • 场景
      • 实现
    • 2.2 基于QueryRecord 处理器
      • 场景
      • 优势
      • 实现
    • 2.3 基于ExecuteGroovyScript 等可以执行脚本语言的处理器
      • 场景
      • 实现
      • 优势
      • 劣势
    • 2.4 自定义处理器
      • 场景
      • 实现
      • 优势
      • 劣势
  • 3 当前方案优势
  • 4 当前版本存在的不足及解决方法
  • 5 未来规划
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档