加载CSV不起作用,可能是因为它太大了

rryofs0p  于 2022-10-01  发布在  其他
关注(0)|答案(2)|浏览(303)

我正在尝试将我的CSV文件导入到neo4j,以下是密码查询:

load csv with headers from "file:/Users/mac/Desktop/Dataset.csv" as row with row
merge (u:User {name:row.user, nationality:row.nation})
merge (l:Location {name:row.location,region:row.region})
merge (u) -[t:to {date:row.DateReview,rating:row.rating}]-> (l)
return u,l,t

它运行了几秒钟,然后返回:

Cannot merge the following node because of null property value for 'nationality': (:User {nationality: null})

问题是,同样的查询对于40行的csv文件非常有效,但现在我的csv文件大约有17200行,加上它的大小是2,2Mo。事先感谢您的任何帮助或建议。

ao218c7q

ao218c7q1#

这意味着列National上的某些行为空(NULL)。Neo4j不允许为属性赋值为空值。如果属性为空,则将跳过该示例属性。还要检查其他字段,如DateReview和Rating。

如果某些行为空,则可以在执行合并后“设置”Cypher查询中的值。Trim正在确保空格也将被视为空白(NULL)。

load csv with headers from "file:/Users/mac/Desktop/Dataset.csv" as row 
with row
merge (u:User {name:row.user}) 
set u.nationality = case trim(row.nation) 
    when "" then null else row.nation end 
return u

不必担心将国籍的值设置为空。Neo4j不会在数据库中存储该Nationality:空值。

请在Location.Region和To.Date上执行相同的技巧(set

dgenwo3n

dgenwo3n2#

是否确实需要namenationality属性才能使:User唯一?如果没有,您可以只在name字段上使用MERGE

作为MERGE中使用的任何字段为空的备用方法,您可以执行以下操作

MERGE (:User {myMergeField: COALESCE (row.muColumn, '_noValue')})

在导入DETACH DELETE之后,所有:具有myMergeField = '_noValue_'的用户节点

如果执行LIMIT 8000,则查询运行良好这一事实表明在第8000行之后存在数据问题

相关问题