使用rdf-converter工具生成的VID,和使用hash()函数生成的值不一样

  • 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一下 :smiley:

另外,我注意到 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

能给我看看下你的原始数据和生成数据的前几行例子么?

原始数据:
image
vertex.csv:
image
edge.csv:
image

应该是你用了 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   │ 谢颖,起风指令,出演
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

2 个赞

另外,才意识到,在 nebula v2/v3 的情况下,如果rdf已经转换成了 csv,就没有必要用 converter 做转换了,直接用 importer 就可以导入了,配置里第一列第三列为点,1列->3列 为边,第二列为边的 name 属性。

1 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。