【大数据】NiFi 中的处理器(一):GenerateTableFetch

2023-11-08 04:12

本文主要是介绍【大数据】NiFi 中的处理器(一):GenerateTableFetch,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NiFi 中的处理器(一):GenerateTableFetch

  • 1.简介
  • 2.应用场景
  • 3.示例
    • 3.1 案例一:无输入流文件,来源表含增量字段
    • 3.2 案例二:无输入流文件,不含增量字段
    • 3.3 案例三:无输入流文件,带自增 id
    • 3.4 案例四:有来源流文件,查多表,无增量字段
    • 3.5 案例五:有来源流文件,查多表,带增量字段

1.简介

该处理器用于 生成在表中执行分页查询的 SQL 查询语句,分区(属性 partition)大小以及表的行数决定页面的大小和数量以及生成的流文件。此外,可以通过设置最大值列(Max-Value)来实现增量抓取数据,处理器会跟踪列的最大值,从而 只抓取列值超过已记录到的最大值的行,该处理器只在主节点上运行,可以接受传入的连接。

提供传入连接与否,处理器的行为是不同的:

  • 如果没有指定传入连接,处理器将根据指定的处理器调度生成 SQL 语句。许多字段都支持表达式语言,但是没有流文件属性可用。但是,可以使用变量注册表评估属性。
  • 如果指定了传入连接,并且处理器任务没有可用的流文件,则不执行任何工作。
  • 如果指定了传入连接,并且处理程序任务有可用流文件,则流文件的属性可以在表达式语言中用于表名等字段。但是,Max-Value 列和返回字段的列必须为空或者引用每个指定表中可用的列(多表查询,字段设置成属性表达式语言就可以了)。

关于该组件的相关配置在 官方文档 中已经描述的很清楚了,此处不再赘述。

2.应用场景

GenerateTableFetch 使用其属性和指定的数据库连接生成包含 SQL 语句的流文件,这些 SQL 语句可用于从表中获取分页的数据。GenerateTableFetch 执行对数据库的查询,以确定当前行数和最大值,如果指定了最大值列,则收集其最大值列的值大于 GenerateTableFetch 最后观察到的值的行数。这允许增量获取新行,而不是每次生成 SQL 来获取整个表。如果没有设置最大值列,那么处理器将生成 SQL 来每次获取整个表。

为了生成将获取分页数据的 SQL,默认情况下 GenerateTableFetch 将生成基于最大值列(如果存在)对数据排序的 SQL,并使用结果集的行号来确定每个页面。例如,如果最大值列是一个整数 id,分区大小为 10 10 10,那么第一个页面的 SQL 可能是 SELECT * FROM myTable LIMIT 10,第二个页面可能是 SELECT * FROM myTable OFFSET 10 LIMIT 10,依此类推。

根据数据库、行数等,对数据进行排序可能是一项昂贵的操作。或者,也可以使用 Column for Value Partitioning 属性指定一个列,该列的值将用于确定页面。如果设置了,GenerateTableFetch 将确定列的最小值和最大值,并使用最小值作为初始偏移量。然后,获取页面的 SQL 基于这个初始偏移量和值的总差(即最大值 - 最小值)除以页面大小。例如,如果列 id 用于值分区,然后列值 100 100 100 200 200 200,页面大小为 10 10 10 的 SQL 来获取第一页可能是 SELECT * FROM myTable id > = 100 and id < 110,第二页可能是 SELECT * from myTable id > = 110 and id < 120 等等。

重要的是,将用于值分区的列设置为可以强制类型为长整数(即不是日期或时间戳)的列,并且为了获得最佳性能,列值是均匀分布的,而不是稀疏的。作为上面的反例,考虑一个列 id,其值分别为 100 100 100 2000 2000 2000 30000 30000 30000。如果分区大小为 100 100 100,那么列值相对稀疏,因此 “第二页” 的 SQL 将返回零行,直到查询中的值变为 id >= 2000 为止,每个页面都将返回零行。另一个反例是值不是均匀分布的:假设一个值为 100 、 200 、 201 、 202 、 … 299 100、200、201、202、…299 100200201202299。然后,第一个页面的 SQL 将返回值为 id = 100 的一行,第二个页面将返回值为 200 … … 299 200…… 299 200……299 100 100 100 行。这可能导致下游处理时间不一致,因为页面可能包含非常不同的行数。由于这些原因,建议使用足够密集(而不是稀疏)且分布相当均匀的列进行值分区。

3.示例

首先配置好数据库 DBCPConnectionPool

在这里插入图片描述
然后配置 GenerateTableFetch 中的 Database Connection Pooling Service

在这里插入图片描述

3.1 案例一:无输入流文件,来源表含增量字段

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

保存状态:

在这里插入图片描述

3.2 案例二:无输入流文件,不含增量字段

在这里插入图片描述
输出:

在这里插入图片描述

3.3 案例三:无输入流文件,带自增 id

在这里插入图片描述

当然,实际增量抽取时,max-value 也设置成 id

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.4 案例四:有来源流文件,查多表,无增量字段

在这里插入图片描述

使用 GenerateFlowFile 配置一个多表表名数组,切割 json,然后将表名提取到属性中:

在这里插入图片描述

在这里插入图片描述

输出结果:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.5 案例五:有来源流文件,查多表,带增量字段

只需将案例四中 json 修改一下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

输出结果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

状态:

在这里插入图片描述

这篇关于【大数据】NiFi 中的处理器(一):GenerateTableFetch的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/367808

相关文章

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批