一、neo4j數據導入方法
neo4j數據導入有兩種方法,第一種是使用cypher語法中的LOAD CSV,第二種是使用neo4j自帶的工具neo4j-admin import。
LOAD CSV
導入的文件必須是csv文件,位置可以是本地的,或通過http、https、ftp等url指定位置。
neo4j中關於導入文件的設置是dbms.security.allow_csv_import_from_file_urls,默認為true;而導入本地文件的位置通過dbms.directories.import來指定導入的根目錄,然后再使用file:///來表示絕對路徑。
示例一:不帶header,用下標來索引
給定artists.csv文件
1,ABBA,1992 2,Roxette,1986 3,Europe,1979 4,The Cardigans,1992
輸入語句:
LOAD CSV FROM 'https://neo4j.com/docs/cypher-manual/3.5/csv/artists.csv' AS line CREATE (:Artist { name: line[1], year: toInteger(line[2])})
示例二:帶header,用關鍵字來索引
給定artists-with-headers.csv文件
Id,Name,Year 1,ABBA,1992 2,Roxette,1986 3,Europe,1979 4,The Cardigans,1992
然后執行cypher語句:
LOAD CSV WITH HEADERS FROM 'https://neo4j.com/docs/cypher-manual/3.5/csv/artists-with-headers.csv' AS line CREATE (:Artist { name: line.Name, year: toInteger(line.Year)})
示例三:大csv文件分批導入
USING PERIODIC COMMIT LOAD CSV FROM 'https://neo4j.com/docs/cypher-manual/3.5/csv/artists.csv' AS line CREATE (:Artist { name: line[1], year: toInteger(line[2])})
這里默認1000行提交一次,也可以人為指定,比如using periodic commit 500.
額外提示:如果值中包含引號,可以用""來表示".
可以發現使用load csv只能導入結點,如果還想導入關系數據,就只能靠neo4j自帶的import工具了。
neo4j-admin import
使用neo4j-admin import工具只能往空數據庫中導入數據,且csv文件必須在import目錄下。使用csv文件導入數據時,每個結點都必須有一個唯一的ID類屬性,但是最好不要起名為ID,這會和數據庫本身維護的ID字段沖突。
二、neo4j導入實例
1、本次的數據集為Movielens的數據集,下載地址:
http://grouplens.org/datasets/movielens/
2、在neo4j安裝根路徑下找到import之后在此文件夾下放入數據。
3、在neo4j中導入數據並創建節點,因數據量過大,使用USING PERIODIC COMMIT 1000,防止數據過大溢出,with headers可以處理含有頭文件的數據。
USING PERIODIC COMMIT 1000 load csv with headers from "file:///ratings.csv" as link with link create(:Ratings{userId:link.userId,movieId:link.movieId,rating:link.rating, timestamp:link.timestamp })
速度還是蠻快的!!!
同上,導入users和movies數據
4、創建節點之間的關系
LOAD CSV WITH HEADERS FROM "file:///ratings.csv" AS row MATCH (m:Movies), (u:Users) WHERE u.userId = row.userId AND m.movieId = row.movieId CREATE (u)-[r:rating{value:row.rating}]->(m)
5、如何快速刪除Neo4j中數量級較大的數據(該方法是清楚數據庫中所有的數據):
1.關閉Neo4j服務器進程:
命令:neo4j stop
2.刪除graph.db數據庫文件:
找到<NEO4J_HOME>/data/databases/路徑,可以看到graph.db文件夾。刪除此文件夾即可。
3.重新啟動Neo4j服務器:
通過bin目錄下執行如下命令啟動Neo4j:/neo4j console
導入csv數據時,如何將屬性的String類型轉換成int類型:
//導入節點 電影類型 == 注意類型轉換
LOAD CSV WITH HEADERS FROM "file:///genre.csv" AS line MERGE (p:Genre{gid:toInteger(line.gid),name:line.gname})
參考文獻:如何將大規模數據導入Neo4j