QueryDatabaseTable 2025.10.2.19¶
捆绑包¶
org.apache.nifi | nifi-standard-nar
描述¶
生成 SQL select 查询,或使用提供的语句,然后执行该查询以获取指定最大值列中值大于先前看到的最大值的所有行。查询结果将转换为 Avro 格式。多个属性支持表达式语言,但不允许有传入连接。“环境/系统”属性可用于为包含表达式语言的任何属性提供值。如果需要利用 FlowFile 属性来执行这些查询,则可以使用 GenerateTableFetch 和/或 ExecuteSQL 处理器来实现此目的。采用流式处理方式,因此支持任意大的结果集。可以使用标准调度方法将该处理器调度为在计时器或 cron 表达式上运行。该处理器只能在主节点上运行。FlowFile 属性“querydbtable.row.count”表示选择了多少行。
输入要求¶
FORBIDDEN
支持敏感的动态属性¶
false
属性¶
属性 |
描述 |
|---|---|
要返回的列 |
查询中使用的逗号分隔的列名列表。如果您的数据库需要对名称进行特殊处理(例如,加引号),则每个名称都应包含此类处理。如果没有提供列名,则将返回指定表中的所有列。NOTE:为确保增量提取正常工作,为给定表使用一致的列名非常重要。 |
数据库连接池服务 |
用于获取数据库连接的控制器服务。 |
数据库方言服务 |
数据库方言服务,用于生成特定于某服务或供应商的语句。 |
提取大小 |
一次要从结果集中提取的结果行数。这是数据库驱动程序的提示,不一定会被严格遵循和/或完全一致。如果指定的值为零,则忽略该提示。如果使用 PostgreSQL,则“设置自动提交”必须为“false”才能使“提取大小”生效。 |
最大等待时间 |
允许正在运行的 SQL select 查询运行的最长时间量,零表示没有限制。如果最长时间小于 1 秒,则视同为零。 |
最大值列 |
A comma-separated list of column names. The processor will keep track of the maximum value for each column that has been returned since the processor started running. Using multiple columns implies an order to the column list, and each column 's values are expected to increase more slowly than the previous columns' values. Thus, using multiple columns implies a hierarchical structure of columns, which is usually used for partitioning tables. This processor can be used to retrieve only those rows that have been added/updated since the last retrieval. Note that some JDBC types such as bit/boolean are not conducive to maintaining maximum value, so columns of these types should not be listed in this property, and will result in error(s) during processing. If no columns are provided, all rows from the table will be considered, which could have a performance impact. NOTE: It is important to use consistent max-value column names for a given table for incremental fetch to work properly. |
设置自动提交 |
Allows enabling or disabling the auto commit functionality of the DB connection. Default value is 'No value set'. 'No value set' will leave the db connection 's auto commit mode unchanged. For some JDBC drivers such as PostgreSQL driver, it is required to disable the auto commit functionality to get the'Fetch Size 'setting to take effect. When auto commit is enabled, PostgreSQL driver ignores'Fetch Size'setting and loads all rows of the result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html (https://jdbc.postgresql.org//documentation/head/query.html). |
表名称 |
要查询的数据库表的名称。使用自定义查询时,此属性用于为查询设置别名,并作为属性显示在 FlowFile 中。 |
db-fetch-db-type |
Database Type for generating statements specific to a particular service or vendor. The Generic Type supports most cases but selecting a specific type enables optimal processing or additional features. |
db-fetch-sql-query |
用于检索数据的自定义 SQL 查询。此 SQL 查询将封装为子查询,而不是从其他属性构建查询。查询不能包含 ORDER BY 语句。 |
db-fetch-where-clause |
构建 SQL 查询时,要在 WHERE 条件中添加的自定义子句。 |
dbf-default-precision |
当 DECIMAL/NUMBER 值作为 Avro 的“decimal”逻辑类型写入时,需要指定一个表示可用数字位数的特定“precision”。通常,精度由列数据类型定义或数据库引擎默认值定义。但是,某些数据库引擎可以返回未定义的精度(即 0)。这时将使用“默认小数精度”来写入这些未定义精度的数值。 |
dbf-default-scale |
当 DECIMAL/NUMBER 值作为 Avro 的“decimal”逻辑类型写入时,需要指定一个表示可用小数位数的特定“scale”。通常,标度由列数据类型定义或数据库引擎默认值定义。但是,当数据库返回未定义的精度(即 0)时,某些数据库引擎也可能无法确定标度。这时将使用“默认小数标度”来写入这些未定义标度的数值。如果一个值的小数位数多于指定的标度,则该值将被舍入,例如,标度为 0 时,1.53 变成 2;标度为 1 时,1.53 会变为 1.5。 |
dbf-normalize |
是否将列名中不兼容 Avro 的字符更改为与兼容 Avro 的字符。例如,为了建立有效的 Avro 记录,冒号和句点将更改为下划线。 |
dbf-user-logical-types |
是否对 DECIMAL/NUMBER、DATE、TIME 和 TIMESTAMP 列使用 Avro 逻辑类型。如果禁用,则以字符串形式写入。如果启用,则使用逻辑类型并以其基础类型写入,具体而言,DECIMAL/NUMBER 写入为逻辑“decimal”:以字节形式写入,并包含额外的精度与标度元数据;DATE 写入为逻辑“date-millis”:以整数形式写入,表示自 Unix 纪元以来的天数 (1970-01-01),TIME 写入为逻辑“time-millis”:以整数形式写入,表示自 Unix 纪元以来的毫秒数,TIMESTAMP 写入为逻辑“timestamp-millis”:以长整型写入,表示自 Unix 纪元以来的毫秒数。如果书面 Avro 记录的读取器也知道这些逻辑类型,则可以根据读取器的实现在更多上下文中对这些值进行反序列化。 |
initial-load-strategy |
处理器首次启动(或其状态已清除)时,如何处理数据库表中的现有行。如果已配置“nitial.maxvalue.*”动态属性,则会忽略该属性。 |
qdbt-max-frags |
最大片段数。如果指定的值为零,则返回所有片段。这样可以在此处理器引入巨型表时防止出现 OutOfMemoryError。NOTE:设置此属性可能导致数据丢失,因为传入的结果未排序,片段可能在任意边界结束,导致部分行未包含在结果集中。 |
qdbt-max-rows |
单个 FlowFile 中将包含的最大结果行数。这将允许您将非常大的结果集分成多个 FlowFiles。如果指定的值为零,则所有行都以单个 FlowFile 形式返回。 |
qdbt-output-batch-size |
提交过程会话之前需要缓存的输出 FlowFiles 队列数量。当设置为零时,将在处理完所有结果集行并且输出 FlowFiles 准备好传输到下游关系时提交会话。对于大型结果集,这可能导致处理器执行结束时出现 FlowFiles 数据的突发性集中传输。如果设置了此属性,则当指定数量的 FlowFiles 准备好传输时,将提交会话,从而将 FlowFiles 释放到下游关系。NOTE:设置此属性时,不会在 FlowFiles 上设置 maxvalue.* 和 fragment.count 属性。 |
transaction-isolation-level |
此设置将为支持此设置的驱动程序设置数据库连接的事务隔离级别 |
状态管理¶
范围 |
描述 |
|---|---|
CLUSTER |
对指定表执行查询后,将保留指定列的最大值,以供将来执行查询时使用。这允许处理器仅提取那些最大值大于保留值的记录。这可用于增量提取、提取新添加的行等操作。若要清除最大值,请根据“状态管理”文档,清除处理器的状态 |
关系¶
名称 |
描述 |
|---|---|
success |
成功从 SQL 查询结果集创建了 FlowFile。 |
写入属性¶
名称 |
描述 |
|---|---|
tablename |
正在查询的表的名称 |
querydbtable.row.count |
查询选择的行数 |
fragment.identifier |
如果设置了“Max Rows Per Flow File”,则来自同一查询结果集的所有 FlowFiles 的 fragment.identifier 属性的值都将相同。随后可以使用它来关联结果。 |
fragment.count |
如果设置了“Max Rows Per Flow File”,则这是单个 ResultSet 生成的 FlowFiles 总数。这可以与 fragment.identifier 属性结合使用,以了解有多少个 FlowFiles 属于同一个传入 ResultSet。如果设置了“Output Batch Size”,则不会填充此属性。 |
fragment.index |
如果设置了“Max Rows Per Flow File”,则此 FlowFile 在传出 FlowFiles 列表中的位置取决于它们是否源自同一结果集 FlowFile。这可以与 fragment.identifier 属性结合使用,以了解哪些 FlowFiles 源自同一查询结果集,以及 FlowFiles 的生成顺序 |
maxvalue.* |
每个属性都包含所指定“最大值列”的观测到的最大值。该属性的后缀是列的名称。如果设置了“Output Batch Size”,则不会填充此属性。 |