使用ExecuteSQL或其他处理器在Nifi中调用SQL函数

时间:2018-12-04 09:04:51

标签: sql sql-server apache-nifi

我目前正在SQL Server中使用一个函数来获取特定列的最大值。我需要此值来生成特定数量的虚拟文件,以插入稍后创建的流文件。 是否可以通过Nifi处理器调用此函数?

使用ExecuteSQL时,在使用select ab.functionname()(ab是数据库的登录名)时,总是出现错误,例如无法执行SQL select查询或找不到“ ab”列

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

如果没有可能调用此函数的方法,还有另一种方法来创建#flowfiles虚拟文件以在数据库中为其保留此位置,以便其他任何人都不能插入或使用此ID(不是自动递增,因为它是无法处理流文件?

我尝试使用$ flowfile.count和Counterprocessor,但这不能解决问题。 看起来应该像这样:为每个流文件插入表(id,nr)值(max(id)+ 1,anynumber),不幸的是ExecuteSQL无法做到这一点。

1 个答案:

答案 0 :(得分: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(param)

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