1. Array 增删改查
1.1 声明 Array 数据类型
- 语法:
array<基本数据类型>
注意是<>
,不是()
- 例子:
- 创建表时:
create table temp_db.array_test ( id int comment '源数据主键id', year_arr array<string> comment '数组记录,年份', score_arr array<string> comment '数组记录,分数' );
- 字段填充时:
cast(null as array<string>) as XXX
- 创建表时:
1.2 增
insert into temp_db.array_test (id,year_arr,score_arr)
select 12,array('1991','1990','1989'),array('56','20','23');
1.3 删
没有删除,只能覆盖
1.4 改
array_name[2] = 'xxxx'
1.5 查
select array_name[2] ;
注意:数组越界会报错。
2. Array 相关函数
2.1 数组
array()
:创建一个数组。例如,array(1,2,3)将创建一个包含1、2、3三个元素的数组。array_max(array)
:返回数组中的最大值。例如,array_max(array(1,2,3))将返回3。array_min(array)
:返回数组中的最小值。例如,array_min(array(1,2,3))将返回1。array_join(array, delimiter)
:使用指定的分隔符将数组中的元素连接成一个字符串。例如,6. array_join(array(1,2,3), ‘,’)将返回字符串"1,2,3"。【这个不常用,通常用concat_ws函数
】array_sort(array)
:返回一个按升序排序的数组。例如,array_sort(array(3,1,2))将返回数组(1,2,3)。
2.2 数组与元素
-
array_contains(array, value)
:判断数组中是否包含指定的值。例如,array_contains(array(1,2,3), 2)将返回true。 -
array_position(array, value)
:返回value在数组中的位置,如果不存在则返回0。例如,array_position(array(1,2,3), 2)将返回2。 -
array_remove(array, value)
:返回一个包含所有不等于value的元素的数组。例如,array_remove(array(1,2,3), 2)将返回数组(1,3)。 -
访问元素:直接使用 [] 来取得数组元素,例如:
a[1]
SELECT split('ab_cd_ef', '_')[1];
注意:如果数组元素为空或索引超出范围,则返回 NULL。
2.3 两个数组
-
array_except(array1, array2)
:取左集,返回一个包含所有在array1中但不在array2中的元素的数组。例如,array_except(array(1,2,3), array(2,4))将返回数组(1,3)。
-
array_intersect(array1, array2)
:取交集,返回一个包含所有同时在array1和array2中的元素的数组。例如,array_intersect(array(1,2,3), array(2,3,4))将返回数组(2,3)。