请问nebula能否像neo4j一样支持使用load语句将文件数据导入?

小白最近学习nebula,发现目前文件导入是用studio界面导入,或者使用插件importer的方式在服务器直接导入。

而我们的需求是用户自己将csv文件数据上传导入,也就是说需要在代码里操作文件并把数据导入到库里。

请问有没有像neo4j一样在代码里直接用load语句导入csv文件数据呢? 或者其他方式

Nebula Spark Connector : Nebula Spark Connector - Nebula Graph Database 手册

1 个赞

nebula-import 更合适一些。

代码里如何使用nebula-import呢 小白求教

nebula-import 是一个工具,使用命令操作。代码里使用nebula-java或者nebula-flink-connector。简单的就是用nebula-java

nebula-java?我用了一下没找到里面有导入文件的相关api啊

就是你得自己写文件部分,要么就是在java调用nebula-import 命令。

这么说吧,么得load csv的方法

哦哦 这么说只能安装imoorter插件 然后再代码里执行 nebula-import的命令了

是的,这个是比较简单的,如果用nebula-spark,csv还必须放在hdfs,比较麻烦。

java里该如何做呢

方法一.是runtime 执行import命令。 方法二,使用java读取文件,。然后使用javaapi写入数据库

吧文件数据取出来再用ngql一条一条插入感觉太慢了啊

方法二感觉比较好 可是不知道nebula提供了什么api能把文件写入到数据库里呢?

只提供了ngq语句写入图数据库。读文件部分要自己写,程序把数据读到内存里,然后组装,写入的字符串。类似下下面的,sql要自己组装


        String sql = "INSERT EDGE follow(degree) VALUES 'player9102' -> 'player9101':(1997), 'player9101' -> 'player9102':(1999);";
        ExecEntity execEntity = new ExecEntity();
        execEntity.setSql(sql);
        NebulaDaoUtil.execute(execEntity);
        if(execEntity.getResultSet()==null){
            System.out.println("查询失败");
            return false;
        }
        if(!execEntity.getResultSet().isSucceeded()){
            System.out.println(execEntity.getResultSet().getErrorMessage());
        }
        System.out.println("新增成功");
        return execEntity.getResultSet().isSucceeded();

收到 看来只能这样了。
感谢。
就是觉得很麻烦所以才想问问有没有像neo4j直接用load语句操作文件,这样就无需去自己读文件数据并且拼接sql了。 :pensive:

nebula-spark 工具,可以直接读取mysql的数据,然后写入nebula。这个在github上有代码。如果要集成到java里,估计也是runtime操作命令方式简单。

谢谢 因为需求是客户自己上传文件导入 所以还是要集成到java里 nebula-spark这种工具对于非专业的用户来说不现实

spark 读取本地文件方式: file:///tmp/file.csv

spark能否支持直接从csv文件中读取数据呢?
如果不能的话 是否意味着需要将文件数据转化为dataframe格式,再用spark写入nebula中?