2016-05-13 354 views
2

假定節點「屬性」。我使用「頁眉LOAD CSV ...」 以下是示例文件格式:在neo4j中設置節點的動態屬性

fields  
a=100,b=110,c=120,d=500 

如何轉換領域柱具有帶,B,C節點,d和100110120500分別爲節點「屬性」的屬性?

LOAD CSV WITH HEADERS FROM 'file:/sample.tsv' AS row FIELDTERMINATOR '\t' 
CREATE (:Properties {props: row.fields}) 

上面不創建個人屬性,但一個字符串值設置爲道具爲 「a = 100,B = 110,C = 120,d = 500」

此外,不同的行可以有不同的鍵值集合。這是關鍵需要動態。 (還有其他的欄目,以及,我修剪它SO)

fields 
a=100,b=110,c=120,d=500 
X=300,y=210,Z=420,P=600 
... 

我正在尋找一種方式來不拆這個鍵值爲列,然後負載。原因是他們是動態的 - 今天它是a,b,c,d它可能會變成aa,bb,cc,dd等。 我不想繼續改變我的加載腳本來識別新的列標題。

任何解決此問題的指針?我正在使用最新的3.0.1 neo4j版本。第一

回答

1

第一件事:你的文件格式目前定義了一個頭/屬性:fields

fields  
a=100,b=110,c=120,d=500 

既然你定義的選項卡,字段終止,即整個字符串(a=100,b=110,c=120,d=500)將在您的節點的props結束屬性:

props as single property

要具有屬性動態加載:第一設置適當的報頭:

"a","b","x","y" 
1,2,, 
,,3,4 

然後你可以用這樣的查詢:

LOAD CSV WITH HEADERS FROM 'file:///Users/David/overflow.csv' AS row 
CREATE (:StackOverflow { a:row.a, b:row.b,x:row.x,y:row.y}) 

然後,當你運行像:

match(so:StackOverflow) return so 

你會得到你想要的變量屬性:

variable properties

+0

我總是有這個選項,但是問題有點不同,因爲對於「字段」列a,b,c,d,e,f,g ....以及將來有相當多的這樣的密鑰。字段列中的鍵也可以改變,即從a,b,c,d到x,y,z。我無法繼續更改我的CSV加載器。我正在尋找一種靈活的方法,將「fields」中的這些鍵值設置爲節點的屬性。 – Kunal

+0

爲了更加清晰,我編輯了這個問題。感謝您的答覆。 – Kunal

+0

如果是這樣的話,我想你最終會構建自己的加載器來解析CSV。內置的加載程序不是爲此設計的。 –