SAMPLE

SAMPLE子句用于在结果集中均匀取样并返回指定数量的数据。

历史版本兼容性

SAMPLE是Nebula Graph 2.6.0 新增的子句。

SAMPLE仅能在GO语句中使用,语法如下:

  1. <go_statement> SAMPLE <sample_list>;

sample_list是一个列表,列表中的元素必须为自然数,且元素数量必须与GO语句中的STEPS的最大数相同。下文以GO 1 TO 3 STEPS FROM "A" OVER * SAMPLE <sample_list>为例详细介绍SAMPLE的用法。

  • 列表sample_list必须包含3个自然数元素,例如GO 1 TO 3 STEPS FROM "A" OVER * SAMPLE [1,2,4]
  • SAMPLE [1,2,4]中的1表示系统在第一步时自动选择1条边继续遍历,2表示在第二步时选择2条边继续遍历,4表示在第三步时选择4条边继续遍历。如果某一步没有匹配的边或者匹配到的边数量小于指定数量,则按实际数量返回。
  • 因为GO 1 TO 3 STEPS表示返回第一到第三步的所有遍历结果,因此下图中所有红色边和它们的原点与目的点都会被这条GO语句匹配上,而黄色边表示GO语句遍历时没有选择的路径。如果不是GO 1 TO 3 STEPS而是GO 3 STEPS,则只会匹配上第三步的红色边和它们两端的点。

SAMPLE in GO

在basketballplayer数据集中的执行示例如下:

  1. nebula> GO 3 STEPS FROM "player100" \
  2. OVER * \
  3. YIELD properties($$).name AS NAME, properties($$).age AS Age \
  4. SAMPLE [1,2,3];
  5. +-----------------+--------------+
  6. | NAME | Age |
  7. +-----------------+--------------+
  8. | "Spurs" | UNKNOWN_PROP |
  9. | "Tony Parker" | 36 |
  10. | "Manu Ginobili" | 41 |
  11. +-----------------+--------------+
  12. nebula> GO 1 TO 3 STEPS FROM "player100" \
  13. OVER * \
  14. YIELD properties($$).name AS NAME, properties($$).age AS Age \
  15. SAMPLE [2,2,2];
  16. +---------------------+-----+
  17. | NAME | Age |
  18. +---------------------+-----+
  19. | "Manu Ginobili" | 41 |
  20. | "Tony Parker" | 36 |
  21. | "Tim Duncan" | 42 |
  22. | "LaMarcus Aldridge" | 33 |
  23. | "Tony Parker" | 36 |
  24. | "Tim Duncan" | 42 |
  25. +---------------------+-----+

最后更新: October 25, 2021