GenerateTableFetch 2025.5.31.15

捆绑包

org.apache.nifi | nifi-standard-nar

描述

生成从表中获取提取由行构成的“页”的 SQL select 查询。分区大小属性以及表的行数决定了页大小和页数,以及所生成的 FlowFiles。此外,增量提取可以通过设置“最大值列”来实现,这会使处理器跟踪列的最大值,从而仅提取列值超过观测到的最大值的行。该处理器只能在主节点上运行。该处理器可以接受传入连接;处理器的行为因是否提供传入连接而异:- 如果未指定传入连接,处理器将按指定的处理器计划生成 SQL 查询。许多字段都支持表达式语言,但没有可用的 FlowFile 属性。但是将使用“环境/系统”属性评估这些属性。- 如果指定了传入连接,但且理器任务没有 FlowFile 可用,则不会执行任何工作。- 如果指定了传入连接且处理器任务有 FlowFile 可用,则可以在表达式语言中为表名称和其他字段使用 FlowFile 的属性。但是,“最大值列”和“要返回的列”字段必须为空或引用每个指定表中可用的列。

标签

database、fetch、generate、jdbc、query、select、sql

输入要求

ALLOWED

支持敏感的动态属性

false

属性

属性

描述

要返回的列

查询中使用的逗号分隔的列名列表。如果您的数据库需要对名称进行特殊处理(例如,加引号),则每个名称都应包含此类处理。如果没有提供列名,则将返回指定表中的所有列。NOTE:为确保增量提取正常工作,为给定表使用一致的列名非常重要。

数据库连接池服务

用于获取数据库连接的控制器服务。

数据库方言服务

数据库方言服务,用于生成特定于某服务或供应商的语句。

最大等待时间

允许正在运行的 SQL select 查询运行的最长时间量,零表示没有限制。如果最长时间小于 1 秒,则视同为零。

最大值列

逗号分隔的列名列表。处理器将记录自处理器开始运行以来,返回的每列的最大值。使用多列意味着列的列表有顺序,并且每列的值的增长速度预计将比前一列的值增长得更慢。因此,使用多列代表列有层次结构,通常用于对表进行分区。该处理器可用于仅检索自上次检索以来添加/更新的行。请注意,某些 JDBC 类型(例如位/布尔值)不利于保持最大值,因此不应在此属性中列出这些类型的列,否则会在处理过程中导致错误。如果未提供任何列,则将考虑表中的所有行,这可能会影响到性能。NOTE:为确保增量提取正常工作,为给定表使用一致的最大值列名非常重要。

表名称

要查询的数据库表的名称。

db-fetch-db-type

用于生成特定于某服务或供应商的语句的数据库类型。通用类型支持大多数情况,但选择特定类型可以实现最佳处理或附加功能。

db-fetch-where-clause

构建 SQL 查询时,要在 WHERE 条件中添加的自定义子句。

gen-table-column-for-val-partitioning

列的名称,其值将用于分区。默认行为是使用偏移/限制策略,使用结果集中的行号进行分区,以获得要从数据库提取的“页”。但对于某些数据库,在适当的情况下使用列值本身来定义“页”可能会更有效。仅当默认查询表现不佳、没有最大值列或仅有一个类型可强制转换为长整数的最大值列(即其类型不是日期或时间戳),以及列值均匀分布且不稀疏时,才赢使用此属性,以获得最佳性能。

gen-table-custom-orderby-column

如果未提供最大值列,并且启用了分区,则用于对结果进行排序的列的名称。如果设置了最大值列或“分区大小 = 0”,则忽略此属性。NOTE:如果既未设置最大值列,也未设置 Custom ORDER BY 列,则根据数据库/驱动程序的不同,处理器可能会报告错误和/或生成的 SQL 可能导致行丢失和/或重复。这是因为如果没有明确的排序,对于每个分区的提取将按照任意顺序完成。

gen-table-fetch-partition-size

每个生成的 SQL 语句要提取的结果行数。表中的总行数除以分区大小得出生成的 SQL 语句数(即 FlowFiles)。值为零表示将生成单独一个 FlowFile,其 SQL 语句将提取表中的所有行。

gen-table-output-flowfile-on-zero-results

根据指定的属性,执行此处理器可能不会生成任何 SQL 语句。当此属性为 true 时,将生成一个空的 FlowFile(如果存在,则具有传入 FlowFile 的父项),并传输到“success”关系。当此属性为 false 时,不会生成任何输出 FlowFiles。

状态管理

范围

描述

CLUSTER

对指定表执行查询后,将保留指定列的最大值,以供将来执行查询时使用。这允许处理器仅提取那些最大值大于保留值的记录。这可用于增量提取、提取新添加的行等操作。若要清除最大值,请根据“状态管理”文档,清除处理器的状态

关系

名称

描述

failure

仅在 SQL 查询执行(使用传入 FlowFile)失败时使用此关系。传入的 FlowFile 将被惩罚并路由到此关系。如果未指定传入连接,则不使用此关系。

success

成功从 SQL 查询结果集创建了 FlowFile。

写入属性

名称

描述

generatetablefetch.sql.error

如果处理器有传入连接,并且处理传入 FlowFile 导致 SQL 异常,则 FlowFile 将路由到 failure,并且此属性将设置为异常消息。

generatetablefetch.tableName

要查询的数据库表的名称。

generatetablefetch.columnNames

查询中使用的逗号分隔的列名列表。

generatetablefetch.whereClause

用于获取预期行的查询中使用的 Where 子句。

generatetablefetch.maxColumnNames

逗号分隔式列名列表,用于跟踪自处理器开始运行以来返回的数据。

generatetablefetch.limit

SQL 语句要提取的结果行数。

generatetablefetch.offset

用于检索相应分区的偏移。

fragment.identifier

从同一个查询结果集生成的所有 FlowFiles 都将具有相同的 fragment.identifier 属性值。随后可以使用它来关联结果。

fragment.count

这是单个 ResultSet 产生的 FlowFiles 总数。这可以与 fragment.identifier 属性结合使用,以了解有多少个 FlowFiles 属于同一个传入 ResultSet。

fragment.index

这是此 FlowFile 在所有由同一执行生成的传出 FlowFiles 列表中的位置。这可以与 fragment.identifier 属性结合使用,以了解哪些 FlowFiles 源自同一执行,以及 FlowFiles 的生成顺序

另请参阅

语言: 中文