hash 函数¶
hash()
函数返回参数的哈希值。其参数可以是数字、字符串、列表、布尔值、NULL 等类型的值,或者计算结果为这些类型的表达式。
hash()
函数采用 MurmurHash2 算法,种子(seed)为0xc70f6907UL
。用户可以在 MurmurHash2.h
中查看其源代码。
在 Java 中的调用方式如下:
MurmurHash2.hash64("to_be_hashed".getBytes(),"to_be_hashed".getBytes().length, 0xc70f6907)
历史版本兼容性¶
nGQL 1.0 不支持字符串类型的 VID,一种常用的处理方式是用 hash 函数获取字符串的哈希值,然后将该值设置为 VID。但从 nGQL 2.0 开始,同时支持了字符串和整数类型的 VID,所以无需再使用这种方式设置 VID。
计算数字的哈希值¶
nebula> YIELD hash(-123);
+--------------+
| hash(-(123)) |
+--------------+
| -123 |
+--------------+
计算字符串的哈希值¶
nebula> YIELD hash("to_be_hashed");
+----------------------+
| hash("to_be_hashed") |
+----------------------+
| -1098333533029391540 |
+----------------------+
计算列表的哈希值¶
nebula> YIELD hash([1,2,3]);
+----------------+
| hash([1,2,3]) |
+----------------+
| 11093822460243 |
+----------------+
计算布尔值的哈希值¶
nebula> YIELD hash(true);
+------------+
| hash(true) |
+------------+
| 1 |
+------------+
nebula> YIELD hash(false);
+-------------+
| hash(false) |
+-------------+
| 0 |
+-------------+
计算 NULL 的哈希值¶
nebula> YIELD hash(NULL);
+------------+
| hash(NULL) |
+------------+
| -1 |
+------------+
计算表达式的哈希值¶
nebula> YIELD hash(toLower("HELLO NEBULA"));
+-------------------------------+
| hash(toLower("HELLO NEBULA")) |
+-------------------------------+
| -8481157362655072082 |
+-------------------------------+
最后更新:
March 7, 2023