映射函数
map
从键值对创建 Map(key, value) 类型的值。
语法
参数
返回值
- 包含
key:value
对的映射。 Map(key, value)。
示例
查询:
结果:
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
— 用于创建映射的键的数组或映射 Array 或 Map。如果keys
是数组,我们接受Array(Nullable(T))
或Array(LowCardinality(Nullable(T)))
作为其类型,只要它不包含 NULL 值。values
- 用于创建映射的值的数组或映射 Array 或 Map。
返回值
- 通过键数组和值数组/映射构造的映射。
示例
查询:
结果:
mapFromArrays
还接受 Map 类型的参数。这些参数在执行期间被转换为元组数组。
结果:
结果:
extractKeyValuePairs
将键值对字符串转换为 Map(String, String)。 解析对噪音(例如日志文件)具有一定容忍度。 输入字符串中的键值对由键、键值分隔符和一个值组成。 键值对由成对的分隔符分隔。 键和值可以被引号包含。
语法
别名:
str_to_map
mapFromString
参数
data
- 要提取键值对的字符串。 String 或 FixedString。key_value_delimiter
- 用于分隔键和值的单个字符。默认为:
。 String 或 FixedString。pair_delimiters
- 用于分隔成对的字符集合。默认为,
和;
。 String 或 FixedString。quoting_character
- 用作引号字符的单个字符。默认为"
。 String 或 FixedString。
返回值
- 键值对的地图。类型: Map(String, String)
示例
查询
结果:
使用单引号 '
作为引号字符:
结果:
不支持转义序列的转义序列:
结果:
要恢复使用 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
收集所有键并对相应值进行求和。
语法
参数
参数是 maps 或 tuples 的两个 arrays,其中第一个数组中的项表示键,第二个数组包含每个键的值。所有键数组应具有相同的类型,所有值数组应包含被提升为一种类型的项(Int64, UInt64 或 Float64)。共同提升类型被用作结果数组的类型。
返回值
示例
使用 Map
类型的查询:
结果:
使用元组的查询:
结果:
mapSubtract
收集所有键并减去相应的值。
语法
参数
参数是 maps 或 tuples 的两个 arrays,其中第一个数组中的项表示键,第二个数组包含每个键的值。所有键数组应具有相同的类型,所有值数组应包含被提升为一种类型的项(Int64, UInt64 或 Float64)。共同提升类型被用作结果数组的类型。
返回值
示例
使用 Map
类型的查询:
结果:
使用元组映射的查询:
结果:
mapPopulateSeries
用缺失的键值对填充一个映射,键为整数。
为了支持扩展键超出最大值,可以指定最大键值。
更具体地,该函数返回一个映射,其中键从最小键到最大键(或指定的 max
参数)形成一个系列,步长为 1,及其对应值。
如果未指定键的值,则使用默认值。
在键重复的情况下,仅第一个值(按出现顺序)与键相关联。
语法
对于数组参数, keys
和 values
中的元素数量必须对每行相同。
参数
参数是 Maps 或两个 Arrays,其中第一个和第二个数组包含每个键的键和值。
映射数组:
map
— 整数键的映射。 Map。
或
keys
— 键数组。 Array(Int)。values
— 值数组。 Array(Int)。max
— 最大键值。可选。 Int8, Int16, Int32, Int64, Int128, Int256。
返回值
示例
使用 Map
类型的查询:
结果:
使用映射数组的查询:
结果:
mapContains
返回指定键是否包含在给定映射中。
语法
参数
map
— 映射。 Map。key
— 键。类型必须与map
的键类型匹配。
返回值
- 如果
map
包含key
,则返回1
,否则返回0
。 UInt8。
示例
查询:
结果:
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
通过对每个映射元素应用函数来过滤映射。
语法
参数
返回值
- 返回一个映射,其中仅包含在
map
中func(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
函数应用于映射的键和值的结果决定。
语法
参数
返回值
- 部分排序的映射。 Map。
示例
mapReverseSort([func,], map)
按降序对映射的元素进行排序。
如果指定了 func
函数,则排序顺序由 func
函数应用于映射的键和值的结果决定。
示例
有关详细信息,请参见函数 arrayReverseSort。
mapPartialReverseSort
按降序对映射的元素进行排序,附加 limit
参数允许部分排序。
如果指定了 func
函数,则排序顺序由 func
函数应用于映射的键和值的结果决定。
语法
参数
返回值
- 部分排序的映射。 Map。
示例