我正在使用Neo4j 2.2.0並通過LOAD CSV導入數據(以節點文件和關係文件的形式)。基於LOAD CSV中的數據設置標籤
節點將全部導入到「Person」標籤下,但是如果節點文件中的緯度和經度字段爲空,我想爲其中的一些添加「Geotag」標籤。
因此,舉例來說,下面的節點文件(忽略行之間的額外線)
"username","id","latitude","longitude"
"abc123","111111111","33.223","33.223"
"abc456","222222222","",""
我想創建節點「ABC123」與Person和地理標記標籤和節點abc456只用人員標籤,因爲它沒有經度和緯度。
我認爲這將是沿着線的東西:
LOAD CSV WITH HEADERS FROM "file:/users.csv" AS line
CREATE (p:Person { username: line.username, id: line.id, latitude: line.latitude, longitude: line.longitude })
SET p: (CASE WHEN line.latitude IS NOT NULL THEN GEOTAGGED);
我知道我使用CASE語句錯誤以及SET語句,但是這是可能的,而進口的節點呢?這個文件有超過300萬個節點,插入時會有幫助,所以當新節點被添加(通常是分批)時,我們並沒有探索所有的節點,只是爲了找到新的節點。
我已經探索其他等問題(How to set relationship type and label in LOAD CSV?,Loading relationships from CSV data into neo4j db,Neo4j Cypher - creating nodes and setting labels with LOAD CSV),但他們從我的問題,不同之處在於公司正試圖將文件作爲標籤的使用領域,我只是試圖讓有條件的OP根據文件中的數據決定使用哪些標籤。
謝謝!
編輯: 針對一個答案,我想以下幾點:
LOAD CSV WITH HEADERS FROM "file:/users.csv" AS line
CREATE (p:Person { username: line.username, id: line.id, latitude: line.latitude, longitude: line.longitude })
CASE WHEN line.latitude IS NOT NULL THEN [1] ELSE [] END AS geotagged
FOREACH (x IN geotagged | SET p:Geotag);
我收到以下錯誤:
QueryExecutionKernelException: Invalid input 'A': expected 'r/R' (line 3, column 2 (offset: 454)) "CASE WHEN line.latitude IS NOT NULL THEN [1] ELSE [] END AS geotagged"
隨着胡蘿蔔「A下'in「CASE」
EDIT2:
下面是一個完整的解決方案,它的靈感來源於David的解決方案,只是略有不同。
LOAD CSV WITH HEADERS FROM "file:/users.csv" AS line
CREATE (p:Person { username: line.username, id: line.id, latitude: line.latitude, longitude: line.longitude })
WITH p, CASE WHEN line.latitude <> "" THEN [1] ELSE [] END AS geotagged
FOREACH (x IN geotagged | SET p:Geotag);
Bennet,謝謝。也許我是誤解,我仍然收到錯誤,我將它添加到我原來的帖子中。 – Brooks 2015-04-02 18:59:40
對不起......我還假設,當你寫下「CASE WHEN時的情況」時,這是一個錯字,但我嘗試了兩種方法,但仍然沒有運氣。 – Brooks 2015-04-02 19:15:46
爲了清楚起見,上面的語法是不起作用的,但是讓我走上了正確的軌道。要糾正它,只需在「CASE WHEN」前面加上「WITH p」即可。 OP中的完整解決方案。 – Brooks 2015-04-02 20:00:41