Neo4j批量导入大量csv数据

Posted weixin_43342297

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Neo4j批量导入大量csv数据相关的知识,希望对你有一定的参考价值。

背景:本人在建立知识图谱的过程中需要导入23w条节点之间的关系,把csv放到import下之后就开始导入,导了一晚上没导完。

文章目录


Neo4j的操作是一次性的

提示:Neo4j运行一行命令,如果中途停止,那么命令就一点也不执行:
所以本人在无法忍受这种等待的过程中一次又一次地重复导入csv的命令,所以就一直在等待。

一、找到解决方法

这是neo4j官方文档的解决方法,链接如下,但是貌似这个方法已经停用了
neo4j文档

但是笔者在实践时就出了问题了,报了如下的错误
A query with ‘PERIODIC COMMIT’ can only be executed in an implicit transaction, but tried to execute in an explicit transaction.

二、找到新的解决方法

报错信息下面有一行小小的提示

于是跟随提示找到了批量导入csv数据的方法

:auto LOAD CSV FROM 'file:///artists.csv' AS line
CALL 
  WITH line
  CREATE (:Artist name: line[1], year: toInteger(line[2]))
 IN TRANSACTIONS

通过这个方法导入数据时需要注意一点
只能通过下标访问每行的元素
上述语句默认是每次导入1000条csv信息,设置导入条数的话,可以通过加上“OF 2 ROWS”,每次导入2条关系

:auto LOAD CSV FROM 'file:///artists.csv' AS line
CALL 
  WITH line
  CREATE (:Artist name: line[1], year: toInteger(line[2]))
 IN TRANSACTIONS of 2 rows

那么在左侧的栏目里面就可以看到我们的数据进入到数据库啦

PHP 批量导入csv到drupal数据库

/**
 * function to batch update the sell_price for ubercart products from a csv file
 * @param string path to csv file
 */
function sitehelper_batchupdate($csv_file) {
	$row = 1;
	if (($handle = fopen($csv_file, "r")) !== FALSE) {
	    while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {
	        $num = count($data);
	        //print $num;
	        //print "<p> $num fields in line $row: <br /></p>\n";
	        $row++;
	
	        //print $data[0] . " " . $data[1] . $data[2] . $data[3] . "<br />" ;
	        
	        db_query('update uc_products set sell_price = "%s" where nid = %d and vid = %d', $data[0], $data[2], $data[3]);
	       
	    }
	    fclose($handle);
	}
}

//sitehelper_batchupdate("http://[site_url]/sites/all/modules/sitehelper/books.csv");

以上是关于Neo4j批量导入大量csv数据的主要内容,如果未能解决你的问题,请参考以下文章

知识图谱Neo4j 数据导入与数据库切换

知识图谱构建《射雕三部曲》图谱(CSV文件导入)

快速导入大量数据到Neo4j实例实现.

快速导入大量数据到Neo4j实例实现.

快速导入大量数据到Neo4j实例实现.

花卉知识图谱KG构建-Neo4j数据库导入篇