-
nebula 版本:2.5.1.100
-
部署方式:分布式
-
是否为线上版本:Y
-
问题的具体描述
rdf 转 csv 工具: GitHub - jievince/rdf-converter: convert rdf format data into the format which nebula-importer reads,我使用此工具生成的VID和hash()函数不一样,是现在不能使用了吗?
下载链接:GitHub - jievince/rdf-converter: convert rdf format data into the format which nebula-importer reads
Jievince 的那个是 1.x 版本的 Nebula,2.x 和 3.0 版本同 1.x 版本的数据结构不大一样。所以应该是不能直接用在 2.5.1 版本上的
这样,那还有替代的工具吗?
@jievince 我看您的 converter 也是 murmur2,是不是把 seed 0xc70f6907UL
加进去就可以和 nebula 2+ 的 hash() 一致呢?如果是的话我去PR一下
另外,我注意到 nebula_ownthink_property_graph | Kaggle 里有一个 v2 的csv,里边是未 hash 过的数据 @stephenhah 你可以直接自己写 importer 配置导入,把第一列,第三列看做点,第二列看做是边。 我理解可以这样 @jievince 可以纠正我。
不好意思,我没太理解您的意思。其实我已有业务数据的csv文件,是想通过rdf-converter这个工具将文件处理成vertex.csv和edge.csv,然后使用nebula-importer导入nebula graph,但导入后通过hash()生成VID来查询数据不对。目前还有其它工具或方式能够将csv文件处理成vertex.csv和edge.csv,方便后续导入和查询的吗?
明白了,您是要用自己的 RDF,而不是 ownthink 数据本身。
应该修改一下 converter 里的 hash 就能做到和 nebula hash() 一样了 https://docs.nebula-graph.com.cn/3.0.0/3.ngql-guide/6.functions-and-expressions/12.hash/ ,你可以试着改改,把 seed 放进去应该就行了,改好了提一个 PR 贡献回来哈,如果有困难我可以花时间看看
hash()函数采用 MurmurHash2 算法,种子(seed)为0xc70f6907UL。用户可以在 MurmurHash2.h 中查看其源代码。
比如在 Java 中的调用方式如下:
MurmurHash2.hash64("to_be_hashed".getBytes(),"to_be_hashed".getBytes().length, 0xc70f6907)
我实现起来困难较大,辛苦您花时间看看,非常感谢
我去看了一下, convertor 现在新的版本已经去掉了 hash(而且之前有hash的时候 seed也是对的了已经),你生成的 edge/vertex 里应该 vid 是原始的 string 才对呀
https://github.com/jievince/rdf-converter/pull/6
能给我看看下你的原始数据和生成数据的前几行例子么?
原始数据:
vertex.csv:
edge.csv:
应该是你用了 repo 里的二进制,是 v1 年代的,我fix 了代码,还没合,你可以去 https://github.com/wey-gu/rdf-converter clone 了 build 再用,现在是工作的
已经合并了,你编译一下就可以用了,importer我也写了 v2 版本的传上去了哈
~/dev/rdf-converter master*
❯ go build
~/dev/rdf-converter master*
❯ bat rdf_data.csv
───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: rdf_data.csv
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ 谢颖,出演,起风指令
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯ ./rdf-converter --path rdf_data.csv
hava read lines: 0
totalLines: 1, errorLines: 0
Finish convert rdf data, consume time: 0.00s
~/dev/rdf-converter master*
❯ bat vertex.csv
───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: vertex.csv
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ 谢颖
2 │ 起风指令
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
~/dev/rdf-converter master*
❯ bat edge.csv
───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: edge.csv
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ 谢颖,起风指令,出演
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
另外,才意识到,在 nebula v2/v3 的情况下,如果rdf已经转换成了 csv,就没有必要用 converter 做转换了,直接用 importer 就可以导入了,配置里第一列第三列为点,1列->3列 为边,第二列为边的 name 属性。
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。