2014-11-22 67 views
3

我開始使用Cypher的LOAD CSV Neo4J將更大的csv文件導入到我的數據庫中。我想爲每個導入的節點添加一個唯一的ID(uuid)作爲屬性。neo4j:Cypher LOAD CSV與uuid

我的嘗試是:

​​

不幸的是我收到的每個節點相同的UUID(儘管它通常會產生功能的UUID新調用時),它看起來像UUID產生1次和然後在創建節點並解析csv文件時附加到每個節點。

有沒有辦法爲每個導入的csv-line生成一個新的UUID來標記節點?

感謝您的提示,從 Balael

回答

6

不知道你在哪裏見過{} UUID是一個函數。 它只是使用你傳入的任何參數作爲「uuid」。

創建CSV時,您必須生成uuid。 在密碼中目前沒有uuid()的功能。

一個解決辦法,你可以做的是:

LOAD CSV FROM "file:..." AS csvLine 
CREATE (c:Customer { name: csvLine[0], code: csvLine[1]}) 
SET c.id = id(c) 
+0

你也可以使用像csvkit(http://csvkit.readthedocs.org/en/0.9.0/)這樣的工具來修改你的csv,然後導入它以獲得uuid。 – 2014-11-23 12:39:24

+0

嗨邁克爾,謝謝你在這裏點些燈。不幸的是,無法在CSV中生成UUID,因爲它們來自我無法訪問的系統。我瞭解每次創建節點時都不能生成UUID。此外,set-command只是重複以將相同的UUID添加到每個節點,甚至例如, PHP中的uniqid()看起來不會被多次調用,所以只有一個UUID被分配給每個節點 - 這與我想創建的完全相反 - 一個唯一的標識符。看來我需要在CSV之後再次運行已創建的節點並逐個節點添加UUID節點。 – Balael 2014-11-23 12:48:37

+0

如果你正在尋找一種方法來再次循環並添加一個UUID,而不是一次只做一個節點,那麼可以查看http://stackoverflow.com/questions/25952884/neo4j-assign-unique-values-to -all節點匹配查詢。可能讓你開始。 – subvertallchris 2014-11-23 15:39:29

4

您也可以使用GraphAware UUID Module

您只需將framework jaruuid module jar放入plugins目錄,將以下兩行添加到neo4j.properties中,然後重新啓動Neo4j。

com.graphaware.runtime.enabled=true 
com.graphaware.module.UIDM.1=com.graphaware.module.uuid.UuidBootstrapper 

任何新的節點(不管它是如何創建的)將自動獲得一個UUID。

+0

嘿米歇爾,謝謝你的迴應,這很好。你知道一些關於如何從源代碼構建的資源嗎?我不熟悉Java構建生態系統。 – bryanph 2016-07-19 11:55:02

+0

從GIT克隆項目(git clone https://github.com/graphaware/neo4j-uuid.git)後,安裝名爲Maven的Java構建工具。取決於你的環境macosx:「brew install maven」,ubuntu/debian&co:「apt-get install maven」。然後你可以從命令行「cd neo4j-uuid」,然後「mvn clean install」。編譯後的版本將駐留在您所克隆項目的「target /」目錄中。 PS。這可能需要很長時間,因爲所有單元測試都將啓動,並且所有項目依賴關係都將被下載。 – Sebastien 2016-11-13 20:59:38