2016-11-18 49 views
0

我有一個NiFi流向某些表中插入一些數據。在我向表中插入一些數據後,我發送一個信號,然後ExecuteSQL在該表上運行聚合查詢。表名是基於文件名。NiFi-1.0.0 - ExecuteSQL,事件驅動

問題是,當ExecuteSQL運行查詢時,我只得到結果的一個子集。如果我在數據庫的控制檯中運行相同的查詢,則會返回不同數量的行。

這可能是一個與事件驅動調度策略有關的問題嗎?

如果ExecuteSQL停止,並且我得到了ExecuteSQL隊列中的flowfile(信號),然後我手動啓動ExecuteSQL,我得到了預期的結果。

回答

2

如果您正在運行多個插入(例如使用PutSQL),並且您希望僅在完成所有這些插入並且它們的完成順序不確定時才運行ExecuteSQL,則可以嘗試以下兩種方法之一:

  • MergeContent - 使用PutSQL後MergeContent處理器,設置條目和/或最大濱年齡的最小數量,當插入件被完成來觸發。您可以將合併的關係路由到ExecuteSQL。

  • MonitorActivity - 使用MonitorActivity處理器來監控PutSQL的輸出流並在配置的時間段後觸發不活動的警報。您可以將不活動的關係路由到ExecuteSQL以運行聚合查詢。

+0

我試過使用MergeContent,但它會導致在數百萬流文件後阻塞nifi。 – bsd

+0

我在隊列上擁有PriorityAttributePrioritizer,但只要您不等待數據包收集到隊列中,它們將不會按100%順序排列,因此,我的處理器會在事件發生之前儘早啓動事件仍然是要插入數據庫的文件。 – bsd

+0

問題是,如果我使用MonitorActivity,我無法區分這些文件。插入文件後,我需要運行一個聚合查詢。 – bsd