2017-06-20 63 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文件中删除[],我得到了我想要的输出。

我知道这是一个丑陋的解决方案,如果有人能找到更好的解决方案,我将不胜感激。

相关问题