跳到主要内容
跳到主要内容

映射函数

map

从键值对创建 Map(key, value) 类型的值。

语法

参数

  • key_n — 映射条目的键。支持作为 Map 的键类型的任何类型。
  • value_n — 映射条目的值。支持作为 Map 的值类型的任何类型。

返回值

示例

查询:

结果:

mapFromArrays

从键的数组或映射和值的数组或映射创建映射。

该函数是语法 CAST([...], 'Map(key_type, value_type)') 的便利替代。例如,可以将

  • CAST((['aa', 'bb'], [4, 5]), 'Map(String, UInt32)'),或
  • CAST([('aa',4), ('bb',5)], 'Map(String, UInt32)')

替换为 mapFromArrays(['aa', 'bb'], [4, 5])

语法

别名: MAP_FROM_ARRAYS(keys, values)

参数

  • keys — 用于创建映射的键的数组或映射 ArrayMap。如果 keys 是数组,我们接受 Array(Nullable(T))Array(LowCardinality(Nullable(T))) 作为其类型,只要它不包含 NULL 值。
  • values - 用于创建映射的值的数组或映射 ArrayMap

返回值

  • 通过键数组和值数组/映射构造的映射。

示例

查询:

结果:

mapFromArrays 还接受 Map 类型的参数。这些参数在执行期间被转换为元组数组。

结果:

结果:

extractKeyValuePairs

将键值对字符串转换为 Map(String, String)。 解析对噪音(例如日志文件)具有一定容忍度。 输入字符串中的键值对由键、键值分隔符和一个值组成。 键值对由成对的分隔符分隔。 键和值可以被引号包含。

语法

别名:

  • str_to_map
  • mapFromString

参数

  • data - 要提取键值对的字符串。 StringFixedString
  • key_value_delimiter - 用于分隔键和值的单个字符。默认为 :StringFixedString
  • pair_delimiters - 用于分隔成对的字符集合。默认为 , ,;StringFixedString
  • quoting_character - 用作引号字符的单个字符。默认为 "StringFixedString

返回值

示例

查询

结果:

使用单引号 ' 作为引号字符:

结果:

不支持转义序列的转义序列:

结果:

要恢复使用 toString 序列化的映射字符串键值对:

结果:

extractKeyValuePairsWithEscaping

extractKeyValuePairs 相同,但支持转义。

支持的转义序列: \x\N\a\b\e\f\n\r\t\v\0。 非标准转义序列按原样返回(包括反斜杠),除非它们属于以下之一: \\'"backtick/= 或 ASCII 控制字符(c <= 31)。

该函数将满足预先转义和后转义不适用的用例。例如,考虑以下输入字符串: a: "aaaa\"bbb"。预期输出为: a: aaaa\"bbbb

  • 预先转义:预先转义将输出: a: "aaaa"bbb,然后 extractKeyValuePairs 将输出: a: aaaa
  • 后转义: extractKeyValuePairs 将输出 a: aaaa\,后转义将保持原样。

在键中,前导转义序列将被跳过,值将被视为无效。

示例

支持转义序列开启的转义序列:

结果:

mapAdd

收集所有键并对相应值进行求和。

语法

参数

参数是 mapstuples 的两个 arrays,其中第一个数组中的项表示键,第二个数组包含每个键的值。所有键数组应具有相同的类型,所有值数组应包含被提升为一种类型的项(Int64UInt64Float64)。共同提升类型被用作结果数组的类型。

返回值

  • 根据参数返回一个 maptuple,其中第一个数组包含排序的键,第二个数组包含值。

示例

使用 Map 类型的查询:

结果:

使用元组的查询:

结果:

mapSubtract

收集所有键并减去相应的值。

语法

参数

参数是 mapstuples 的两个 arrays,其中第一个数组中的项表示键,第二个数组包含每个键的值。所有键数组应具有相同的类型,所有值数组应包含被提升为一种类型的项(Int64UInt64Float64)。共同提升类型被用作结果数组的类型。

返回值

  • 根据参数返回一个 maptuple,其中第一个数组包含排序的键,第二个数组包含值。

示例

使用 Map 类型的查询:

结果:

使用元组映射的查询:

结果:

mapPopulateSeries

用缺失的键值对填充一个映射,键为整数。 为了支持扩展键超出最大值,可以指定最大键值。 更具体地,该函数返回一个映射,其中键从最小键到最大键(或指定的 max 参数)形成一个系列,步长为 1,及其对应值。 如果未指定键的值,则使用默认值。 在键重复的情况下,仅第一个值(按出现顺序)与键相关联。

语法

对于数组参数, keysvalues 中的元素数量必须对每行相同。

参数

参数是 Maps 或两个 Arrays,其中第一个和第二个数组包含每个键的键和值。

映射数组:

  • map — 整数键的映射。 Map

返回值

  • 根据参数返回一个 Map 或一个包含两个 ArraysTuple:按排序顺序排列的键,以及相应键的值。

示例

使用 Map 类型的查询:

结果:

使用映射数组的查询:

结果:

mapContains

返回指定键是否包含在给定映射中。

语法

参数

  • map — 映射。 Map
  • key — 键。类型必须与 map 的键类型匹配。

返回值

  • 如果 map 包含 key,则返回 1,否则返回 0UInt8

示例

查询:

结果:

mapKeys

返回给定映射的键。

通过启用设置 optimize_functions_to_subcolumns 可以优化此函数。 启用设置后,函数只读取 keys 子列,而不是整个映射。 查询 SELECT mapKeys(m) FROM table 转换为 SELECT m.keys FROM table

语法

参数

  • map — 映射。 Map

返回值

  • 包含 map 中所有键的数组。 Array

示例

查询:

结果:

mapValues

返回给定映射的值。

通过启用设置 optimize_functions_to_subcolumns 可以优化此函数。 启用设置后,函数只读取 values 子列,而不是整个映射。 查询 SELECT mapValues(m) FROM table 转换为 SELECT m.values FROM table

语法

参数

  • map — 映射。 Map

返回值

  • 包含 map 中所有值的数组。 Array

示例

查询:

结果:

mapContainsKeyLike

语法

参数

  • map — 映射。 Map
  • pattern - 匹配的字符串模式。

返回值

  • 如果 map 包含类似于指定模式的 key,则返回 1,否则返回 0

示例

查询:

结果:

mapExtractKeyLike

给定一个带有字符串键的映射和一个 LIKE 模式,该函数返回一个映射,其元素的键与模式匹配。

语法

参数

  • map — 映射。 Map
  • pattern - 匹配的字符串模式。

返回值

  • 包含键匹配指定模式的元素的映射。如果没有元素匹配该模式,则返回一个空映射。

示例

查询:

结果:

mapApply

对映射的每个元素应用一个函数。

语法

参数

返回值

  • 通过对每个元素应用 func(map1[i], ..., mapN[i]) 从原始映射获得的映射。

示例

查询:

结果:

mapFilter

通过对每个映射元素应用函数来过滤映射。

语法

参数

返回值

  • 返回一个映射,其中仅包含在 mapfunc(map1[i], ..., mapN[i]) 返回非零结果的元素。

示例

查询:

结果:

mapUpdate

语法

参数

返回值

  • 返回 map1,其值已根据 map2 中相应键的值进行了更新。

示例

查询:

结果:

mapConcat

根据键的相等性连接多个映射。 如果具有相同键的元素存在于多个输入映射中,则所有元素都被添加到结果映射中,但只有第一个可通过操作符 [] 访问。

语法

参数

  • maps – 任意数量的 Maps

返回值

  • 返回一个通过将作为参数传递的映射连接而成的映射。

示例

查询:

结果:

查询:

结果:

mapExists([func,], map)

如果 map 中至少一个键值对存在,使得 func(key, value) 返回非零值,则返回 1。否则返回 0。

备注

mapExists 是一个 高阶函数。 您可以将 lambda 函数作为第一个参数传递给它。

示例

查询:

结果:

mapAll([func,] map)

如果 func(key, value)map 中的所有键值对返回非零值,则返回 1。否则返回 0。

备注

注意 mapAll 是一个 高阶函数。 您可以将 lambda 函数作为第一个参数传递给它。

示例

查询:

结果:

mapSort([func,], map)

按升序对映射的元素进行排序。 如果指定了 func 函数,则排序顺序由 func 函数应用于映射的键和值的结果决定。

示例

有关更多详细信息,请参见 reference 中的 arraySort 函数。

mapPartialSort

按升序对映射的元素进行排序,附加 limit 参数允许部分排序。 如果指定了 func 函数,则排序顺序由 func 函数应用于映射的键和值的结果决定。

语法

参数

  • func – 可选的函数,用于应用于映射的键和值。 Lambda 函数
  • limit – 范围内的元素 [1..limit] 将被排序。 (U)Int
  • map – 要排序的映射。 Map

返回值

  • 部分排序的映射。 Map

示例

mapReverseSort([func,], map)

按降序对映射的元素进行排序。 如果指定了 func 函数,则排序顺序由 func 函数应用于映射的键和值的结果决定。

示例

有关详细信息,请参见函数 arrayReverseSort

mapPartialReverseSort

按降序对映射的元素进行排序,附加 limit 参数允许部分排序。 如果指定了 func 函数,则排序顺序由 func 函数应用于映射的键和值的结果决定。

语法

参数

  • func – 可选的函数,用于应用于映射的键和值。 Lambda 函数
  • limit – 范围内的元素 [1..limit] 将被排序。 (U)Int
  • map – 要排序的映射。 Map

返回值

  • 部分排序的映射。 Map

示例