3.1.1及以后版本的ADB集群支持Array、Map数据类型。本文介绍了Map数据类型的定义、注意事项及使用示例。
Map类型定义
Map类型,存储k-v键值对,含义类似java种的map。其中key类型要求是原生类型(如byte/boolean/short/int/long/float/double/string),value类型可以是原生类型,也可以是Map/Array类型。例如,列定义map<int, string>、map<int, map<int, string>>。
注意事项
- Array/Map列不支持构建索引,因此,在SQL查询语句中不建议直接过滤,需配合其他检索条件过滤。尽量减少scan数据量。
- 针对一条Map记录,key不能重复。
- 不保证key的写入顺序。比如写入时{"a":1,"b":2,"d":3},查询时结果为{"d":3, "a":1, "b":2}。
使用示例
- 创建表
Create Table `map_test` ( `a` int, `b` map<int, string>, `c` map<int, map<int, string>>, primary key (`a`) ) DISTRIBUTE BY HASH(`a`)
- 写入数据
- 比如插入一行数据,其中b={1:"a"}, c={1:{11:"a"},2:{22:"b"}}
insert into map_test values(1, '{1:"a"}','{1:{11:"a"},2:{22:"b"}}');
- 查询数据
mysql> select * from map_test; +------+---------+-------------------------+ | a | b | c | +------+---------+-------------------------+ | 1 | {1:"a"} | {1:{11:"a"},2:{22:"b"}} | +------+---------+-------------------------+ 1 row in set (0.07 sec)
注意- Map类型的根据key取值操作:element_at(b, 1),其中1表示key值,不是下标。
- Map类型,size函数返回的是key、value的个数总和。
- map_keys,map_values返回Array类型。
mysql> select element_at(c,1), element_at(element_at(c,1),11) from map_test; +-----------------+--------------------------------+ | element_at(c,1) | element_at(element_at(c,1),11) | +-----------------+--------------------------------+ | {11:"a"} | a | +-----------------+--------------------------------+ 1 row in set (0.07 sec) mysql> select map_keys(b),map_values(b),size(b),size(map_keys(b)),size(map_values(b)) from map_test; +-------------+---------------+---------+-------------------+---------------------+ | map_keys(b) | map_values(b) | size(b) | size(map_keys(b)) | size(map_values(b)) | +-------------+---------------+---------+-------------------+---------------------+ | [1] | ["a"] | 2 | 1 | 1 | +-------------+---------------+---------+-------------------+---------------------+ 1 row in set (0.08 sec) mysql> select map_keys(c),map_values(c),size(c),size(map_keys(c)),size(map_values(c)) from map_test; +-------------+---------------------+---------+-------------------+---------------------+ | map_keys(c) | map_values(c) | size(c) | size(map_keys(c)) | size(map_values(c)) | +-------------+---------------------+---------+-------------------+---------------------+ | [1,2] | [{11:"a"},{22:"b"}] | 4 | 2 | 2 | +-------------+---------------------+---------+-------------------+---------------------+ 1 row in set (0.08 sec)
支持的函数
函数 | 描述 | 返回类型 |
---|---|---|
element_at | 根据key值,获取value element_at(map(array["a","b"],array[1,2]), a) ==> 1 | V |
size | key个数与value个数总和 | int |
map_keys | 获取所有key列表 | array<K> |
map_values | 获取所有value列表 | array<V> |
在文档使用中是否遇到以下问题
更多建议
匿名提交