假设节点"属性"。我正在使用" LOAD CSV with headers ..." 以下是示例文件格式:
fields
a=100,b=110,c=120,d=500
如何将字段列转换为分别具有a,b,c,d和100,110,120,500的节点作为节点的属性"属性"?
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"
此外,不同的行可以具有不同的键值集。这是关键的动态需求。 (还有其他专栏,我为它修剪了它)
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版本。
答案 0 :(得分:1)
首先要做的事:您的文件格式目前定义了一个标题/属性:fields
:
fields
a=100,b=110,c=120,d=500
由于您将选项卡定义为字段终止符,因此整个字符串(a=100,b=110,c=120,d=500
)将最终位于节点的props
属性中:
要动态加载属性:首先设置正确的标题:
"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
您将获得所需的变量属性: