如何遍历一个tag逐个拿到所有的vid?

我想拿到一个space下某个tag的所有vid,如何实现?python客户端中有一个scan方法,但是需要设定limit参数,如果limit参数设置大于分区的数据量理论上可以实现遍历该tag某个分区下的所有vid,但是当数据量大时像数亿数十亿的时候这种方法会超时查询不出,请问有什么合适的功能实现遍历吗?最好有遍历时的offset机制和更进一步的分区机制。

具体什么样的错误?
服务端是有 offset 的,现在是包在 nebula-python 里了,就是按 limit,一次扫 limit 的个数,直到扫完整个 part。

你如果 limit 很大,肯定会超时的,相当于一次从 storage 扫数十亿的数据。
你可以不断统计 scan 的条数,打印出来看一下。

PS:
受限于 python 的全局锁和解码速度,scan 会比较慢的,大数据量推荐用 spark-connector 去做类似的 AP 统计。

为什么我这边测试的一直是重复的拉取limit的数据量?
resp = self.graph_storage_client.scan_vertex_with_part(space_name=‘xxx’, part=part_id, tag_name=‘tag_xxx’,prop_names=[‘xxx’],limit=1000)
while resp.has_next():
result = resp.next()
for vertex_data in result:
print(vertex_data)
这样打印出来的数据都是重复的1000条

哪个版本的 nebula-python
如果一直是一样的数据,可能是有 bug,你用哪个版本,我试试

3.0.0的

之前导存量数据是用的spark-connector刷进去的,我了解到的spark-connector好像不支持nql,如果我想查询指定vid的一些边关系,用spark-connector该如何实现?考虑用python客户端是因为可以直接执行nql更灵活一些

如果sacn过程中断,再起程序的按断之前的offset开始继续遍历,有这样的功能吗

我试了下,nebula-python 没出现你说的问题
是有问题的。。我看一下

git clone https://github.com/vesoft-inc/nebula-python.git
cd nebula-python/
git checkout v3.0.0
cd tests/
docker-compose -f docker-compose.yaml up -d
cd ..
pip3 install -r requirements/dev.txt
cd example/
python3 ScanVertexEdgeExample.py
# 把 limit 改为 1
python3 ScanVertexEdgeExample.py

1 个赞

没有,现在就是一次扫完一整个集群的数据的

我又回去测了几遍,开始怀疑电脑了 :rofl:…都想传上来视频让你看看

上周使用2.6.1的时候是像你说的limit一样,周末升的3

感谢反馈,pr 提了,等同事明天看一下

2 个赞

请问这个现在修复了吗?

已经修了,合并到最新的 master 里了。

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