testbook

复杂类型函数

map,struct,named_struct,array
操作符返回类型描述
map(key1, value1, key2, value2, …) map类型 创建键值对
说明:
       通过指定的键/值对,创建一个map类型。所指定的所有key必须有公共类型,所有的value也必须有公共类型,得到的map的key类型即所有key的公共类型。map(int,string,double,string)得到的类型是map<double,string>,而map(int,string,boolean,string)是不合法的,因为在这里Int和Boolean是没有公共类型的。

举例:
select map(1,2,'3',4) from src limit 1;
Result: {"1":2,"3":4}


操作符返回类型描述
struct(val1, val2, val3, …) struct类型 创建struct结构体
说明:
       val[1-n]是相同类型的变量,或者是有公共类型的。得到的是val[1-n]的公共类型的struct结构体。

举例:
select struct(1,2,3) from src limit 1;
Result: {"col1":1,"col2":2,"col3":3}


操作符返回类型描述
named_struct(name1, val1, name2, val2, ...) struct类型 创建自定义字段名称的struct结构体
说明:
       val[1-n]是相同类型的变量,或者是有公共类型的,name[1-n]是字符类型。得到的是以name[1-n]为名字,以val[1-n]为对应值的的struct结构体,每个名字有自己的类型。比如named_struct('name1',1,'name2','1')得到的是

举例:
select named_struct('name1',100,'name2','200') from src limit 1;
Result: {"name1":100,"name2":"200"}


操作符返回类型描述
array(val1, val2, …) Array类型 创建键值对
说明:
       通过指定的元素,创建一个数组。Array的类型是所有元素的公共类型。

举例:
select array(1,'1',1.1) from src limit 1;
Result: ["1","1","1.1"]


操作符返回类型描述
A[n] 数组的类型 返回数组的第n个元素
说明:
       只要子查询返回了至少一列的值,返回true,反之返回false。

举例:
 select array(1,2,3)[0] from src ;
Result: 1


操作符返回类型描述
M[key] Map元素中的类型 返回map中对应key的value
说明:
       返回关键值对应的值,例如mapM为 {‘f’ -> ‘foo’, ‘b’ -> ‘bar’, ‘all’ -> ‘foobar’},则M['all'] 返回’foobar’。

举例:
select map('k1',100,'k2',200)['k1'] from src ;
Result: 100


操作符返回类型描述
S.x Struct的类型 返回Struct的第x个元素
说明:
       返回结构x字符串在结构S中的存储位置。如 foobar {int foo, int bar} foobar.foo的领域中存储的整数。

举例:
select named_struct('name1',100,'name2','200').name1 from src limit 1;
Result: 100


操作符返回类型描述
size(Map<K.V>) ; size(Array<T>) Int 返回元素数量
说明:
       返回数组或者map中的元素数量。

举例:
select size(array('Inceptor','Hyperbase','Streaming')) from src;
Result: 3