2017-06-20 62 views
1

我有一個CSV文件,其中有包含數組的列。該文件看起來像這樣:Neo4j將數組元素展開爲單獨的行

siblings 
[3010,3011,3012] 
[2010,2012] 

我想要做的是將數組的元素作爲單獨的行返回。

我查看了文檔,發現UNWIND函數。當我嘗試在文檔中顯示的示例:

UNWIND [1, 2, 3] AS x 
RETURN x 

一切工作正常。當我和我的數據試了一下查詢是這樣的:

LOAD CSV WITH HEADERS FROM 
'file:///test.csv' AS line1 
UNWIND line1.siblings as a 
RETURN a 

,結果是

[3010,3011,3012] 
[2010,2012] 

代替:

3010 
3011 
3012 
... 

有誰知道我做錯了嗎?

回答

1

CSV列全部作爲字符串處理,所以您需要像這樣對待它們。在你的情況下,你可以刪除兄弟姐妹列中的括號,然後再將字符串拆分成一個集合。該步驟將幫助您避免預處理文件。一旦你分割字符串,你仍然有一個字符串集合。

WITH "[1001,1002,1003]" as numbers_with_brackets_in_a_string 
WITH substring(numbers_with_brackets_in_a_string, 1, size(numbers_with_brackets_in_a_string)-2) as numbers_in_a_string 
UNWIND split(numbers_in_a_string, ',') as number_as_a_string 
RETURN number_as_a_string 
0

我發現了一個醜陋的方法來解決這個問題。

我做了如下的事情:

LOAD CSV WITH HEADERS FROM 
'file:///test.csv' AS line1 
WITH line1, split(line1.siblings, ",") as s 
UNWIND s as sib 
RETURN sib 

之後,我得到了以下的事情:

[3010 
3011 
3012] 
... 

我從CSV文件中刪除[],我得到了我想要的輸出。

我知道這是一個醜陋的解決方案,如果有人能找到更好的解決方案,我將不勝感激。

相關問題