【问题标题】:Call a SQL function in Nifi using ExecuteSQL or another processor使用 ExecuteSQL 或其他处理器在 Nifi 中调用 SQL 函数
【发布时间】:2018-12-04 09:04:50
【问题描述】:

我目前正在使用 SQL Server 中的一个函数来获取某个列的最大值。我需要这个值来生成特定数量的虚拟文件以插入稍后创建的流文件。 有没有办法通过 nifi 处理器调用这个函数?

通过使用 ExecuteSQL,当使用 select ab.functionname()(ab 是数据库的登录名)时,我总是收到错误,例如无法执行 SQL 选择查询或找不到列“ab”

在 SQL Server 中,我可以只使用 select ab.functionname() 并获得所需的结果。

如果没有可能调用此函数的方法,是否有另一种方法来创建#flowfiles dummyfiles 以在数据库中为它们保留这个位置,以便其他人无法插入或使用此 ID(不是自动增量,因为它是不可能)在处理流文件时?

我尝试使用 $flowfile.count 和 Counterprocessor,但这并没有解决问题。 它应该看起来像:INSERT INTO table (id,nr) values (max(id)+1,anynumber) for each flowfiles,不幸的是 ExecuteSQL 无法做到这一点。

【问题讨论】:

  • 在 SQL 中 select ab.functionname() ab 被视为您的表的别名。
  • 我想出了如何通过使用 SELECT TOP1 id from table order by id desc 来使用 nifiprocessor 获取 maxid。我仍然不知道如何在流文件中添加正确的 id 并在处理它们时防止插入。

标签: sql sql-server apache-nifi


【解决方案1】:

认为这次对话可以帮助您: https://community.hortonworks.com/questions/26170/does-executesql-processor-allow-to-execute-stored.html

要点:

  • 您可以使用 ExecuteScript 或 ExecuteProcess 来调用适当的脚本。例如对于 ExecuteProcess 只需调用 sqlplus 命令。选择命令类型“sqlplus”。在命令参数中设置类似:user_id/password@dbname @"script_path/someScript.sql"。在 someScript.sql 中,您可以输入以下内容:

执行spname(参数)

  • 您可以编写自己的处理器 :) 当然这更困难,而且通常是不必要的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多