我正在尝试使用CSV文件将家谱数据导入Neo4j。日期是字符串,如2012或19860105)。但是,在导入时,Neo4j会将它们解释为LongValue,从而产生错误。
我的导入声明是
LOAD CSV WITH HEADERS FROM 'file:///Neo4jPersonNodes1.csv' AS line FIELDTERMINATOR '|'
CREATE (:Person{RN: toInteger(line[0]),fullname: line[1],surname: line[2],name: line[3],sex: line[4],union_id: toInteger(line[5]),mn: line[6],BD: line[7],BDGed: line[8],DD: line[9],DDGed: line[10],bp_id: toInteger(line[11]),dp_id: toInteger(line[12]),BP: line[13],DP: line[14],kit: line[15]})
或者,添加toString()函数
LOAD CSV WITH HEADERS FROM 'file:///Neo4jPersonNodes1.csv' AS line FIELDTERMINATOR '|'
CREATE (:Person{RN: toInteger(line[0]),fullname: toString(line[1]),surname: toString(line[2]),name: toString(line[3]),sex: toString(line[4]),union_id: toInteger(line[5]),mn: toString(line[6]),BD: toString(line[7]),BDGed: toString(line[8]),DD: toString(line[9]),DDGed: toString(line[10]),bp_id: toInteger(line[11]),dp_id: toInteger(line[12]),BP: toString(line[13]),DP: toString(line[14]),kit: toString(line[15])})
CSV的样本是
"RN"|"fullname"|"surname"|"name"|"sex"|"union_id"|"mn"|"BD"|"BDGed"|"DD"|"DDGed"|"bp_id"|"dp_id"|"BP"|"DP"|"kit"
"5"|"Ale Harmens Slump"|"Slump"|"Ale Harmens"|"M"|"313"|"3"|"18891223"|"23 Dec 1889"|"19890111"|"11 Jan 1989"|"23"|"4552"|"Echten, Friesland, Neth."|"Sebastopol, California"|""
错误信息是:
Neo4j.Driver.V1.ClientException:'拉未消耗时出错 session.run会话记录到内存中:预期Long(7)为a org.neo4j.values.storable.TextValue,但它是一个 org.neo4j.values.storable.LongValue'
我不确定为什么Neo4j不会将数字字符串视为字符串。
答案 0 :(得分:1)
由于您的CSV文件具有标题行(并指定为WITH HEADERS
),因此您的Cypher代码必须将line
视为地图(其属性名称与您的所有标题名称匹配)而不是数组。
例如,您必须使用line[0]
而不是line.RN
。如果您相应地修复了line
的所有用途,则不应再出现此类错误。