2016-10-31 55 views
1

我想執行一個sql語句(ExecuteSql proc)來創建一個表,表的名字是基於文件名屬性的,當ExecuteSQl被執行時,它會創建表但不將文件路由到任何關係。NiFi-1.0.0 - ExecuteSQL CrateIO

我認爲這部分原因是爲了在CrateIO中創建表格,您需要將「;」最後。如果我這樣做,我也會得到一個錯誤。

任何想法?

回答

2

ExecuteSQL適用於返回ResultSet的查詢。嘗試使用PutSQL來創建表格(和其他DDL語句)。你也不應該在那裏需要分號,但是你可以用兩種方法來看看CrateIO喜歡什麼。

編輯(回覆評論):如果您指定在的ExecuteSQL查詢,它可能看起來像:

CREATE TABLE ${filename} (myColumn1 STRING, myColumn2 INT, ...) 

你可以做類似的事情用的GetFile後和前ReplaceText處理器PutSQL。 ReplaceText會將流文件的內容設置爲您的SQL查詢,這是PutSQL需要的。

編輯2:如果你想要自定義邏輯,你可以考慮一個腳本處理器與寫一個完整的自定義處理器。然後,您可以執行CREATE TABLE的生成,然後將CSV行轉換爲INSERT語句。如果您發現自己想連接到數據庫,請檢查我的blog post如何在腳本處理器中使用DBCP連接池。

+1

我需要根據文件名創建一個表。我不明白我如何使用PutSQL做到這一點。 所以我有這樣的東西:[GetFile] ----> [ExecuteSQL] ---->剩下的流程。 我試圖從一個單獨的表中爲CrateIO中的每個文件從一個目錄插入一些文件,然後將讀取的文件移動到另一個目錄。 – bsd

+1

爲了使用PutSQL,你應該在前面有類似ConvertJSONToSQL的東西,而且這個處理器的屬性只有INSERT和UPDATE。 在PutSQL處理器的手冊頁: _執行SQL UPDATE或INSERT命令。傳入的FlowFile的內容預計是要執行的SQL命令._ – bsd

+1

您是否已經擁有要執行的SQL?你在查詢中放入ExecuteSQL的是什麼? – mattyb

相關問題