跳转到主要内容

extractKeyValuePairs

引入版本:v23.4.0 从任意字符串中提取键值对。该字符串无需严格遵循键值对格式; 输入内容可以包含噪声 (例如日志文件) 。需要通过函数参数指定待解析的键值对格式。 键值对由一个键、一个 key_value_delimiter 和一个值组成。带引号的键和值也受支持。键值对之间必须用对分隔符分隔。 语法
参数
  • data - 用于提取键值对的字符串。StringFixedString
    • key_value_delimiter - 用作键和值之间分隔符的字符。默认为 :StringFixedString
    • pair_delimiters - 用作键值对之间分隔符的一组字符。默认为 \space,;StringFixedString
    • quoting_character - 用作引号字符的字符。默认为 "StringFixedString
    • unexpected_quoting_character_strategy - 在 read_keyread_value 阶段,用于处理出现在非预期位置的引号字符的策略。可能的值:invalidacceptpromoteinvalid 会丢弃键/值并切换回 WAITING_KEY 状态。accept 会将其视为普通字符。promote 会切换到 READ_QUOTED_{KEY/VALUE} 状态,并从下一个字符开始处理。默认值为 INVALID
返回值
  • 提取出的键值对,存储在 Map(String, String) 中。
示例 查询: 简单示例
使用单引号作为引号字符
unexpected_quoting_character_strategy 示例: unexpected_quoting_character_strategy=invalid
unexpected_quoting_character_strategy=accept
unexpected_quoting_character_strategy=promote
不支持转义序列时的转义写法
语法
别名: str_to_map, mapFromString 参数
  • 无。
返回值 示例

extractKeyValuePairsWithEscaping

引入版本:v23.4.0 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\,而后转义会将其保持原样。
键中的前导转义序列会被跳过,而在值中会被视为无效。 启用转义序列支持时的转义序列
语法
参数
  • 无。
返回值 示例

map

引入版本:v21.1.0 根据键值对创建 Map(key, value) 类型的值。 语法
参数
  • key_n — Map 条目的键。Any
  • value_n — Map 条目的值。Any
返回值 返回一个包含 key:value 对的 Map。Map(Any, Any) 示例 使用示例
Query
Response

mapAdd

引入版本:v20.7.0 收集所有键,并将对应的值相加。 语法
参数
  • arg1[, arg2, ...] — Map 或由两个数组组成的元组,其中第一个数组中的元素表示键,第二个数组包含每个键对应的值。Map(K, V)Tuple(Array(T), Array(T))
返回值 返回一个 Map 或元组,其中第一个数组包含已排序的键,第二个数组包含对应的值。Map(K, V)Tuple(Array(T), Array(T)) 示例 使用 Map 类型
Query
Response
使用 Tuple
Query
Response

mapAll

引入于:v23.4.0 用于测试某个条件是否对 map 中的所有键值对都成立。 mapAll 是一个高阶函数。 你可以将 lambda 函数作为第一个参数传递给它。 语法
参数 返回值 如果所有键值对都满足条件,则返回 1;否则返回 0UInt8 示例 使用示例
Query
Response

mapApply

引入版本:v22.3.0 将函数应用于 map 的每个元素。 语法
参数 返回值 返回一个新 Map,它是对原始 Map 的每个元素应用 func 后得到的。Map(K, V) 示例 用法示例
Query
Response

mapConcat

引入版本:v23.4.0 根据键是否相同拼接多个 Map。 如果多个输入 Map 中存在键相同的元素,则所有元素都会被添加到结果 Map 中,但只有第一个元素可通过运算符 [] 访问。 语法
参数
  • maps — 任意数量的 Map。Map
返回值 返回一个由作为参数传入的多个 Map 拼接而成的 Map。Map 示例 使用示例
Query
Response

mapContainsKey

引入版本:v21.2.0 判断 map 中是否包含指定键。 语法
别名: mapContains 参数
  • map — 要在其中搜索的 Map。Map(K, V)
  • key — 要搜索的键。其类型必须与 map 的键类型一致。Any
返回值 如果 map 包含该键,则返回 1,否则返回 0。UInt8 示例 用法示例
Query
Response

mapContainsKeyLike

引入版本:v23.4.0 检查 map 是否包含匹配 LIKE 指定模式的键。 语法
参数 返回值 如果 map 包含与 pattern 匹配的键,则返回 1;否则返回 0UInt8 示例 使用示例
Query
Response

mapContainsValue

引入版本:v25.6.0 判断某个值是否包含在 map 中。 语法
参数
  • map — 要在其中搜索的 Map。Map(K, V)
  • value — 要搜索的值。其类型必须与 map 的值类型一致。Any
返回值 如果 map 包含该值,则返回 1;否则返回 0UInt8 示例 使用示例
Query
Response

mapContainsValueLike

引入版本:v25.5.0 检查 Map 中是否包含与指定模式 LIKE 匹配的值。 语法
参数 返回值 如果 map 包含与 pattern 匹配的值,则返回 1;否则返回 0UInt8 示例 用法示例
Query
Response

mapExists

引入版本:v23.4.0 检查映射中是否至少有一个键值对满足某个条件。 mapExists 是一个高阶函数。 你可以将 lambda function 作为它的第一个参数传入。 语法
参数 返回值 如果至少有一个键值对满足条件,则返回 1;否则返回 0UInt8 示例 使用示例
Query
Response

mapExtractKeyLike

引入版本:v23.4.0 给定一个键为字符串的 map 和一个 LIKE 模式,该函数会返回一个 map,其中包含键与该模式匹配的元素。 语法
参数
  • map — 要从中提取内容的 Map。Map(K, V)
  • pattern — 用于匹配键名的模式。const String
返回值 返回一个 map,其中包含键名与指定模式匹配的元素。如果没有元素匹配该模式,则返回空 map。Map(K, V) 示例 用法示例
Query
Response

mapExtractValueLike

引入版本:v25.5.0 给定一个值为字符串的 map 和一个 LIKE 模式,此函数返回一个 map,其中包含值与该模式匹配的元素。 语法
参数 返回值 返回一个包含值符合指定模式的元素的 Map。如果没有元素匹配该模式,则返回空 Map。Map(K, V) 示例 用法示例
Query
Response

mapFilter

引入版本:v22.3.0 通过对 map 中的每个元素应用函数,对 map 进行过滤。 语法
参数 返回值 返回一个 Map,仅包含 func 返回值不为 0 的元素。Map(K, V) 示例 使用示例
Query
Response

mapFromArrays

引入版本:v23.3.0 根据键的 Array 或 map 以及值的 Array 或 map 创建一个 map。 该函数是语法 CAST([...], 'Map(key_type, value_type)') 的一种便捷替代方案。 语法
别名: MAP_FROM_ARRAYS 参数
  • keys — 用于创建 Map 的键数组或键映射。ArrayMap
  • values — 用于创建 Map 的值数组或值映射。ArrayMap
返回值 返回一个 Map,其键和值由键数组和值数组/映射构造而成。Map 示例 基本用法
Query
Response
使用 Map 类型输入
Query
Response

mapKeys

引入版本:v21.2.0 返回给定 map 的键。 启用设置 optimize_functions_to_subcolumns 后,可对此函数进行优化。 启用该设置后,此函数仅读取 keys 子列,而不是整个 map。 查询 SELECT mapKeys(m) FROM table 会被转换为 SELECT m.keys FROM table 语法
参数 返回值 返回包含该 Map 中所有键的数组。Array(T) 示例 用法示例
Query
Response

mapPartialReverseSort

引入版本:v23.4.0 将 map 中的元素按降序排列,并通过额外的 limit 参数支持部分排序。 如果指定了 func 函数,则排序顺序由 func 函数应用于 map 的键和值后得到的结果决定。 语法
参数 返回值 返回按降序进行部分排序后的 Map。Map(K, V) 示例 使用示例
Query
Response

mapPartialSort

引入版本:v23.4.0 按升序对 map 中的元素进行排序,并通过额外的 limit 参数支持部分排序。 如果指定了 func 函数,则排序顺序由 func 函数应用于 map 的键和值后所得的结果决定。 语法
参数 返回值 返回一个部分排序后的 Map。Map(K, V) 示例 使用示例
Query
Response

mapPopulateSeries

Introduced in: v20.10.0 用整数键补齐映射中缺失的键值对。 如需将键扩展到超过当前最大值的位置,可以指定一个最大键。 更具体地说,该函数返回一个映射,其中键按步长 1 形成从最小键到最大键 (如果指定,则到 max 参数) 的连续序列,并具有对应的值。 如果某个键没有指定值,则使用默认值作为其值。 如果键重复,则只有第一个值 (按出现顺序) 会与该键关联。 Syntax
参数 返回值 返回一个 Map,或一个由两个数组组成的 Tuple:第一个数组包含按排序顺序排列的键,第二个数组包含对应键的值。Map(K, V)Tuple(Array(UInt*), Array(Any)) 示例 使用 Map 类型
Query
Response
配合映射后的数组
Query
Response

mapReverseSort

引入版本:v23.4.0 按降序对 map 中的元素进行排序。 如果指定了 func 函数,则排序顺序由 func 函数作用于 map 的键和值后得到的结果决定。 语法
参数 返回值 返回按降序排序后的 Map。Map(K, V) 示例 用法示例
Query
Response

mapSort

引入版本:v23.4.0 按升序对 map 中的元素进行排序。 如果指定了 func 函数,排序顺序将由 func 函数作用于 map 的键和值后得到的结果决定。 语法
参数 返回值 返回按升序排序后的 Map。Map(K, V) 示例 使用示例
Query
Response

mapSubtract

引入版本:v20.7.0 收集所有键,并将对应的值相减。 语法
参数
  • arg1[, arg2, ...] — 由两个数组组成的 Map 或 Tuple,其中第一个数组中的元素表示键,第二个数组包含每个键对应的值。Map(K, V)Tuple(Array(T), Array(T))
返回值 返回一个 Map 或 Tuple,其中第一个数组包含已排序的键,第二个数组包含对应的值。Map(K, V)Tuple(Array(T), Array(T)) 示例 使用 Map 类型
Query
Response
使用 Tuple map
Query
Response

mapUpdate

引入版本:v22.3.0 对于两个 Map,返回第一个 Map,并将其中的值按第二个 Map 中对应键的值更新。 语法
参数
  • map1 — 要更新的映射。Map(K, V)
  • map2 — 用于执行更新的映射。Map(K, V)
返回值 返回 map1,其中的值会被 map2 中对应键的值更新。Map(K, V) 示例 基本用法
Query
Response

mapValues

引入版本:v21.2.0 返回给定 map 的值。 启用设置 optimize_functions_to_subcolumns 后,此函数可得到优化。 启用该设置后,该函数只会读取 values 子列,而不是整个 map。 查询 SELECT mapValues(m) FROM table 会被转换为 SELECT m.values FROM table 语法
参数
  • map — 要从中提取值的 Map。Map(K, V)
返回值 返回一个数组,包含该 map 中的所有值。Array(T) 示例 使用示例
Query
Response
最后修改于 2026年6月19日