QueryDatabaseTable 2025.5.31.15¶
捆绑包¶
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 秒,则视同为零。 |
最大值列 |
逗号分隔的列名列表。处理器将记录自处理器开始运行以来,返回的每列的最大值。使用多列意味着列的列表有顺序,并且每列的值的增长速度预计将比前一列的值增长得更慢。因此,使用多列代表列有层次结构,通常用于对表进行分区。该处理器可用于仅检索自上次检索以来添加/更新的行。请注意,某些 JDBC 类型(例如位/布尔值)不利于保持最大值,因此不应在此属性中列出这些类型的列,否则会在处理过程中导致错误。如果未提供任何列,则将考虑表中的所有行,这可能会影响到性能。NOTE:为确保增量提取正常工作,为给定表使用一致的最大值列名非常重要。 |
设置自动提交 |
允许启用或禁用 DB 连接的自动提交功能。默认值为“未设置任何值”。“未设置任何值”将使数据库连接的自动提交模式保持不变。对于某些 JDBC 驱动程序(例如 PostgreSQL 驱动程序),需要禁用自动提交功能才能使“提取大小”设置生效。启用自动提交后,PostgreSQL 驱动程序会忽略“提取大小”设置,并将结果集的所有行一次加载到内存中。在执行提取大型数据集的查询时,这可能会导致大量内存消耗。有关 PostgreSQL 驱动程序中这种行为的更多详细信息,请参阅 https://jdbc.postgresql.org//documentation/head/query.html (https://jdbc.postgresql.org//documentation/head/query.html)。 |
表名称 |
要查询的数据库表的名称。使用自定义查询时,此属性用于为查询设置别名,并作为属性显示在 FlowFile 中。 |
db-fetch-db-type |
用于生成特定于某服务或供应商的语句的数据库类型。通用类型支持大多数情况,但选择特定类型可以实现最佳处理或附加功能。 |
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”,则不会填充此属性。 |