跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

映射函数

映射函数用于构建及修改基于映射(Map)的数据结构(键值对的集合)中的数据。

element_at()

返回映射中指定键对应的值。

NULL 行为:通用

函数签名

element_at(target_map, key) -> ANY
  • target_map:要从中获取值的目标映射。
  • key:要获取对应值的键。支持除记录和路径以外的任何预定义数据类型或复合数据类型。

说明

  • 如果指定的键在映射中不存在,函数返回null。
  • 键的数据类型必须与映射中现有键的数据类型相同。

示例

通过键获取值

RETURN element_at(MAP{1:"a", 2:"b"}, 1)

返回:

+----------------------------------+
| element_at(MAP{1:"a", 2:"b"}, 1) |
+----------------------------------+
| a                                |
+----------------------------------+

获取 NULL 键对应的值

RETURN element_at(MAP{null:"a"}, null)

返回:

+----------------------------------+
| element_at(MAP{null:"a"}, null)  |
+----------------------------------+
| a                                |
+----------------------------------+

键不存在

RETURN element_at(MAP{1:"a"}, 2)

返回:

+-----------------------------+
| element_at(MAP{1:"a"}, 2)   |
+-----------------------------+
| null                        |
+-----------------------------+

map_append()

向已有的映射追加一个新的键值。

NULL 行为:通用

函数签名

map_append(target_map, key, value) -> MAP
  • target_map:要追加键值对的目标映射。
  • key:要追加的键。支持任意预定义数据类型,或除记录和路径之外的复合数据类型。
  • value:要追加的值。支持任意预定义数据类型,或除记录和路径之外的复合数据类型。

使用说明

  • 如果指定的键在映射中已存在,该函数不进行任何修改返回原映射,不会覆盖已有的值。
  • 待追加键/值的数据类型必须与映射中现有键/值的数据类型一致。
  • 可以向空映射(MAP{})追加一个键值对,以创建只包含一个条目的新映射。
  • 键和值都可以为null。

示例

追加非 NULL 键值对

RETURN map_append(MAP{1:"a"}, 2, "b")

返回:

+--------------------------------+
| map_append(MAP{1:"a"}, 2, "b") |
+--------------------------------+
| {1:a,2:b}                      |
+--------------------------------+

追加 NULL 键值对

RETURN map_append(MAP{1:"a", 2:"b"}, null, null)

返回:

+-------------------------------------------+
| map_append(MAP{1:"a", 2:"b"}, null, null) |
+-------------------------------------------+
| {1:a,2:b,null:null}                       |
+-------------------------------------------+

向空映射追加

RETURN map_append(MAP{}, 1, "a")

返回:

+---------------------------+
| map_append(MAP{}, 1, "a") |
+---------------------------+
| {1:a}                     |
+---------------------------+

向 NULL 映射追加

RETURN map_append(null, 1, "a")

返回:

+--------------------------+
| map_append(null, 1, "a") |
+--------------------------+
| null                     |
+--------------------------+

向含有同名键的映射追加

RETURN map_append(MAP{true: "a"}, true, "b")

返回:

+---------------------------------------+
| map_append(MAP{true: "a"}, true, "b") |
+---------------------------------------+
| {true:a}                              |
+---------------------------------------+

map_replace()

替换映射中指定键对应的值。

NULL 行为:通用

函数签名

map_replace(target_map, key, value) -> MAP
  • target_map:要替换值的目标映射。
  • key:要替换对应值的键。支持除记录和路径以外的任何预定义数据类型或复合数据类型。
  • value:用于替换现有值的新值。支持除记录和路径以外的任何预定义数据类型或复合数据类型。

说明

  • 如果指定的键在映射中不存在,会抛出错误。
  • 键的数据类型必须与映射中现有键的数据类型相同。
  • 值的数据类型必须与映射中现有值的数据类型相同。

示例

替换现有值

RETURN map_replace(MAP{1:"old", 2:"b"}, 1, "new")

返回:

+--------------------------------------------+
| map_replace(MAP{1:"old", 2:"b"}, 1, "new") |
+--------------------------------------------+
| {1:new,2:b}                                |
+--------------------------------------------+

替换 NULL 键对应的值

RETURN map_replace(MAP{null:"a"}, null, "b")

返回:

+---------------------------------------+
| map_replace(MAP{null:"a"}, null, "b") |
+---------------------------------------+
| {null:b}                              |
+---------------------------------------+

键不存在(报错)

RETURN map_replace(MAP{1:"a", 2:"b"}, 3, "c")

报错:

[NR003]: Invalid function argument: map_replace: key not found

键类型不匹配(报错)

RETURN map_replace(MAP{1:"a"}, "key", "b")

报错:

[NR006]: Resolve function failed: `The map element key type mismatch: INT32 vs STRING`

值类型不匹配(报错)

RETURN map_replace(MAP{1:"a"}, 1, 100)

报错:

[NR006]: Resolve function failed: `The map element value type mismatch: STRING vs INT32`

map_keys()

返回包含映射中所有键的列表。

NULL 行为:通用

函数签名

map_keys(target_map) -> LIST
  • target_map:要从中提取键的目标映射。

示例

获取所有键

RETURN map_keys(MAP{1:"a", 2:"b"})

返回:

+-----------------------------+
| map_keys(MAP{1:"a", 2:"b"}) |
+-----------------------------+
| [1,2]                       |
+-----------------------------+

从包含 NULL 键的映射中获取键

RETURN map_keys(MAP{null:null})

返回:

+---------------------------+
| map_keys(MAP{null:null})  |
+---------------------------+
| [null]                    |
+---------------------------+

从空映射中获取键

RETURN map_keys(MAP{})

返回:

+------------------+
| map_keys(MAP{})  |
+------------------+
| []               |
+------------------+

map_values()

返回包含映射中所有值的列表。

NULL 行为:通用

函数签名

map_values(target_map) -> LIST
  • target_map:要从中提取值的目标映射。

示例

获取所有值

RETURN map_values(MAP{1:"a", 2:"a"})

返回:

+-------------------------------+
| map_values(MAP{1:"a", 2:"a"}) |
+-------------------------------+
| [a,a]                         |
+-------------------------------+

从空映射中获取值

RETURN map_values(MAP{})

返回:

+--------------------+
| map_values(MAP{})  |
+--------------------+
| []                 |
+--------------------+

map_union()

返回两个映射的并集。

NULL 行为:通用

函数签名

map_union(map1, map2) -> MAP
  • map1:第一个映射。
  • map2:第二个映射。

说明

  • 如果两个映射中存在相同的键且值也相同,该键值对会包含在结果中。
  • 如果两个映射中存在相同的键但值不同,会抛出错误。
  • 功能与||运算符相同。

示例

合并两个键不同的映射

RETURN map_union(MAP{1:"a", 2:"b"}, MAP{3:"c", 4:"d"})

返回:

+-------------------------------------------------+
| map_union(MAP{1:"a", 2:"b"}, MAP{3:"c", 4:"d"}) |
+-------------------------------------------------+
| {1:a,2:b,3:c,4:d}                               |
+-------------------------------------------------+

与空映射合并

RETURN map_union(MAP{}, MAP{1:"a"})

返回:

+-------------------------------+
| map_union(MAP{}, MAP{1:"a"})  |
+-------------------------------+
| {1:a}                         |
+-------------------------------+

合并具有相同键和相同值的映射

RETURN map_union(MAP{1:"a"}, MAP{1:"a"})

返回:

+-----------------------------------+
| map_union(MAP{1:"a"}, MAP{1:"a"}) |
+-----------------------------------+
| {1:a}                             |
+-----------------------------------+

合并具有相同键但值不同的映射(报错)

RETURN map_union(MAP{null:"a"}, MAP{null:"b"})

报错:

[NR003]: Invalid function argument: map_union: duplicate key with different value

map_intersect()

返回两个映射的交集。

NULL 行为:通用

函数签名

map_intersect(map1, map2) -> MAP
  • map1:第一个映射。
  • map2:第二个映射。

说明

  • 只有当键和值在两个映射中都完全相同时,该键值对才会包含在结果中。
  • 如果一个键在两个映射中都存在但值不同,则不会包含在结果中。

示例

取具有相同键值对的交集

RETURN map_intersect(MAP{1:"a", 2:"b"}, MAP{1:"a", 4:"d"})

返回:

+-----------------------------------------------------+
| map_intersect(MAP{1:"a", 2:"b"}, MAP{1:"a", 4:"d"}) |
+-----------------------------------------------------+
| {1:a}                                               |
+-----------------------------------------------------+

取具有相同键但值不同的交集

RETURN map_intersect(MAP{null:"a"}, MAP{null:"b"})

返回:

+---------------------------------------------+
| map_intersect(MAP{null:"a"}, MAP{null:"b"}) |
+---------------------------------------------+
| {}                                          |
+---------------------------------------------+

map_except()

返回两个映射的差集(第一个映射中不在第二个映射中的元素)。

NULL 行为:通用

函数签名

map_except(map1, map2) -> MAP
  • map1:第一个映射。
  • map2:第二个映射。

说明

  • 只有当键和值在两个映射中都完全相同时,该键值对才会从结果中移除。
  • 如果一个键在两个映射中都存在但值不同,该键值对会保留在结果中。

示例

取没有相同键的差集

RETURN map_except(MAP{1:"a", 2:"b"}, MAP{3:"c", 4:"d"})

返回:

+--------------------------------------------------+
| map_except(MAP{1:"a", 2:"b"}, MAP{3:"c", 4:"d"}) |
+--------------------------------------------------+
| {1:a,2:b}                                        |
+--------------------------------------------------+

取具有相同键但值不同的差集

RETURN map_except(MAP{null:"a"}, MAP{null:"b"})

返回:

+------------------------------------------+
| map_except(MAP{null:"a"}, MAP{null:"b"}) |
+------------------------------------------+
| {null:a}                                 |
+------------------------------------------+

第一个映射为空时取差集

RETURN map_except(MAP{}, MAP{1:"a"})

返回:

+-------------------------------+
| map_except(MAP{}, MAP{1:"a"}) |
+-------------------------------+
| {}                            |
+-------------------------------+

取具有相同键值对的差集

RETURN map_except(MAP{1:"a"}, MAP{1:"a"})

返回:

+------------------------------------+
| map_except(MAP{1:"a"}, MAP{1:"a"}) |
+------------------------------------+
| {}                                 |
+------------------------------------+

map_filter()

返回一个新映射,其中只包含满足指定谓词条件的键值对。

NULL 行为:通用

函数签名

map_filter(target_map, predicate) -> MAP
  • target_map:要过滤的目标映射。
  • predicate:Lambda 表达式(k, v) -> boolean_expression,用于定义过滤条件。k表示键,v表示值。

说明

  • 如果输入映射为null,函数返回null。
  • 如果输入映射为空,函数返回空映射。
  • 谓词会应用于每个键值对,只有谓词计算结果为true的键值对才会包含在结果中。

示例

过滤掉 NULL 键

RETURN map_filter(MAP{1:"a", 2:"b", null:null}, (k, v) -> k IS NOT NULL)

返回:

+-------------------------------------------------------------------+
| map_filter(MAP{1:"a", 2:"b", null:null}, (k, v) -> k IS NOT NULL) |
+-------------------------------------------------------------------+
| {1:a,2:b}                                                         |
+-------------------------------------------------------------------+

按值过滤(保留非空值)

RETURN map_filter(MAP{1:"a", 2:null, 3:"c"}, (k, v) -> v IS NOT NULL)

返回:

+----------------------------------------------------------------+
| map_filter(MAP{1:"a", 2:null, 3:"c"}, (k, v) -> v IS NOT NULL) |
+----------------------------------------------------------------+
| {1:a,3:c}                                                      |
+----------------------------------------------------------------+

同时按键和值过滤

RETURN map_filter(MAP{1:"a", 2:"b", 3:"a", 4:"x"}, (k, v) -> k >= 2 AND v <> "a")

返回:

+----------------------------------------------------------------------------+
| map_filter(MAP{1:"a", 2:"b", 3:"a", 4:"x"}, (k, v) -> k >= 2 AND v <> "a") |
+----------------------------------------------------------------------------+
| {2:b,4:x}                                                                  |
+----------------------------------------------------------------------------+

谓词始终为 true 时过滤

RETURN map_filter(MAP{1:"a", 2:"b"}, (k, v) -> true)

返回:

+-----------------------------------------------+
| map_filter(MAP{1:"a", 2:"b"}, (k, v) -> true) |
+-----------------------------------------------+
| {1:a,2:b}                                     |
+-----------------------------------------------+

按字符串值过滤

RETURN map_filter(MAP{"x":"yes", "y":"no", "z":"yes"}, (k, v) -> v = "yes")

返回:

+----------------------------------------------------------------------+
| map_filter(MAP{"x":"yes", "y":"no", "z":"yes"}, (k, v) -> v = "yes") |
+----------------------------------------------------------------------+
| {x:yes,z:yes}                                                        |
+----------------------------------------------------------------------+

使用捕获变量过滤

FOR i IN [0, 5, 2]
RETURN map_filter(MAP{1:"a", 2:"b", 3:"c"}, (k, v) -> k > i)

返回:

+--------------------------------------------------------------+
| map_filter(MAP{1:"a", 2:"b", 3:"c"}, (k, v) -> k > i)        |
+--------------------------------------------------------------+
| {1:a,2:b,3:c}                                                |
| {}                                                           |
| {3:c}                                                        |
+--------------------------------------------------------------+

map_remove()

从映射中移除指定键对应的键值对。

NULL 行为:通用

函数签名

map_remove(target_map, key) -> MAP
  • target_map:要从中移除键值对的目标映射。
  • key:要移除的键值对的键。支持除记录和路径以外的任何预定义数据类型或复合数据类型。

说明

  • 如果指定的键在映射中不存在,函数返回原映射而不进行修改。
  • 键的数据类型必须与映射中现有键的数据类型相同。

示例

移除已存在的键

RETURN map_remove(MAP{1:"a", 2:"b"}, 1)

返回:

+----------------------------------+
| map_remove(MAP{1:"a", 2:"b"}, 1) |
+----------------------------------+
| {2:b}                            |
+----------------------------------+

移除不存在的键

RETURN map_remove(MAP{null:"a"}, 1)

返回:

+------------------------------+
| map_remove(MAP{null:"a"}, 1) |
+------------------------------+
| {null:a}                     |
+------------------------------+

从空映射中移除

RETURN map_remove(MAP{}, 1)

返回:

+-----------------------+
| map_remove(MAP{}, 1)  |
+-----------------------+
| {}                    |
+-----------------------+

键类型不匹配(报错)

RETURN map_remove(MAP{1:"a"}, "key")

报错:

[NR006]: Resolve function failed: `The map element key type mismatch: INT32 vs STRING`

remove_nulls()

从映射中移除键和值都为null的键值对。

NULL 行为:通用

函数签名

remove_nulls(target_map) -> MAP
  • target_map:要从中移除空键值对的目标映射。

说明

  • 只移除键和值都为null的键值对。
  • 只有键为null或只有值为null的键值对会被保留。

示例

移除空键值对

RETURN remove_nulls(MAP{1:"a", 2:"b", null:null})

返回:

+--------------------------------------------+
| remove_nulls(MAP{1:"a", 2:"b", null:null}) |
+--------------------------------------------+
| {1:a,2:b}                                  |
+--------------------------------------------+

保留只有键或值为 NULL 的键值对

RETURN remove_nulls(MAP{null:1, 2:null})

返回:

+-----------------------------------+
| remove_nulls(MAP{null:1, 2:null}) |
+-----------------------------------+
| {2:null,null:1}                   |
+-----------------------------------+