extractKeyValuePairs
引入版本:v23.4.0 从任意字符串中提取键值对。该字符串无需严格遵循键值对格式; 输入内容可以包含噪声 (例如日志文件) 。需要通过函数参数指定待解析的键值对格式。 键值对由一个键、一个key_value_delimiter 和一个值组成。带引号的键和值也受支持。键值对之间必须用对分隔符分隔。
语法
data- 用于提取键值对的字符串。String 或 FixedString。key_value_delimiter- 用作键和值之间分隔符的字符。默认为:。 String 或 FixedString。pair_delimiters- 用作键值对之间分隔符的一组字符。默认为\space、,和;。 String 或 FixedString。quoting_character- 用作引号字符的字符。默认为"。 String 或 FixedString。unexpected_quoting_character_strategy- 在read_key和read_value阶段,用于处理出现在非预期位置的引号字符的策略。可能的值:invalid、accept和promote。invalid会丢弃键/值并切换回WAITING_KEY状态。accept会将其视为普通字符。promote会切换到READ_QUOTED_{KEY/VALUE}状态,并从下一个字符开始处理。默认值为PROMOTE
- 提取出的键值对,存储在
Map(String, String)中。
mapFromString, str_to_map
参数
- 无。
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) 类型的值。
语法
Map(Any, Any)
示例
使用示例
Query
Response
mapAdd
引入版本:v20.7.0 收集所有键,并将对应的值相加。 语法arg1[, arg2, ...]— Map 或由两个数组组成的Tuple,其中第一个数组中的元素表示键,第二个数组包含每个键对应的值。Map(K, V)或Tuple(Array(T), Array(T))
Map(K, V) 或 Tuple(Array(T), Array(T)
示例
使用 Map 类型
Query
Response
Query
Response
mapAll
引入于:v23.4.0 用于测试某个条件是否对 map 中的所有键值对都成立。mapAll 是一个高阶函数。
你可以将 lambda 函数作为第一个参数传递给它。
语法
1;否则返回 0。UInt8
示例
使用示例
Query
Response
mapApply
引入版本:v22.3.0 将函数应用于 map 的每个元素。 语法func 后得到的。Map(K, V)
示例
用法示例
Query
Response
mapConcat
引入版本:v23.4.0 根据键是否相同拼接多个 Map。 如果多个输入 Map 中存在键相同的元素,则所有元素都会被添加到结果 Map 中,但只有第一个元素可通过运算符[] 访问。
语法
maps— 任意数量的 Map。Map
Map
示例
使用示例
Query
Response
mapContainsKey
引入版本:v21.2.0 判断map 中是否包含指定键。
语法
mapContains
参数
返回值
如果 map 包含该键,则返回 1,否则返回 0。UInt8
示例
用法示例
Query
Response
mapContainsKeyLike
引入版本:v23.4.0 检查 map 是否包含匹配LIKE 指定模式的键。
语法
map— 要在其中搜索的 Map。Map(K, V)pattern— 用于匹配键名的模式。const String
map 包含与 pattern 匹配的键,则返回 1;否则返回 0。 UInt8
示例
使用示例
Query
Response
mapContainsKeyValue
引入版本:v26.9.0 返回映射中是否存在具有指定键和值的条目。 当参数均不为NULL 时,此函数等价于
arrayExists((k, v) -> k = key AND v = value, mapKeys(map), mapValues(map))。
与 mapContainsKey 和 mapContainsValue 一样,NULL 仅与另一个 NULL 匹配,
而不会像使用 = 比较时那样产生未知结果。
此函数会检查所有条目;而 map[key] = value 只比较 key 首次
出现时对应的值。
使用 keyValuePairs 分词器的文本索引
可以直接通过索引计算此函数的结果。
语法
1;否则返回 0。UInt8
示例
基本用法
Query
Response
Query
Response
Query
Response
mapContainsValue
引入版本:v25.6.0 判断某个值是否包含在 Map 中。 语法1;否则返回 0。UInt8
示例
使用示例
Query
Response
mapContainsValueLike
引入版本:v25.5.0 检查 Map 中是否包含与指定模式LIKE 匹配的值。
语法
map— 要搜索的 Map。Map(K, V)pattern— 用于匹配值的模式。const String
map 包含与 pattern 匹配的值,则返回 1;否则返回 0。UInt8
示例
用法示例
Query
Response
mapEntries
引入版本:v26.10.0 以命名元组 array 的形式返回 Map 中的键值对,每个元组包含key 和 value 两个字段。
重复的键会予以保留。
语法
map— 要从中提取条目的 Map。Map(K, V)
Array(Tuple(key K, value V))
示例
使用示例
Query
Response
mapExists
引入版本:v23.4.0 检查映射中是否至少有一个键值对满足某个条件。mapExists 是一个高阶函数。
你可以将 lambda function 作为它的第一个参数传入。
语法
func— 可选。Lambda function。Lambda functionmap— 要检查的 Map。Map(K, V)
1;否则返回 0。UInt8
示例
使用示例
Query
Response
mapExtractKeyLike
引入版本:v23.4.0 给定一个键为字符串的 map 和一个LIKE 模式,该函数会返回一个 map,其中包含键与该模式匹配的元素。
语法
map— 要从中提取内容的 Map。Map(K, V)pattern— 用于匹配键名的模式。const String
Map(K, V)
示例
用法示例
Query
Response
mapExtractValueLike
引入版本:v25.5.0 给定一个值为字符串的 map 和一个LIKE 模式,此函数返回一个 map,其中包含值与该模式匹配的元素。
语法
map— 要从中提取元素的 Map。Map(K, V)pattern— 用于匹配值的模式。const String
Map(K, V)
示例
用法示例
Query
Response
mapFilter
引入版本:v22.3.0 通过对 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
参数
返回值
返回一个 Map,其键和值由键数组和值数组/映射构造而成。Map
示例
基本用法
Query
Response
Query
Response
mapKeys
引入版本:v21.2.0 返回给定 map 的键。 启用设置optimize_functions_to_subcolumns 后,可对此函数进行优化。
启用该设置后,此函数仅读取 keys 子列,而不是整个 map。
查询 SELECT mapKeys(m) FROM table 会被转换为 SELECT m.keys FROM table。
语法
map— 待提取键的 Map。Map(K, V)
Array(T)
示例
用法示例
Query
Response
mapPartialReverseSort
引入版本:v23.4.0 将 map 中的元素按降序排列,并通过额外的 limit 参数支持部分排序。 如果指定了func 函数,则排序顺序由 func 函数应用于 map 的键和值后得到的结果决定。
语法
func— 可选。Lambda 函数。Lambda functionlimit— 对范围[1..limit]内的元素进行排序。(U)Int*map— 要排序的 Map。Map(K, V)
Map(K, V)
示例
使用示例
Query
Response
mapPartialSort
引入版本:v23.4.0 按升序对 map 中的元素进行排序,并通过额外的 limit 参数支持部分排序。 如果指定了 func 函数,则排序顺序由 func 函数应用于 map 的键和值后所得的结果决定。 语法func— 可选。Lambda 函数。Lambda functionlimit— 对范围[1..limit]内的元素进行排序。(U)Int*map— 要排序的 Map。Map(K, V)
Map(K, V)
示例
使用示例
Query
Response
mapPopulateSeries
Introduced in: v20.10.0 用整数键补齐映射中缺失的键值对。 如需将键扩展到超过当前最大值的位置,可以指定一个最大键。 更具体地说,该函数返回一个映射,其中键按步长 1 形成从最小键到最大键 (如果指定,则到max 参数) 的连续序列,并具有对应的值。
如果某个键没有指定值,则使用默认值作为其值。
如果键重复,则只有第一个值 (按出现顺序) 会与该键关联。
Syntax
map— 键为整数的 Map。Map((U)Int*, V)keys— 键数组。Array(T)values— 值数组。Array(T)max— 可选。最大键值。Int8或Int16或Int32或Int64或Int128或Int256
Map(K, V) 或 Tuple(Array(UInt*), Array(Any))
示例
使用 Map 类型
Query
Response
Query
Response
mapRemove
引入版本:v26.10.0 从 Map 中移除键等于指定键的所有条目。如果有多个条目的键相同,则所有匹配的条目都会被移除。 NULL 按普通值进行比较:为 NULL 的待移除键不会匹配非 NULL 键,而复合键中的 NULL 组成部分会与其他 NULL 组成部分相匹配。 对于具有共同超类型的键类型,NaN 键遵循 Map 查找语义,因此为 NaN 的待移除键会匹配 Map 中的 NaN 键。 语法Map(K, V)
示例
使用示例
Query
Response
mapReverseSort
引入版本:v23.4.0 按降序对 map 中的元素进行排序。 如果指定了 func 函数,则排序顺序由 func 函数作用于 map 的键和值后得到的结果决定。 语法func— 可选。Lambda 函数。Lambda functionmap— 要排序的 Map。Map(K, V)
Map(K, V)
示例
用法示例
Query
Response
mapSort
引入版本:v23.4.0 按升序对 map 中的元素进行排序。 如果指定了 func 函数,排序顺序将由 func 函数作用于 map 的键和值后得到的结果决定。 语法func— 可选。lambda 函数。Lambda functionmap— 待排序的 Map。Map(K, V)
Map(K, V)
示例
使用示例
Query
Response
mapSubtract
引入版本:v20.7.0 收集所有键,并将对应的值相减。 语法arg1[, arg2, ...]— 由两个数组组成的 Map 或 Tuple,其中第一个数组中的元素表示键,第二个数组包含每个键对应的值。Map(K, V)或Tuple(Array(T), Array(T))
Map(K, V) 或 Tuple(Array(T), Array(T))
示例
使用 Map 类型
Query
Response
Query
Response
mapUpdate
引入版本:v22.3.0 对于两个 Map,返回第一个 Map,并将其中的值按第二个 Map 中对应键的值更新。 语法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)
Array(T)
示例
使用示例
Query
Response