Apache nifi NiFi在将记录插入表后创建索引

Apache nifi NiFi在将记录插入表后创建索引,apache-nifi,Apache Nifi,我有了第一个在表中删除索引的进程组。 然后路由到另一个进程组,并将其插入表中。 在成功插入50万行之后,我想在表上创建索引并对其进行分析。这是典型的数据仓库方法。有人能就如何做到这一点提供建议吗 我已尝试设置计数器,但无法在表达式语言中引用计数器。我试过了,但一无所获。现在我正在深入研究等待和通知处理器-也许有一个解决方案 我已获得计数器来计数流文件sql insert语句,但无法通过表达式语言引用计数器值。Ie这总是返回空值:“${InsertCounter}”,在正确设置InsertCoun

我有了第一个在表中删除索引的进程组。 然后路由到另一个进程组,并将其插入表中。 在成功插入50万行之后,我想在表上创建索引并对其进行分析。这是典型的数据仓库方法。有人能就如何做到这一点提供建议吗

我已尝试设置计数器,但无法在表达式语言中引用计数器。我试过了,但一无所获。现在我正在深入研究等待和通知处理器-也许有一个解决方案

我已获得计数器来计数流文件sql insert语句,但无法通过表达式语言引用计数器值。Ie这总是返回空值:“${InsertCounter}”,在正确设置InsertCounter的地方,它通过我的流中的UpdateCounter进程显示

那么也许这个代码可以使用

在等待处理器中,将目标信号计数设置为${fragment.Count}

将notify和wait处理器中的释放信号标识符设置为${fragment.Identifier}


什么都不管用

我想我对这个问题的建议也适合你的情况


查看它

您可以使用等待/通知处理器来执行此操作。 我想你使用的是ExecuteSQL,SplitAvro?如果是,则流将如下所示:

分裂法 第二组

  • ExecuteSQL:例如,1个包含5000条记录的输出流文件
  • SpritAvro:创建5000个流文件,此处理器添加
    片段.标识符
    片段.计数
    (=5000)属性。
    
    • 拆分:
      • XXXX:对每个记录进行一些转换
      • PutSQL:单独插入记录
      • 通知:将
        片段标识符(释放信号标识符)的计数增加1。执行了5000次
    • 原始-到下一个进程组
第三组

  • 等待:等待
    fragment.identifier
    (释放信号标识符)到达
    fragment.count
    (目标信号计数)。此路由处理原始流程文件,因此只执行一次
  • PutSQL:执行查询以创建索引和分析表
或者,如果可能,使用记录感知处理器将使流程更简单、更高效

记录法
  • ExecuteSQL:例如,1个包含5000条记录的输出流文件
  • 执行记录级转换:使用UpdateRecord或LookupRecord,您可以在不将记录拆分为多个流文件的情况下进行数据处理
  • PutSQL:执行查询以创建索引和分析表。由于包含所有记录的单个流文件不需要等待/通知,因此输出流文件可以连接到下游流

仅供参考,我的第一个进程组工作正常-它截断表并删除索引。然后,第二个进程组将记录插入到表中。我在第三个处理组遇到问题。它需要运行一次。第二个进程组的流中有50万个sql插入。我只想在第二个进程组完成所有插入后,重新创建索引并分析表一次。下面是一个使用上述拆分方法的等待/通知的NiFi流模板示例。