3.1.1及以后版本的AnalyticDB MySQL版集群支持Array、Map数据类型。本文介绍了Array数据类型的定义、注意事项及使用示例。
Array类型定义
Array类型,存储数组,可重复,含义类似Java中LIST。Array中数据为相同类型。例如,列A定义array<int>
, 那么A中子元素均为int类型。支持嵌套,例如array<array<string>>
。
注意事项
Array或Map列不支持构建索引,因此,在SQL查询语句中不建议直接过滤,需配合其他检索条件过滤。尽量减少扫描数据量。
使用示例
- 创建表
Create Table `array_test` ( `a` int, `b` array<int>, `c` array<array<string>>, primary key (`a`) ) DISTRIBUTE BY HASH(`a`)
- 写入数据
- 比如插入一行数据,其中
b=[1,2,3], c=[["a"],["b","c"]]
:insert into array_test values (1, '[1,2,3]', '[["a"],["b","c"]]');
- 查询数据
mysql> select * from array_test; +------+---------+-------------------+ | a | b | c | +------+---------+-------------------+ | 1 | [1,2,3] | [["a"],["b","c"]] | +------+---------+-------------------+ 1 row in set (0.08 sec)
注意- Array类型下标是从1开始,而不是0。
- Array的取址操作:
b[1]
等价于函数element_at(b, 1)
。
mysql> select a,b[1],element_at(b,1),c[2],element_at(c,2) from array_test; +------+------+-----------------+-----------+-----------------+ | a | b[1] | element_at(b,1) | c[2] | element_at(c,2) | +------+------+-----------------+-----------+-----------------+ | 1 | 1 | 1 | ["b","c"] | ["b","c"] | +------+------+-----------------+-----------+-----------------+ 1 row in set (0.11 sec)
查询结果返回类型为Array或Map的列,以JSON格式字符串输出。比如
c[2]
对应的是嵌套子列,类型为array<string>
,那么以JSON格式返回。
支持的函数
函数 | 描述 | 返回类型 |
---|---|---|
element_at | 取值,下标从1开始,例如element_at(array[1,2], 1) ==> 1 。
|
T |
size | 元素个数。 | int |
contains | 是否包含子元素,例如contains(array[1,2], 2) ==> 1 。
|
bool类型 |
array_max | 取子元素最大值。 | T |
array_min | 取子元素最小值。 | T |
array_position | 取第一次出现的Index,例如 array_position(array['a','b','b'],'b') ==>2 。
|
int |
array_remove | 移除子元素,例如array_remove(array['a','b','b'],'b')==>['a'] 。
|
array<T> |
array_sort | 排序,array_sort(array[3,2,1]) ==> [1,2,3] 。
|
array<T> |
reverse | 将数组中的子元素反转,例如(array[5,9,3]) ==>[3,9,5] 。
|
array<T> |
shuffle | 把数组中的元素按随机顺序重新排列,例如shuffle(array[1,5,8])==> [5,1,8] 。
|
array<T> |
slice | 截取子元素,例如array slice(array[1,2,3,4,5], 3,2) ==> [3,4] 。
|
array<T> |
concat | 子元素合并且包含重复,例如concat(array[1], array[1,2]) ==>[1,1,2] 。
|
array<T> |
array_distinct | 子元素去重,例如array_distinct(array[1,1,2]) ==>[1,2] 。
|
array<T> |
array_union | 子元素合并且去重,例如array_union(array[1], array[1,2])==>[1,2] 。
|
array<T> |
array_intersect | 求交集,例如array_intersect(array[1], array[1,2]) ==>[1] 。
|
array<T> |
array_join | 类似Joiner拼接Array元素,例如array_join(array[1,2,3,4],'a') ==>1a2a3a4 。
|
string |
flatten | 降维,例如flatten(array[array[1,2],array[3]])==>[1,2,3] 。
|
array<X> |